인터넷 프로토콜 스위트(Internet protocol suite), 일명 TCP/IP는 인터넷을 포함한 컴퓨터 네트워크에서 정보를 주고받는 데 사용되는 통신규약의 모음을 정리한 프레임워크이다. 1970년대부터 1990년대까지 이어진 프로토콜 전쟁 당시 기술적, 상업적 측면에서 우위를 점하여 "사실상 표준"이 되었으나, 당시 TCP/IP와 대립하던 OSI 모형(Open System Interconnection model)은 네트워크 개념 및 활동을 설명하는 데 훌륭한 프레임워크로써 IT 분야에서 네트워크 절차를 논의하거나 가르칠 때 반드시 언급된다.
총 네 개의 계층으로 나뉘어져 있으며, 이들은 다음과 같이 나열된다.
계층 | PDU | 기능 | 통신규약 | |
---|---|---|---|---|
4 | 어플리케이션 | 데이터 | 어플리케이션 간 데이터 교환 및 상호작용 | HTTP(S), DNS, SMB, SSH, Telnet 등 |
3 | 전송 | 데이터그램, 세그먼트 | 네트워크 상에서 어플리케이션 간 통신 프로토콜 정의 | UDP, TCP |
3 | 인터넷 | 패킷 | 광범위적인 네트워크 간 (즉, WAN) 통신 프로토콜 정의 | IPv4, IPv6 |
2 | 링크 | 프레임 | 네트워크 세그먼트 안에서 노드 간 (즉, LAN) 통신 프로토콜 정의 | ARP, MAC |
역사적을 미국 국방부에서 투자한 "전송 제어 프로그램(Transmission Control Program)"로부터 개발이 시작되었다. 초창기에는 연결지향형(connection-oriented) 데이터그램 프로토콜 구현이 목표였으나, 비연결형(connectionless) 성질의 데이터그램을 연결지향형으로 만드는 건 난해한 과제였다. 결국 이를 해결하기 위해 설계된 통신규약이 바로 TCP 그리고 IP이다.
그러므로 TCP/IP를 구성하는 세 가지의 핵심 통신규약은 다음과 같다:
- 사용자 데이터그램 프로토콜(UDP)
- 전송 제어 프로토콜(TCP)
- 인터넷 프로토콜(IP)
프로토콜 데이터 단위(protocol data unit; PDU)는 네트워크를 통해 다른 노드로 전송되는 단일 정보 단위이며, 프로토콜마다 정의된 제어 정보와 사용자 데이터로 구성되어 있다. 다시 말해, PDU는 해당 프로토콜에서 정보를 전송할 때 취급하는 데이터 유형을 가리킨다.
일반적으로 PDU는 헤더와 페이로드로 구성된다: 전자는 PDU의 출발지 및 목적지 등의 메타데이터를 포함하며, 후자는 상위 계층에서 활용될 PDU 혹은 데이터를 캡슐화한다. 위의 TCP/IP 모델을 예시로 들어, 어플리케이션 계층의 HTTP 프로토콜 데이터는 전송 계층의 UDP 프로토콜의 페이로드에 포함된다. 이러한 페이로드의 캡슐화는 국지적인 로컬 네트워크 프로토콜을 공용 프로토콜에 숨기므로써 네트워크 장벽을 너머 수신되어서도 활용할 수 있도록 한다.
어플리케이션 계층(application layer)은 파일 공유, 메시지 처리, 데이터베이스 접근 등 프로세스 간 직접적인 통신 및 상호작용이 이루어지는 최상단 계층이다. 어플리케이션의 역할 및 목적에 따라 다양한 통신규약이 있으며, 아래는 일부를 간략히 나열한다.
서버 메시지 블록(server message block; SMB)
원격 프로시저 호출(remote procedure call; RPC)
전송 계층(transport layer)은 전달받은 데이터가 노드 내에서 이를 요청한 프로세스에게 전송될 수 있도록 가담하는 계층이다. 출발지 호스트의 한 어플리케이션에서 목적지 호스트의 다른 어플리케이션으로 일련의 데이터들을 전달하는 기능 및 절차적 방법을 제공하는데, 대표적인 두 가지의 전송 프로토콜은 다음과 같다:
전송 프로토콜 | PDU | 개요 |
---|---|---|
UDP | 데이터그램 | 빠르고 간단하지만 목적지 도달을 보장하지 못하는 비연결형(connectionless) |
TCP | 세그먼트 | 구조는 복잡하지만 안정적인 통신을 중시하는 연결지향형(connection-oriented) |
- 다중화(multiplexing): 송신하려는 각 포트의 데이터그램 및 세그먼트를 모두 거두어 하나의 패킷 페이로드로 캡슐화하는 작업이다.
- 역다중화(demultiplexing): 수신받은 패킷으로부터 각 데이터그램과 세그먼트를 올바른 포트로 전달하는 작업니다.
세그먼트와 데이터그램은 (IP 주소와 포트 번호 조합의) 네트워크 소켓이란 완전한 통신 주소를 기반해 찾아간다.
포트(port)는 각 전송 프로토콜마다 통신 연결의 종착점을 고유 식별하고 데이터를 특정 서비스로 유도하기 위해 할당되는 양의 16비트 범위의 번호이다.
네트워크 소켓은 데이터를 송신 및 수신하기 위한 종착점(endpoint) 역할을 하는 노드 내의 소프트웨어 구조이다. 소켓의 구조와 성질은 네트워킹 아키텍처의 API에 의해 정의되며, 오로지 실행 중인 어플리케이션의 프로세스 생명주기 동안에만 유효하다.
사용자 데이터그램 프로토콜(User Datagram Protocol; UDP)은 TCP/IP에서 사용하는 핵심 전송 프로토콜 중 하나로 데이터그램(datagram)을 취급한다.
데이터그램이란, 이전 교환에 의존하지 않고서 출발지로부터 목적지까지 도달할 수 있는 충분한 데이터를 지닌 자립적이고 독립적인 존재이다. 데이터그램은 매우 간단한 구조를 지니며 헤더에는 출발지 및 목적지 소켓, 데이터그램 크기, 그리고 체크섬 정보가 전부이다. 너무 간단한 나머지, UDP 전송 프로토콜은 아래와 같은 성질을 지닌다:
- 비신뢰성(unreliable): 데이터그램이 목적지에 도달한다는 보장이 없고, 또한 목적지에 도달하였다는 것을 확인할 방도가 없다.
- 비연결형(connectionless): 데이터그램은 전송 경로를 확립되지 않은 채로 송신된다.
오히려 UDP의 간단한 구조는 오류 검증 및 정정을 처리하는 비중이 적어 속도가 빠른 장점을 지니므로, 화상통화 또는 스트리밍 방송 등의 실시간 서비스 시스템에서 선호된다.
전송 제어 프로토콜(Transmission Control Protocol; TCP)은 TCP/IP에서 사용하는 핵심 전송 프로토콜 중 하나로 세그먼트(segment)를 취급한다.
세그먼트란, 사전적으로 "파편"을 의미하며 전달하려는 어플리케이션 계층의 데이터를 여러 조각으로 쪼개어 별도 패킷으로 전송할 수 있다. TCP 전송 프로토콜은 노드 간 통신 연결 확립을 보장하는 연결지향형(connection-oriented)으로써 본래 IP 설계 목적을 보완한다. 그러기 위해 세그먼트 헤더에는 출발지 및 목적지 소켓 외에도 시퀀스 번호, 플래그, 체크섬 등 다양한 정보를 포함한다.
클라이언트의 어플리케이션이 서버와 TCP 통신을 시도할 시, 3방향 핸드셰이킹을 절차를 통해 확실한 통신 연결을 보장한다.
단계 | 송신 노드 | 수신 노드 | 설명 |
---|---|---|---|
1 | 클라이언트 | 서버 | SYN 플래그가 설정된 페이로드 없는 bodyless 세그먼트를 전송한다. |
2 | 서버 | 클라이언트 | SYN | ACK 플래그가 설정된 bodyless 세그먼트로 응답한다. |
3 | 클라이언트 | 서버 | ACK 플래그가 설정된 bodyless 세그먼트로 응답한다. |
세그먼트의 각 헤더에 저장된 Sequence #
시퀀스 번호로부터 원본 데이터를 구성하는 몇 번째 조각인지 식별이 가능하다. 세그먼트를 수신받은 노드는 시퀀스 번호에 대응하는 Acknowledgement #
로 응답하는데, 이들을 취합하여 전송한 모든 세그먼트가 목적지에 도달하였는지 판단한다. 위의 3방향 핸드셰이킹을 완료하여 TCP 연결이 구축되면, 본격적으로 어플리케이션 계층의 데이터 전송이 이루어진다.
데이터 전송을 완료하여 더 이상의 통신이 필요없을 시, 클라이언트 혹은 서버에서 4방향 핸드셰이킹을 개시하여 구축된 TCP 연결을 종료한다. 때문에 아래 다이어그램은 "클라이언트-서버"가 아닌 "발신자-수신자" 관계로 소개한다.
단계 | 송신 노드 | 수신 노드 | 설명 |
---|---|---|---|
1 | 발신자 | 수신자 | FIN 플래그가 설정된 bodyless 세그먼트로 TCP 종료 요청을 알린다. |
2 | 수신자 | 발신자 | ACK 플래그가 설정된 bodyless 세그먼트로 발신자의 FIN 에 응답한다. |
3 | 수신자 | 발신자 | FIN 플래그가 설정된 bodyless 세그먼트로 수신자도 (더 이상 전송할 데이터가 없을 시) TCP 종료 준비가 되었음을 알린다. |
4 | 발신자 | 수신자 | ACK 플래그가 설정된 bodyless 세그먼트로 수신자의 FIN 에 응답한다. |
이러한 4방향 핸드셰이킹을 마쳤으면 수신자 측에서 발신자의 요청에 따른 TCP 연결을 종료한다.
인터넷 계층(internet layer)은 데이터가 도달해야 할 네트워크로 전송될 수 있도록 관여하는 계층이다. 해당 계층의 PDU인 패킷은 광역 통신망(wide area network; WAN)을 연결하는 라우터를 통해 목적지까지 점차적으로 라우팅되어 도달하는 데, 이러한 과정을 패킷 포워딩이라 부른다.
대표적인 WAN으로 우리가 흔히 알고 있는 인터넷(Internet)이 이에 해당하며, 이를 가능케 한 게 바로 인터넷 프로토콜이다.
인터넷 프로토콜(Internet Protocol; IP)은 전송 계층에서 소개된 세그먼트 혹은 데이터그램의 인터네트워크 통신을 가능케 하도록 패킷 구조를 정의하는 네트워크 계층의 대표적인 프로토콜이다. 가장 널리 사용되는 인터넷 프로토콜은 아래와 같이 두 가지 버전이 존재한다.
패킷의 헤더에는 출발지 및 목적지 주소가 들어있고, 그 외에도 전송 계층의 프로토콜 유형과 TTL (IPv4 한정) 정보도 포함되어 있다. TTL은 "time to live"의 약자로, 라우터를 통해 다음 네트워크 세그먼트로 넘어가는 홉(hop) 횟수를 제한시켜 목적지에 도달하지 못할 시 해당 패킷이 소실되어 통신 대역을 낭비하는 것을 방지한다. IPv6에서는 홉 제한(hop limit)이라고 부른다.
아래는 가상의 CONTOSO-CLIENT1 컴퓨터에 ipconfig 명령으로 확보한 IP 정보 예제이다.
PS C:\Windows\System32> ipconfig /all
Windows IP Configuration
Host Name . . . . . . . . . . . . : CONTOSO-CLIENT1
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.1.1(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : 192.168.1.10
DNS Servers . . . . . . . . . . . : 168.126.63.1
링크 계층(link layer)은 네트워크 세그먼트 안에서 데이터가 도달해야 할 노드로 전송될 수 있도록 관여하는 계층이다.
데이터 링크(data link)란, 디지털 정보의 송수신을 위한 지역 간 통신 연결을 가리킨다.
일반적으로 근거리 통신망(local area network; LAN)에 국한되며, 해당 계층의 PDU인 프레임(frame)은 헤더에 저장된 네트워크 연결 장치마다 할당된 (출발지 및 목적지) MAC 주소 정보로부터 도달해야 하는 노드로 찾아갈 수 있다. 하지만 하드웨어가 변경되면 MAC 주소도 바뀌고, 타 네트워크에 있는 장치들은 동일한 MAC 주소를 가질 수 있으므로 네트워크 계층에서는 MAC 주소로 목적지를 찾지 않는다.