• 카테고리

    질문 & 답변
  • 세부 분야

    네트워크

  • 해결 여부

    해결됨

Tcp 소켓 연결 질문입니다.

23.12.04 20:33 작성 조회수 253

0

안녕하세요
다름 아니라 TCP 홀펀칭을 공부하다 궁금한 점이 생겨 질문드립니다.
이전까지 소켓이 연결되려면
listen상태로 대기중인 서버 소켓 그리고
connect 함수로 연결 요청을 했을때 비로소 클라이언트 소켓과 서버소켓이 연결되는 것으로 알고 있었습니다.

홀펀칭 상황에서 양쪽의 클라이언트가 릴레이 서버를 통해 서로의 public IP , Port 를 알 고 있을때
한쪽 소켓이 listen하고 있지 않는 즉
양쪽 소켓 모두 connect()함수를 호출해서 연결이 성립될 수 있나요?

답변 1

답변을 작성해보세요.

0

홀펀칭 관련 내용 중 핵심은 결국 NAT 게이트웨이가 외부 인터넷 연결을 위해 몇 번 포트로 매핑하는지 찾는 것 입니다. 실제 서버가 192.168.0.10 + TCP 8000번 포트를 개방했다 하더라도 외부 인터페이스 (IP주소가 1.1.1.1이라고 가정) 1.1.1.1 + TCP 12000번에 매핑했다면 클라이언트는 1.1.1.1: 12000번에 연결해야 합니다.

그런데 릴레이 서버가 말 그대로 서버 역할을 해 클라이언트 들의 연결을 받아서 트래픽을 중계하고 있다면 연결을 받는 서버는 릴레이 서버로 한정됩니다. 이 상황에서 클라이언트가 사용하는 포트는 릴레이 서버와의 연결에 사용될 뿐 번호를 안다 해서 연결 할 수 있는 서버 소켓이 되지는 않습니다.

NAT에 관련한 내용은 응용편에서 다루고 있습니다. 참고하시기 바랍니다. :)