기술을 펀칭하는 TCP 홀을 연구 중이며이 기사에서 얻은 지식은 TCP_hole_punching입니다. 하지만 부분적으로 이해할 수 없습니다.TCP 구멍 펀칭 기술을 사용할시기와 사용시기는 언제입니까?
Network Drawing
Peer A ←→ Gateway A ← .. Network .. → Gateway B ←→ Peer B
Types of NAT
The availability of the TCP-hole-punching technique depends
on the type ofcomputer port allocation used by the NAT. When
two peers, A and B, instantiate TCP connections by binding
to local ports Pa and Pb, respectively, **they need to know
the remote endpoint NAT port in order to make the connection**.
다음은 몇 가지 질문입니다. 어떤 도움이나 제안이라도 대단히 감사하겠습니다 !!
Q1. NAT1 뒤에 클라이언트 응용 프로그램이 있고 NAT2 뒤에서 서버 응용 프로그램 이 실행되고 있다고 가정 해보십시오. 그들은 메시징 및 파일 전송 통신을 갖습니다. 패턴은 서버에서 수신 대기하고 클라이언트에서 연결 을 수락합니다. tcp 연결을 유지하려면 TCP 구멍 펀칭을 사용해야합니까?
질문 2. 피어 투 피어 통신이고 양측이 서로 연결되어있을 때 (예 : 2x CONNECT(), LISTEN(), ACCEPT() 등)에만 TCP 홀 펀칭 기술이 필요합니까?
3. 위의 텍스트에서 "연결을 만들기 위해 원격 종점 NAT 포트를 알아야합니다"라는 것은 무엇을 의미합니까? 왜 그들은 원격 종점 NAT 포트를 알아야합니까? 다른 컴퓨터의 로컬 포트만 알아야합니까?
예를 들어, 쌍이 (ClientA, publicIPA, LocalPortA), (ClientB, publicIPB, LocalPortB)라고 가정합니다.
clientBAddr.port = LocalPortB;
clientBAddr.ip = inet_addr(publicIPB);
connect(fdA, clientBAddr,...);
왜 NATPortA 및 NATPortB 등의 정보를 알 필요가 다음 ClientA는 TCP를 통해 ClientB와 통신하려는 경우,이 같은 일을 할 수있다? clientA와 clientB가 NATA와 NATB에 관심이 없다면 문제가 있습니까? 이 게시물을 재개 아무도이 순간까지 답변 나뭇잎되지 않기 때문에
Q3의 경우, ClientA는 NATPortB를 알아야합니다. 왜냐하면 그것이 포트를 연결해야만하기 때문입니다. – Celada
@Celada하지만 ClientA의 경우 응용 프로그램에서 다음과 같이 처리합니다. {serveraddr.port = LocalPortB, serveraddr.ip = inet_addr (publicIPB), connect (serveraddr); } NATPortB가 필요한 이유는 무엇입니까? – Steve
'LocalPortB'에 접속하는 것은'LocalPortB' *가'NATPortB'와 같을 때까지 작동하지 않을 것입니다. 일치하지 않으면 들어오는 TCP SYN 패킷은 해당 라우터가 추적하는 TCP 연결과 일치하지 않으므로 B 쪽 NAT 상자에 의해 삭제됩니다. – Celada