TCP (Transmission Control Protocol)
TCP 프로토콜은 연결 지향형 프로토콜로, 데이터 순서 보장, 재전송, 흐름 제어, 혼잡 제어 등을 제공한다.
3-way handshaking을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
UDP (User Datagram Protocol)
UDP 프로토콜은 비연결 지향형 프로토콜로, 데이터를 빠르게 전송하는데 초점을 둔다.
TCP vs UDP
| TCP | UDP | |
| 신뢰성 | 높음 | 낮음 |
| 순서 보장 | 보장함 | 보장하지 않음 |
| 재전송 | 지원 | 미지원 |
| 흐름 제어 | 지원 | 미지원 |
| 혼잡 제어 | 지원 | 미지원 |
| 속도 | 상대적으로 느림 | 빠름 |
| 사용 | HTTP, FTP, SSH | DNS, DHCP, 스트리밍 |
3-way handshaking
TCP는 데이터를 주고받기 전에 연결을 설정하는데, 이 과정을 3-way handshaking이라고 한다.
Client Server
| -------- SYN ------------> |
| <------ SYN + ACK -------- |
| -------- ACK ------------> |
1. SYN
SYN은 클라이언트가 서버에 연결 요청을 보내는 과정으로, 이 과정을 거치면 클라이언트는 CLOSED에서 SYN_SENT로, 서버는 LISTEN 상태로 바뀐다.
2. SYN + ACK
클라이언트의 요청을 수락한 후, 서버도 클라이언트에 연결 요청을 보낸다.
이 과정을 거치면 서버의 상태는 LISTEN에서 SYN_RECEIVED로 바뀐다.
3. ACK
요청을 수신한 클라이언트에서 서버의 응답을 확인한다.
클라이언트는 SYN_SENT에서 ESTABLISHED로, 서버는 SYN_RECEIVED에서 ESTABLISTED로 바뀐다.
4-way handshaking
TCP 연결을 종료할 때는 4-way handshaking을 사용한다.
Client Server
| -------- FIN ------------> |
| <-------- ACK ------------ |
| <-------- FIN ------------ |
| -------- ACK ------------> |
1. FIN
클라이언트에서 서버로 연결 종료 요청을 전송한다.
클라이언트 상태는 ESTABLISHED에서 FIN_WAIT_1로, 서버는 ESTABLISHED를 유지한다.
2. ACK
서버에서 종료 요청을 확인한다.
클라이언트 상태는 FIN_WAIT_1에서 FIN_WAIT_2로, 서버 상태는 ESTABLISHED에서 CLOSE_WAIT로 바뀐다.
3. FIN
서버에서 더 이상 보낼 데이터가 없으면 종료 요청을 보낸다.
서버 상태가 CLOSE_WAIT에서 LAST_ACK로 바뀐다.
4. ACK
클라이언트가 서버의 종료 요청을 확인한다.
클라이언트는 FIN_WAIT_2 -> TIME_WAIT -> CLOSED로, 서버는 LAST_ACK에서 CLOSED로 바뀐다.
* TIME_WAIT는 클라이언트가 마지막 ACK를 보낸 후, 아래와 같은 이유로 인해 일정시간을 기다리는 것이다.
1. 마지막 ACK가 유실되었을 경우, 재전송을 위해
2. 이전 연결의 지연된 패킷이 새 연결에 섞이는 것을 방지하기 위해
흐름 제어
데이터 전송 과정에서, 송신자와 수신자의 처리 속도가 다를 수 있다.
수신자가 더 빠르다면 문제가 없겠지만, 송신자의 처리 속도가 더 빠를 경우, 수신자의 버퍼가 넘쳐 패킷이 유실될 수 있다.
이를 방지하기 위해 수신자가 처리할 수 있을 정도로 패킷을 보내도록 조절하는 것이 흐름 제어이다.
Sliding Window
Sliding Window는 수신자가 설정한 윈도우 크키만큼 송신자가 확인 없이 세그먼트를 전송하고, 데이터 흐름을 동적으로 조절하는 기법이다.
Stop-and-wait
송신자에서 한개의 세그먼트를 전송하고, 수신자가 세그먼트를 받았다는 응답을 보낼때까지 대기하는 기법이다.
혼잡 제어
혼잡 제어는 네트워크가 감당하기에 많은 데이터를 빠르게 보내 네트워크가 혼잡해지는 것을 방지하는 기법이다.
Slow Start
Slow start는 작은 크기의 데이터부터 시작해, 크기를 2^n배로 점차 늘려가며 데이터를 전송하는 기법이다.
Congestion Avoidance
미리 정해진 임계값에 도달하면 패킷 손실을 예방하기 위해 전송 속도를 선형으로 증가시키는 기법이다.
포트 번호 체계
포트 번호는 하나의 IP 주소 (== 컴퓨터)에서 실행 중인 프로세스를 식별하기 위한 체계이다.
| 범위 | 이름 | 설명 |
| 0 ~ 1023 | Well-known Port | 국제 인터넷 표준화 기구가 주요 인터넷 서비스 및 프로토콜을 위해 지정한 표준 포트 |
| 1024 ~ 49151 | Registered Port | 특정 기업, 기관, 개발자가 애플리케이션을 위해 임의로 등록한 포트 |
| 49152 ~ 65535 | Dynamic / Ephemeral Port | 클라이언트가 서버에 접속할 때 OS에서 임시로 할당하는 포트 |
NAT
NAT는 하나의 공인 IP에서 여러개의 사설 IP를 사용할 수 있도록 하는 기법이다.
일반적으로 공유기를 사용하는 환경에서, 공유기가 공인 IP를 받고, 공유기에 연결된 장치는 사설 IP를 받게 된다.
다만, 인터넷을 사용하기 위해서는 사설 IP가 아닌 공인 IP를 사용해야 하는데, 이를 변환해주는 것이 NAT이다.
공유기에 연결된 장치에서 인터넷에 접근하면, 공유기는 NAT를 통해 사설 IP를 공인 IP로 변환한다.
'공부 > CS 스터디' 카테고리의 다른 글
| [CS 스터디] 5주차 OSI 1 ~ 3 계층 (0) | 2026.05.25 |
|---|---|
| [CS 스터디] 4주차 동기화, 메모리 (0) | 2026.05.19 |
| [CS 스터디] 3주차 CPU 스케줄링과 IPC (0) | 2026.05.10 |
| [CS 스터디] 2주차 커널 동작과 인터럽트 (0) | 2026.05.04 |
| [CS 스터디] 1주차 프로세스와 스레드 (0) | 2026.04.26 |