애플리케이션 계층에서 네트워크 계층까지 전달하는 역할을 담당합니다.
편의상 애플리케이션 계층을 app계층이라고 하겠습니다
송신호스트(보내는 쪽)와 수신호스트가(받는 쪽)이 있잖아요? 이 때 양측의 트랜스포트 계층이 하는 일을 보면 아래와 같습니다.
결국 네트워크 계층은 host간의 통신이고
트랜스포트 계층은 프로세스간의 통신임
<앤과 빌의 예시>
애플리케이션 메시지 = 봉투 안의 편지
프로세스 = 사촌형제
호스트(host or end system) = 집
트랜스포츠 계층 프로토콜 = 앤 과 빌
네트워크 계층 프로토콜 = 우편서비스 (우편 집배원을 포함한)
이를 위의 앤과 빌의 예시로 설명해보겠습니다.
다중화 (multiplexing)
라고 하고역다중화(demultiplexing)
라고 합니다.트랜스포트 계층은 app계층으로부터 메시지를 받아서 이것들을 조각내어 segments들로 만들고 여기에 헤더를 붙이고
그런 segments들을 네트워크 계층으로 캡슐화 하여 전달합니다.
캡슐화란?
: segment에 필요한 헤더들을 붙이는 과정
이렇게 캡슐화하여 네트워크 계층으로 전달하는 것을
다중화
라고합니다.
이렇게 해서 네트워크 계층이 상대 호스트에게 보내고 상대 호스트쪽의 트랜스포트 계층은 segments들의 포트번호와 헤더를 보고 적절한 소켓에 전달해줌
소켓이란?
: 애플리케이션 계층과 트랜스포터 계층사이에 메시지를 주고받는 통로임
이렇게 다중화할 때 필요한 헤더를 붙인다고 했잖아요?
여기에는 두 가지 요구사항이 있습니다.
- 소켓은 유일한 식별자를 가진다.
- 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 가진다.
특별한 필드라는 것은 출발지 포트번호와 목적지 포트 번호를 의미합니다.
각각의 포트 번호는 0 ~ 65535까지 사용할 수 있고. 그중에서 0 ~ 1023까지의 포트 번호를 잘 알려진 포트 번호(wel-known porn number)라고 하여 사용을 엄격하게 제한하고 있습니다. ex) HTTP(포트 번호 80)
그럼 이제 역다중화의 과정을 볼까요?
1. 호스트의 각 소켓은 포트 번호를 할당받습니다.
2. 그리고 세그먼트가 호스트에 도착하면, 트랜스포트 계층은 세그먼트 안의 목적지 포트번호를 검사하고 이에 상응하는 소켓으로 세그먼트를 보내게 됩니다.
3. 그러면 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달됩니다.
위 방식은 UDP의 기본적인 동작 방식이며, TCP의 경우는 위보다 좀 더 많은 의미를 가지고 있습니다.
즉, 소켓에는 TCP소켓이랑 UDP소켓이 있는데
TCP 소켓은
네트워크 계층에서의 프로토콜을 인터넷 프로토콜
이라고 하고 줄여서 IP
라고 합니다.
IP는 호스트간의 데이터 전달을 위해 최대한 노력을 하지만 데이터가 잘 전달됐는지, 순서대로 잘 갔는지 등의 책임은 지지 않습니다. (보장을 안해줌)
그래서 IP를 비신뢰적인 서비스
라고 합니다.
잘 읽었습니다~!