2016-11-28 7 views
0

왜 이런 방식으로 TCP 홀 펀칭이 작동하지 않습니까? NAT 테이블의 이해 내

  1. NAT 테이블에만 매핑입니다 (개인 IP : 포트) -> (공공 IP : 포트) 그것은 프로토콜 또는 소켓 연결에 대해 상관하지 않는다

이런 식으로, 나는 TCP 홀 펀치가 로컬 포트를 재사용함으로써 이루어질 수 있다고 생각했다. NAT 뒤에

  1. 호스트 A가 서버 S에 연결 호스트 A의 NAT는 호스트 A가 같은 로컬 포트 ​​(100)

    에 새로운 청취 소켓을 열고 그 소켓을 닫고

    Host A(192.0.0.1:100)   ->   NAT   ->   Server 
              (192.0.0.1:100 -> 121.0.0.1:200) MAPPED 
    
  2. 의 쌍 매핑 (-> 121.0.0.1:200 192.0.0.1:100)
    ,536,913

    Host A(listening 192.0.0.1:100) ->   NAT   ->   Server 
              (192.0.0.1:100 -> 121.0.0.1:200) MAPPED 
    
  3. 그럼, 어떤 클라이언트가 이미 매핑 된 쌍을 사용하여 A (서버에서 121.0.0.1:200를 얻을 수) 호스트에 연결할 수 있습니다 생각NAT 테이블은 dest IP 및 포트를 원본 IP 및 포트로 간주하지 않기 때문에.

하지만 이것은 작동하지 않습니다! 다른 복잡한 구현을 찾았지만 이런 식으로 문제가 무엇인지 궁금합니다.

+0

속는에 참여 "번역의 방법을"읽기 : http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie

답변