TCP/IP는 인터넷에서 데이터를 주고받기 위한 프로토콜 스택(규칙 집합)을 의미한다.
Transmission Control Protocol (TCP)과 Internet Protocol (IP)를 중심으로 설계된 네트워크 모델로 전 세계 인터넷의 기반이 되는 표준이다.
TCP/IP의 주요 특징
계층적 구조 : 네트워크 통신을 단계별로 나누어 각 계층이 특정 역할을 담당한다.
표준화 : 전 세계 네트워크에서 통일된 방식으로 데이터를 전송할 수 있다.
확장성 : 네트워크 크기와 복잡성에 관계없이 안정적으로 작동한다.
TCP/IP의 계층 구조
응용 계층 (Application Layer)
전송 계층 (Transport Layer)
인터넷 계층 (Internet Layer)
네트워크 액세스 계층 (Network Access Layer)
예시) 사용자가 브라우저에서 웹 페이지를 요청

TCP(Transmission Control Protocol)는 TCP/IP 스택의 전송 계층(Transport Layer)에 속하며 신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜(Connection-Oriented Protocol)이다.
TCP의 주요 특징
TCP 헤더 구조 (20~60 바이트)
| 필드 | 설명 |
|---|---|
| Sequence Number | 데이터의 순서를 보장하기 위한 시퀀스 번호. |
| Acknowledgment Number | 수신 데이터에 대한 확인 응답을 위한 번호. |
| Flags | SYN, ACK, FIN, RST 등 상태를 나타내는 플래그. |
| Window Size | 흐름 제어를 위한 수신 버퍼 크기. |
| Checksum | 데이터 오류 검사를 위한 필드. |
| Options** | 선택적으로 추가할 수 있는 기능(예: 타이밍 정보). |
TCP의 3-Way Handshake (연결 설정)
TCP는 클라이언트와 서버 간의 연결을 설정하기 위해 3단계 과정을 수행한다.
이 과정은 양방향 데이터 전송 준비를 확인하고 초기 시퀀스 번호(ISN)를 교환한다.
상태 정의 (TCP 플래그 상태)
| 상태 | 설명 |
|---|---|
| CLOSED | 연결이 닫혀 있는 초기 상태. |
| LISTEN | 서버가 클라이언트 연결 요청을 기다리는 상태. |
| SYN_SENT | 클라이언트가 SYN 패킷을 전송한 상태. |
| SYN_RECEIVED | 서버가 클라이언트의 SYN을 받고 ACK로 응답한 상태. |
| ESTABLISHED | 클라이언트와 서버 간 연결이 성립된 상태로 데이터 송수신이 가능. |
3-Way Handshake 과정
Client ----[SYN, seq=1000]----> Server
Client <----[SYN-ACK, seq=2000, ack=1001]---- Server
Client ----[ACK, seq=1001, ack=2001]----> Server

TCP의 4-Way Handshake (연결 종료)
TCP는 데이터 전송 완료 후 연결을 해제하기 위해 4-Way Handshake를 수행한다.
이 과정은 클라이언트와 서버가 각각 연결 종료를 요청하고 확인하는 4단계로 구성된다.
상태 정의 (TCP 플래그 상태)
| 상태 | 설명 |
|---|---|
| ESTABLISHED | 데이터 송수신 중인 상태. |
| FIN_WAIT_1 | 클라이언트가 연결 종료 요청(FIN)을 보낸 상태. |
| FIN_WAIT_2 | 클라이언트가 서버의 ACK를 받고 대기 중인 상태. |
| CLOSE_WAIT | 서버가 클라이언트의 FIN을 수신하고 연결 종료를 준비 중인 상태. |
| LAST_ACK | 서버가 FIN을 전송하고 ACK를 기다리는 상태.* |
| TIME_WAIT | 연결이 닫힌 후 잔여 패킷 처리를 위해 대기하는 상태(클라이언트). |
| CLOSED | 연결 종료 완료. |
4-Way Handshake 과정
Client ----[FIN, seq=1000]----> Server
Client <----[ACK, seq=2000, ack=1001]---- Server
Client <----[FIN, seq=2000]---- Server
Client ----[ACK, seq=1001, ack=2001]----> Server

TCP의 사용 사례
웹 브라우징: HTTP/HTTPS.
파일 전송: FTP.
이메일: SMTP, IMAP.
UDP(User Datagram Protocol)는 연결 없이 데이터를 전송하는 비연결형 프로토콜(Connectionless Protocol)로 TCP와 달리 빠른 데이터 전송을 중시한다.
UDP의 주요 특징
UDP 헤더 구조 (8 바이트)
UDP 헤더는 매우 간단하며 필수적인 데이터 전송 정보만 포함되어 있다.
| 필드 | 설명 |
|---|---|
| Source Port | 송신자의 포트 번호. |
| Destination Port | 수신자의 포트 번호. |
| Length | 전체 UDP 패킷의 길이. |
| Checksum | 데이터 오류 검사를 위한 필드. |
UDP의 동작 원리
데이터를 전송하기 전에 별도의 연결 과정을 거치지 않는다.
송신자는 수신자의 IP 주소와 포트 번호만 알고 있으면 데이터를 전송할 수 있다.
UDP의 사용 사례
실시간 애플리케이션: VoIP(인터넷 전화), 스트리밍.
온라인 게임: 빠른 반응 속도가 필요한 네트워크 게임.
방송: 멀티캐스트 또는 브로드캐스트 데이터 전송.
TCP와 UDP의 차이점
| 특징 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결형 (Connection-Oriented) | 비연결형 (Connectionless) |
| 헤더 크기 | 20~60 바이트 | 8 바이트 |
| 데이터 전송 방식 | 스트림 기반 (연속적인 데이터 흐름 처리) | 데이터그램 기반 (개별 패킷 처리) |
| 연결 설정 | 3-Way Handshake로 연결 설정 | 연결 과정 없음 |
| 오류 복구 | 손실된 데이터 재전송 | 손실된 데이터 복구하지 않음 |
| 데이터 신뢰성 | 신뢰성 보장 | 보장하지 않음 |
| 데이터 순서 | 전송 순서 보장 | 순서를 보장하지 않음 |
| 전송 속도 | 느림 | 빠름 |
| 용도 | 웹, 파일 전송, 이메일 | 스트리밍, VoIP, 온라인 게임 |
TCP/IP와 UDP의 관계
TCP/IP는 프로토콜 스택 전체를 의미하며 전송 계층에서 TCP와 UDP가 각각의 역할을 담당한다.
TCP는 신뢰성과 안정성을 중시하고 UDP는 속도와 효율성을 중시한다.
네트워크 애플리케이션의 요구사항에 따라 TCP 또는 UDP를 선택한다.
결론
TCP는 정확성과 안정성이 UDP는 속도와 실시간성이 중요한 애플리케이션에 적합하다.
참고 : https://www.simplilearn.com/tutorials/cyber-security-tutorial/what-is-tcp-ip-model
https://afteracademy.com/blog/what-is-a-tcp-3-way-handshake-process/