RTSP 서버를 다루다가 다시 만나게 된 TCP, UDP.
비 전공자인 나도 이해 할 수 있도록, 각각이 무엇을 의미하고 언제 사용되는지 정리해보자.
(참고로 RTSP는 TCP를 사용한다... 이것때문에 날린 시간이...🥲)
TCP, UDP는 OSI 7계층 중 전송 계층에서 사용하는 프로토콜을 의미한다.
7계층 중 어디에 전송계층이 있는지 알고 싶다면 아래 그림을 참고하자.
두개의 프로토콜을 비교하기 이전에, 각각에 대해 먼저 알아보도록 하자.
TCP(Transmission Control Protocol)?
TCP를 그대로 번역하자면, 전송 제어 프로토콜 이다. 이것만으로는 어떠한 특징을 가지는지 정확히 알 수 없으니 좀 더 자세히 알아보자.
[ TCP/IP ]
우선, 한번쯤 들어봤을 TCP/IP 라는 것은 무엇일까?
TCP는 IP(Internet Protocol) 위에서 동작하는 프로토콜로, 땔레야 땔 수 없는 관계이기 때문에 보통 TCP/IP라고 부른다.
참고로, IP는 비신뢰성과 비연결성을 특징으로 가지는데, 이 말은 내가 보낸 데이터가 제대로 갔는지 혹은 손상됐는지 분실됐는지, 순서가 섞였는지 알 수가 없다는 뜻이다. 이러한 패킷 전송의 신뢰성과 패킷의 정확한 순서를 보장하기 위해 사용하는 것이 TCP이다.
[ TCP Flow ]
TCP는 크게 다음 3가지 흐름으로 구성되게 되며, 아래 그림을 참고하자.
- 연결 생성 (Connection establishment)
- 자료 전송 (Data transfer)
- 연결 종료 (Connection termination)
1. 연결 생성 (3-way-handshake)
TCP는 연결을 생성하기 위해, 3방향 핸드셰이크(3-way-handshake)를 사용한다.
- SYN: 클라이언트가 서버에게 SYN 메시지를 보낸다. 이 메시지에 포함된 시퀀스 번호는 클라이언트가 임의로 설정한 값 x.
- SYN-ACK: 서버가 클라이언트에게 SYN-ACK 메시지로 응답한다. 이 메시지에 포함된 시퀀스 번호는 서버가 임의로 설정한 값 y, 응답 번호는 (x + 1).
- ACK: 클라이언트가 서버에게 ACK 메시지를 보낸다. 이 메시지에 포함된 응답 번호는 (y + 1).
2. 자료 전송
TCP는 데이터를 받아들여 분할 한 뒤에, TCP 헤더를 붙여 TCP 세그먼트를 생성하고,
이 TCP 세그먼트를 주고 받게 된다.
TCP 세그먼트 구조는 참고링크를 참고하자
3. 연결 종료(4-way-handshake)
TCP는 연결을 종료하기 위해, 4방향 핸드셰이크를 사용한다.
- STEP 1 : 클라이언트가 연결 종료하겠다는 FIN 플래그를 전달한다. 이때 클라이언트는 FIN_WAIT1 상태가 된다.
- STEP 2 : 서버는 FIN플래그를 받고, 일단 확인메시지 ACK 보내고 자신의 통신이 끝날때까지 기다리게 된다.
이때 서버는 CLOSE_WAIT 상태가 된다. - STEP 3 : 연결을 종료할 준비가 되면, 연결해지를 위한 준비가 되었음을 알리기 위해 클라이언트에게 FIN플래그를 전송한다.
이때 서버는 LAST_ACK가 된다. - STEP 4 : 클라이언트는 해지준비가 되었다는 ACK를 확인했다는 메시지를 보낸다.
A클라이언트의 상태가 FIN-WAIT ->TIME-WAIT 으로 변경된다.
[ TCP 특징 ]
위에서 설명한 것처럼 TCP는 여러 인증 절차를 통해 전달 확인 및 순차 보장 기능을 제공 할 수 있다.
하지만, 이러한 절차 때문에, UDP에 비해 속도가 느리다는 단점이 있게 된다.
UDP(User Datagram Protocol)?
UDP는 비연결형 프로토콜이라고 합니다. 즉, 연결을 위한 논리적인 경로가 없고, 그에 따라 각각의 패킷이 다른 경로로 전송 될 수 있게 됩니다. 각각의 패킷은 독립적이기 때문에, 데이터의 순서를 보장 할 수 없게 됩니다.
비 전공자인 내가 언뜻 보기에는 순서도 보장 못한다면 TCP를 써야지 이런 프로토콜을 왜쓰지? 라는 생각이 들었지만,
단점이 있으면 장점이 있기 마련이다.
TCP에서 우리는 열심히 악수를 하면서 순서보장, 전송보장을 했지만, 그 만큼 시간이 소요되게 됐다.
하지만, UDP에서는 UDP 헤더의 CheckSum 필드로 최소한의 오류만을 체크 하기 때문에, TCP 보다 속도가 빠르게 된다!
TCP vs UDP 비교
TCP | UDP | |
신뢰성(수신여부 확인) | 메시지 수신 확인 → 신뢰성 높음 | 메시지 수신 확인 하지 않음 → 신뢰성 낮음 |
순서 정렬 | 전송 순서 보장 | 전송 순서 보장하지 못함 |
연결 방식 | 연결형 서비스(패킷 교환 방식) | 비 연결형 서비스(데이터 그램 방식) |
속도 | 느리다 | 빠르다 |
사용처 | 속도보다 신뢰성이 중요한 서비스 e.g. 파일 전송 시스템 |
신뢰성 보다는 연속성, 즉 속도가 중요한 서비스 e.g. 스트리밍, 게임 서비스 |
'network' 카테고리의 다른 글
WebServer vs WAS(Web Application Server) 쉽게 개념 정리! (1) | 2023.09.08 |
---|