우리가 크롬창을 두 개를 띄워뒀다고 해보자. 한 쪽 크롬창에서 구글에 접속한다면, 다른 크롬창도 같이 구글에 접속될까?
이건 당연히 아니다. 그렇지만, 분명 같은 호스트에서 같은 Destination으로 접속했는데, 이걸 어떻게 구분하는걸까? 이걸 구분하는 개념이 바로 프로세스이다. 크롬창들은 서로 다른 프로세스이기 때문에 서로 독립적인 관계를 유지할 수 있다.
Transport Layer는 이런 프로세스들 간의 통신을 담당한다. Layer 3에서 사용하는 IP는 컴퓨터 레벨에서 Source에서 Destination까지 데이터를 전달하는 것을 담당한다면, Transport Layer는 컴퓨터 내에 있는 여러 프로세스 중에 특정 프로세스에게 데이터를 전달하는 것을 담당한다. 이렇게 프로세스가 여러 개 있을 때, 이 프로세스들을 구분할 수 있어야 한다. 이 구분자를 Port Number라고 한다.

Port 번호는 프로세스를 정의하기 위해 사용한다. 16bit로 구성되어 있으나, 이 중에 모든 숫자를 쓸 수 있는 것이 아니다. 포트 번호는 다음 두 종류로 나뉜다.
이 Well-known port 번호는 서버에서 미리 지정해둔 번호이기 때문에 아무거나 막 쓰면 안된다.
UDP Well-known port number | TCP Well-known port number |
|---|
이렇게 하위 레이어에서 올라온 데이터를 상위 레이어에 적절한 애플리케이션의 프로세스에게 전달하는 것을 Demultiplexing이라고 하고, 반대 과정을 Multiplexing이라고 한다.
여기서 IP address와 Port number를 모두 합한 주소를 Socket address라고 한다.
또한, Transport Layer는 라우터에서는 구현되지 않고, 호스트에서만 구현이 된다. Application layer에서 내려온 데이터가 Transport Layer를 거쳐 호스트의 Network Layer로 내려가게 되는 구조이다. 이때, 이 Transport Layer에서의 데이터 단위는 Segment라고 한다.
Transport Layer는 두 가지 타입의 방식을 지원한다.
Reliable과 Unreliable의 차이는 다음과 같다. Source에서 Destination으로 데이터를 보냈을 때, 이 데이터가 성공적으로 전송되어 Destination이 데이터를 잘 받았는 가에 대해 Source가 알 수 있다면 Reliable 하다고 한다.
이때, 단순히 데이터를 받았는 지에 대해 아는 것이 아니라 데이터가 무결성을 유지한 상태로 잘 도착을 했음에 대해 보장할 수 있어야 한다. 즉, Source는 Reliable한 서비스를 이용할 때, 다음과 같은 항목들을 보장받을 수 있어야 한다.
이걸 보장하기 위해 TCP에서는 Flow control과 Error control, Congestion control 기능을 지원한다.
TCP가 사용하는 Connection-oriented 방식은 데이터를 보내기 전에 먼저 Setup을 하고, Setup을 마치고 나면 데이터를 보낸다. 이후, 데이터 전송이 완료되면 연결을 끊는 방식으로 동작하는 것이 Connection-oriented 방식이다.
이렇게 Reliable하고 Connection-oriented한 방식을 사용하는 TCP는 그만큼 오버헤드도 굉장히 크게 된다. 이런 TCP를 왜 사용하는걸까?
UDP와 Layer 3에서 사용하는 IP protocol은 Best effort 한 서비스이다. 즉, 데이터의 무결성을 보장해줄 수 없다는 말이 된다. 이러한 데이터의 무결성을 라우터 하나하나에서 챙기면 오버헤드가 너무 커지게 되니, 양 끝단인 End host에서 무결성을 챙기려고 하는 것이다.
즉, IP를 사용하기 때문에 네트워크는 Unreliable하고 서브넷에 대한 통제권이 없게 되는데, 이를 더욱 reliable하게 만들어 무결성을 보장하기 위해 사용한다.
서브넷에 대한 통제권?
우리가 어떤 패킷을 보냈을 때 이 패킷이 사라졌다고 가정해보자. 이 패킷이 사라진 이유에 대해 통신사에 문의하거나 민원을 넣는다면, 통신사는 이에 대한 것을 처리해줄 수가 없다. 네트워크를 이루는 IP 프로토콜은 Unreliable하고 서브넷에 대한 것을 통제할 수 없기 때문에 이러한 문의들은 무시할 수밖에 없다.