다중화와 역다중화를 알기 전에 Trans-L와 Net-L, 소켓이 무엇인지 알아야 한다.
Transport vs Network layer
Net-L는 서로 다른 호스트 간 논리적 통신을 제공하고 Trans-L는 프로세스들(서로 다른 호스트 안에서 동작) 간 논리적 통신을 제공한다.
이 차이를 이해할 수 있는 예제가 있다.
집A에 있는 12명의 아이들이 집B에 있는 또다른 12명의 아이들에게 편지를 보낸다고 가정하자.
이 때 집A와 집B는 각각 호스트A, 호스트B가 된다.
아이들은 프로세스이고
편지는 application messages = 데이터이다.
편지가 집A에서 집B로 이동하는 과정(postal service)은 Net-L 프로토콜이다. (라우팅)
편지가 집B에 도착하고, 12명의 아이들에게 편지를 나눠주는 과정이 Trans-L 프로토콜이다. (a가 받아야할 편지를 b가 받으면 안 됨!!)
소켓
프로세스가 메시지를 보내고 받을 때, 이들은 메시지를 직접 주고 받지 않는다. 소켓을 사용한다. 이 때 각각의 프로세스는 한 개 이상의 소켓을 가진다. 소켓은 네트워크에서 프로세스로 이동할 때 문 역할을 한다.
다중화와 역다중화
문제상황:
아래 그림의 가운데에 있는 모델의 Trans-L은 양쪽 모델로부터 20개의 패킷을 다시 양쪽으로 전송해야 한다. 이 때 p1에 10개, p2에 10개의 데이터를 섞이지 않고 올바르게 나눠주기 위해서는 어떻게 해야할까?
데이터를 전송하는 입장에서
송신측은 여러 소켓으로 데이터를 다룬다. 이 때 Trans-L 헤더를 추가한다. 그 이유는 나중에 역다중화 과정에서 헤더 정보를 통해 세그먼트를 올바른 소켓으로 전송하기 위함이다. Trans-L 헤더에는 소켓의 식별 정보를 기록한다.
데이터를 수신하는 입장에서
헤더의 식별 정보(포트번호이다.)로 프로세스와 붙어있는 소켓을 구별하고 세그먼트를 올바른 소켓으로 전송한다.
소켓 식별자
소켓을 올바른 곳으로 보내기 위해서 소켓 식별자를 Trans-L 헤더에 넣어야 한다. 그러면 송수신자는 소켓의 식별자로 무엇을 사용하고 어떻게 정하는 걸까?
소켓의 식별자로는 포트 번호를 사용한다. 이 포트 번호는 Trans-L에서 자동으로 부여한다.
Trans-L이 소켓의 식별자를 확인하기 위해 패킷에는 소켓 식별자를 가리키는 특별한 필드가 있어야 한다. 바로 소스 포트 번호 필드와 도착 포트 번호 필드이다. 아래 그림의 Source port #와 Dest. port #가 바로 소켓의 식별자를 가리키는 포트 번호 필드이다.
또한 Net-L에서는 IP주소를 소켓 식별자로 사용한다.
UDP 소켓의 식별
UDP 소켓은 dest.IP와 dest.port 2개의 튜플로 완전히 식별된다. 만약 UDP 세그먼트 2개가 같은 IP주소, 같은 port를 가진다면, 두 세그먼트는 동일한 소켓의 동일한 목적지로 전달될 것이다.
TCP 소켓의 식별
TCP 소켓은 source.IP, dest.IP, source.port, dest.port 4가지의 튜플로 완전히 식별된다.
'CS > Network' 카테고리의 다른 글
02_Socket_IO (2) | 2024.07.23 |
---|---|
TCP flow control이란? (0) | 2024.03.18 |
OSI 7계층 모델과 TCP/IP 4계층 모델 비교 (0) | 2024.01.31 |
HTTP란 무엇인가? (1) | 2024.01.30 |
OSI 7계층: 7계층 응용 계층(Application Layer)이란? (0) | 2024.01.29 |