
이전에 살펴본 네트워크 계층은 한 번에 하나의 통신만 처리할 수 있었고,
패킷의 순서를 보장하거나 유실에 대응하는 기능이 부족했다.
이제 이러한 한계를 보완하는 전송 계층에 대해 알아보자.
주요 단위 : 세그먼트
주요 구성요소 : TCP/UDP
🔍 주요 특징
1. 여러 애플리케이션 간의 동시 통신 지원
2. 패킷의 순서 및 신뢰성 보장
3. 오류 검출 및 재전송 기능 제공
TCP란?
패킷의 전달 과정에서 순서를 보장하고 유실되지 않도록 하는 통신 규약
패킷 안에 세그먼트를 담아서, 주고 받으며 로직 처리
지속적으로 무결성 확인
사용사례 : 웹 페이지(HTTP/HTTPS) , 이메일, 파일 전송, SSH 등등...
세그먼트란?
🌟 TCP/UDP의 데이터 전달 단위
주요 구성
- Port : 소스/목적
- Sequence / Acknowledgement Number : 통신 주체끼리 데이터 주고 받았는지 확인하는 용도
- Flags : 세그먼트의 목적 등을 정의(ACK,SYN,FIN)
- Window Size : 세그먼트를 만든 주체가 얼마만큼의 데이터를 받을지 전달
- Urgent Pointer : 세그먼트의 중요도 설정 (먼저 처리해야 하는 세그먼트는 무엇인가 등등)
- 기타 (checksum 등등)
- 실제 데이터

💻 port ~ CheckSum 까지를 TCP 헤더라고 부른다.
🧑 세그먼트는 그 밑 계층에 있는 3계층의 패킷에 담기게 된다.
🧑 패킷은 프레임에 담기게 된다.
🎯 클라이언트와 서버 간에 세션을 먼저 설정한 뒤, 데이터를 주고받는다. 클라이언트는 여러 연결을 처리하기 위해 동적으로 할당되는 임시 포트 번호를 사용하고 , 서버는 고정된 서비스 포트 번호를 사용한다. 연결 설정 과정은 3-Way Handshake로 구성한다.
3-Way Handshake

SYN
클라이언트가 서버에 연결 요청을 보낼 때, 자신의 초기 시퀀스 번호(CS)를 포함한 SYN 패킷을 전송한다.
[클라이언트] → [서버]
(CS = 13)
SYN-ACK
서버는 클라이언트의 SYN에 응답하면서, 자신의 초기 시퀀스 번호(SS)를 포함한 SYN과
클라이언트의 시퀀스 번호 + 1 을 ACK로 포함한 SYN-ACK 패킷을 보낸다.
[서버] → [클라이언트]
(SS = 4431, ACK = 14)
ACK
클라이언트는 서버의 시퀀스 번호(SS)에 +1 (4431 + 1 = 4432) 한 값을 ACK로 설정하여 ACK 패킷을 전송한다.
클라이언트 → 서버
(CS = 14, ACK = 4432)
- 빠르고 간단하게 데이터를 주고 받음
- Connectionless
> 데이터의 무결성,순서,전달여부 체크
> 패킷이 순서대로 오지 않거나, 중복되거나, 아예 전달되지 않을 수 있음
> 대신에 빠르고 간단함
- 주요 사용 사례
> 스트리밍
> 보이스톡
> 온라인게임
패킷 하나 정도 유실해도 상관없고, 빠른 처리를 요구할 때 주로 쓰인다.

UDP의 세그먼트는 TCP에 비해 훨씬 간단한게 보인다.
| 특징 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결지향 (Connection-Oriented) | 비연결지향 (Connectionless) |
| 통신 방식 | 양방향 (Full-Duplex) 지원 | 단방향 구조에 가까움 (응답 구현 가능) |
| 신뢰성 | 높음 (재전송, 순서 보장 등) | 낮음 (신뢰성 보장 X) |