개요
- TCP/IP 4계층 모델을 공부하며 작성한 글입니다.
- 계층별 역할과 해당하는 프로토콜에 대해 알아봅니다.
핵심 용어
- TCP/IP: 네트워크를 통해 데이터를 전송하는 데 일반적으로 사용되는 표준 프로토콜 모음.
- MAC주소: 통신 기기의 LAN 카드 식별 번호. 물리적 주소이다.
- PDU: Protocol Data Unit. 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 의미한다.
주요 개념
- TCP/IP 계층 구조: TCP/IP는 네트워킹 범위에 따라 네 개의 추상화 계층인 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층으로 구성되며 각 계층은 데이터 전달을 위해 특정한 역할을 수행한다.
- 3-way handshake & 4-way handshake: 핸드셰이크는 클라이언트와 서버 간의 연결을 설정하는 프로세스를 뜻하며, 연결 성립 과정에서는 3-way handshake를, 연결 해제 과정에서는 4-way handshake 작업을 진행한다.
- 패킷 교환 방식: 패킷을 이용해 목적지로 데이터를 전달하는 방법. 가상 회선 방식과 데이터그램 방식으로 나뉜다.
- 캡슐화(Encapsulation) & 비캡슐화(Decapsulation): 계층 간 데이터를 송수신하며 거치는 과정으로, 데이터를 상위 계층에서 하위 계층으로 보내며 필요한 정보를 헤더에 담아 붙여 나가는 과정을 캡슐화라고 하며 반대로 데이터를 하위 계층에서 상위 계층으로 전달하며 헤더를 제거해나가는 과정을 비캡슐화라고 한다.
TCP/IP 계층 구조
TCP/IP는 네트워크에서 사용되는 통신 프로토콜의 집합으로, 프로토콜의 네트워킹 범위에 따라 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층으로 구성된다.
TCP/IP 계층은 주로 OSI 7 계층과 비교되며, OSI 7 계층은 애플리케이션 계층, 링크 계층의 세분화 및 인터넷 계층을 네트워크 계층으로 칭한다는 차이점이 있다.
그럼, TCP/IP 계층 구조에 대해 자세히 살펴보자. 각각의 계층에서 사용되는 프로토콜 종류를 한눈에 정리하면 아래 이미지와 같다.
애플리케이션 계층
- TCP/IP 모델의 최상위 계층으로, 최종 사용자와 직접 통신하는 데 필요한 모든 프로토콜이 포함되며 해당 계층을 통해 사용자는 애플리케이션과 상호 작용할 수 있다.
- 애플리케이션 계층에서 사용하는 주요 프로토콜에는 HTTP, SNMP, SMTP, DNS, TELNET, FTP 등이 있다.
전송 계층
- 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
- 네트워크를 통해 전송되는 데이터의 신뢰성 제공, 흐름 제어 등을 담당하며 인터넷 계층 사이의 데이터가 전달될 때 중계 역할을 한다. 대표적으로는 TCP, UDP가 있다.
- TCP - 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용하여 신뢰성을 구축해서 수신 여부를 확인하는 가상회선 패킷 교환 방식을 사용한다.
- UDP - 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 전달하는 데이터그램 패킷 교환 방식을 사용한다. TCP보다 단순하며, 신뢰도는 낮지만 속도가 빨라 다른 데이터에 비해 안전하게 보호되어야 할 필요가 없는 실시간 응용 프로그램에서 흔히 사용된다.
인터넷 계층
- IP를 사용하여 라우팅과 주소 지정이라는 두 가지 기본 기능을 수행한다.
- 패킷을 수신해야 할 수신자 주소를 지정하여 데이터를 전달하며, 데이터가 제대로 전송되었는지에 대해 보장하지 않는 비연결형적인 특징을 가지고 있다.
- 인터넷 계층에서 사용하는 주요 프로토콜에는 IP, ARP, ICMP 등이 있다.
링크 계층
- ‘네트워크 접근 계층’이라고도 하며, IP 데이터그램을 네트워크에서 전송되는 프레임으로 캡슐화하고 IP 주소를 물리적 주소(MAC주소)로 매핑한다.
- 링크 계층은 ‘이더넷 프레임’을 통해 에러 확인, 흐름 제어, 접근 제어를 담당한다.
- 링크 계층에서 사용하는 주요 프로토콜에는 Ethernet, Token Ring 등이 있다.
TCP 연결 설정 - 3-way handshake & 4-way handshake
handshake는 클라이언트와 서버 간의 연결을 설정하는 프로세스를 의미한다. 데이터를 전송하기 전 TCP는 3-way handshake 과정을 통해 클라이언트와 서버 간의 연결을 성립하고 신뢰성을 구축할 수 있다.
TCP 헤더에는 위와 같은 정보들이 포함되어 있으며, TCP 플래그를 사용하여 handshaking 작업이 진행된다. 이 플래그를 ‘컨트롤 비트’라고 한다.
용어 설명
용어 | 설명 |
---|
SYN | SYNchronization. 연결 요청 플래그. |
ACK | ACKnowledgement. 응답 플래그. |
ISN | Initial Sequence Numbers. 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호. |
FIN | FINish. 연결 해제 요청 플래그. |
연결 성립 과정: 3-way handshake
3-way handshake는 컨트롤 비트를 이용해 클라이언트와 서버가 서로의 Sequence Number를 주고 받는 과정이라고 볼 수 있다.
Step 1: SYN
클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
Step 2: SYN-ACK
LISTEN 상태인 서버는 클라이언트의 SYN을 수신하고, 서버의 ISN과 승인번호로 클라이언트의 ISN + 1
을 담아 ACK를 클라이언트에 보낸다.
Step 3: ACK
클라이언트는 서버의 ISN + 1
값을 승인번호를 담아 ACK를 서버에 보낸다.
위의 과정을 모두 마치면 TCP 연결이 성립된다. TCP는 해당 과정을 거치기 때문에 신뢰성 있는 계층이라고 하며, UDP는 해당 과정이 없어 신뢰성 없는 계층으로 분류된다.
연결 해제 과정: 4-way handshake
데이터 전송을 모두 마치면 4-way hnadshake 과정을 거쳐 연결을 해제한다.
Step 1: FIN (클라이언트 → 서버)
- 연결 해제 요청을 위해 클라이언트가 서버로 FIN을 보낸다.
- 이후 클라이언트는 서버로부터 FIN 요청에 대한 ACK를 받기 위해 기다리는 상태인 FIN_WAIT_1 상태가 된다.
Step 2: ACK(서버 → 클라이언트)
- 서버는 FIN 요청을 받고 ACK 세그먼트를 보낸다.
- 이후 서버는 CLOSE_WAIT 상태가 되고 ACK를 받은 클라이언트는 FIN_WAIT_2 상태가 되어 서버의 FIN 세그먼트를 기다린다.
Step 3: FIN(서버 → 클라이언트)
- 서버는 ACK를 보내고 일정 시간 이후 클라이언트에 FIN 세그먼트를 보낸다. 이는 종료에 대한 성공적인 승인을 나타낸다.
- FIN을 받은 클라이언트는 TIME_WAIT 상태가 된다. 이때, 바로 연결을 닫지 않고 TIME_WAIT을 유지하는 이유는 지연 패킷으로 인해 데이터 무결성에 문제가 생기는 것을 방지하고 두 장치 연결이 닫혔는지 확인하기 위해서이다.
Step 4: ACK(클라이언트 → 서버)
- 클라이언트는 다시 서버로 ACK를 보내고 서버는 CLOSED 상태가 된다.
- 이후 클라이언트는 일정 시간 TIME_WAIT 상태로 대기한 후 CLOSED 상태가 되어 연결이 닫히고, 클라이언트와 서버의 연결이 완전히 해제된다.
패킷 교환 방식 - 가상 회선 방식 & 데이터그램 방식
패킷 교환 방식(Packet Switching) 은 데이터(메시지)를 일정 크기의 패킷으로 잘라서 전송하는 방식으로, 가상 회선 방식과 데이터그램 방식이 있다. TCP는 가상회선 방식을, UDP는 데이터그램 방식을 사용한다.
가상 회선 패킷 교환 방식
- 상호 간 논리적인 가상 통신 회선을 미리 설정하여 송신지와 수신지 사이의 연결을 확립한 후 설정된 경로를 따라 패킷들을 순차적으로 운반하는 방식.
- 모든 패킷을 같은 경로를 통해 발생 순서대로 전송된다. → 패킷의 송수신 순서가 같다.
- 비유 예시: 친구들과 집결지에 모여서 여행 장소로 함께 이동한다.
데이터그램 패킷 교환 방식
- 연결 경로를 설정하지 않고 인접한 노드들의 트래픽 상황을 감안하여 각각의 패킷들을 순서 상관 없이 독립적으로 운반하는 방식.
- 각 패킷은 별도의 경로를 통해 전송되며, 그렇기 때문에 패킷마다 완전한 목적지 주소를 가져한다. 또한 해당 패킷은 순서 없이 대상에 도달한다.
- 비유 예시: 서울, 대구 부산 등 출발 장소가 다르기 때문에 각자의 장소에서 서로 다른 루트로 여행 장소에 도착한다.
계층 간 데이터 송수신 과정과 PDU
데이터가 송수신되는 과정에서 데이터는 각 계층을 거치게 되고, 데이터가 상위에서 하위 계층으로, 또는 하위에서 상위계층으로 전달되면서 캡슐화와 비캡슐화 과정이 발생한다.
캡슐화(Encapsulation)
캡슐화 과정은 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 붙여가는 과정을 말한다.
비캡슐화(Decapsulation)
비캡슐화 과정은 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정을 말한다.
송신 측에서 캡슐화된 데이터를 수신 측이 받게되면 링크 계층에서부터 타고 올라오면서 헤더를 역순으로 제거하고, 최종적으로 사용자 애플리케이션에 메시지(data)로 전달된다.
PDU(Protocol Data Unit)
위와 같이 데이터가 계층에서 계층으로 전달될 때 사용되는 데이터 단위를 PDU라고 하며 각 계층마다 부르는 명칭이 다르다.
-
애플리케이션 계층: message
-
전송 계층: segment(TCP), datagram(UDP)
-
인터넷 계층: packet
-
링크 계층: frame(데이터 링크 계층), bit(물리 계층)
참고 자료