TCP, UDP는 TCP/IP 4계층 Transport Layer(전송계층)에서 사용되는 프로토콜이다.
전송계층은 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로,
송신 호스트와 수신 호스트 간의 연결을 제공하고, 데이터 전송을 관리하는 계층이다.
(TCP/IP계층과 관련해서는 아래 블로그 참고)
그리고 여기서 사용되는 프로토콜이 바로 TCP프로토콜과 UDP프로토콜이다.
TCP(Transmission Control Protocol)
TCP를 해석하면 전송을 제어하는 프로토콜(규약)이라는 뜻으로,
인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
TCP프로토콜은 다음과 같은 특징을 가진다.
특징
- 연결 지향 방식이다.
- 3 way handShaking을 통해 연결을 설정하고, 4 way handShaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성 보장
- UDP 보다 속도가 느리다.
연결 지향 방식은, 말그대로 서로의 통신 연결이 유지되는 것을 지향한다는 의미이다.
하지만 여기서 연결은 물리적 연결이 아닌, 개념적, 논리적 연결이다.
TCP에서 handShaking을 했다고 해도 실제로 전선이 두 컴퓨터를 연결해 놓은 것은 아니기 때문이다😅
3-way-handShaking
1. 먼저 클라이언트 쪽에서 서버에 SYN과 함께 임의의 Sequence Number를 보낸다.
SYN은 Syncronize Sequence Number의 준말로, TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷이다.
클라이언트가 SYN요청을 보내면 Client는 SYN-SENT상태가 된다.
2. 서버에서는 SYN요청을 받은 뒤 SYN-RECEIVED상태가 된다.
그리고 SYN을 잘 받았다는 의미인 ACK(Acknowledgement)와 함께 자신(서버)의 Sequence Number를 SYN으로 보낸다.
여기서 ACK에는 SYN으로 받았던 클라이언트의 Sequence Number에 1을 더한 값을 싣는다.
클라이언트에서는 해당 SYN + ACK를 수신하면 연결이 성립되었다는 의미인 ESTABLISHED상태가 된다.
3. 마지막으로 클라이언트에서 서버의 SYN을 잘 받았다는 의미의 ACK요청을 전송하게 된다.
여기서 ACK또한 서버에서 받은 Sequence Number에 1을 더한 값을 싣게 되고,
이제 서버도 해당 요청을 수신하면 ESTABLISHED상태가 되면서 연결이 성립된다.
이렇게 데이터를 전송할 때마다 3번이나 확인을 오고 가며, 연결을 설정하고 4번의 연결을 통해 해제하는 과정이 신뢰적이지만, 속도가 느리고 오버헤드가 발생한다고 할 수 있다.
UDP(User Datagram Protocol)
UDP는 사용자 데이터그램 프로토콜이라는 뜻으로 해석하면, 데이터를 데이터그램 단위로 처리하는 프로토콜을 의미한다.
여기서 데이터그램이란 독립적인 관계를 지니는 패킷이라는 뜻으로, 아래 사진과 같이, 데이터를 서로 다른 경로로 독립적으로 처리한다.
특징
- 비연결 지향 방식
- 정보를 주고받을 때 보내거나 받는다(handShaking)는 신호 절차를 거치지 않는다.
- 신뢰성이 낮다.
- TCP보다 속도가 빠르다.
UDP는 비연결 지향 방식으로, 연결을 설정하고 해제하는 과정이 없다.
서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능도 처리하지 않기에 TCP보다 속도가 빠르며 네트워크 부하가 적다.
하지만, 확인 절차 없이 데이터를 전송하기만 하기 때문에 신뢰성을 보장하지는 않는다.
따라서 신뢰성보다는 연속성이 중요한 실시간 서비스에 주로 사용된다.
'CS' 카테고리의 다른 글
[CS] OSI7 Layer, TCP/IP Updated (2) | 2023.03.16 |
---|---|
[CS] 웹서버 Apache, NginX (0) | 2022.08.24 |
[CS] 서버와 클라이언트 (0) | 2022.08.21 |
[CS] SSR vs CSR (0) | 2022.07.22 |