[Network] 3-1. Introduction and Transport-Layer Services

Park Yeongseo·2024년 8월 2일
0

Network

목록 보기
14/16
post-thumbnail

애플리케이션 계층과 네트워크 계층 사이에 위치한 전송 계층은 계층적 네트워크 구조에서 핵심적인 역할을 한다.

전송 계층 프로토콜은 서로 다른 호스트에서 실행되는 애플리케이션 프로세스들 사이의 논리적 통신(logical communication)을 가능케 한다. 논리적 통신이라는 말은, 애플리케이션의 관점에서 프로세스를 실행하는 호스트들이 직접 연결된 것과 같이 보인다는 것이다. 실제로는 두 호스트가 여러 개의 라우터와 링크를 통해 연결되어 있음에도 말이다. 애플리케이션 프로세스는 전송 계층이 제공하는 논리적 통신을 통해 메시지들을 전달하는 데 쓰이는 물리 인프라에 대한 세부 내용을 알 필요 없이, 서로에게 메시지를 보낼 수 있게 된다.

위 그림에서 볼 수 있듯, 전송 계층 프로토콜은 종단 시스템에 구현되어 있지, 네트워크 라우터들에 구현되어 있지는 않다. 송신 측에서, 전송 계층은 송신 애플리케이션 프로세스가 보내는 애플리케이션 계층 메시지를 저송 계층 패킷(세그먼트, segment)으로 변환한다. 이 작업은 애플리케이션 메시지를 작은 청크들로 쪼개고, 각 청크들에 전송 계층 헤더를 추가해 전송 계층 세그먼트를 만드는 방식으로 이루어진다. 전송 계층은 이 세그먼트를 송신 종단 시스템의 네트워크 계층으로 전달하고, 여기서 세그먼트는 네트워크 계층 패킷(데이터그램, datagram)으로 캡슐화되어 목적지로 보내진다.

여기서 중요한 점은 네트워크 라우터들은 오직 데이터그램의 네트워크 계층 필드들만을 처리하며, 데이터그램으로 캡슐화된 전송 계층 세그먼트의 필드에 대해서는 따로 처리를 하지 않는다는 것이다. 수신 측에서 네트워크 계층은 데이터그램에서 전송 계층 세그먼트를 추출하고 이를 전송 계층으로 올려보낸다. 전송 계층은 이후 이 세그먼트를 처리하고 수신 애플리케이션에서 사용할 수 있는 데이터로 만든다.

네트워크 애플리케이션에는 여러 개의 전송 계층 프로토콜이 있는데, 인터넷에는 TCP, UDP 등이 있다. 이 두 프로토콜은 서로 다른 전송 계층 서비스를 애플리케이션에 제공한다.

1. Relationship Between Transport and Network Layers

전송 계층은 프로토콜 스택에서 네트워크 계층의 바로 위에 있다는 것을 염두에 두자. 전송 계층 프로토콜이 서로 다른 호스트들에서 실행되는 프로세스들 사이의 논리적 통신을 가능케하는 것처럼, 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 가능케 한다.

예를 들어 두 집이 있고, 각 집에는 여러 명의 가족들이 있다고 하자. 각 집에는 자신의 가족 구성원들에게 편지를 전달하는 역할을 하는 사람(예를 들어 Ann과 Bill)이 있다. 이 두 집의 가족 구성원들은 서로 편지를 주고 받곤 한다고 하자. 그러면 다음과 같이 생각할 수 있다.

  • 애플리케이션 메시지: 봉투 속 편지
  • 프로세스: 가족 구성원들
  • 호스트: 집
  • 전송 계층 프로토콜: Ann과 Bill
  • 네트워크 계층 프로토콜: 우편 서비스(집배원 등)

우편 서비스는 두 집 사이의 논리적 통신 서비스를 제공한다. 우편 서비스는 집에서 집으로 편지를 전달하지, 사람에서 사람으로 편지를 전달하지는 않기 때문이다. Ann과 Bill은 두 집의 가족 구성원들 사이의 논리적 통신 서비스를 제공하는 것으로 생각할 수 있으며, 다른 가족 구성원들의 관점에서 볼 때, Ann과 Bill은 우편 서비스를 제공하는 것으로 볼 수 도 있다.

다만 Ann과 Bill은 각자의 집에서 자기들의 일을 하며, 따로 집 밖으로 나가 직접 우체국으로 편지를 전달하거나 하는 일을 하지는 않는다. 비슷하게, 전송 계층 프로토콜도 종단 시스템에서 일한다.

전송 프로토콜은 기저의 네트워크 프로토콜에서 제공하지 않는 서비스를 제공할 수 있다. 예를 들어 전송 프로토콜은 기저의 네트워크 프로토콜에 신뢰성이 없더라도 애플리케이션에 신뢰할 수 있는 데이터 전송 서비스를 제공할 수 있다. 네트워크 프로토콜이 패킷을 잃어버리거나, 수정하거나, 복제하는 경우에도 말이다.

2. Overview of the Transport Layer in the Internet

인터넷이 애플리케이션 계층에 제공하는 전송 계층 프로토콜에는 UDP와 TCP가 있다. UDP는 신뢰성 없는, 비연결 기반 서비스를 제공하고, TCP는 신뢰성 있는, 연결 기반 서비스를 제공한다. 네트워크 애플리케이션을 설계할 때, 애플리케이션 개발자는 이 두 전송 프로토콜 중 하나를 명시해야 한다. 앞서 봤듯 애플리케이션 개발자는 소켓을 만들 때 UDP와 TCP 중 하나를 선택한다.

전송 계층 패킷은 세그먼트(segment)라 부른다. 어떤 곳에서는 TCP의 전송 계층 패킷은 세그먼트, UDP의 전송 계층 패킷은 데이터그램(datagram)이라 부르기도 한다. 하지만 네트워크 계층 패킷 또한 데이터그램이라 부르기 때문에, 여기서는 TCP든 UDP든 상관없이 세그먼트는 전송 계층 패킷, 데이터그램은 네트워크 계층 패킷을 말하는 것으로 사용하도록 한다.

UDP와 TCP에 대해 알아보기 전에, 인터넷의 네트워크 계층에 대해서 조금 얘기해보자. 인터넷의 네트워크 계층 프로토콜은 인터넷 프로토콜, 즉 IP라 한다. IP는 호스트들 간의 논리적 통신을 제공한다. IP 서비스 모델은 최선형 전송 서비스(best-effort delivery service)다. 다시 말해 IP는 서로 통신하는 호스트들 사이에서 세그먼트를 전달하기 위해 최선을 다한다. 그렇다고 해서 세그먼트가 전달될 것이라는 보장이 있는 것은 아니다.

구체적으로, IP는 세그먼트의 전송을 보장하지 않고, 세그먼트의 전송 순서를 보장하지 않으며, 세그먼트 내 데이터의 무결성도 보장하지 않는다. 때문에 IP는 신뢰성 없는 서비스(unreliable service)다. 각 호스트들은 적어도 하나의 네트워크 계층 주소, 즉 IP 주소를 가진다.

이제 UDP와 TCP에 대해 알아보자. UDP와 TCP는 기본적으로 IP가 제공하는 종단 시스템 간 전송 서비스를 각 종단 시스템에서 실행되는 프로세스 간의 전송 서비스로 확장한다. host-to-host 전송을 process-to-process 전송으로 확장하는 것을 가리켜 전송 계층 멀티플렉싱(multiplexing) 및 디멀티플렉싱(demultiplexing)이라 말한다. 이에 대해서는 다음 섹션에서 다루게 될 것이다.

UDP와 TCP는 세그먼트의 헤더에 오류 검출 필드를 추가해 무결성을 체크하기도 한다. UDP가 제공하는 서비스는 바로 이 두 가지, process-to-process로의 확장 및 오류 검출 밖에 없다. UDP는 IP처럼 신뢰성 없는 서비스다. 즉 UDP는 한 프로세스에서 보낸 데이터가 목적지 프로세스로 도달할 것임을 보장하지 않는다.

이와 달리 TCP는 애플리케이션에 여러 가지 추가적인 서비스들을 제공한다. 우선 TCP는 신뢰성 있는 데이터 전송(reliable data transfer) 서비스를 제공한다. TCP는 흐름 제어, 시퀀스 번호, acknowledgment, 타이머 등을 이용해, 데이터가 송신 프로세스에서 수신 프로세스로, 순서대로 전달됨을 보장한다. 다시 말해 TCP는 IP의 '신뢰성 없는 호스트 간 데이터 전송 서비스'를 '신뢰성 있는 프로세스 간 데이터 전송 서비스'로 전환한다.

TCP는 혼잡 제어(congestion control) 서비스도 제공한다. 혼잡 제어는 애플리케이션 뿐만 아니라 인터넷 전체에도 좋은 영향을 준다. 혼잡 제어는 어떤 한 TCP 연결이 큰 트래픽으로 두 호스트 사이의 링크 및 라우터를 독차지해버리는 일을 방지한다. TCP는 TCP 연결의 송신 측이 네트워크로 트래픽을 보낼 수 있는 속도를 조절함으로써, 혼잡한 링크를 통과하는 각 연결이 동일한 링크 대역폭을 공유할 수 있도록 한다. 한편, UDP 트래픽은 조절되지 않는다. UDP 전송을 사용하는 애플리케이션은 자신이 원하는 대로, 원하는 속도로 데이터를 내보낼 수 있다.

0개의 댓글