CS/Network

TCP, UDP

oxdjww 2023. 10. 2. 16:31
728x90
반응형

Intro

본 포스팅에서는 전송계층 프로토콜인 TCP, UDP 에 대해 다룬다.

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

인터넷 상에서 통신을 주고 받을 때, 기본적으로 이 네 계층을 통해서 통신을 주고 받는다고 볼 수 있다.

통신 Overview

한 clinet가 "Hello, world!"라는 메시지를 인터넷 망에서 보내려고 할 때, 이 data payload가 각 계층을 지나간다.
이 때, 각 계층을 통과하며 header가 encapsulate된다.

  • application layer에서는 socket library를 통해 전달된다.
  • 전송 계층에서는 TCP/UDP 등의 header를 붙인다.
  • 인터넷 계층에서는 IP header를 붙인다.
  • 최종적으로 네트워크 인터페이스 계층에서는 MAC 주소를 기반으로 ethernet header가 붙으며 패킷이 전송된다.

About IP addr
About MAC addr


이 때 언급된 TCP와 UDP에 대해 자세히 알아보자.

TCP

TCP는 전송 제어 프로토콜(Transmission Control Protocol)의 약자이다.
TCP 패킷을 Segment라고도 부른다.
다음과 같은 특징을 가진다.

  • 연결지향 : TCP 3 way handshake을 통해 연결지향.
  • 데이터 전달 보증 : 신뢰성 있는 데이터 전송을 위해 데이터가 전달되기 위해 다양한 알고리즘을 사용하여 보장한다.
  • 순서 보장 : 보낸 순서대로 데이터가 전송될 수 있도록 한다.
  • 신뢰할 수 있는 프로토콜 : 다양한 기능을 제공하여 신뢰성을 보장해주는 프토토콜이다.
  • 현재는 대부분의 통신에서 TCP를 사용한다.

TCP 3 way handshake



처음 통신을 할 때, client는 server에게 SYN packet을 보낸다.
SYN packet을 받은 서버는 SYN, ACK packet을 client에게 전송하여 SYN packet을 받았다는 뜻을 전달한다.
SYN, ACK packet을 수신한 client는 다시 server에게 수신한 SYN packet에 대한 ACK packet을 보내 SYN packet을 받았다는 뜻을 전달한다.
(요새는 client가 마지막 ACK packet을 보낼 때 data를 전송하기도 한다.)

이렇게 상호간의 3 way 통신을 통해 연결(가상 연결)을 진행한다.

| 실제로 물리적으로 연결된 것은 아니고, 논리적으로 연결 되었다는 뜻이다.

중간에 패킷이 유실되어 수신하지 못 하면, 서버가 다운됐다는 뜻으로 해석하여 연결이 되지 않는다.

TCP의 신뢰성 있는 데이터 전달


  • 데이터 전달 보증

TCP 기반 통신에서 데이터를 수신하면 데이터를 잘 수신했다는 ACK packet을 받음으로서 데이터가 잘 전송되었음을 확인할 수 있다.

  • 순서 보장

TCP 기반 통신에서 데이터를 송신할 때, 데이터의 순서가 잘못되면 이 순서를 보장할 수 있도록 재전송이 이루어진다.
이를 TCP retransmission이라 부른다.
이를 판단할 수 있는 identifier로 패킷 TCP header의 SEQ Number가 활용된다.

UDP

UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)의 약자이다.
UDP 패킷을 Datagram이라고도 부른다.
다음과 같은 특징을 가진다.

  • 하얀 도화지에 비유된다.(기능이 거의 없음, 가벼움)
  • 연결 지향 X : 3 way handshake가 없다.
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
  • Port 정보와 Checksum정도의 기능만 있다. (TCP에도 존재함) Port를 통해 어느 process(application)으로 패킷이 전송되어야 하는지 판단할 수 있다.
  • Application layer딴에서 추가적인 작업을 요한다.
  • UDP에 신뢰성을 보장할 수 있는 QUIC Protocol이 요새 각광을 받고 있다.

port에 대한 자세한 내용은 아래 포스팅을 참고하길 바란다.
About Port


감사합니다.

Ref

모든 개발자를 위한 HTTP 웹 기본 지식, Infleran 김영한 강사님

728x90
반응형

'CS > Network' 카테고리의 다른 글

DNS  (0) 2023.10.02
Port  (0) 2023.10.02
About ARP  (0) 2023.09.19
About MAC Address  (0) 2023.09.19
About IP Address  (0) 2023.09.19