이제 제3자 서버 없이 두 사람 사이에 직접 "UDP 홀 펀칭"을 하는 것은 매우 어렵고 때로는 불가능하다는 것을 확신하게 되었습니다.여기에 질문하세요그리고 내 대답은 아래에 있습니다).
그렇다면 UDP 홀 펀칭을 수행하는 방법은 무엇입니까?그리고타사 서버?
예:
peerA$ nc -u -p 7777 serverIP 8888
이제 이 패킷은 PeerA의 NAT에 의해 변환되고 localnetworkIP
소스 peerApublicIP
포트는 7777에서 55123으로 변환됩니다.
이제 서버는 이 패킷이 도착하는 것을 보고 PeerA의 공용 IP + 포트 55123을 기억합니다. 이 정보(피어 A의 공용 IP + 55123)를 피어 B에 제공하고 그 반대의 경우도 마찬가지입니다(이전에 설명한 것과 유사한 프로세스가 피어 B에서 발생하며 서버는 피어 B의 공용 IP + 소스가 피어 B의 NAT에 의해 8888에서 42000 포트로 변환되었음을 기억합니다).
이제 PeerA가 이것을 할 수 있습니다
peerA$ nc -u -p 7777 peerBpublicIP 8888 # will be dropped by peerB but at least it will
# punch a hole in peerA's firewall, port 55123
그리고 피어B는 피어A에 연결하려면 대상 포트 55123을 사용해야 한다는 것을 알고 있습니다(이 정보는 서버에서 제공됨).
peerB$ nc -u -p 8888 peerApublicIP 55123
질문:이는 다음과 같은 가정 하에서 작동하는 것으로 보입니다.
만약에
peerA$ nc -u -p 7777 serverIP 8888
소스 포트를 7777에서 55123으로 변환합니다.그 다음에
peerA$ nc -u -p 7777 peerBpublicIP 8888
또한 소스 포트 7777을 55123으로 변환합니다.
하지만 대부분의 라우터가 이런가요?
그렇지 않은 경우(예: NAT는 서버에 연결할 때 7777을 55123으로 변환하지만 NAT는 피어 B에 연결할 때 7777을 51098로 변환합니다) UDP 홀 펀칭은 어떻게 작동합니까?
긴 이야기 짧게: 보다 일반적으로 피어 A, 피어 B 및 서버를 포함하여 단지 를 사용하여 UDP 홀 펀칭을 수행하는 방법은 무엇입니까 netcat
(후자는 처음에만 사용되며 나중에는 사용되지 않음)?
노트: 읽었습니다이 기사, 그러나 포트 번역이 완료되었는지 여부는 확실하지 않습니다.같은 방법으로서버에 연결한 다음 피어B에 연결할 때.