
프로토콜 중 가장 많이 쓰이는 프로토콜 두가지를 한번에 통칭하는 단어로, 현재 가장 많이 사용하고 있는 인터넷 프로토콜 스위트 (Internet Protocol Suite) 이다.
시스템과 애플리케이션 프로그램에서 정보를 겨환할 수 있도록 하는 메세지 형식 및 프로시저에 대한 규칙 세트를 의미한다.
수신 호스트가 메세지를 이해하기 위해서 통신과 관련된 각 시스템이 이러한 규칙을 준수해야 한다.
프로토콜의 모음을 의미한다.
인터넷 프로토콜 스위트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP / IP 프로토콜 스위트 라고도 불린다.
TCP / IP는 패킷 통신 방식의 인터넷 프로토콜인 IP 프로토콜과 전송 조절 프로토콜인 TCP 프로토콜로 이루어져 있다.
TCP 프로토콜은 IP 통신을 기반으로 작동한다.
패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 프로토콜이다.
IP의 정보는 패킷 단위로 나뉘어져 전송되는데, 이 과정에서 데이터가 제대로 전달되었는지, 데이터의 순서가 올바른지 보장하지 않는다는 특징을 가지고 있다.
따라서 IP는 비신뢰성 (unreliabilty) 과 비연결성 (connectionlessness) 이라는 특징을 가지고 있다.
현재 인터넷에서 사용하는 표준 프로토콜은IPv4 를 사용하고 있지만, 고갈 문제를 겪고 있는 관계로 IPv6 가 나오게 되었다.
| IPv4 | IPv6 | |
|---|---|---|
| 주소 길이 | 32비트 | 128비트 |
| 표기법 | 10진수, .으로 구분 | 16진수, :으로 구분 |
| 주소 설정 | 수동, DHCP | 자동 (SLAAC), DHCPv6 |
| 보안 기능 | 선택적 (IPSec 별도 설정) | 기본적으로 IPSec 내장 |
| 헤더 구조 | 복잡, 다양한 옵션 포함 | 간단, 고정 길이로 설계 |
| 브로드캐스트 | 지원함 | 지원하지 않음 (멀티 캐스트 및 애니캐스트 사용) |
| 호환성 | IPv6와 직접 호환 불가 | IPv4와 직접 호환 불가 (전환 기술 필요) |
| 패킷 크기 처리 | 최대 65,535 바이트 | 확장 헤더를 통해 유연하게 처리 가능 |
신뢰성 있고 무결성을 보장하는 연결을 통해 데이터를 안전하게 전달해주는 전송 프로토콜로, IP 프로토콜이 가지고 있는 비신뢰성과 비연결성 문제를 보완하기 위한 목적을 가진 프로토콜이다.
TCP / IP는 총 4개의 계층으로 이루어져 있고, 각 계층이 하는 역할이 명확히 구분되어 있다.
라우팅 (routing) 작업이 필요하다.네트워크끼리 연결하고 데이터를 전송하는 기기인 라우터 (router)를 사용하여 목적지까지 데이터를 보내기 위한 일련의 작업이다.
라우터가 내부의 라우팅 테이블을 통해 경로 정보를 등록하여 데이터 전송을 위한 최적을 경로를 찾는다.
이러한 출발지와 목적지 간의 데이터 전송 과정을 End-to-End 통신 이라고 부른다.
포트 번호 (port number)를 사용한다.
응용 계층에서 전송 계층으로 사용자가 보내는 요청 값들이 캡슐화 과정을 거쳐 전달되고, 다시 네트워크 액세스 계층을 통해 서버와 통신을 한다.
통신하는 서버는 해당 서버의 네트워크 액세스 계층으로부터 응용 계층까지 역캡슐화 과정을 거쳐 데이터가 전송된다.
상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고, 해당 계층의 헤더를 삽입하는 과정을 말한다.
| 계층 변화 | 삽입 헤더 |
|---|---|
| 응용 계층 -> 전송 계층 | TCP 헤더 |
| 전송 계층 -> 인터넷 계층 | IP 헤더 |
| 인터넷 계층 -> 네트워크 계층 | 프레임 헤더 + 프레임 트레일러 |
하위 계층에서 상위 계층으로 올라가며, 각 계층의 헤더 부분을 제거하는 과정을 말한다. 캡슐화를 통해 붙은 각각의 헤더를 통해 각 계층에서 수행해야할 동작을 수행하고, 최종적으로 사용자에게 통신받은 메세지를 전달하게 된다.
TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 3-Way Handshake 를 사용한다.
TCP 3-Way Handshake는 TCP / IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
클라이언트는 서버에 접속을 요청하는 SYN을 보내고 SYN / ACK 응답을 기다리는 SYN_SENT 상태가 된다.
서버는 클라이언트의 SYN을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN 패킷을 발송하고 SYN_RECEIVED 상태가 된다.
클라이언트는 서버가 전송한 패킷을 받고 서버에게 ACK 를 보낸다.
이후부터는 클라이언트와 서버 간의 연결이 이루어지고 데이터가 오가게된다.
해당 연결 과정 이후 클라이언트와 서버는 모두 ESTABLISHED 상태가 된다.
TCP 4-Way Handshake는 세션을 종료하기 위해 수행되는 절차를 의미한다.
서버와 클라이언트가 연결된 상태에서 클라이언트가 close()를 호출하여 접속을 끊으려고 한다. 이 때, 클라이언트는 서버에게 연결을 종료하겠다는 FIN을 보낸다. 클라이언트가 보내는 FIN에는 ACK도 포함되어 있다.
서버는 클라이언트의 FIN을 받고, 클라이언트에게 ACK를 전송하고 자신의 통신이 끝날 때까지 기다리는 CLOSE_WAIT 상태가 된다. 아직 남은 데이터가 있다면, 마저 전송을 마친 후 close()를 호출한다.
서버의 통신이 종료되었으면, 클라이언트에게 FIN을 전송하고 LAST_ACK 상태가 된다.
클라이언트는 서버의 flag를 받고 서버에게 ACK 패킷을 전송한다. 아직 서버로부터 받지 못한 데이터가 있을 수 있기 때문에 TIME_WAIT 상태로 들어가 기다린다.
서버는 ACK를 받은 이후 소켓을 닫고, 클라이언트는 TIME_WAIT 끝난후 종료하여 연결을 해제한다.
TCP / IP 계층 구조 이미지
캡슐화 / 역캡슐화 도식화 이미지
3-Way Handshake / 4-Way Handshake 과정 이미지