2013-02-23 3 views
3

기술을 펀칭하는 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에 관심이 없다면 문제가 있습니까? 이 게시물을 재개 아무도이 순간까지 답변 나뭇잎되지 않기 때문에

+0

Q3의 경우, ClientA는 NATPortB를 알아야합니다. 왜냐하면 그것이 포트를 연결해야만하기 때문입니다. – Celada

+0

@Celada하지만 ClientA의 경우 응용 프로그램에서 다음과 같이 처리합니다. {serveraddr.port = LocalPortB, serveraddr.ip = inet_addr (publicIPB), connect (serveraddr); } NATPortB가 필요한 이유는 무엇입니까? – Steve

+1

'LocalPortB'에 접속하는 것은'LocalPortB' *가'NATPortB'와 같을 때까지 작동하지 않을 것입니다. 일치하지 않으면 들어오는 TCP SYN 패킷은 해당 라우터가 추적하는 TCP 연결과 일치하지 않으므로 B 쪽 NAT 상자에 의해 삭제됩니다. – Celada

답변

1

, 나는이 문서에 따라 그것을 자신을 대답하고 싶습니다 : Q1 소개 Peer-to-Peer Communication Across Network Address Translators

, 예. 구멍 펀치와 같은 메커니즘이 없으면 한 쪽에서 다른 쪽과 동기화하기 위해 사용하는 패킷이 라우터에 의해 삭제됩니다.

Q2에 대해서는 정확하게는 없습니다. 청취 소켓은 직접 작동하지 않습니다. 다른 트릭이 필요합니다.

관련 문제