2012-01-24 4 views
6

나는 TCP와 UDP 프로토콜에 대한 나의 이해가 제한적이라고 생각한다고 생각합니다. 최근에 공통 토렌트를 공유하는 동료들이 실제로 포트 포워딩을 필요로하지 않고 TCP 또는 UDP 프로토콜을 통해 서로 연결할 수 있음을 깨달았을 때 혼란스러워졌습니다. 라우터는 패킷을 전달할 로컬 네트워크의 컴퓨터를 어떻게 알 수 있습니까? 그 정보를 지우는 데 도움이 될만한 정보가 있습니다. 토렌트 프로토콜 다이어그램과 인터넷상의 기사는 크게 단순화되어 있으므로 도움이 될만한 정보는 없습니다.토런트 피어 - 투 - 피어 연결

+0

FYI : 대부분의 라우터/방화벽의 90 %가 UDP를 차단합니다! –

+1

그리고 그 통계는 어디서 구합니까? 나는 UDP 응용 프로그램 (여러 개의 SOHO, coffeeshops 또는 사무실에서 집에서), tftp, 게임 또는 기타 사용자 정의와 관련하여 문제가 없었습니다. –

+0

대부분의 라우터는 기본적으로 UDP * 브로드 캐스트 *를 차단합니다. –

답변

6

라우터 (NAT 실행)는 모든 나가는 패킷을 추적 한 다음 나가는 패킷에 대한 응답 인 들어오는 패킷을 허용합니다.

그래서 google.com:80으로 나가는 TCP 연결을하면 google.com:80의 패킷이 다시 전송됩니다 (응답 있음). 두 개의 내부 호스트가 동일한 포트에 연결하면 로컬 포트가 다르기 때문에 구분할 수 있습니다 (예 :

) 호스트 A는 Google에 연결하고 라우터는 TCP에 대해 자체 로컬 포트 ​​10001을 사용합니다 연결

2) 호스트 B는 유사한 연결하고 패킷이 google.com:80에서 제공하고이의 포트 10001에 대한 해결되면 라우터는 TCP 연결

에 대한 자신의 로컬 포트 ​​10002를 사용하여 라우터의 WAN IP이면 라우터는이를 호스트 A로 전송할 것을 알고 있습니다. 포트 10002로 주소가 지정된 경우 라우터는이를 호스트 B로 전송합니다.

라우터 뒤에 두 개의 피어 투 피어 호스트가있는 경우 (두 개의 NAT가있는 경우), 다른 IP에 대한 정보를 전송할 대상이있는 경우를 제외하고는 연결을 설정할 방법이 없습니다. 그들은 정보 교환에 사용할 수있는 서버) 라우터가 로컬 포트로 선택할 포트를 추측하고 라우터 IP WAN IP에 해당 포트에서 서로 데이터를 보내기 시작할 수 있습니다. 두 라우터는 모두 OUT으로가는 데이터를 보게되므로 데이터를 허용하는 규칙을 설정합니다. 포트가 올바르게 추측되면 두 라우터 모두 규칙을 설정하기 때문에 각 측면의 패킷이 통과 할 수 있습니다. 이를 UDP/TCP 홀 펀칭이라고합니다.

http://en.wikipedia.org/wiki/UDP_hole_punching

나는 스카이프는 UDP를 사용하고, 홀 펀칭을하는 응용 프로그램의 예입니다 생각합니다.

+0

통찰력있는 응답에 감사드립니다! 나는 이제 내 마음이 쉬기를 바라는 주제를 충분히 이해하고 있다고 생각한다. 지금 당장. 그건 그렇고, Skype는 똑똑한 짐승입니다. 로컬 네트워크에있는 사람과 대화 할 때 감지 할 수 있다고 생각합니다. 라우터가 재부팅 후 인터넷에 연결되어있는 동안 언니와 대화 할 수 있습니다. – Neob91

1

엄밀히 말하면 용어 라우터에 'NAT'를 인증하지 않았기 때문에 라우터가 ARP를 사용하여 대상 호스트의 MAC 주소를 확인한 다음 그 MAC 주소를 가진 이더넷 프레임을 타겟 주소.

그러나 나는 그것이 당신이 의미하는 것이 아니라고 생각합니다.

NAT 라우터는 인바운드 패킷을 전달할 위치를 어떻게 알 수 있습니까?

답변은 주소 변환을 수행 할 수 있도록 활성 "연결"목록을 라우터가 유지 관리한다는 것입니다. 외부 포트 번호를 사용하여 내부 호스트 주소 및 포트 번호에 매핑합니다. TCP의 경우, "연결"의 개념은 단순히 TCP 연결이 있는지 여부입니다 (일반적으로 누출을 막기위한 타임 아웃이 있음에도 불구하고). UDP의 경우에는 그 자체가이므로 UDP 연결이 없기 때문에 더 어렵습니다. 따라서 일반적으로 시간 초과만으로 추적하는 경우입니다.