2011-02-02 4 views
1

최근 일련의 질문에서 나는 일반적으로 UDP, boost :: asio 및 C++에 대해 많이 질문했습니다. 클라이언트/서버 응용 프로그램에서UDP 서버 - 클라이언트 통신 - UDP가 상태를 저장하지 않고 어떻게 라우터를 우회합니까?

,이 서버가 방화벽에서 포트를 열 것을 요구하는 것은 매우 괜찮 : 유래에 여기에 대답을하지 않는 것

내 최신 질문은 이것이다 따라서 메시지가 허용됩니다. 그러나 클라이언트에 대해 동일한 작업을 수행하는 것은 큰 사용자 경험이 아닙니다.

일반적으로 TCP 연결은 대부분의 라우터가 상태 저장 패킷 검사를 지원하므로 원래 요청이 로컬 호스트에서 비롯된 경우 응답 패킷을 통과 할 수 있기 때문에이를 달성합니다.

UDP가 무 상태이고 UDP (응답 패킷)와 같은 것이 없기 때문에 이것이 UDP와 어떻게 작동하는지 분명하지 않습니다. 내 클라이언트 응용 프로그램에서 어떻게 이것을 설명해야합니까?

답변 해 주셔서 감사합니다.

+0

사실 나는 serverfault를 검색해야한다는 사실을 발견했습니다! NAT가 자동으로 처리하는 것 같습니다. 이것이 틀린 경우에, 저를 정정하십시오! :) – Max

답변

7

UDP 자체는 stateless이지만 방화벽은 일반적으로 없습니다. UDP 규칙은 client:port_A에서 server:port_B으로 요청이 들어 오면 응답은 server:port_B에서 client:port_A으로 되돌아옵니다.

방화벽에서이를 활용할 수 있습니다. UDP 요청이 클라이언트에서 나가는 것을 보게되면 응답을 인식 할 수있게 해주는 항목을 상태 테이블에 추가합니다. UDP는 상태가없고 연결 종료의 표시가 없으므로 방화벽은 일반적으로 시간 제한을 구현합니다. 특정 시간 동안 해당 UDP 주소 쌍간에 트래픽이 발생하지 않으면 방화벽 상태 테이블의 연결이 제거됩니다.

클라이언트 응용 프로그램에서 이것을 활용하려면 서버가 요청을 수신하는 데 사용하는 포트와 동일한 포트에서 응답을 다시 보내면됩니다.

+0

SO없이 무엇을 할 수 있습니까? –