프로세스가 네트워크 통신을 하기 위해서는 포트롤 할당받아야 하며, 서버의 경우 보통 하나만 할당 받습니다.

그 이유는 같은 프로세스가 같은 포트를 가지고도 여러 개의 소켓을 열 수 있기 때문입니다.

 

하나의 프로세스는 같은 프로토콜, 같은 IP 주소, 같은 Port 넘버를 가지는 소켓을 수십 개 혹은 수만 개 만들 수 있습니다.

이런 이유 때문에 하나의 프로세스는 하나의 포트만으로도 다른 여러 호스트에 있는 프로세스의 요청을 처리할 수 있고,

임 서버의 동시 접속자 수가 수십수백만이 될 수 있는 것입니다.

 

소켓은 정의하는 것과 소켓을 식별하는 것을 구분해야 합니다. IP 주소, Port 넘버, 프로토콜로 소켓을 정의할 수 있지만,

이들이 소켓을 유일하게 식별하지는 않습니다.

이름이 홍길동이라고 해도 여러 홍길동이 있는 것처럼, 같은 IP 주소, 포트 넘버, 프로토콜을 가지는 소켓이라고 해도, 서로 다른 소켓이 존재하는 것입니다.

 

예를 들어 SMTP 프로토콜을 통해 메일을 보내는 중일 때, SMTP 서버의 IP 주소는 10.10.10.10이며 TCP 포트 25의 연결이 필요합니다.

클라이언트의 IP 주소는 20.20.20.20이고 연결 시 TCP 포트 16001과 같은 연결을 사용합니다.

따라서 이 경우 "소켓"은 20.20.20.20:16001 <-> 10.10.10.10:25입니다.

동일한 클라이언트가 동일한 메일 서버에 다른 연결을 설정하면 클라이언트 쪽의 TCP 포트가 증가하고,

소켓 값은 20.20.20.20:16002 <-> 10.10.10.10:25가 됩니다.

 

■ 포트

포트는 네트워크 상에서 통신하기 위해 호스트 내부적으로 프로세스가 할당 받아야하는 고유한 숫자입니다.

한 호스트 내에서 네트워크 통신을 하고있는 프로세스를 식별하기 위해 사용하는 값이므로,

같은 호스트 내에서 서로 다른 프로세스가 같은 Port 넘버를 가질 수 없습니다.

 

■ 소켓

소켓은 프로세스가 네트워크로 데이터를 내보내거나 받기위한 창구같은 역할을 하는 것으로,

프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어 소켓에 데이터를 쓰거나 읽어야 합니다.

소켓은 프로토콜, IP 주소, Port 넘버로 정의합니다.