본문 바로가기

Dev/HTTP

IP의 한계 극복 TCP와 UDP

앞서서 IP의 문제점인 비연결성, 비신뢰성 등의 문제점을 해결하기 위해 등장한 프로토콜이 TCP와 UDP 이다.


인터넷 프로토콜의 4계층

  • 애플리케이션 계층 - HTTP, FTP
  • 전송 계층 - TCP, UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층

아래의 그림을 통해 프로토콜 계층에서 어떻게 동작하는지 알아보자! (출처)

  1. 어떠한 프로그램이 메시지를 보낸다고 가정한다면, 소켓 라이브러리를 통해 OS 계층으로 메시지를 전달한다.
  2. OS계층에서는 메시지에다가 TCP정보를 겉에다가 씌워준다.
  3. 그리고 이어서 TCP정보 겉에다가 IP정보를 씌워준다.
  4. 이제 네트워크 인터페이스에서 LAN 카드를 통해서 나갈 때 이더넷 프레임이라는 것을 포함해서 밖으로 나간다.

프로토콜 계층 동작


메시지를 보내게 될 경우 아래 그림과 같이 전송데이터를 기준으로 TCP정보와 IP정보가 감싼 형태가 된다. (출처)

메시지를 감싸고있는 TCP정보와 IP정보(TCP/IP 패킷정보)

이런 형태로 메시지가 나가기 때문에 이래서 TCP/IP를 붙여서 얘기하는 구나...! 


TCP의 특징

  • 전송 제어 프로토콜(Transmission Control Protocol)
  • 연결지향 - TCP 3 way handshake (가상 연결)
  • 데이터 전달 보증 - IP의 비신뢰성 해결
  • 순서보장
  • 신뢰할 수 있는 프로토콜 / 현재 대부분 TCP 프로토콜을 사용

연결 지향 - TCP 3 way handshake (출처)

  1. TCP/IP 프로토콜로 연결하면 먼저 클라이언트에서 서버로 SYN이라는 메시지를 보낸다.
  2. 서버에서는 SYN을 받고 어 왔네? 하고 ACK를 보내서 응답과 함께 나도 연결해줘 하면서 보낸다.
  3. 클라이언트도 서버에서의 요청을 받고 ACK를 보내준다.
  4. 즉 서로 신뢰관계가 성립된 상태가 성립(서로 ACK 상태) 일 경우에 데이터를 전송한다는 뜻
  5. 요즘에는 최적화가 되어서 3번 ACK를 보낼 때 데이터도 같이 전송한다.

 

TCP 3 way handshake

 

데이터 전달 보증 (출처)

  • TCP/IP에서는 TCP가 붙게되면 클라이언트에서 데이터를 전송했을 때 서버에서는 잘 받았다고 전송해준다.
  • 서로 신뢰관계로 연결되기 떄문에 데이터가 잘 전달되었다고 보증할 수 있다.

데이터 전달 보증

 

순서 보장 (출처)

  • 패킷을 아래처럼 이렇게 보냈는데 패킷도착이 잘못된 경우를 보면
  • 서버에서는 전송되어 온 패킷을 다 버리고 제대로 다시 보내 하면서 리턴해준다.
  • 클라이언트는 잘못보낸게 있구나를 인지하고 다시 보낸다.
  • 즉 순서가 보장이 된다

순서 보장


UDP의 특징

  • 사용자 데이터그램 프로토콜(User Datagram Protocol)
  • TCP와는 달리 기능이 거의 없다.
  • 순서 보장도 되지 않는다.
  • 데이터 전달도 보증이 되지않는다.
  • 즉, UDP는 IP와 거의 같은데 추가적으로 PORT와 체크섬(메시지가 제대로 왔는지 체크하는 정도)부분이 추가된다.

 

그럼 UDP는 왜쓰는 걸까?

- TCP는 3 way handshake 하는데 시간도 들고, 전송할 때 확인작업(데이터를 잘받았는지 확인작업) 등이 있어서 데이터 양도 많다.

- 결정적으로 거의 모든 인터넷이 TCP로 연결되어있어서 TCP를 바꾸기는 어렵다.

- 이렇기 때문에 TCP가 아닌 UDP를 통해 최적화를 하는 방향으로 대세가 넘어가고 있는 추세이다. (최적화에 용이)

- HTTP3 스펙에서는 TCP에서 handshake를 통해 SYN, ACK등을 보내는데 이마저도 최적화하여 줄여보자 하여 UDP가 각광받고있다.

 

 

 

'Dev > HTTP' 카테고리의 다른 글

HTTP 시작  (0) 2021.05.11
UR패밀리 URI, URL, URN 과 웹브라우저 흐름  (0) 2021.05.06
친숙한 이름으로 바꿔주는 DNS  (0) 2021.05.05
프로세스를 구분하는 PORT  (0) 2021.05.05
IP(Internet Protocol)  (0) 2021.05.05