2011-12-22 5 views
4

프로그램에서 라우터 NAT 유형을 프로그래밍 방식으로 결정해야합니다. 나는 STUN 관련 답변들과 UPnP 관련 정보를 보았습니다. 그러나 확실한 답을 얻지 못했습니다.프로그래밍 방식으로 라우터 NAT 유형을 결정하십시오.

STUN RFC (rfc 5389)를보고 NAT 유형을 결정하는 방법을 지정하지 않았습니다. 이전 버전 (RFC 3489)이 NAT 유형을 결정하는 메커니즘을 제공했음을 언급합니다. 그러나 또한 언급 :

또한. NAT 유형의 분류를위한 고전 STUN의 알고리즘은 결함이있는 것으로 밝혀졌습니다. 많은 NAT가 거기 정의 된 유형에 완전히 들어 맞지 않기 때문입니다.

위와 같이 주어진 경우, 소프트웨어에서 라우터 NAT 유형을 결정하는 방법에 대한 조언을 구할 수 있습니까? 더구나 RFC 3489가 폐기되었으므로 다른 방법이 있습니까?

미리 감사드립니다. - 기본 STUN 프로토콜

RFC 5389 :

답변

5

RFC 3489는 세 가지의 RFC로 분할되었다. STUN 바인딩 요청 및 바인딩 응답의 기본 프로토콜은 RFC 3489와 거의 동일합니다. 프로토콜 헤더는 트랜잭션 ID 필드의 일부를 차지하는 마법 쿠키로 업데이트됩니다. 일부 STUN 속성은 다시 정의됩니다. 몇 가지 새로운 기능이 추가되었습니다 (특히 - XOR_MAPPED_ADDRESS). STUN auth가 어떻게 수행되는지에 대한 몇 가지 변경 사항. NAT 동작 및 분류 토론은 RFC 5780으로 옮겨졌습니다.

RFC 5780 - "STUN을 사용한 NAT 동작 탐지". NAT 유형 검색의 기본적인 변경 사항은 NAT 필터링 동작과 별도로 NAT 포트 매핑 동작을 구별하는 것이 었습니다. RFC 3489는 NAT를 설명하기에는 너무 일반적이었던 몇 가지 버킷 ("콘", "포트 제한", "대칭") 중 하나로 NAT를 분류하려고했지만,

RFC 5769 - 몇 가지 다른 STUN 메시지 유형의 16 진수 덤프가 어떻게 나타나는지 간단하게 요약합니다.

호기심에서 벗어나서 앱이 NAT 뒤에 실행되는지 알고 있다고 생각합니다. 하지만 NAT의 동작이 코드 경로에 어떤 영향을 미치는지 어떻게 알 수 있습니까?

뻔뻔한 플러그 - GitHub에서 호스팅되는 my STUN Server code을 사용하십시오.

+0

답변 해 주셔서 감사합니다. nat traversal에서 작업 중이므로 nat 유형에 대해 아는 것이 코드 흐름을 변경하지는 않지만 도움이됩니다. 나는 일하는 것이 흥미로운 것이라고 생각합니다. – sthustfo

+0

BTW, RFC 5389에 RFC 3489 메커니즘에 대한 좋은 의견이 없으므로 최신 RFC 5780의 nat 유형 결정이 얼마나 정확합니까? 해봤습니까? 그렇다면 어떤 관측이 있었습니까? – sthustfo

+0

다시 돌아가서 내 노트를 확인해야하지만 가장 잘 작동하는 NAT는 매핑 동작 및 "주소 + 포트 종속"이라는 측면에서 "끝점 독립적"입니다. 이 NAT 중 하나를 사용하면 홀 펀치 (hole punching)를 사용하여 UDP를 통해 안정적으로 P2P를 수행 할 수 있습니다. 해당 NAT가 매핑 ("RFC"에서 "대칭"이라고도 함)에 대해 "종점에 독립적"이 아니라면 트래버스하기가 더 어려워집니다. "항구 예측"이 작동하는 경우도 있습니다. 나는 당신과 당신의 프로젝트에 대해 그리고/또는 우리가 협력 할 수 있다면 당신과 이야기하고 싶습니다. Gmail과 Gmail을 통해 jselbie 님과 오프라인으로 소식을주고받습니다. – selbie