Transport Layer - TCP vs UDP

Numberbeen·2022년 12월 28일
0

DevOps Bootcamp

목록 보기
18/30

IP Packet 의 한계

-비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

-비신뢰성

  • 중간에 패킷이 사라질 수 있음
  • 패킷의 순서를 보장할 수 없음

네트워크 계층 에 이러한 문제를 보완할 수 있는 계층이 바로 전송 계층 (Transport Layer) 이다.

채팅 프로그램을 예시로 메시지를 보낼 때 어떤 일이 일어나는지 보자.

  1. HTTP 메시지가 생성되면 Socket을 통해 저장된다.

프로그램이 네트워크에서 데이터를 송수신할 수 있도록, "네트워크 환경에 연결할 수 있게 만들어진 연결부" 가 바로 네트워크 소켓(Socket) 이다.

  1. IP 패킷을 생성하기 전 TCP 세그먼트를 생성한다.

이렇게 생성된 TCP/IP 패킷은 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임워크에 포함되어 서버로 전송된다.

TCP/IP 패킷 에 대해 자세히 적어보자면
TCP 세그먼트에서 IP 패킷의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 포함.

TCP 특징

전송 제어 프로토콜 (Transmission Control Protocol)

  • 연결 지향 - TCP 3 way handshake (가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

TCP 는 같은 계층에 속한 UDP에 비해 상대적으로 신뢰할 수 있는 프로토콜 이다.

TCP 3 way handshake

TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 3 way handshake 를 사용하는 연결지향형 프로토콜 이다.

연결 방식은 다음과 같다.

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN가 설정된 패킷을 발송하고 클라이언트가 다시 ACK 로 응답하기를 기다린다.
  3. 클라이언트가 서버에게 ACK를 보내면 이 이후로부터 연결이 성립되며 데이터를 전송할 수 있다.

만약 서버가 꺼져있다면 클라이언트가 SYN 을 보내고 서버에서 응답이 없기 때문에 데이터를 보내지 않는다.

현재에는 최적화가 이루어져 3번 ACK를 보낼때 데이터를 함께 보내기도 한다.

  • SYN은 Synchronize, ACK는 Acknowledgment의 약자

TCP 는 데이터 전송이 성공적으로 이루어진다면 이에 대한 응답을 돌려주기 때문에 IP 패킷의 한계인 비연결성을 보완할 수 있다.

만약 패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청할 수 있다.
이를 통해 IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완할 수 있습니다.

UDP 특징

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

  • 하얀 도화지에 비유( 기능이 거의 없음)
  • 비 연결지향 - TCP 3 way handshake ❌
  • 데이터 전달 보증 ❌
  • 순서 보장 ❌
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 신뢰성보다는 연속성이 중요한 서비스(e.g. 실시간 스트리밍)에 자주 사용됨.

UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다.

*체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해, 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법.

앞서 TCP 특징과 비교해 보면 신뢰성은 낮다 하지만 3 way handshake 방식을 사용하지 않기 때문에 TCP와 비교해 빠른 속도를 보장한다.

HTTP3 는 UDP 를 사용하며 이미 여러 기능이 구현된 TCP 보다는 하얀 도화지처럼 커스터마이징이 가능하다.

TCP vs UDP

profile
내기 이해한 것을 보관하는 곳

0개의 댓글