1 분 소요

전송 계층(Transport layer)를 이해하기 위해서는 포트와 소켓이 무엇인지 정확히 설명할 수 있어야 한다.

호스트(Host)와 프로세스

네트워크에 연결된 장치를 노드(Node)라고 부르고, 네트워크 주소(IP)가 할당된 노드를 호스트(Host)라고 부른다. 인터넷에 연결된 노트북, 데스크톱, 서버 등이 호스트의 예시라고 할 수 있다.

하나의 호스트 안에서는 여러 프로세스가 동시에 동작한다. 네트워크 공간 상에서 데이터를 주고받을 때는, 목적지 호스트에서 동작하는 여러 프로세스 중 데이터를 받아야 하는 프로세스에 데이터를 전달할 수 있어야 한다. 예를 들어, 카카오톡을 통해 전송한 메시지는 인스타그램이 아니라 카카오톡에 도착해야 한다.

포트란?

위에서 설명한 기능을 수행하기 위해, 포트(Port)가 사용된다. 포트는 네트워크를 통해 주고받는 프로세스를 식별하기 위해 호스트 내부적으로 프로세스가 할당받는 고유한 값이다. 카카오톡으로 친구 노트북에 메시지를 보내야 하는데, 친구 노트북 카카오톡이 할당받은 포트 번호가 8800이라면, 메시지 데이터는 친구 노트북에 도착한 뒤 포트 번호 8800을 가진 프로세스를 찾아 전달될 것이다.

이 때, 데이터를 요청하는 호스트의 프로세스 역시 자신의 포트 번호를 할당받아서 요청을 보내야 한다. 만약 데이터를 요청하는 호스트가 포트 번호를 할당받지 않는다면, 요청을 받은 호스트가 답변을 보내고 싶어도 어디에 보내야 할 지 알 수 없다.

소켓이란?

소켓(Socket)은 프로세스가 네트워크를 통해 데이터를 주고받는 창구라 말할 수 있다. 먼저 데이터 송신을 원하는 호스트가 소켓을 열고 데이터를 보낸다. 목적지 호스트에 데이터가 도착하면, 데이터의 헤더에 포함된 포트 넘버를 가진 프로세스를 찾아서, 그 프로세스의 소켓을 통해 해당 프로세스에 데이터가 전달된다.

소켓은 호스트에 할당된 IP 주소, 포트 넘버, 프로토콜(TCP,UDP 등)으로 정의할 수 있다.

하나의 포트, 여러 개의 소켓

프로세스가 네트워크 통신을 하기 위해서는 포트를 할당받아야 하는데, 수 많은 요청을 동시다발적으로 처리해야 하는 서버의 경우에도 보통 포트를 하나만 할당받는다. 어떻게 이런 일이 가능할까?

이는 하나의 프로세스는 같은 IP 주소, 같은 포트 넘버, 같은 프로토콜을 가지는 소켓을 여러 개 가질 수 있기 때문에 가능하다. 바로 위에서 소켓은 이 세 가지 요소로 정의된다고 하는데, 그럼 어떤 소켓이 어떤 통신을 담당하는지 어떻게 구분할 수 있을까?

TCP 소켓의 경우, 보낸 쪽의 IP주소와 포트번호, 그리고 받는 쪽의 ip주소와 포트번호를 사용해 소켓을 구분한다. 설사 포트 넘버, IP 주소, 프로토콜이 모두 같다 하더라도 보낸 쪽의 IP와 포트 번호가 다르기 때문에 소켓을 구분할 수 있다.

UDP 소켓의 경우, 목적지 IP주소와 목적지 포트번호 2개의 튜플로만 구분되어 진다. ++++++++++++

참고:

  • https://blog.naver.com/PostView.nhn?blogId=myca11&logNo=221389847130&categoryNo=24&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

댓글남기기