UDP vs TCP

UDP와 TCP 비교분석

Posted by jay on August 27, 2021

1. Introduction

User Datagram Protocol(UDC) & Transmission Control Protocol(TCP), 이 두 가지는 컴퓨터 네트워크에서 가장 중요한 데이터 전송 프로토콜이다.

이 두 가지 프로토콜에 대해 알아보고, 비교해보자.

2. UDP

2.1. 핵심 속성

1980년, David P. Reed는 RFC 768에 UDP 프로토콜 설계문서를 발표했다. UDP는 전송계층(4계층, Transport layer)OSI 모델(Open Systems Interconnection)에서 작동하는 간단한 프로토콜이다 . Application은 UDP를 사용하여 인터넷 프로토콜을 통해 다른 호스트로 데이터를 보낼 수 있다. UDP와 전송된 메시지를 데이터그램이라고 한다.

UDP의 핵심 속성:

우선, UDP는 연결이 없다.(connectionless) 다시 말해, 통신에 있어서 시작(starting), 유지(maintaining), 끝(ending)이 없다는 뜻이다. 게다가 UDP는 흐름 제어 또는 재전송(오류 제어) 기술이 없다. 따라서, 수신측 호스트가 데이터그램을 올바른 순서로 받는다는 보장이 없다. 그래서, UDP는 신뢰할 수 없는 전달 프로토콜(unreliable delivery protocol)이라고 불리기도 한다.

tumblr_mhkrq6lLeI1qdlh1io1_500

UDP가 신뢰성을 포기한 데에는 이유가 있다. 신뢰성을 포기하면, 프로토콜은 데이터그램의 안정성을 위해 추가적인 bytes를 저장할 필요가 없기 때문이다. 그렇기 때문에 UDP 전송은 가볍고 빠르다(lightweight and fast). 결론적으로, UDP는 전송속도가 중요한 어플리케이션에서 많이 사용된다. 그 예로는 온라인 게임, 화상회의, 스트리밍 서비스 등이 있다.

또한, UDP는 비연결적이며, 멀티캐스트가 가능하다. 따라서 다수의 호스트에 메세지를 전송하는데 적합하다. 특히 IPTV(Internet Protocol Television)같은 실시간 스트리밍 서비스를 제공하는데 유용하다.

언급한대로 UDP의 데이터그램은 가볍다(lightweight). 그러면, UDP의 데이터그램 구조를 알아보자.

stateful : server side에 client와 server의 동작, 상태정보를 저장하는 형태, 세션 상태에 기반하여 server의 응답이 달라진다.

stateless : server side에 client와 server의 동작, 상태정보를 저장하지 않는 형태, server의 응답이 client와의 세션 상태와 독립적이다.

멀티캐스트(multicast): 한 번의 송신으로 메시지나 정보를 목표한 여러 컴퓨터에 동시에 전송하는 것.

2.2. 데이터그램 구성

데이터그램은 패킷 교환 네트워크(packet-switched network)를 통해 전송되는 독립적, 자급적인(self-contained) 기본 데이터 단위이다. 데이터그램은 일반적으로 헤더(header)와 페이로드(payload)로 구성된다. UDP 헤더에는 4개의 필드가 있으며, 각 필드는 4bytes이다. 페이로드는 호스트 간에 전송되는 데이터를 저장한다. 데이터그램의 구조를 자세히 분석해보면,

quicklatex.com-09a3acbc3056ac38ba2bd3f60d852925_l3

Source port는 발신자의 포트를 나타낸다. 전송에 응답이 필요할 경우, 응답을 보내야하는 포트이다. 하지만 이 필드는 선택사항이며, 사용하지 않을 때 0의 값을 가진다.

Destination port는 수신자의 포트를 식별하는 필드로, 필수 필드이다.

Length는 데이터그램(header + payload)의 크기를 바이트 단위로 나타내는 필드이다. 헤더의 크기는 8bytes이며, 데이터그램의 최소 크기이기도 하다. 이론적으로, 단일 데이터그램의 최대 크기는 65527 bytes이다. 이는 IPv6의 jumbograms를 이용해 더 확장할 수도 있다.

Checksum은 헤더와 페이로드의 정확성을 검증하는데 사용되는 필드이며, 크기는 16 bytes이다. UDP에서 데이터그램이 손상되었는지 확인하는 유일한 메커니즘이다. 하지만, Checksum도 선택적 필드이다.

3. TCP

TCP도 UDP와 마찬가지로, OSI 모델의 전송 계층에서 작동하며, 호스트 간에 데이터를 전송한다. 하지만, TCP는 UDP와 전혀 다르게 작동한다. TCP는 1974년, RFC75로 발표되었다. TCP의 핵심 개념에 대해 알아보자.

첫번째로, TCP는 연결 지향적(connection-oriented)이다. 간단히 말해, 발신자와 수신자는 연결을 설정하고, 데이터 전송을 서로 동의해야 한다. 이를 위해, TCP는 3-way handshake라는 기술을 사용한다.

두번째로, TCP는 신뢰할 수 있다(reliable). TCP는 오류가 확인되고, 정렬된 데이터 스트림(data stream)을 사용한다. 전송된 패킷은 프로토콜의 다른 계층에서 손실될 수 있다. TCP는 이 문제를 감지하고, 패킷이 손실된 경우, 재전송을 요청한다. 또한, 패킷의 순서가 잘못된 경우, 재배열한다. 패킷 처리를 정상적으로 완료하지 못하면, 발신자에게 문제를 알린다.

세번째로, TCP는 유니캐스트(unicast)이며, 양방향 통신이다. 이는 일대일 핸드쉐이크(one-to-one handshake)의 결과이다. TCP는 여러 호스트를 동시에 처리할 수 없다. 이는 구현이 가능하더라도 TCP를 너무 복잡하게 만들기 때문에, 시장에도 TCP기반 멀티캐스트 솔루션은 존재하지 않는다.

정리하자면, TCP는 신뢰할 수 있고 오류가 확인된 양방향 통신을 제공한다. 이러한 이유로, World Wide Web(www), secure shell, File Transfer Protocol(FTP) 등의 많은 어플리케이션에서 TCP를 사용한다.

데이터 스트림(data stream): 연결지향통신에서, 전송된 정보를 수집하거나 정보를 전송할 때 사용되는 디지털 방식으로 암호화 된 일관된 신호의 흐름을 말한다.

유니캐스트(unicast): MAC Address 기반으로 상대측 IP주소를 목적지로하는 1:1 통신방식으로, 현재 네트워크 상에서 가장 많이 사용되는 방식이 유니캐스트 이다. 유니캐스트 전송방식은 하나의 송신자가 다른 하나의 수신자로 데이터를 전송하는 방식으로 일반적인 인터넷 응용프로그램이 모두 유니캐스트 방식을 사용하고 있다.

브로드캐스트(broadcast): 자신의 호스트가 속해 있는 네트워크 전체를 대상으로 패킷을 전송하는 일대다 통신방식이다. 브로드캐스트는 Local LAN 상에 붙어있는 모든 네트워크 장비들에게 보내는 통신이다. 여기서 Local이란 라우터에 의해서 구분되어진 공간, 즉 브로드캐스트 도메인 이라고 하는 공간을 뜻한다.

3.1.연결 설정

3irqosanzu141

TCP는 3-way handshake 기술을 사용해 클라이언트와 서버를 연결한다.

3way

3-way handshake process

  1. SYN: 클라이언트는 SYN 세그먼트를 서버로 전송한다.(전송하기 전, SYN 세그먼트에 임의의 시퀀스 번호값(ex: 100)을 할당한다.) SYN를 전송하면, 클라이언트는 SYN-SENT 상태가 된다.

  2. SYN-ACK: 서버는 SYN 세그먼트를 수신하고 SYN-RECEIVED 상태가 된다. 그리고 응답으로, 새로운 임의 값의 SYN 세그먼트(ex: 300)와 ACK 세그먼트를 보낸다. ACK 세그먼트의 시퀀스 번호 값은 클라이언트의 SYN 시퀀스 번호 +1로 설정된다. (예시의 경우, 100 + 1 == 101)

  3. 클라이언트는 SYN-ACK를 수신하고, ESTABLISHED 상태가 된다. 그리고 시퀀스 번호가 서버의 시퀀스 번호 +1로 설정된 ACK 세그먼트를 다시 전송한다.(예시의 경우, 300 + 1 == 301) 서버도 ACK 세그먼트를 수신하면 ESTABLISHED 상태가 된다. 이제 데이터를 전송할 수 있다.

이것이 두 호스트가 3-way handshake를 통해 성공적으로 연결되는 과정이다. 이 상태에서 두 호스트 모두 연결을 끊는 것을 시작할 수 있으며, 이 때는 FIN 플래그와 함께 세그먼트를 전송한다. FIN 요청은 ACK 세그먼트로 확인되어야 한다.(4-way handshake) 확인 없이 긴급으로 종료를 수행하는 RST 플래그도 있다.

3.2. 패킷 구조

quicklatex.com-dbde994a5775d8b82bf3b4ac0b622786_l3

Source port는 발신자의 포트를 발신자의 포트를 나타내고, Destination port는 수신자의 포트를 나타낸다.

Sequence number는 the other host가 패킷을 수신한 것을 확인한다.

Data offset은 헤더의 길이를 나타낸다. 32bits 길이 헤더의 행 수를 나타낸다. 즉 데이터의 시작 부분을 표시하는 필드이다. 데이터 오프셋 필드는 전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시한다.

Reserved 필드는 향후 예약이 가능한 필드이다. 따라서 0으로 채워져있다.

Flags필드는 패킷의 목적에 대한 정보를 나타낸다.

Windows size는 호스트가 수신할 데이터 크기를 나타낸다.

Checksum는 데이터 무결성을 검증한다.

Urgent pointer는 전송하는 데이터 중 긴급한 내용이 있는지 알리는 플래그이며, 이 포인터가 가리키는 데이터는 우선순위가 높게 처리되어 먼저 처리된다. 요즘에는 많이 사용되지 않는다.

4. UDP vs TCP

quicklatex.com-a01e0caabcc5741ecdc831333c821118_l3

Baeldung의 동의하에 글을 번역하고 정리하였습니다.

참고 글: https://www.baeldung.com/cs/udp-vs-tcp