cloudflare (opens in a new tab)문서를 옮긴 글입니다.

IP는 패킷 순서 지정 또는 오류 검사를 처리하지 않는다. 이러한 기능은 다른 또 하나의 프로토콜을 필요로 하며 대개의 경우 전송 제어 프로토콜(TCP)이 그 역할을 한다.

TCP/IP

TCP/IP 관계는 퍼즐에 메시지를 작성하여 우편으로 보내는 것과 유사하다. 퍼즐에 메시지를 작성하면 퍼즐은 여러 조각으로 나뉘어진다. 퍼즐의 조각들은 각각 다른 우편 경로를 통해 전달되는데, 조각마다 여기 걸리는 시간이 다르다. 다른 경로를 통해 전달된 퍼즐의 조각들은 순서가 보장되지 않는다. IP는 각 조각이 목적지 주소에 도착하도록 한다. TCP 프로토콜은 반대쪽에서 조각들을 올바른 순서로 맞추고, 누락된 조각을 다시 보내달라고 요청하고, 발신자에게 조각을 받았음을 알려주는 역할을 한다. TCP는 첫 번째 조각을 보내기 전부터 마지막 조각을 보낸 후까지 발신자와의 접속을 유지한다.

IP는 연결이 없는 프로토콜이다. 즉, 데이터의 각 단위는 개별적으로 주소가 지정되고 소스 장치로부터 대상 장치로 라우팅되며, 대상 장치는 이를 수신했다는 확인을 소스에 보내지 않는다. 여기에 TCP와 같은 프로토콜이 필요해진다. TCP는 IP와 함께 사용하여 발신자와 대상 사이의 연결을 유지하며 패킷 순서를 보장한다.

예를 들어, TCP를 통해 이메일 (opens in a new tab)을 전송하면 연결이 설정되고 3방향 핸드셰이크가 만들어진다. 첫째, 대화를 시작할 수 있도록 소스가 SYN "최초 요청" 패킷을 대상 서버로 보낸다. 다음으로, 대상 서버가 SYN-ACK 패킷을 보내 이 과정에 동의한다. 마지막으로, 소스가 대상에 ACK 패킷을 보내 이 과정을 확인하며, 이후 메시지 콘텐츠를 전송한다. 이메일 메시지는 궁극적으로 패킷으로 분할된 후 인터넷으로 보내지며, 인터넷에서는 일련의 게이트웨이를 거쳐 대상 장치에 도착하는데, 여기에서 이 패킷들이 다시 TCP에 의해 조립되어 이메일의 원래 메시지로 구성된다.

Three - Way Handshake

본격적으로 상대 클라이언트와 연결되기 전에 가상 연결을 해서 패킷으로 보내서 확인하는 동작이다.

이름의미
SYN연결을 생성할 때 클라이언트가 서버에 시퀀스 번호를 보내는 패킷
SYN-ACK시퀀스 번호를 받은 서버가 ACK 값을 생성하여 클라이언트에게 응답하는 패킷
ACKACK 값을 사용하여 응답하는 패킷

TCP 4계층