주니어 개발자 성장기

(22.10.04) HTTP(2) - TCP, UDP 본문

Web

(22.10.04) HTTP(2) - TCP, UDP

Junpyo Lee 2022. 10. 4. 21:23

TCP의 역할

IP 프로토콜에서 발생하는 문제들(비연결성, 비신뢰성, 프로그램 구분)을 해결할 수 있는 프로토콜이다.

먼저 인터넷 프로토콜 스택을 확인해보자.

인터넷 프로토콜 스택의 4계층

다음과 같이 4계층으로 구성되어 있으며, IP 계층 위에 TCP, UDP 전송 계층이 존재하고

그 위에 애플리케이션 계층 - HTTP, FTP 가 존재한다.

 

위의 그림만 보면  4계층이 매우 추상적으로 다가온다.

좀 더 상세하게, 한 PC 내에서 각 계층이 어떤식으로 나타나는지 살펴보자

프로토콜 계층

순서는 다음과 같다.

1. 어플리케이션 프로그램이 전송 데이터를 생성

2. SOCKET 라이브러리를 통해 OS 계층에 데이터를 전달

3. OS 계층에서 전송 데이터를 포함한 TCP 정보 생성

4. TCP 정보 + 전송 데이터를 포함한 IP 패킷을 생성

5. LAN 카드를 통해서 인터넷으로 전달 -> 이 때, 패킷에 Ethernet frame이 포함되어 전송된다.

 

이때 TCP 정보는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 담고있다.

 

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)로서 다음과 같은 특징이 있다.

 

  • 연결 지향 - TCP 3 way handshake (가상 연결)
  • 데이터 전달 보증 
  • 순서 보장

더 많은 기능을 갖고 있긴 하지만 웹 어플리케이션을 구축하는데 이해하는데는 이정도면 충분하다.

 

TCP 3 way handshake (가상 연결)

 

연결 과정은 다음과 같다.

  1. Client -> Server
    SYN 메세지를 보낸다.
  2. Server -> Client
    SYN + ACK 전송
  3. Client -> Server
    ACK 전송
    (요즘에는 최적화되어서 여기서 바로 데이터 + ACK를  전송할 수 있다.)
  4. 서로 데이터 전송

*참고

SYN: 접속 요청

ACK: 요청 수락

 

*TCP 연결은 Client 와 Server 사이의 Node들이 물리적으로 연결되어 있는지는 관심이 없고 논리적으로만 연결되어 있다고 가정하는 것이다.

 

데이터 전달 보증

  1. Client -> Server
    데이터 전송
  2. Server -> Client
    데이터 잘 전달 되었는지 응답 

 

순서 보장

  1. Client -> Server
    패킷1, 패킷2, 패킷3 순서로 전송
    But, Server에 패킷1, 패킷3, 패킷2 순서로 도착 (순서 꼬임)
  2. Server -> Client
    패킷 2번(순서가 잘못된 데이터)부터 다시 보내라고 Client에게 전달

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)

  • 기능이 거의 없어서 하얀 도화지에 비유한다.
  • TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 정리
    • IP와 거의 같다. + PORT + 체크섬 정도만 추가된다.
    • 애플리케이션에서 따로 추가 작업이 필요하다.
  • TCP는 데이터의 양도 많고 3 way handshake 등으로 속도가 느리므로
    더 성능 최적화가 필요할 때 사용한다.
  • 기존에는 데이터가 깨져도 상관 없는 영상 스트리밍 등의 목적으로만 사용되고 나머지는 전부 TCP프로토콜을 이용하는 것이 정석이었다.
  • 최근에는 UDP가 각광을 받고 있다. (HTTP 3.0 에서도 TCP가 아닌 UDP를 사용한다.)

 

출처: 인프런, 모든 개발자를 위한 HTTP 웹 기본 지식, 김영한

'Web' 카테고리의 다른 글

(22.11.14) HTTP(6) - 헤더(2)  (0) 2022.11.14
(22.11.14) HTTP(6) - 헤더(1)  (0) 2022.11.14
(22.10.29)HTTP(5) - 상태코드  (0) 2022.10.29
(22.10.26) HTTP(3) - 메서드 활용  (0) 2022.10.27
(22.10.04) HTTP(1) - IP  (1) 2022.10.04