본문 바로가기

Library/Computer Network

Socket Pair

애플리케이션은 포트를 사용하여 TCP와 통신한다. TCP의 포트는 실질적으로 UDP의 포트와 동일하다. 즉 애플리케이션은 TCP에 등록할 때 16비트 포트 번호를 부여받으며, TCP는 이 포트 번호를 모든 송수신 트래픽에 사용한다.

개념적으로 포트 번호는 한 시스템의 개별 애플리케이션에 '구내 번호'를 제공하며, 그 시스템의 IP 주소는 전화 번호 역할을 한다. 원격 애플리케이션은 (IP 주소를 사용하여) 호스트 시스템에 '전화를 걸고', 통화하고자 하는 목적 애플리케이션의 구내 번호(포트 번호)를 같이 제공한다. TCP는 이 정보를 송수신 애플리케이션을 확인하고 올바른 애플리케이션에 데이터를 전달하는데 사용한다.

포트는 시스템에 있는 어떤 애플리케이션의 한 인스턴스를 나타낸다. '소캣(socket)'이란 용어는 포트 번호와 IP 주소를 합쳐서 나타내는 것이다. '소켓 페어(socket pair)'는 두 애플리케이션의 IP 주소와 포트 번호를 포함하여 가상 회선의 두 시스템으로 구성된다.

모든 TCP 가상 회선은 소켓 페어의 개념에 기반해서 동작한다. 두 시스템간에 복수 연결이 이뤄지려면 두 시스템 가운데 적어도 한쪽의 포트 번호가 다른 고유의 소켓 페어를 가져야 한다.

TCP 포트 번호가 애플리케이션과 꼭 일대일로 연결되는 것은 아니다. 일부 애플리케이션은 보통 동시에 여러 개의 연결을 열며, 비록 하나의 애플리케이션에서 사용되는 것이지만 각각의 연결은 고유의 소켓 페어를 필요로 한다. 예를 들어, HTTP 1.0 클라이언트가 HTTP 서버로부터 동시에 여러 개의 그래픽 객체를 다운로드 한다면, 각 인스턴스는 TCP가 데이터를 올바르게 라우팅하기 위해 고유의 독립된 포트 번호를 필요로 한다. 이 경우 한 애플리케이션만 존재하지만 각각의 고유 포트 번호를 갖는 여러 개의 네트워크 바인딩이 존재한다.

회선과 포트는 서로 밀접하게 관련되어 있지만, 전혀 별개의 개체라는 것도 알고 있어야 한다. 가상 회선은 두 TCP 시스템간에 관리된 전송을 제공하는 반면, 포트 번호는 애플리케이션이 TCP와 통신할 때 사용할 수 있는 주소를 제공한다. 이런 이유에서 서버 애플리케이션은 하나의 포트 번호를 통해 서로 다른 여러 개의 클라이언트 연결을 충분히 지원할 수 있다(각 고유의 가상 회선은 클라이언트의 주소 또는 소켓이 고유 요소가 되는 고유의 소켓 페어를 가질 것이다).


Quotes from Internet Core Protocols, O'Reilly, Eric A. Hall, 인터넷 프로토콜 핵심 가이드, 한빛미디어