본문 바로가기
Network

TCP 와 UDP

by neohtux 2020. 7. 31.
728x90

TCP를 택배회사의 택배배송 차량으로 UDP를 퀵서비스에 비유한 그림이다.

TCP(Transmission Control Protocol)

TCP는 전송 제어 프로토콜(Transmission Control Protocol)의 약자이다.

OSI계층에서 4 계층인 전송 계층(Transport Layer)에 속하며, 아래 그림에서 보이듯 Network 계층 위에서

동작하는 프로토콜인것을 알 수 있다.

TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에

묶어서 TCP/IP로 부르기도 한다. 또한, TCP는 웹 브라우저들이 WWW(World Wide Web)
에서 서버에 연결할때 사용되며, 이메일 전송이나 파일 전송에서도 사용된다.

 

TCP는 다음과 같은 특징이 있습니다.

 

1. TCP 특징

(1)연결형 서비스

1) 연결을 위해 할당되는 논리적인 경로가 있습니다.

 ->  여기서 논리적인 경로는 실제 물리적인 회선이 존재하는 것이 아닌 가상 회선 방식입니다.


2) 데이터의 전송 순서가 보장됩니다. (데이터 시퀀싱, 이는 패킷이 수신기에서 순서대로 도착한다는것을 의미)

 -> TCP에서는 패킷을 이용하여 데이터를 포장하여 전송 됩니다.

 

(2) 속도와 신뢰성

1) 패킷 분실이 일어나면 책임지고 다시 전송합니다.


2) 패킷을 주고받을 상황이 아니면 일부만 보냅니다. (흐름 / 혼잡 제어)

3) UDP에 비해 상대적으로 느리다.

 -> UDP에 비해 상대적으로 느린 이유는. TCP 같은 경우는
2)에서 말했듯 데이터 흐름 제어나 혼잡 제어도 사용하고, 연결형 서비스이다 보니
연결형 신뢰성을 보장하는 3-way handshaking 방식을 사용하고,  UDP에서 사용하지 않는
패킷 응답률 때문입니다.

 

3-way handshaking이란

 

서로 통신을 하는 클라이언트와 서버가 통신을 시작하기 전에
연결을 수립하는 방식을 말합니다.

 

즉, 서버와 클라이언트 사이 데이터를 전송할 준비가 완료되었음을 알리는 작업입니다.

클라이언트 - 서버 간의 TCP 연결을 하기 위해 다음과 같은 3가지 단계를 필요로 합니다.

 1) client에서 Server로 SYN(synchronize sequence numbers) 패킷 (접속 요청 패킷)을 보낸다.
   클라이언트는 접속 요청을 보내고 서버로부터 ACK(acknowledgement) + SYN답장을 기다립니다.
   서버는 Listen 상태입니다.

 

 2) 서버는 클라이언트로부터 SYN 패킷을 받고 ACK 와함께 SYN + (flag)가 설정된 패킷을 
     클라이언트에게 전송 (Accept!)합니다. 그러고 나서 서버는 Receive 상태에 있습니다. 클라이언트로부터
     패킷을 받기 위함이죠.

 

 3) 클라이언트는 서버로부터 SYN+ACK를 받고 이것을 받았다는 ACK를 Server 측에 다시 보냅니다.

    Server 측에서 최종적으로 클라이언트의 ACK를 받고 이후에 연결 상태로 서로 통신을 할 수 있는 상태가 됩니다.


3-way handshake는 연결을 시도할 때 거치는 과정이라면 , 연결을 종료할 때에도 4 way-handshake의 과정을 거칩니다.

4-way handshaking 과정

4-way를 보면 추측할 수 있듯 4단계를 필요로 합니다.

 

1) 클라이언트가 서버에게 연결을 종료하겠다는 FIN 플래그를 전송합니다.


2) 서버는 클라이언트로부터 받은 FIN 플래그를 확인하고 ACK의 확인 메시지를 클라이언트에게 보냅니다.


3) 서버는 클라이언트가 보낸 데이터를 모두 받았는지 기다렸다가(통신이 끝났는지 확인 [Time Wait])
   연결이 종료되면 클라이언트에게 FIN플래그를 전송합니다.

 

4) 클라이언트는 확인했다는 메시지를 보냅니다.

 

UDP(User Datagram Protocol)

UDP도 TCP와 마찬가지로 같은 4 계층의 프로토콜입니다.
UDP에서 Datagram이란 TCP의 순차적인 패킷이 아닌 각 패킷이 독립적으로 전송된다는 뜻입니다.

TCP에서 가상 회선 방식에서는 보내는 순서대로 도착하는 순서가 일치하는 것을 확인할 수 있었지만,
UDP에서는 가상 회선( 논리적인 경로)이 없기 때문에 독립적으로 서로 다른 경로를 통해 목적지에

패킷이 도착하게 됩니다. 그렇기 때문에 패킷이 도착하는 순서를 보장할 수 없습니다.

또한, UDP는 TCP와 다르게 전송 제어나 흐름이 없기 때문에 
전송된 데이터가 유실이 일어나도 보장하지 않는다는 특징이 있습니다.

 

위에서 설명한 UDP를 보완하면 다음과 같은 특징이 있습니다. 

UDP 특징

(1) 비연결형 서비스 

-> UDP는 TCP와 다르게 연결이라는 개념이 없습니다. 어떤 패킷이 먼저 도착할지 전송 순서가 보장되지 않습니다.

 

 

(2) 속도와 신뢰성 

-> 패킷 분실에 대한 책임이 없기 때문에 TCP처럼 패킷이 유실되거나 잘못되었으면 재전송하지 않습니다.

-> 일단 패킷을 보내고 생각? 합니다.

-> 흐름 제어와 전송 제어가 없기 때문에 TCP보다 상대적으로 빠릅니다.

-> 만약 UDP로 신뢰성을 보장해야 하는 경우 Reliable UDP라고 해서 별도의 패킷 순서를

    보장해주는 부분을 구현해야 합니다.

 

 

TCP vs UDP 차이

TCP는 연결 지향 프로토콜입니다. 
연결 지향은 통신 장치가 데이터를 전송하기 전에
연결을 설정하고 데이터를 전송 한 후
연결을 닫아야한다는 것을 의미합니다.
UDP는 데이터 그램 지향 프로토콜입니다. 
연결을 열고, 연결을 유지하고, 연결을 종료하기위한
오버 헤드가 없기 때문입니다.
UDP는 브로드 캐스트 및 멀티 캐스트 유형의 네트워크 전송에 효율적입니다.
TCP는 대상 라우터로 데이터를 전달할 수 있으므로
안정적입니다.
UDP에서는 대상으로 데이터를 전달할 수 없습니다.
TCP는 광범위한 오류 검사 메커니즘을 제공합니다. 
흐름 제어 및 데이터 승인을 제공하기 때문입니다.
UDP에는 체크섬을 사용하는 기본 오류 검사 메커니즘 만 있습니다.
데이터 시퀀싱은 TCP (Transmission Control Protocol)의 기능입니다. 
이는 패킷이 수신기에서 순서대로 도착한다는 것을
의미합니다.
UDP에는 데이터 시퀀싱이 없습니다
주문이 필요한 경우 응용 프로그램 계층에서 관리해야합니다.
TCP는 UDP보다 비교적 느립니다. UDP는 TCP보다 빠르고 간단하며 효율적입니다.
손실 된 패킷의 재전송은 TCP에서는 가능하지만
UDP에서는 불가능합니다.
UDP (User Datagram Protocol)에서 손실 된 패킷의
재전송은 없습니다.
TCP에는 (20-80) 바이트의 가변 길이 헤더가 있습니다. UDP에는 8 바이트 고정 길이 헤더가 있습니다. 
TCP는 무겁습니다. UDP는 경량입니다.
TCP는 브로드 캐스팅을 지원하지 않습니다. UDP는 브로드 캐스팅을 지원합니다.
TCP는 HTTP, HTTP, FTP, SMTP 및 Telnet에서 사용됩니다. UDP는 DNS, DHCP, TFTP, SNMP, RIP 및 VoIP에서 사용됩니다.

 

 

조금 쉽게 비유하면

앞에 강이 있는데 편지를 보내려고 합니다.
다리를 만들어 이용하여 보내는 방법이 있고.
비둘기를 날려 보내는 방식이 있습니다.

300x250

'Network' 카테고리의 다른 글

ONVIF와 영상 데이터 스트리밍 프로토콜  (0) 2019.10.08
이더넷(Ethernet)  (1) 2019.10.02

댓글