나만의 작은 도서관
[Network] TCP vs UDP 본문
목차
- TCP, TCP 통신 과정
- UDP
- TCP와 UDP 작동 비교 예제
- TCP와 UDP 비교 표
신뢰할 수 있는 전송 프로토콜: TCP
TCP는 호스트 간 접속과 송수신의 신뢰성이 보장되는 환경에서 통신하기 위한 연결형 통신 프로토콜로, 신뢰성 있는 통신을 위해 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 수행합니다. (앞으로의 설명에서 통신은 서버-클라이언트 구조를 기반으로 설명합니다. )
연결형 통신 프로토콜
TCP의 통신 과정은 1) 세션 접속, 2) 데이터 송수신, 3) 세션 해제 순으로 진행됩니다. 1) 세션 접속은 3-way-hanshake 방식을 통해 연결을 시도하는 상태를 의미합니다. 세션 접속이 성공적으로 이루어졌다면 데이터 송수신 과정으로 넘어가게 됩니다.
2) 데이터 송수신 과정은 세션이 유지되며, 정보교환이 가능한 상태를 의미합니다. 양쪽의 호스트들은 DATA -> ACK의 순으로 송수신이 가능하며 서버에서 클라이언트로 보내는 데이터를 PUSH라고 합니다. 전송되는 데이터는 반드시 반대쪽에서 ACK 응답을 전송해야 하며, ACK 응답이 일정 시간 이상 오지 않을 경우 통신을 중단합니다. 통신이 중단될 경우 세션은 해제됩니다.
3) 세션 해제는 4-way-hanshake 방식으로 처리되며 4-way-hanshake가 정상적으로 마무리 될 시 서버에서의 클라이언트 세션자원이 해제됩니다.
전송 순서가 보장된다.
aaaaaaaaaa라는 데이터1이 있고, bbbbbbbbbb라는 데이터2가 있다고 가정하겠습니다. 만약 TCP로 통신하는 환경에서 송신 측이 데이터1 -> 데이터2 순서로 전송을 했다면, 수신 측은 반드시 aaaaaaaaaabbbbbbbbbb와 같은 순서로 데이터를 받게됩니다. TCP는 ababab...와 같은 패턴이나 aaabbbaabbabb와 같이 두 데이터가 섞여 들어오지 않도록 전송 순서를 보장하기 때문이죠.
데이터 경계(Boundary) 없음
TCP는 데이터 경계에 대한 개념이 없습니다. 10의 크기를 가진 데이터가 3, 7과 같이 쪼개져서 전송될 수 있습니다. 쪼개지기만 할까요? 아닙니다. 여러 개의 데이터가 하나로 뭉쳐져서 전송되기도 합니다. (10 크기의 데이터 10개가 100 크기로 한 번에 전송되는 것 처럼요.) 이처럼 TCP는 데이터에 대한 경계가 없는 바이트 스트림 방식을 사용하기 때문에 전송 시 쪼개지거나 합쳐질 수 있습니다.
받을 상황에만 전송한다.
TCP는 흐름/혼잡 제어 기능이 존재합니다. 네트워크 상태가 좋지 않은 경우나, 수신 측 버퍼가 꽉 차있는 경우처럼 보내봤자 제대로 못 받을 가능성이 높다면 전송하는 데이터 양을 줄일 수 있습니다.
분실 및 파손에 책임진다.
TCP는 오류 제어 기능 또한 존재합니다. TCP가 신뢰성이 높은 통신 프로토콜이라 불리는 이유도 오류 제어 기능이 존재하기 때문입니다. TCP는 데이터의 분실 및 파손이 감지된 경우, 해당 데이터를 재전송 해달라고 송신 측에게 요청하여 온전한 해당 데이터를 받을 수 있도록 합니다.
가볍고 빠른 전송 프로토콜: UDP
UDP는 신뢰할 수 없는 비연결형 통신 프로토콜로, 정확하게 데이터를 송수신하는 것보다 최대한 빠르게 송수신하는 것이 목표인 프로토콜입니다.
비연결형 통신 프로토콜
UDP는 TCP처럼 연결이라는 개념이 없습니다. 연결을 유지하지도, 상태를 활용하지도 않는다는 점에서 UDP를 스테이트리스(stateless) 프로토콜이라 부르기도 합니다.
분실 및 파손에 책임지지 않는다.
데이터를 최대한 빠르게 보내기 위해 헤더 구조를 간단하게 설계했습니다. TCP에서 재전송을 통한 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하는 필드를 전부 빼버린거죠. 속도가 빨라졌지만, 댓가로 데이터 전송의 신뢰성을 잃어버리게 됩니다. 따라서, 데이터가 전송되지 않아도, 일부가 심하게 훼손되어도 UDP는 이에 보장하지 않습니다. (하지만 빨랐죠?)
UDP의 체크섬 필드
UDP는 데이터의 신뢰성을 책임지지 않는다고 했습니다. 그럼에도 UDP 헤더에는 체크섬 필드이 있는 걸 확인할 수 있습니다(위 그림 확인). '신뢰성을 책임지지 않는데 체크섬 필드가 필요할까?' 싶지만, 체크섬 필드는 수신 측에서 훼손된 데이터를 폐기 처리하기위해 사용합니다. (못 받은셈 치는거죠) 아무리 UDP라도 심하게 훼손된 데이터는 가져갈 이유가 없기 때문에 걸러내기 것입니다.
UDP가 TCP보다 유리한 점
UDP는 TCP에 비해 데이터 전송 과정에서 오버헤드가 적고, 연결 설정 및 관리가 필요하지 않기 때문에 데이터를 빠르게 전송할 수 있습니다. 이러한 UDP의 특성은 실시간 전송이나 멀티캐스트 트래픽에서 유리하게 작용합니다. 또한, UDP는 브로드캐스트나 멀티캐스트 통신을 지원하여, 네트워크 내의 다수의 호스트에게 데이터를 효율적으로 전송할 수 있습니다.
이러한 장점으로 인해 UDP는 대용량의 데이터가 실시간으로 전송되는 스트리밍, 인터넷 전화 등의 미디어 처리 분야에서 활용되거나, 불특정다수를 향한 데이터 전송을 요구하는 DNS 네임 서버 등의 시스템 노드 간 정보 교환에 활용되고 있습니다.
UDP의 데이터 전송방식
UDP의 데이터 전송방식은 크게 2가지로 나뉘는데, 특정 IP를 지정하여 데이터를 전송하는 유니케스팅(Unicasting)과 특정 그룹인 다수를 향해 데이터를 전송하는 브로드캐스팅(Broadcasting)으로 나눠집니다. 데이터 전송 시, UDP는 TCP와 같이 클라이언트-서버 개념이 없으므로, 송신/수신측 모두 데이터를 읽어들이는 RECEIVER를 만들어야 합니다.
UDP의 규격
TCP에 HTTP가 있듯, UDP에는 SIP이라는 규격이 존재합니다. SIP는 컴퓨터 간의 실시간 음성/영상을 교환하기 위한 환경을 구축해주는 프로토콜입니다. 이렇듯 UDP는 SIP프로토콜을 이용하여 미디어처리와 관련된 통화, 화상등의 인터넷 전화기술에 활용되고 있습니다.
TCP와 UDP 작동 비교 예제
데이터 경계 예제
UDP는 데이터그램 방식의 데이터를 사용하고 TCP는 경계가 없는 바이트 스트림 방식의 데이터를 사용합니다. 따라서 UDP는 각 데이터에 경계가 있기 때문에 데이터 단위로 전송되지만, TCP는 데이터가 쪼개거나 합쳐서 전송합니다.
수신 측 버퍼가 꽉 차있는 경우
UDP는 상황을 고려하지 않고 데이터를 전송하기 때문에 버퍼가 꽉 차 있어도 계속 데이터를 전송하는 반면, TCP는 데이터를 받지 못하는 상황임을 인지하고 데이터 전송을 중단할 수 있습니다.(흐름 제어)
TCP와 UDP 비교 표
TCP | UDP | |
연결 | 연결을 위해 할당되는 논리적인 경로가 있다. | 연결이라는 개념이 없다. |
데이터 경계 | 데이터 경계(Boundary)가 없다. | 데이터 경계(Boundary)가 있다. |
전송 순서 | 전송 순서가 보장된다. | 전송 순서가 보장되지 않는다. |
신뢰성 | 파손 및 분실 시 책임지고 다시 전송한다. | 파손 및 분실에 책임지지 않는다. |
흐름/혼잡제어 | 네트워크 또는 수신 측 상황을 고려하여 전송한다. | 일단 보내고 생각한다. |
속도 | 고려할 부분이 많기 때문에 상대적으로 속도가 느리다 | 단순하기 때문에 상대적으로 속도가 빠르다. |
비유 | 안전 배송, 전화 | 총알 배송, 이메일 |
참고 영상
'Common > CS-네트워크' 카테고리의 다른 글
[Network] protoBuf와 직렬화/역직렬화 (0) | 2024.06.28 |
---|---|
[Network] 빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian) (0) | 2024.06.28 |
[Network] 1분 간단 질문. TCP Handshake란 무엇인가요? (0) | 2024.06.27 |
[Network] 대칭 키 암호화 방식과 공개 키 암호화 방식 (0) | 2024.06.26 |
[Network] 로드 밸런싱(Load Balancing) (0) | 2024.06.26 |