[네트워크] 트랜스포트 계층

참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross 지음

트랜스포트 계층

  • 트랜스포트 계층은 서로 다른 호스트엣 동작하는 두 프로세스의 논리적 통신을 지원하는 계층이다.
  • 트랜스포트 계층이 있기 떄문에, 각 호스트에서 동작하는 어플리케이션은 두 호스트가 직접적으로 연결되어 있다고 생각한다.
  • 어플리케이션 계층에서 트랜스포트 계층으로 전달된 메세지는 헤더정보를 포함해서 세그먼트(segment) 로 변환된다.
  • 인터넷에서 사용하는 가장 대표적인 트랜스포트 계층 프로토콜은 UDPTCP이다.

트랜스포트 계층과 네트워크 계층의 차이

  • 언뜻보면 트랜스포트 계층과 네트워크 계층이 비슷한 일을 하는 것 처럼 보일 수도 있다.
  • 하지만 트랜스포트 계층은 서로 다른 호스트의 프로세스 사이의 논리적 통신을 지원하는 기능을 하고,
  • 네트워크 계층은 호스트 끼리의 논리적 통신을 지원하는 계층이다.
  • 두 호스트가 데이터 송수신을 할 때, 호스트와 호스트 사이의 데이터 전달은 네트워크 계층이, 그리고 호스트에 도착한 데이터들이 프로세스로 전달되는 작업은 트랜스포트 계층이 담당한다고 생각하면 된다.
  • 따라서 트랜스포트 계층이 제공하는 서비스들은 트랜스포트 계층의 하위 계층인 네트워크 계층의 기능들에 큰 영향을 받는다.

인터넷 트랜스포트 계층

  • 인터넷 트랜스포트 계층에서 사용되는 프로토콜은 UDP(User Datagram Protocol)TCP(Transmission Control Protocol) 이다.
  • 인터넷 트랜스포트 계층은 네트워크 계층 위에서 동작하는데 인터넷 네트워크 계층의 프로토콜을 인터넷 프로토콜이라고 하고 줄여서 IP 라고도 한다.

    • IP 서비스 모델은 최선형 전달 서비스(best-effort delivery service) 이다.
    • 호스트들의 세그먼트를 전달하기 위해서 최선을 다하지만, 세그먼트들이 반드시 목적지에 도달하는 것은 보장하지 않는다. 따라서 Packet Loss 가 발생할 수 있다.
    • 세그먼트 내부에 들어있는 데이터의 무결성(integrity) 역시도 보장하지 않는다.
    • 또 IP는 세그먼트들이 목적지에 보낸 순서대로 도착하는 것도 보장하지 않는다. 그래서 IP는 비신뢰적인 서비스(Unreliable Service) 라고 부르기도 한다.
  • 이렇게 IP는 호스트와 호스트사이의 논리적 연결을 수행하고 트랜스포트 계층은 이 연결을 두 호스트 내부에서 동작하는 프로세스들 간의 연결로 확장하는 기능을 한다. 이런 확장을 트랜스포트 다중화(transport multiplexing)와 역다중화(demultiplexing)라고 한다.

TCP와 UDP

  • TCP와 UDP는 인터넷 트랜스포트 계층 프로토콜이다.
  • UDP는 IP의 최선형 전달 서비스와 크게 다른 점이 없다. UDP는 두 개의 서비스를 제공하는데, 프로세스-프로세스 데이터 전달오류검출이다.

    • 따라서 UDP는 비신뢰적인 서비스를 제공한다고 할 수 있다.
  • TCP는 신뢰적 데이터 전달을 제공하는 프로토콜이다.

    • TCP는 흐름제어, 혼잡제어, 순서번호, 확인응답, 타이머 와 같은 서비스를 제공해서 프로세스 사이에 데이터가 신뢰적으로 전달 될 수 있도록 한다.
    • 여기서 혼잡제어는 혼잡한 네트워크 상황 속에서 각 TCP 연결이 링크의 대역폭을 공평하게 나누어 가질 수 있게하는 방법이다.

다중화와 역다중화(Multiplexing and Demultiplexing)

  • 네트워크 계정에서 전달되는 데이터그램은 트랜스포트 계층에 세그먼트로 도착하고, 트랜스포트 계층은 이 세그먼트들을 알맞는 프로세스에게 전달하는 역할을 수행해야한다.
  • 데이터를 전달받은 호스트에 여러 프로세스가 동작하고 있을 때, 호스트는 이 데이터를 어떤 프로세스에 전달해야할지 결정해야한다.
  • 이 결정은 트랜스포트 계층에 의해 직접적으로 수행되지 않고, 중간매체인 소켓 을 통해서 결정된다.
  • 트랜스포트 계층에 전달된 세그먼트 데이터를 해당 세그먼트를 위한 소켓에 전달하는 작업을 역다중화(Demultiplexing) 라고 한다.
  • 그리고 데이터를 보내기 위해 소켓에서 데이터를 모아 세그먼트로 만들고 이 세그먼트를 캡슐화해서 네트워크 계층으로 보내기 위한 작업을 다중화(Multiplexing) 이라고 한다.
  • 위 내용에 따라 다중화와 역다중화가 수행되기 위해서는 두가지 요구사항이 필요하다.

    • 각 소켓들은 자신만의 고유한 실별자를 가지고 있어야한다.
    • 세그먼트에는 해당 세그먼트의 출발지 프로세스의 포트번호도착지 프로세스의 포트번호가 있어야한다.
    • 포트번호는 0~65536까지의 16비트 정수를 사용하고 이중에서 0~1023번 포트는 well-known port number로 표준화되어 일반 프로세스가 사용할 수 없도록 규정되어 있다.
    • 그래서 호스트에서 실행되는 프로세스는 1024~49151번의 등록포트(register port number)와, 49152~65535의 무작위 포트(ephemeral port number) 중 하나를 선택해서 사용하게 된다

비연결형 다중화와 역다중화

  • 비연결형 다중화와 역다중화는 UDP 구조에서의 통신을 지원하기 위한 방법이다.
  • UDP 소켓은 목적지 ip주소목적지 포트번호로 구성된 요소들의 집합으로 식별된다.
  • 따라서 UDP 세그먼트들이 같은 목적지 ip주소와 목적지 포트번호만 동일하다면 같은 UDP 소켓으로 역다중화되게 된다.
  • UDP 세그먼트에 포함된 출발지 포트번호는 목적지에 도착한 뒤에 목적지가 응답을 위해 설정하는 새로운 목적지 포트로 전환이 된다.

연결지향형 다중화와 역다중화

  • 연결지향형 다중화와 역다중화는 TCP 구조에서의 통신을 지원하기 위한 방법이다.
  • TCP 소켓은 UDP 소켓과는 달리 총 4개의 요소로 소켓을 식별하는데, 출발지의 IP주소, 출발지 포트번호, 목적지 IP주소, 목적지 포트번호를 사용한다.
  • 목적지에 도착한 세그먼트는 TCP 서버는 해당 출발지 IP주소의 출발지 포트번호를 위한 소켓을 하나 만들어서 연결을 설정한다.
  • 이런 방식을 사용하는 이유는 TCP 연결에서는 일대일 연결만이 가능하기 때문이다. 따라서 각각에 대한 출발지 ip주소와 출발지 포트번호에 대한 TCP 연결을 만들어주는 것으로 일대일 연결 문제를 해결한다.

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.