본문 바로가기

CS 과목(CS科目)/네트워크(ネットワーク)

TCP/UDP(모든 웹 개발자를 위한 HTTP)

[TCP/UDP 프로토콜 강의 메모]

IP 프로토콜의 한계
-> 아래의 TCP가 필요한 이유와 연결지어서 생각!!!


TCP의 역할(IP 프로토콜의 한계를 극복해준다,대부분의 애플리케이션에서 TCP 사용)
1. IP(목적지 컴퓨터) 주소의 컴퓨터가 네트워크 통신을 할 준비가 돼 있는 지 [연결성 보장(연결 지향적)]
-> 3way handshake
-> 가상 연결 : 물리적 연결이 아닌 개념적 연결 
클라이언트와 서버 사이에는 수 많은 노드들(라우터들)이 있다. 이 라우터들은 클라이언트와 서버 사이의
데이터 전송로를 만들어 놓지 않기 때문에 물리적으로 연결돼 있다고 말할 수 없다. 
(옛날에는 전화 교환원이 전화선 PORT를 직접 꽂음으로서 물리적인 연결로 통신을 했다)

2. 전송 [패킷의 순서를 보장]
-> 일반적으로 전송 데이터가 1500byte가 넘으면 패킷을 분할해서 보낸다. 
-> 서버에서 패킷 순서가 이상하면 클라이언트에게 비정상적인 패킷부터 시작하는 마지막 패킷까지
전부 다시 보내달라고 재요청 메시지를 보낸다. (TCP 패킷 정보에 [전송 순서 정보]가 들어감)


3. 도중에 패킷 소실되는 문제를 방지
-> [데이터 전달 보장] : 클라이언트에서 데이터를 보내면 서버에서 데이터를 받았다고 확인 메시지를
보내준다. 만약 확인 메세지에 이상이 있다면 서버가 클라이언트에게 다시 데이터를 보내달라고 요청
(TCP 패킷 정보에 [검증 정보]가 들어 있음)

4. 서버에 애플리케이션이 2개 이상 있을 때 Port 정보를 통해서 알맞은 애플리케이션에 데이터 전송을
가능하게 한다. 
-> Port에 대한 정보(출발지PORT/목적지PORT)는 IP 프로토콜이 아닌 TCP/UDP에서 추가된다.  
(참고 : UDP는 PORT와 체크섬 정보 정도만 추가된다, 
 TCP 기반으로 이미 많은 곳에서 애플리케이션을 운영하고 있다. 고로 개발자가 TCP를 어떻게
최적화할 수가 없다. 만약 본인이 기존의 TCP보다 더 좋은 프로토콜을 만들고 싶다면 UDP를 애플리케이션
레벨에서 최적화하는 수밖에 없다. )


* 내가 네트워크를 배울 때만 하더라도 영상 같은 데이터는 UDP를 사용하라고 배웠다. 
그러나 현재는 TCP의 속도가 많이 최적화되어 영상 데이터조차 TCP를 대부분 사용하고 있다. 
그러나 HTTP_3 스펙이 생겼는데, 이 스펙은 TCP의 핸드-쉐이킹으로 인한 시간 비용 등조차도 
최적화해보자라는 의미에서 UDP를 기반으로한 커스텀된 프로토콜(Quick 프로토콜)을 사용하고 있다. 
-> 이런 면에서 최근에는 UDP 프로토콜이 많은 각광을 받고 있다. 



HTTP/3와 UDP
QUIC 프로토콜:
HTTP/3는 **QUIC(Quick UDP Internet Connections)**라는 전송 계층 프로토콜 위에서 실행됩니다. QUIC는 UDP 위에 구현되어, 기존 TCP 기반의 HTTP/2에서 발생했던 일부 문제(예: 연결 지연, 헤드 오브 라인 블로킹 등)를 해결합니다.

UDP의 장점 활용:

UDP는 연결 설정 과정이 없고, 패킷 단위로 데이터를 전송하기 때문에 TCP에 비해 가볍습니다.
QUIC는 이를 기반으로 TLS 암호화와 다중 스트림 전송을 지원하여 보안과 성능을 강화합니다.
QUIC의 주요 기능:

연결 설정 속도 개선: TLS 핸드셰이크와 연결 설정이 단일 라운드 트립으로 이루어짐.
헤드 오브 라인 블로킹 해결: 개별 스트림이 독립적으로 동작하므로, 하나의 스트림에서 문제가 생겨도 다른 스트림에 영향을 주지 않음.
내장 암호화: QUIC는 처음부터 TLS를 통합하여 보안을 기본 제공.