*앞 글: IP, IP Address란 무엇인가?
앞의 글에서 인터넷 계층의 IP Address만으로는 패킷 전달을 위해 여러 한계점이 있음을 살펴보았다.
- 패킷을 받을 대상이 연결 상태임을 확인하지 않고 전송하기 때문에 받을 대상(호스트)이 서비스 불능 상태여도 패킷이 전송된다.
- 순서가 있는 여러 개의 데이터를 보냈을 때 받는 데이터가 같은 순서로 받아질 것이란 보장이 안된다.
- 패킷을 가지고 있던 호스트가 강제종료되어 패킷이 소실될 경우 패킷이 목적지까지 가지 못하고 소실될 수 있다.
이러한 한계점을 극복하기 위해 만들어진 것이 바로 TCP(Transmission Control Protocol)이다. 영어를 그대로 직역하면 전송 제어 프로토콜인데 TCP는 말 그대로 전송 제어를 위한 작업을 해주는 역할을 한다.
TCP의 역할
TCP는 두가지 역할을 한다.
- 받을 대상 노드(호스트)가 서비스 가능(연결 가능) 상태인지 확인 및 연결을 수립하는 역할
- 전송을 제어해주는 정보를 패킷에 추가해주는 역할
자 이제 TCP가 각 역할을 어떻게 수행하는지 살펴보자
TCP 3 Way Handshake을 통한 연결 수립
받을 대상 노드(호스트)가 서비스 가능 상태인지 확인하기 위해서는 해당 노드가 활성 상태인지 확인하기 위해 통신을 해야 한다. TCP에서는 3 Way Handshake라는 방식으로 해당 노드와 통신을 수행하게 된다.
3 Way Handshake는 SYN, SYN-ACK, ACK 단계 3단계로 나뉜다. <그림1>과 같이 어플리케이션이 서버에 연결 요청을 보내는 상황을 가정하자. 각 단계는 다음과 같은 역할을 수행한다.
SYN 단계
어플리케이션이 서버에 통신을 위한 연결을 요청하는 단계
SYN-ACK 단계
서버가 어플리케이션에 자신이 활성 상태임을 알리고 어플리케이션에서도 포트를 열어 연결을 활성화하라는 요청 메세지를 전송
ACK 단계
어플리케이션이 서버의 요청 메세지를 수락하여 연결이 수립
전송 제어를 위한 정보를 추가
전송을 제어해주는 규약(Protocol)에 대한 정보를 패킷에 추가한다. 대표적으로 Port 정보, 순서 정보가 있다.
Port 정보는 패킷이 어떤 프로세스에 전달되어야 할지에 대한 정보로, 프로세스간 통신을 위해 사용되는 정보이다. 즉, IP Address을 이용해 기기에 패킷이 전달되면, 이 패킷을 어떤 프로세스가 처리해야 하는지에 대해 명시해놓은 것이 Port이다. 자세한 사항은 아래 글을 참조하자.
전송 제어 정보 중 하나인 순서 정보는 전달해야 하는 패킷이 여러개로 나뉘어져 있을 경우 각 패킷이 어떤 순서로 처리되어야 하는지에 대한 정보이다.
위에서 다룬 2가지 전송 제어 정보를 보면 전달 받은 패킷이 어떤 프로세스에서 처리되어야 하고, 어떤 순서로 처리되어야 하는지에 대한 정보를 처리해준다. 즉, TCP의 역할은 다음과 같다.
TCP에서는 전송을 받았을 때 어떻게 처리되어야 하는지에 대한 정보를 추가해준다.
이 과정을 통해 중간에 빠진 패킷이 있거나, 중간에 빠진 정보가 있을 시 요청자에게 해당 패킷을 다시 보내도록 요청함으로써 데이터 전달 보증 또한 가능하도록 만들어준다.
정리
전송 계층의 TCP는 인터넷 계층의 IP위에 올라가 IP의 부족한점(비연결성, 전송제어 정보 없음)에 대한 보완을 해주는 역할을 한다.
우리는 이러한 통신 방식을 TCP/IP 통신이라 부른다.
HTTP와 TCP/IP
우리가 잘 아는 HTTP는 이 두 계층(IP, TCP) 위에 올라가 어플리케이션 단에서 데이터(패킷)을 전송하는 역할을 한다.
*HTTP3 부터는 최적화를 위해 UDP를 사용한다. UDP에 관해서는 이후 글에서 설명한다.
*현재 주로 사용되는 HTTP 기술은 HTTP/2, HTTP/1.1이다.
다음 글에서는 IP와 TCP 위에 올라가는 HTTP가 IP와 TCP를 가지고 어떻게 다른 프로세스와 통신을 수행하는지 자세히 살펴보자.