네트워크의 계층들 중 전송계층은 쉽게 말해 데이터의 전달을 담당하고, 송신자와 수신자를 연결하는 통신서비스를 제공한다.
이러한 데이터들을 보내기위해 사용하는 프로토콜[1]들이 있는데 그것이 TCP와 UDP이다.
즉 HTTP / IP / TCP / UDP 는 모두 프로토콜이다.
[네트워크 7계층 알아보기🤔]
TCP | UDP | |
---|---|---|
연결방식 | 연결형 서비스 (패킷교환 방식) | 비연결형 서비스 (데이터그램 방식) |
전송순서 | 전송순서 보장 | 전송순서 변동 가능성 O |
수신여부확인 | O | X |
통신방식 | 1:1통신 | 1:1 / 1:N / N:N통신 |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
보통 IP/TCP로 쓰지만 이 둘을 동일시로 보면 안된다. 이 둘은 둘다 프로토콜이지만 별개의 규칙이다.
IP(Internet Protocol)는 인터넷 망 속에서 클라이언트와 서버가 통신할 수 있게 IP 주소와 패킷과 같은 규칙을 통해 통신을 하게하는 것이다.
TCP(Transmission Control Protocol)는 IP로만 통신하기에 불안전했던 단점들(패킷순서가 이상하거나, 패킷이 유실되는 상황)을 보안한 것이고 패킷 전송을 제어하여 신뢰성을 보증하는 프로토콜이라고 할 수 있다.
즉, IP 규칙에 써있는대로 목적지까지 다다랐으면, TCP 규칙에 써있는대로 올바르게 도착했는지 정확히 누구에게 전달되야하는지 하나하나 따지는 것이다.
예를 들어 한줄로 서야하는 A,B,C라는 패킷들이 서울(발신지)에서 출발하여 부산(수신지)으로 갈때 A,B,C가 순차적으로 가는 상황에서 B가 길을 잘못 들어서 분실되었다. 하지만 최종 목적지에서 A,C만 보고 다 왔다고 착각할 수 있기 때문에 A,,B,C라는 패킷에 1,2,3이라는 번호를 부여한다. 따라서 패킷의 분실 확인과 같은 처리를 하고 목적지에서 재조립을 한다.
1. 전송데이터를 TCP 포장한다.
2. 포장한 전송데이터를 IP 포장한다.
3. 포장한 전송데이터를 이더넷 포장한다.
4. 인터넷을 통해 상대 컴퓨터 서버에 도달하여 포장된걸 하나씩 풀며 전송데이터를 받는다.
TCP는 연결형 서비스로 신뢰성을 보장하는 것이 특징이다. 그래서 3-way handshaking의 과정도 사용하고, 데이터의 흐름제어나 혼잡 제어와 같은 기능도 이용한다.
하지만 이러한 기능때문에 UDP보다 속도가 느리다는 단점이 있다.
데이터를 데이터그램 단위로 처리하는 프로토콜
데이터그램이란 독립적인 관계를 지니는 패킷이다.
서로 다른 경로로 독립적으로 처리하고 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능도 처리하지 않는다.
TCP보다 속도가 빠르고 네트워크 부하가 적다는 장점이 있지만 신뢰성있는 데이터의 전송을 보장하지는 못한다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 서비스 예를 들면 실시간 서비스(streaming)에 자주 사용된다.
HTTP/1.1과 HTTP/2는 TCP를 전송에 사용하지만, HTTP/3은 UDP(QUIC)를 사용하였다.
이전 HTTP 2.0은 TCP/IP 4 계층의 애플리케이션 계층(L4)에서 HTTP의 HOLB를 해결하였지만, 전송 계층(L3)에서의 TCP HOLB 를 해결한 것은 아니었다.
구글이 SPDY 프로토콜에 이어 새로운 UDP 기반인 QUIC 프로토콜을 고안하게 된다. 이 새로운 QUIC 프로토콜이 TCP/IP 4계층에도 동작시키기 위해 설계된 것이 바로 HTTP 3.0 이다.
프로토콜[1] : 컴퓨터 내부 장치들 사이에서 혹은 컴퓨터들 사이에서 통신할 때, 교환되는 데이터 형식에 대해 상호협의가 필요하다. 이렇게 데이터의 교환 형식을 정의하는 규칙의 집합을 프로토콜이라고 한다.
패킷[2] : 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이때, 이 조각을 패킷이라고 한다.
1) https://mangkyu.tistory.com/15
2) https://inpa.tistory.com/entry/NW-%F0%9F%8C%90-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%ED%98%B8%ED%95%9C-TCP-UDP-%EA%B0%9C%EB%85%90-%E2%9D%93-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90
3) 프로토콜 정의
https://developer.mozilla.org/ko/docs/Glossary/Protocol
글 잘 봤습니다.