0
이왜 이런 방식으로 TCP 홀 펀칭이 작동하지 않습니까? NAT 테이블의 이해 내
- NAT 테이블에만 매핑입니다 (개인 IP : 포트) -> (공공 IP : 포트) 그것은 프로토콜 또는 소켓 연결에 대해 상관하지 않는다
이런 식으로, 나는 TCP 홀 펀치가 로컬 포트를 재사용함으로써 이루어질 수 있다고 생각했다. NAT 뒤에
호스트 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
의 쌍 매핑 (-> 121.0.0.1:200 192.0.0.1:100)
,536,913Host A(listening 192.0.0.1:100) -> NAT -> Server (192.0.0.1:100 -> 121.0.0.1:200) MAPPED
- 그럼, 어떤 클라이언트가 이미 매핑 된 쌍을 사용하여 A (서버에서 121.0.0.1:200를 얻을 수) 호스트에 연결할 수 있습니다 생각NAT 테이블은 dest IP 및 포트를 원본 IP 및 포트로 간주하지 않기 때문에.
하지만 이것은 작동하지 않습니다! 다른 복잡한 구현을 찾았지만 이런 식으로 문제가 무엇인지 궁금합니다.
속는에 참여 "번역의 방법을"읽기 : http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie