본문 바로가기
CS/네트워크

TCP 와 UDP

by 쌩욱 2021. 11. 24.

TCP, UDP란?

- OSI 7계층 중 전송 계층에서 사용하는 프로토콜이다.

- OSI 7계층과 TCP/IP 4계층은 다음 사진과 같다.

TCP(Transmission Control Protocol)

- 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜

- 연결형 서비스로 가상 회선 방식을 제공한다.

- TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다.

- 종단간에 신뢰성있는 바이트 스트림을 전송하도록 설계되었다.

- 송신자와 수신자 모두 소켓이라고 부르는 종단점을 생성해 연결이 이루어진다. (가상 회선 방식)

- 연결 설정은 3 way handshake / 연결 해제는 4 way handshake 과정을 통해 이루어진다.

- 전이중(full-duplex) 방식 : 전송이 양방향으로 동시에 일어날 수 있음

- 점대점(point to point)방식 : 각 연결이 정확이 2개의 종단점을 가지고 있음

- 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

- 높은 신뢰성과 순차적인 전달이 특징이다.

- UDP보다 속도가 느리다.

- 연속성보다 신뢰성있는 데이터 전송이 필요할 때 사용한다. (ex. 파일 전송) 

 

3 way handshake?

클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정입니다. SYN, ACK 패킷을 주고받으며, 임의의 난수로 SYN 플래그를 전송하고, ACK 플래그에는 1을 더한값을 전송합니다. 정확한 순서는 SYN(m) -> ACK(m + 1), SYN(n) -> ACK(n + 1) 순으로 일어납니다.

난수 지정 : 기존 요청과 구분하기 위해서

 

4 way handshake?

TCP 4way handshake는 TCP연결을 해제하는 단계로, 클라이언트는 서버에게 연결해제를 통지하고 서버가 이를 확인하고 클라이언트에게 이를 받았음을 전송해주고 최종적으로 연결이 해제됩니다. 단, 서버에서 소켓이 닫혔다고 통지해도 클라이언트 측에서는 일정시간 대기하는데, 혹시나 패킷이 나중에 도착할 수 있기 때문입니다.

 

UDP(User Datagram Protocol)

- 데이터를 데이터그램 단위로 처리하는 프로토콜

- 소켓 대신 IP를 기반으로 데이터를 전송한다.

- 비연결형 프로토콜, 연결을 위해 할당되는 논리적인 경로가 없다. / 각각의 패킷은 독립적인 관계

- 흐름 제어, 오류 제어, 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다.

- 연결 설정, 해제 과정을 따로 하지 않는다.

- UDP헤더의 체크섬 필드를 통해 최소한의 오류만 검출한다.

- 데이터의 순서를 보장하지 않는다.

- TCP보다 속도가 빠르며 네트워크 부하가 적지만 신뢰성있는 데이터 전송을 보장하지 못한다.

- 신뢰성보다 연속성이 중요한 서비스에 사용한다. (ex. 실시간 스트리밍 서비스)

- 브로드캐스팅, 멀티캐스팅이 가능하다.

 

 

흐름제어(Flow Control)와 혼잡제어(Congestion Control)이란?

 

흐름제어는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것이다. 예를 들어 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문이다.

 

혼잡제어는 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것이다. 만약 정보의 소통량이 과다하면

패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

 

정리

TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램단위로 전송하는 프로토콜입니다.

TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린편입니다.

TCP는 그래서 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다.

+) 하지만 UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있습니다. 그래서 HTTP/3은 QUIC이라는 프로토콜을 기반으로 하는데, QUIC은 UDP를 기반으로 합니다. 즉, UDP 자체는 신뢰성을 보장하지 않지만, 추가적인 정의를 통해 신뢰성을 보장받을 수 있습니다.