[목차여기]
트랜스포트(전송) 계층의 다중화와 역다중화를 공부하기 전에 트랜스포트 계층을 한 번 더 짚을 필요가 있다. 트랜스포트 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공한다. 그리고 트랜스포트 계층 프로토콜은 네트워크 라우터가 아니라 호스트(edge)에서 구현된다.
송신측의 Transport 게층은 송신측의 Application 프로세스로부터 수신한 메시지를 Transport 계층의 세그먼트(패킷)으로 변환한다. 혹시 나처럼 패킷, 세크먼트, 데이터 등등 이런 단어가 헷갈린다면 PDU(Protocol Data Unit)을 떠올리면 된다. PDU는 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어정보를 말한다.
Transport Layer (트랜스포트 계층)
인터넷은 애플리케이션 계층에게 트랜스포트 계층 프로토콜을 제공한다. 두 가지를 제공하는데, UDP와 TCP다. UDP(User Datagram Protocol)는 비신뢰적이고 비연결형 서비스에서 사용된다. TCP(Transmission Control Protocol)은 신뢰적이고 연결형 서비스에서 사용된다. 네트워크 애플리케이션을 설계할 때 애플리케이션 개발자는 이 두 가지 트랜스포트 프로토콜 중 하나를 명시해야 한다.
UDP와 TCP에 대한 내용을 공부한 뒤 이 글을 읽는 것을 추천한다.
인터넷의 네트워크 계층 프로토콜은 인터넷 프로토콜(IP, Internet Protocol)을 갖는다. 특정 주소를 가리키는 IP를 정말 많이 들어봤을 것이다. IP는 통신하는 호스트들 간에 세그먼트를 전달하는데, 어떠한 보장도 하지 않는다. 세그먼트가 순서대로 전달되는 것을 보장하지 않고, 세그먼트 내부 데이터의 무결성을 보장하지 않는다. 그래서 IP를 비신뢰적인 서비스라고 부른다. 우리가 이 글에서 기억해야 할 것은, 모든 호스트는 적어도 하나의 IP주소로 불리는 네트워크 계층 주소를 갖는다는 것이다.
무결성이란? 데이터의 어떠한 변형(손실)도 없다는 것을 의미한다.
다중화(multiplexing), 역다중화(demultiplexing)
각 프로세스는 소켓(socket)을 가지고 있다. 이 소켓을 이용하여 네트워크에서 프로세스로 데이터를 전달하거나, 프로세스에서 네트워크로 데이터를 전달한다. 소켓이 출입구 역할을 한다고 할 수 있다. 그래서 수신 측 호스트의 트랜스포트 계층은 데이터를 직접 프로세스로 전달하지 않는다. 대신 소켓에게 전달한다. 그렇다면 하나 이상의 데이터를 전달하기 위해 소켓이 여러개 생성될 수 있다는 것인데, 각각의 소켓을 어떻게 구별할까? 바로, 소켓은 하나의 유일한 식별자를 갖는다. 그리고 이 식별자의 포맷은 소켓이 UDP 소켓인지, TCP 소켓인지에 따라 달라진다.
윗 문단에서 수신 측 호스트의 트랜스포트 계층은 데이터를 소켓에게 전달한다고 했다. 어떤 방법으로 소켓에게 전달하는지 알아보자.
각각의 트랜스포트 계층 세크먼트는 소켓에게 전달하기 위해 세그먼트에 필드(field) 집합을 가지고 있다. 이 필드를 검사하여 수신 소켓을 식별한다. 그리고 이 세그먼트를 해당 소켓으로 보낸다. 이때, 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고 한다. 그리고 출발지 호스트에서 소켓으로부터 데이터를 모으고 이에 대한 세그먼트를 생성하기 위해 각 데이터에 헤더 정보로 캡슐화하고 그 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.
역다중화(demultiplexing)
- 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고 한다.
다중화(multiplexing)
- 출발지 호스트에서 소켓으로부터 데이터를 모은다.
- 이에 대한 세그먼트를 생성하기 위해 각 데이터 헤더 정보를 캡슐화한다.
- 그 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.
정리하자면, 트랜스포트 계층 다중화는 두 가지가 만족되어야 한다.
- 소켓은 유일한 식별자를 갖는다.
- 각 세크먼트는 세그먼트가 전달될 소켓을 가리키는 필드를 갖는다.
여기서 필드란?
- 출발지 포트번호 필드(source port number field)
- 목적지 포트번호 필드(destination port number field)
호스트의 각 소켓은 포트번호를 할당받는다. 세그먼트가 호스트에 도착하면, 트랜스포트 계층은 세그먼트 안의 목적지 포트 번호를 검사하여 해당하는 소켓으로 세그먼트를 보내게 된다. 그리고 세그먼트 데이터는 소켓을 통해 해당되는 프로세스로 전달된다. UDP는 이렇게 동작한다. TCP의 경우 추가적인 정보가 필요하다.
각각의 포트번호는 0~65535까지의 16비트 정수이고 그 중에서 0~1023까지의 포트 번호를 well-known port number 라고 한다. 예약 포트 번호라고도 하며 일반 애플리케이션은 이 포트번호 사용이 제한된다.
비연결형 다중화와 역다중화 (UDP)
UDP 소켓 30000을 가진 호스트 A가 호스트 B의 UDP 소켓 40000을 가진 프로세스에게 애플리케이션 데이터 전송을 한다고 가정한다.
호스트 A | 호스트 B | |
UDP 소켓 포트 번호 | 30000 | 40000 |
전송측
- 트랜스포트 계층은 애플리케이션 데이터, 출발지 포트 번호(30000), 목적지 포트 번호(40000)을 포함하는 트랜스포트 계층 세그먼트를 생성한다.
- 그리고 생성한 세그먼트를 네트워크 계층으로 전달한다.
- 네트워크 계층은 세그먼트를 IP 데이터그램으로 캡술화하고 수신 호스트로 전달한다.
수신측
- 이 세그먼트가 수신 호스트 B에 도착하면 수신 호스트는 세그먼트 안의 목적지 포트 번호(40000)를 검사하고 그 세그먼트를 포트 40000으로 식별되는 소켓에 전달한다. (이때 프로세스들은 각각 UDP 소켓과 그와 연관된 포트번호를 갖는다.)
- 호스트 B는 세그먼트의 목적지 포트를 검사하여 세그먼트를 적절한 소켓으로 보낸다.
- UDP 소켓은 목적지 IP주소와 목적지 포트번호로 구성된 두 요소로 된 집합에 의해 식별된다.
만약 2개의 UDP 세그먼트가 출발지 IP주소와 출발지 포트번호가 모두 다르더라도 같은 목적지 IP 주소와 목적지 포트번호를 가지면 같은 목적지 소켓을 통해 같은 프로세스로 이동한다. 그렇다면 출발지 포트번호는 무슨 목적으로 사용되는 걸까? 출발지 포트번호는 회신 주소의 한 부분으로 사용된다. 회신할 때 출발지 포트 번호가 다시 도착지 포트 번호가 되는 것이다.
연결지향형 다중화와 역다중화 (TCP)
TCP 소켓이 UDP 소켓과 다른 점은 4개의 요소을 통해 식별된다는 것이다.
- 출발지 IP주소
- 출발지 포트번호
- 도착지 IP주소
- 도착지 포트번호
UDP는 2개의 요소였다.
- 목적지 IP주소
- 목적지 포트번호
TCP 서버 애플리케이션은 welcome 소켓(환영 소켓)을 가지고 있다. 서버 프로세스가 실행되면 클라이언트 프로세스는 서버로 TCP 연결을 시도한다. 이때, 클라이언트 프로세스에서 TCP 소켓을 생성하는데 welcome 소켓의 주소 즉, 서버의 IP주소와 소켓의 포트번호를 명시한다. 그리고 소켓을 생성한 뒤 서버에게 3-way handshake를 시도한다. 이상이 없다면 TCP 연결이 설정되게 된다. 이제 네 가지 요소가 담긴 세그먼트를 전송하면 되는 것이다.
UDP 세그먼트 구조
UDP 헤더는 2바이트씩 구성된 오직 4개의 필드만을 갖는다. 출발지 포트번호와 목적지 포트번호는 위 내용에서 알아봤으므로 체크섬에 대해서 좀 더 알아보자. UDP 체크섬은 오류 검출을 위한 것이다. 출발지에서 목적지로 이동할 때 비트에 대한 변경이 발생할 수 있다.
만약, 다음과 같은 3개의 16비트 워드가 있다고 한다.
세 워드를 모두 더하면 다음과 같은 결과가 나온다.
그리고 합의 결과를 1의 보수로 변환한다.
변환된 1011010100111101이 체크섬이 된다. 수신 측에서는 체크섬을 포함한 4개의 16비트 워드 들이 더해진다. 만약 패킷에 어떤 오류도 없다면 수신 측에서 합은 1111111111111111이 될 것이다. 만약 비트 중에서 하나라도 0이 있다면 패킷에 오류가 발생했음을 알 수 있다.
'Network' 카테고리의 다른 글
웹과 HTTP 동작방식 - 비지속, 지속 연결 HTTP, 쿠키, 캐시(프록시 서버) (0) | 2024.04.15 |
---|---|
[Network] TCP, UDP 란? - 차이점, 특성 (0) | 2024.04.15 |