트랜스포트 계층의 프로토콜은 라우터가 아닌 종단 시스템에서 구현된다. 트랜스포트 계층에서의 패킷을 세그먼트라 하고 변환해서 이 계층에서 쓴다. 이러한 변환은 애플리케이션 메시지를 트랜스포트 계층 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가함으로써 수행된다(조각 내지 않을 수도 있다). 그 후, 네트워크 계층으로 세그먼트를 전달하고, 여기서 세그먼트가 네트워크 계층 패킷(데이터그램) 안에 캡슐화 되어 목적지로 전달된다. 네트워크 라우터는 오직 데이터그램의 네트워크 계층 필드에 대해서 동작한다는것 유념하자(즉, 라우터는 데이터그램 내부의 캡슐화된 세그먼트의 필드를 검사하지 않음). 수신 측 네트워크 계층은 데이터그램으로부터 트랜스포트 계층 세그먼트를 추출하고 자기의 트랜스포트 계층으로 세그먼트를 전달한다.
네트워크 애플리케이션에는 하나 이상의 트랜스포트 계층 프로토콜을 사용할 수 있다.
3.1.1 트랜스포트 계층과 네트워크 계층 사이의 관계
트랜스포트가 네트워크 바로 위에있다는 점을 상기하자. 트랜스포트 계층은 각기 다른 호스트에서 동작하는 프로세스들 사이의 논리적 통신을 지원하고, 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공한다.
다음 비유를 참고.
- 애플리케이션 메시지 = 봉투 안의 편지
- 프로세스 = 사촌 형제
- 호스트(종단 시스템) = 집
- 트랜스포트 계층 프로토콜 = ‘앤’과 ‘빌’
- 네트워크 계층 프로토콜 = 우편 서비스(집배원 포함) 보면 앤과 빌은 집안에있다. 즉 호스트(집)내부에서 일하는 것. 우편 서비스는 집에서 집으로만 이동시킨다 개인간의 이동이 아닌!
종단 시스템 내부에서 트랜스포트 프로토콜은 애플리케이션 프로세스에서 네트워크 경계(즉, 네트워크 계층)까지 메시지를 운반하며, 반대 방향으로도 일한다. 그러나 트랜스포트 프로토콜은 메시지가 네트워크 단에서 어떻게 이동하는지 모르고 관심도 없다.
3.1.2 인터넷 트랜스포트 계층의 개요
인터넷은 애플리케이션 계층에 두 가지로 구분되는 트랜스포트 프로토콜을 제공한다. 하나는 비신뢰적이고 비연결형인 UDP(user datagram protocol)이고, 다른 하나는 신뢰적이고 연결지향적인 TPC(Transmission control protocol). 애플리케이션 개발자는 소켓을 생성할 때 이 둘 중 하나를 선택해야한다.
용어 통일을 위해, 인터넷에서 트랜스포트 계층 패킷을 세그먼트로 일컫는다. 그러나 인테넛 문서(RFC등)에서 TCP에 대한 패킷을 세그먼트로 나타내고, UDP에 대한 패킷을 데이터그램으로 표현하기도 한다는 점을 유념하자. 문제는 이 인터넷 문서에서 네트워크 계층 패킷 또한 데이터그램이라는 용어를 쓰고있따. 이 책에서는 TCP, UDP 모두 ‘세그먼트’로 지칭할것이고, 네트워크 계층 패킷에 대해서는 ‘데이터그램’이라는 용어를 쓸 것.
UDP, TCP의 간략한 소개에 앞서, 인터넷의 네트워크 계층에 대한 몇몇 용어를 살펴보면 도움이 될 것이다. 인터넷 계층 프로토콜은 인터넷 프로토콜(IP)라 부른다. IP 서비스 모델은 호스트 간에 논리적 통신을 제공하는 최선형 전달 서비스(best-effort delivery service) 다. 이건 IP가 통신하는 호스트들 간에 세그먼트를 전달하기 위해 최대한 노력하지만, 어떤 보장도 하지 않는다는 의미. 특히 IP는 세그먼트 전달을 보장 않고, 순서도 보장 않는다. 또한 IP는 세그먼트 내뷰 데이터의 무결성(integerity)를 보장 않는다. 이런 이유로 IP를 비신뢰적인 서비스라 부른다.
이제 UDP, TCP를 살펴보자. UDP와 TCP의 가장 기본적 기능은 종단 시스템 사이의 IP 전달 서비스를 종단 시스템에서 동작하는 두 프로세스 간의 전달 서비스로 확장하는 것이다. ‘호스트 - 호스트’를 ‘프로세스 - 프로세스’로 확장하는 것을 트랜스포트 계층 다중화(transport layer mutiplexing)와 역다중화(demulitplexing)이라 부른다.
UDP, TCP는 헤더에 오류 검출 필드를 포함함으로써 무결성 검사를 제공한다.
이런 최소한 2가지 트랜스포트 계층 서비스가 UDP가 제공하는 유일한 2가지 서비스다. UDP는 비신뢰적이고 데이터가 손상되지 않고 순서를 지켜서 목적지 프로세스에 도착하는 것을 보장하지 않는다.
반면, TCP는 애플리케이션에 몇 가지 추가 서비스를 제공한다. 신뢰적인 데이터 전송을 제공해서, 흐름 제어, 순서 번호, 확인 응답, 타이머를 사용함으로써 TCP는 송신하는 프로세스로 부터 수신하는 프로세스에 데이터가 순서대로 정확히 전달되도록 해준다. 이처럼 TCP는 종단 시스템 간에 IP의 비신뢰적인 서비스를 프로세스 사이의 신뢰적 데이터 전송 서비스로 만들어준다.
TCP는 혼잡 제어(congestion control) 을 사용한다. 혼잡 제어는 특정 애플리케이션에게 제공되는 특정 서비스가 아니라, 전체를 위한 일반 서비스다. 대략적으로 말하면, 한 TCP 연결이 과도한 양의 트래픽으로 모든 통신하는 호스트들 사이의 스위치와 링크를 혼잡하게 하는 걸 방지하는 기능이 있다. TCP는 혼잡한 네트워크 링크에서 각 TCP 연결이 링크의 대역폭을 공평하게 공유하여 통과하도록 해준다. 이것은 송신측의 TCP가 네트워크에 보낼 수 있는 트래픽을 조절함으로써 수행된다.
신뢰적인 데이터 전송, 혼잡 제어를 제공하는 프로토콜은 복잡할 수밖에 없다.