본문 바로가기
🚗 Major Study (Bachelor)/🟦 Network

[네트워크] Network | Logical Communication 이란? TCP와 UDP 특징 및 Demultiplexing의 개념

by H_uuuk 2022. 10. 7.
728x90

 

트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신 (Logical communication)을 제공한다. 논리적 통신은 애플리케이션 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다는 것을 의미한다. 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 트랜스포트 계층 세그먼트인 트랜스포트 계층 패킷으로 변환한다. 수신자는 전달받은 세그먼트들을 합쳐서 애플리케이션 계층으로 다시 전달한다. 인터넷은 TCP와 UDP라는 두 가지 프로토콜을 가지고 있다.

 

 

두 집안이 있다고 가정하자. 하나는 동부, 하나는 서부에 있다. 그리고 집안마다 12명의 아이들이 있는데, 동부 집안의 아이는 서부 집안의 아이와 사촌지간이다. 두 집안의 아이는 편지 쓰는 것을 좋아하는데 아이들은 매주 편지를 쓰고 편지는 따로따로 봉투에 넣어서 일반 우편 서비스로 배달된다. 그러므로 144통의 편지를 보내게 된다. 이처럼 우편 서비스는 두 집 간에 논리 통신을 제공한다.

 

앤과 빌은 자기 집에서 그들의 일을 한다. 앤과 빌은 중간 우편센터에서 우편물을 분류하거나 운반하는 작업에 참여하지 않는다. 마찬가지로 트랜스포트 계층 프로토콜들은 종단 시스템에 존재한다. 트랜스포트 프로토콜은 애플리케이션 프로세스에서 네트워크 경계까지 메시지를 운반하며, 또한 반대 방향으로 네트워크 계층에서 애플리케이션 프로세스로 메시지를 운반한다.

 

 

 

TCP/IP 네트워크는 애플리케이션 계층에게 두 가지 구별되는 트랜스포트 계층 프로토콜을 제공한다. 하나는 애플리케이션에게 비신뢰적이고 비연결형인 서비스를 제공하는 UDP이고, 다른 하나는 애플리케이션에게 신뢰적이고 연결지향형 서비스를 제공하는 TCP 이다.

 

UDP는 IP와 같이 비신뢰적인 서비스이다. UDP는 하나의 프로세스에 의해서 전송된 데이터가 손상되지 않고, 목적지 프로세스에 도착하는 것을 보장하지 않는다. 반면 TCP는 신뢰적인 데이터 전달을 제공한다. 그리고 송신하는 프로세스로부터 수신하는 프로세스에게 데이터가 순서대로 정확하게 전달되도록 확실하게 한다. 또한 TCP는 혼잡 제어를 사용한다. 이는 한 TCP 연결이 과도한 양의 트래픽으로 모든 통신하는 호스트들 사이의 스위치와 링크를 폭주되게 하는 것을 방지하는 것을 의미한다.

 

IP 전달 서비스를 시스템에서 동작하는 두 프로세스 간의 전달 서비스로 확장하는 것. "호스트-대-호스트 전달"
을 "프로세스-대-프로세스"로 확장하는 것을 역다중화(Demultiplexing)라고 부른다.

 

 

 

수신 측 호스트가 수신한 트랜스포트 계층 세그먼트를 어떻게 적절한 소켓으로 향하게 하는지에 대해서 생각해 보자. 각각의 트랜스포트 계층 세그먼트는 이러한 목적을 위해 세그먼트에 필드 집합을 가지고 있다. 수신 측의 트랜스포트 계층은 수신 소켓을 식별하기 위해서 이들 필드를 검사한다. 그리고 이 세그먼트를 해당 소켓으로 보낸다. 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 Demultiplexing 이라고 한다. 

 출발지 호스트에서 소켓으로부터 데이터를 모으고 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보를 캡슐화하고 그 세그먼트들을 네트워크 계층으로 전달하는 작업을 Multiplexing이라고 한다.

 

 

 

소켓은 유일한 식별자를 가진다. 그리고 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 가진다. 이 특별한 필드라는 것은 출발지 포트 번호 필드와 목적지 포트 번호 필드를 의미한다. 각각의 포트 번호는 16비트 정수이다. 그 중에서 0~1023까지의 포트 번호를 잘 알려진 포트 번호라고 하여 사용을 엄격하게 제한하고 있다.

 

 

 

UDP 소켓이 목적지 IP 주소와 목적지 포트 번호로 구성된 두 요소로 된 집합에 의해서 식별된다는 것을 이해해야 한다. 이 결과로 만약 2개의 UDP 세그먼트들이 출발지 IP 주소와 출발지 포트 번호가 모두 다르거나 또는 출발지 IP 주소와 출발지 포트 번호 어느 한 가지가 다를지라도, 동일한 목적지 IP 주소와 목적지 포트 번호를 가지면 2개의 세그먼트들은 같은 목적지 소켓을 통해 동일한 프로세스로 향할 것이다.

 

 

 

UDP Demultiplexing 예시

 

 

TCP 소켓과 UDP 소켓 사이의 다른 점은 TCP 소켓은 4개 요소들의 집합, 즉 Source IP, Source Port, Dest IP, Dest Port 에 의해서 식별된다는 것이다. 그래서 네트워크로부터 호스트에 TCP 세그먼트가 도착하면, 호스트는 해당되는 소켓으로 세그먼트를 전달하기 위해서 4개의 값을 모두 사용한다.

 

 

 

UDP 는 세그먼트의 데이터를 해당하는 애플리케이션 프로세스로 전달하기 위해서 목적지 포트 번호를 사요한다. UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에 핸드셰이크를 사용하지 않는다는 점에 주의하자. (연결 설정을 위한 어떤 지연도 없다는 것) 이런 이유로 UDP를 비연결형이라고 한다. DNS는 일반적으로 UDP를 사용하는 애플리케이션 프로토콜의 예이다. 

 

UDP는 단지 8바이트의 오버헤드를 가진다. TCP는 20비트에 달한다. 그리고 혼잡제어를 사용하지 않는다.