2009-04-04 4 views
11
내가 UDP에 대해 이야기 할 때 "연결"정말 적합하지 않은 단어를 알고

,하지만 ...UDP, NAT 및 설정 "연결"

서버 (공지 된 IP를 가진 하나) 나올까요 어떻게

NAT 뒤의 클라이언트에 인터넷을 통한 UDP 패킷?

예 : 클라이언트가 TCP를 통한 일부 메시징을 사용하여 서버에 연결하고 인증합니다. 이 시점에서 서버는 UDP를 통해 클라이언트에 데이터 스트리밍을 시작할 준비가되었지만 서버는 UDP 패킷을 처리 할 위치를 알고 있으므로 NAT 라우터를 통해 클라이언트로가는 길을 찾을 수 있습니까?

클라이언트 주먹이 UDP를 통해 "스트리밍 제발 준비"메시지를 보내는 경우 서버가 UDP 데이터 스트림으로 응답 할 수 있도록 NAT 라우터가 포트를 계속 열어 둡니까?

여기를 추적하고 있습니까? (NAT를 제공) 라우터에 (이 포트 주소로 이동 에 즉 데이터) 알려진 포트 변환의 ​​제공을 무시

+0

자신의 프로토콜을 디자인하고 있습니까, 아니면 기존 프로토콜을 작동 시키려고합니까? – Alnitak

+0

나는 새로운 것을 구현할 것입니다. – chardy

답변

1

일반적으로 TCP 수준에서 클라이언트 앞에있는 NAT는 UDP에서의 연결이 생성되었는지 확인할 수 있습니다. 그렇지만 클라이언트 측의 NAT는 SRC 서버 포트에서 UDP 패킷을 받아들이고이를 내부 대상 IP (클라이언트)로 전달하도록 구성해야합니다. NAT가 호출자가 누구이고 호출 수신자인지 기억하는 것이 중요합니다. NAT는 구현 및 기능면에서 다르므로 일반적으로 구현하기 쉬운 솔루션이 필요에 따라 구현하고자하는 것일 수 있습니다.

귀하의 경우 클라이언트가 정보에서 UDP 스트림을 수신 할 수 없다고 가정하면 정확합니다. 귀하의 경우 클라이언트는 UDP 연결을 시작하기 위해 WAN IP를 서버에 보내야합니다. 고객의 WAN IP 찾기 까다로운 일 이겠지만 WAN IP를 텍스트 페이지로 반환하여 WAN IP를 파악하는 데 도움이되는 웹 사이트가 있습니다.

알려진 UDP 포트에 대한 클라이언트 소켓을 여는 서버가 TCP 연결 후에 UDP 연결을 만든 경우 UPnP를 살펴보면 NAT에서 포트 전달을 자동으로 설정할 수 있습니다. 이는 DSL 라우터의 경우처럼 NAT가 UPnP를 지원하는 경우에만 해당됩니다.

서버에 TCP 소켓과 UDP 소켓을 모두 열려면 클라이언트에 작업이 있어야합니다. NAT 뒤에있는 클라이언트가 연결을 시작 했으므로 TCP 연결과 UDP 연결의 상태가 NAT의 연결 테이블에 추가됩니다.

+0

"서버에 TCP 소켓과 UDP 소켓을 모두 열어주는 일은 클라이언트에게 달려 있습니다." 서버의 데이터 그램을 클라이언트로 다시 가져올 수있는 표준적이고 신뢰할 수있는 방법입니까? 나는 클라이언트를 사용하는 사람에게 가장 소란스러운 것을 찾고있다. – chardy

4

, 당신은 UDP Hole Punching를 사용할 수 있습니다.

나는 각각의 피어가 그룹에 가입 한 후 해당 라우팅을 수행 할 수있는 이해 관계자 (이 경우 라우터)에게 알리는 multicasting에 대해 이야기하지 않는다고 가정합니다. 일반적으로 트래픽을 여러 호스트에 효율적으로 라우팅하는 데 사용되지만 라우팅 기반 그룹 메커니즘이 위에 설명 된대로 작동합니다.

+0

그 정보를 주신 Brian 고마워요. 제가 이해 하듯이, UDP Hole Punching은 양쪽 끝이 방화벽 뒤에있는 피어 - 피어 시나리오에서 사용됩니까? 내 서버가 WAN IP에있는 경우에도 여전히 필요합니까? – chardy

+0

나는 그렇게 생각하지 않지만, 나는 전문가가 아니라고 고백한다. –

1

SIP 또는 RTSP와 같은 스트리밍 프로토콜에 대해 이야기하는 경우 클라이언트가 서버로 보내려는 UDP 포트가 호출 설정 요청에 지정되어 있습니다.

서버가 해당 포트로 보내고 NAT가 포트 번호 선택을 다른 번호로 변환했는지 여부에 따라 트래픽이 클라이언트에 도달하거나 통과하지 못할 수 있습니다.

서버가 클라이언트로부터 첫 번째 UDP 스트리밍 된 패킷을 받으면 전송할 포트와 다른 포트에있는 경우 전환합니다. 이렇게하면 클라이언트가 이미 서버에 전송하여 NAT 매핑을 작성했기 때문에 서버의 UDP가 NAT를 통과 할 수 있습니다.