TCP와 UDP 그리고 HTTP에 대해 모르는 개발자는 없을 것이다, 다만 이번에 한번 정리하고 자한다.
1. TCP와 UCP
둘다 OSI 4계층(네트워크 계층)에서 패킷을 통해 통신하는 방식이다.
둘의 차이는 아래의 표로 나타낼 수 있다.
| 항목 | TCP | UDP |
| 연결 방식 | 연결형 (3-way handshake로 연결 확립) | 비연결형 (연결 없이 바로 전송) |
| 신뢰성 | 패킷 손실 시 재전송, 순서 보장 | 재전송 없음, 순서 보장 없음 |
| 흐름 제어/혼잡 제어 | 있음 | 없음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 사용 예시 | 웹 브라우징(HTTP/HTTPS), 이메일, 파일 전송(FTP) | 실시간 스트리밍, 온라인 게임, VoIP |
| 헤더 크기 | 20바이트 이상 | 8바이트 |
2. 3-way handshake
처음에 클라이언트가 서버에 연결하겠다고 말을 해, 그러면 서버는 자신의 ack 번호를 클라이언트에 전달한다.
그러면 ack+1을 다시 클라이언트가 서버에 연결을 맺는 방식을 3way handshake라고 한다.
2. 중간에 끝나면 어떻게 알아?
원래 서버는 클라이언트부터 ack 값을 받고 ack+1 값을 다시 클라이언트로 계속 보낸다.
클라이언트가 계속 서버로 부터 3을 받는다면 서버에서는 3번이 필요하다고 요청 보내는 것이다.
근데 클라이언트는 이미 3번을 보낸 상황이라면 이 패킷은 중간에 손실이 난 것이다.
다시 3번을 보냄으로써 데이터 패킷을 보장하는 방식이다.
3. HTTP는?
TCP 위에서 동작하는 Application 통신 방식이다.
따라서 데이터 정합성을 보장한다.
대부분의 HTTP(1.0, 1.1, 2)는 TCP 기반이고 HTTP가 3부터는 UDP 기반 QUIC 프로토콜을 사용한다.
4. HTTP는 왜 필요한가?
HTTP가 필요한 이유는 간단히 말하면 웹에서 정보를 주고받을 때, 모두가 이해할 수 있는 공통의 약속이 필요하기 때문이다.
TCP는 “데이터를 순서대로, 빠짐없이” 전달만 해줄 뿐 데이터의 구조나 의미는 신경 쓰지 않는다.
예를 들어 TCP로 그냥 텍스트를 보내면:
이게 요청인지, 응답인지, 파일인지, 명령어인지 TCP는 구분 못 한다.
→ 서로 약속이 없으면 서버와 클라이언트가 의미를 이해할 수 없음.