이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다
TCP와 UDP의 차이에 대해 설명해 주세요.
TCP(Transmission Controle Protocol)
인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
TCP 의 특징
- 연결 지향 방식으로 패킷 교환 방식을 사용한다.
- 3-way handshake 과정을 통해 연결을 설정하고 4-way handshake 을 통해 해제한다.
- 흐름 제어 및 혼잡 제어
- 네트워크 상황과 클라이언트의 데이터 처리 능력을 고려하여 데이터 전송 속도를 조절한다.
- 네트워크의 혼잡 상태를 감지하고, 혼잡을 완화하기 위해 데이터 전송 속도를 조절한다.
- 높은 신뢰성을 보장한다.
- 데이터 손실이 발생했을 때 재전송을 요청하고, 도착한 데이터의 순서를 관리하여 데이터를 제공한다.
- UDP 보다 속도가 느리다
- 전이중(Full-Duplex), 점대점(Point to Point) 방식이다.
UDP(User Datagram Protocol)
데이터를 데이터그램 단위로 처리하는 프로토콜
UDP 의 특징
- 비연결 방식으로 데이터 그램 패킷 교환 방식을 사용한다.
- 신뢰성이 떨어진다
- 패킷의 도착을 보장하지 않으며, 순서대로 도착한다는 보장도 없다.
- 데이터 패킷이 손실되거나 순서가 바뀌어도 재전송을 요청하지 않는다.
- 효율적으로 데이터를 전송한다.
- 연결 설정과 상태 유지에 필요한 오버헤드가 없기 때문에 빠른 데이터 전송이 필요한 실시간 애플리케이션에서 많이 사용된다.
- 헤더 오버헤드가 적다.
- UDP 헤더는 8 바이트로, 전송해야 할 데이터 양이 적은 경우에 유리하다.
- TCP 보다 속도가 빠르다
밑에 표를 통해 TCP 와 UDP 의 차이를 알아보자
| TCP | UDP |
---|
패킷교환방식 | 가상회선패킷교환방식 | 데이터그램패킷교환방식
|
신뢰성 | O | X |
오류검사 | 재전송, 체크섬 | 체크섬 |
패킷의 순서보장 | O | X |
헤더길이 | 20~60 바이트 가변 길이 | 8 바이트 고정 길이 |
연결 보장 | 3-way handshake 로 연결을 맺고 4-way handshake 로 연결을 해제하는 작업이 필요하다 | 연결을 보장하지 않는다. 그냥 데이터를 보내고 연결을 유지하고 해제하는데 드는 비용이 없다 |
브로드 캐스트 지원 | X | O |
속도 | 느리다 | 빠르다 |
Checksum이 무엇인가요?
Checksum 이란
데이터의 정확성을 검증하기 위해 사용되는 간단한 방법 중 하나이다. 주로 파일, 메시지, 혹은 패킷의 무결성을 확인하는 데 사용된다.
작동원리
- 데이터를 전송하기 전에, 전송할 데이터의 내용에 기반하여 계산된 작은 크기의 값(checksum) 을 생성한다.
- 생성된 checksum 값은 데이터와 함께 수신자에게 전송된다.
- 데이터를 받은 수신자는 수신된 데이터에 대해 같은 checksum 계산 방법을 사용해 새로운 checksum 값을 계산한다.
- 두 checksum 을 비교한다. 두 값이 일치하면 데이터가 정확하게 전송된 것이고, 일치하지 않으면 데이터가 변조,손상된 것으로, 데이터 재전송을 요청할 수 있다.
TCP와 UDP 중 어느 프로토콜이 Checksum을 수행할까요?
TCP 와 UDP 둘다 모두 Checksum 을 수행한다.
하지만 TCP 에서는 필수적이고, UDP 는 선택적이다.
그렇다면, Checksum을 통해 오류를 정정할 수 있나요?
Checksum 으로 데이터의 오류의 발생 여부만 확인할 수 있다. 오류가 어디서 어떻게 발생하였는지는 알 수 없다.
TCP가 신뢰성을 보장하는 방법에 대해 설명해 주세요.
- ACK 필드를 이용하여 데이터를 수신하였는지 확인하는 요청/응답을 보낸다.
- 데이터의 순서를 관리한다.
- 흐름제어 : 수신자가 처리할 수 있는 데이터의 양을 슬라이딩 윈도우 기능을 통해 제어한다.
- 혼잡제어 : 네트워크 정체 신호를 모니터링하여 네트워크 과부하를 방지한다.
- 오류감지 : checksum 을 사용하여 데이터의 오류 여부를 검사한다.
TCP의 혼잡 제어 처리 방법에 대해 설명해 주세요.
- 느린 시작(Slow Start)
- 연결 시작 시 속도를 점진적으로 늘려, 네트워크 용량을 탐색합니다.
- 혼잡 회피(Congestion Avoidance)
- 네트워크 혼잡을 감지하면, 전송 속도 증가를 늦춰 혼잡을 관리합니다.
- 혼잡 감지
- 패킷 손실(예: 타임아웃, 중복 ACK)을 통해 네트워크 혼잡을 감지하고, 전송 속도를 조정합니다.
- 빠른 회복(Fast Recovery)
- 혼잡 발생 시 윈도우 크기를 줄여 빠르게 회복하고, 전송을 재개합니다.
왜 HTTP는 TCP를 사용하나요?
TCP, UDP 의 선택은 신뢰성, 속도를 생각하여 선택해야한다고 생각한다.
HTTP 는 서버-클라이언트 모델 기반으로 통신을 제공한다. 그러므로 데이터의 무결성과 신뢰성이 중요하다. 그러므로 신뢰성이 좋은 TCP 를 사용한다.
그렇다면, 왜 HTTP/3 에서는 UDP를 사용하나요? 위에서 언급한 UDP의 문제가 해결되었나요?
HTTP/3 에서 UDP 를 사용하는 것은 성능 향샹과 연결의 효율성을 개선하기 위한 것이다.
기본적으로 HTTP/3 은 QUIC 프로토콜 위에서 구현된다.
QUIC 가 UDP 의 기본적인 특성을 활용하면서도, TCP 에서 제공하는 신뢰성, 순서 보장, 흐름 제어, 혼잡 제어 같은 중요한 기능들을 자체적으로 구현한다. 이를 통해 UDP 의 문제점들이 해결됐다.