TCP/IP 4 Layer
현대 네트워크 통신의 기반이 되는 프로토콜로, 이론적 모델인 OSI 7계층과 달리 실무적 구현과 효율성을 중시하여 설계되었다.
모델 구조 및 비교
Section titled “모델 구조 및 비교”OSI 7계층이 통신 과정을 논리적으로 세분화했다면, TCP/IP 4계층은 이를 실제 소프트웨어와 하드웨어 처리에 맞춰 단순화한 구조다.
- OSI 7계층: 국제 표준화 기구(ISO)에서 개발한 네트워크 프로토콜 스택 모델로, 네트워크 통신을 기능별로 7개의 계층으로 나눈 것
- TCP/IP 4계층: 실제 구현을 위해 만들어진 모델로, OSI 7계층을 이론적인 설계를 위해 만들어진 모델
OSI 7계층의 계층들을 TCP/IP 4계층에 맞게 재배치하면 아래와 같다.(OSI 7계층과 1:1 대응되지는 않음)
| TCP/IP 계층 | OSI 7계층 대응 | PDU (전송 단위) | 주요 역할 | 주요 프로토콜 |
|---|---|---|---|---|
| Application | 5, 6, 7 계층 | Data / Stream | 응용 프로그램 간의 데이터 통신 및 포맷 결정 | HTTP, DNS, FTP, SSH |
| Transport | 4 계층 | Segment (TCP) / Datagram (UDP) | 호스트의 프로세스 간 데이터 전송(End-to-End), 오류 제어 및 흐름 제어 | TCP, UDP |
| Internet | 3 계층 | Packet | 논리적 주소(IP) 지정, 라우팅을 통한 경로 설정 | IP, ICMP, ARP |
| Network Interface | 1, 2 계층 | Frame | 물리적 주소(MAC) 지정, 하드웨어 간 신호 전송 | Ethernet, Wi-Fi, DSL |
- Application Layer (응용 계층)
- 사용자와 가장 가까운 계층으로, 서버와 클라이언트 간의 실제 응용 서비스 데이터를 처리
- 데이터의 형식을 정의하거나 압축, 암호화 등의 처리
- 소켓(Socket) 인터페이스를 통해 하위 계층인 전송 계층과 통신
- 전송 단위인 Stream은 데이터의 시작은 있으나 끝은 정확하게 정의할 수 없고, 애플리케이션에서 정의하게 됨
- 전송 데이터가 크면 여러 개의 Segment로 분할되어 전송됨(= Segmentation)
- Transport Layer (전송 계층)
- 송신자와 수신자의 논리적 연결(Process-to-Process)을 담당
- 포트(Port) 번호를 통해 어떤 애플리케이션으로 데이터를 전달할지 식별
- 데이터의 무결성을 보장(TCP)하거나, 속도를 우선시(UDP)하는 전송 방식 결정
- MSS(Maximum Segment Size)를 기준으로 데이터 분할
- Internet Layer (인터넷 계층)
- 네트워크 간의 데이터 전송(Inter-networking) 담당
- IP 주소를 사용하여 목적지 호스트까지의 최적 경로를 탐색(Routing)
- 데이터가 올바르게 도착했는지 보장하지 않는 비연결성(Connectionless) 특징
- Network Interface Layer (네트워크 인터페이스 계층)
- OSI의 물리 계층과 데이터 링크 계층을 포함
- MAC 주소를 사용하여 인접한 노드 간의 데이터 전송 담당
- LAN 카드와 같은 하드웨어 제어 및 케이블을 통한 물리적 신호 전송 수행
데이터 캡슐화 (Encapsulation)
Section titled “데이터 캡슐화 (Encapsulation)”데이터가 상위 계층에서 하위 계층으로 내려갈 때마다 해당 계층의 헤더(정보)가 붙는 과정을 캡슐한다.(반대는 역캡슐화)
flowchart TD subgraph Sender[송신자: 캡슐화] A1[User Data] -->|Application Header 추가| A2[Data] A2 -->|TCP Header 추가| B[Segment] B -->|IP Header 추가| C[Packet] C -->|Ethernet Header/Trailer 추가| D[Frame] end
subgraph Receiver[수신자: 역캡슐화] D2[Frame] -->|Ethernet Header 제거| C2[Packet] C2 -->|IP Header 제거| B2[Segment] B2 -->|TCP Header 제거| A3[Data] A3 -->|데이터 처리| A4[User Data] end
D -->|Physical Transmission| D2TCP/IP 통신 과정에서 전송되는 데이터는 최종적으로 여러 계층의 헤더 정보를 포함한 형태로 전달된다.
- *IP 패킷 헤더----- 버전 / 헤더 길이 / 서비스 유형 / 총 데이터그램 길이(바이트)----- 패킷 ID / 플래그 / 플래그 오프셋----- 유지 시간(TTL) / 상위 계층 프로토콜 / 헤더 체크섬----- 발신지 IP 주소----- 목적지 IP 주소--------- *TCP 세그먼트 헤더------------- 발신지 포트 / 목적지 포트------------- TCP 순서 번호------------- 편승(piggback) 확인 응답------------- 헤더 길이 / 예약어 / URG / ACK / PSH / RST / SYN / FIN / 윈도우 크기------------- TCP 체크섬------------- 긴급 포인터----------------- *TCP 데이터 조각-------------------- HTTP 메시지헤더 구조와 오버헤드
Section titled “헤더 구조와 오버헤드”데이터가 전송될 때 실제 내용(Payload) 외에 각 계층의 제어 정보가 헤더로 붙어, 작은 데이터를 보낼 때도 헤더의 크기는 고정적이므로, 데이터가 너무 작으면 배보다 배꼽이 더 큰 오버헤드가 발생할 수 있다.
- Ethernet Header: 목적지 MAC, 발신지 MAC, 이더타입 등 (14 bytes)
- IP Header: 버전, 헤더 길이, TTL, 프로토콜, 발신지 IP, 목적지 IP 등 (20 bytes 이상)
- TCP Header: 발신지 포트, 목적지 포트, 시퀀스 넘버, ACK 넘버, 윈도우 크기, 플래그(SYN, ACK 등) (20 bytes 이상)
데이터 분할과 MTU/MSS
Section titled “데이터 분할과 MTU/MSS”애플리케이션의 데이터(Stream)는 물리적 네트워크의 한계로 인해 한 번에 전송될 수 없으므로 적절한 크기로 쪼개서 전송하게 된다.
- MTU(Maximum Transmission Unit)
- 네트워크 인터페이스(2계층)에서 한 번에 보낼 수 있는 최대 데이터 크기(이더넷 환경에서 기본값은 보통 1500 bytes)
- IP 패킷의 크기가 MTU보다 크면 IP 계층에서 단편화(Fragmentation) 발생
- 단편화 발생 시 라우터의 부하를 높이고 패킷 유실 시 전체 재전송을 유발하여 성능 저하의 원인이 됨
- MSS(Maximum Segment Size)
- TCP(4계층)에서 전송할 수 있는 최대 페이로드 크기
- IP 단편화를 방지하기 위해 TCP 연결 수립(3-way handshake) 과정에서 서로의 MSS를 교환하고 합의
소켓을 통한 HTTP 통신 흐름
Section titled “소켓을 통한 HTTP 통신 흐름”웹 브라우저(클라이언트)가 웹 서버에 요청을 보내고 응답을 받는 과정은 OS가 제공하는 소켓 인터페이스를 통해 수행된다.
sequenceDiagram participant Client as Client (Browser) participant OS_C as Client OS (TCP Stack) participant Server as Server (Web Server) participant OS_S as Server OS (TCP Stack) Note over Server, OS_S: 1. 소켓 생성, 바인딩(Port 80), 리스닝 Client ->> OS_C: 2. 소켓 생성 및 연결 요청 OS_C ->> OS_S: 3. TCP 3-Way Handshake (SYN) OS_S -->> OS_C: (SYN+ACK) OS_C ->> OS_S: (ACK) Note over Client, Server: 논리적 연결 수립 완료 Client ->> OS_C: 4. HTTP 요청 데이터 쓰기 (Write) OS_C ->> OS_S: 5. 데이터 전송 (Segment) OS_S ->> Server: 6. 데이터 읽기 (Read) Note over Server: 7. 요청 처리 및 응답 생성 Server ->> OS_S: 8. HTTP 응답 데이터 쓰기 (Write) OS_S ->> OS_C: 9. 데이터 전송 (Segment) OS_C ->> Client: 10. 데이터 읽기 (Read) Note right of Client: 11. 렌더링 또는 처리 Client ->> OS_C: 12. 연결 종료 요청 (Close) OS_C ->> OS_S: 13. TCP 4-Way Handshake- 서버 준비: 서버는 소켓을 생성하고 포트(80)에 바인딩(Bind)하여 클라이언트의 연결을 기다리는 리슨(Listen) 상태로 대기
- 클라이언트 연결: 클라이언트는 서버의 IP와 포트로 연결(Connect)을 시도하며, 이 과정에서 TCP 3-way Handshake가 발생
- 데이터 송수신: 연결이 수립되면 클라이언트는 요청 데이터를 소켓에 쓰고(Write), OS는 이를 패킷으로 만들어 전송 -> 서버는 소켓에서 데이터를 읽고(Read) 처리
- 연결 종료: 데이터 교환이 끝나면 소켓을 닫고(Close), TCP 4-way Handshake를 통해 리소스를 정리
- HTTP/1.1 Keep-Alive의 경우 연결을 유지하여 여러 요청을 처리할 수 있음