Intro
본 포스팅에서는 전송계층 프로토콜인 TCP, UDP 에 대해 다룬다.
인터넷 프로토콜 스택의 4계층
인터넷 상에서 통신을 주고 받을 때, 기본적으로 이 네 계층을 통해서 통신을 주고 받는다고 볼 수 있다.
통신 Overview
한 clinet가 "Hello, world!"라는 메시지를 인터넷 망에서 보내려고 할 때, 이 data payload가 각 계층을 지나간다.
이 때, 각 계층을 통과하며 header가 encapsulate된다.
- application layer에서는 socket library를 통해 전달된다.
- 전송 계층에서는 TCP/UDP 등의 header를 붙인다.
- 인터넷 계층에서는 IP header를 붙인다.
- 최종적으로 네트워크 인터페이스 계층에서는 MAC 주소를 기반으로 ethernet header가 붙으며 패킷이 전송된다.
이 때 언급된 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 김영한 강사님
'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 |