TCP: Transmission Control Protocol

연결 지향

UDP와는 대조적으로 TCP는 연결 지향적인 전송 방법입니다. 이는 실제로 데이터를 전송하기 전에 두 개의 노드 사이가 분명하게 연결돼야 한다는 의미입니다. 두 개의 노드는 각각 IP 주소와 포트 넘버를 사용하여 식별됩니다.

연결 단계

연결은 three-way handshake, 다시 말해 세 가지 단계를 통해 이루어집니다. 먼저 연결하고자 하는 노드는 SYN 플래그 설정을 포함하는 세그먼트를 전송합니다. SYN 플래그는 수신자와 연결하기 원하는 발신자의 요구에 대한 신호를 전송합니다.

첫 번째 세그먼트에서는 SYN 플래그 외에도 별도의 시퀀스 넘버, 윈도우 필드 및 옵션인 추가적인 파라미터를 전송합니다. 시퀀스 넘버는 임의로 생성된 넘버, ISN(Initial Sequence Number), 및 연속된 넘버로 구성됩니다. 세그먼트의 추가적인 연속된 넘버는 전체 데이터 스트림 중 현재 전송된 byte의 위치를 의미합니다. 그 결과, 모든 세그먼트의 순서를 알 수 있고 데이터 스트림은 수신자에 의해 나중에 다시 조립될 수 있습니다.

윈도우 필드는 노드에 대하여 사용할 수 있는 메모리 정보를 제공합니다. 이로 인하여 발신자는 수신자가 사용할 수 있는 메모리보다 더 많은 데이터를 전송할 수 없게 됩니다. 통신이 양방향이기 때문에 두 노드 모두 메모리를 허용 범위 내에서 사용하여 상대편 노드와 통신하게 됩니다.

두 번째 단계에서, 오리지널 수신자는 SYN ACK를 전송합니다. 세그먼트에는 SYN 플래그 설정 및 셋 ACK 플래그 모두가 포함됩니다. 그 결과, 이 노드는 연결하라는 요청을 수신하였고 이를 확인하였다는 신호를 오리지널 발신자에게 전송합니다. 또한 노드는 자체적인 시퀀스 넘버를 전송합니다. 이제 두 노드 모두 상대편 노드에 대하여 분명하게 알게 되었고, 이후에 교환되는 모든 세그먼트는 해당 발신자와 관련 지을 수 있게 됩니다.

연결을 위한 세 번째이자 마지막 단계는 오리지널 발신자가 전송한 내용을 확인하는 일이 포함됩니다. 이 단계에서 한 쪽 노드는 상대편 노드에게 성공적으로 연결되었다는 신호를 전송하게 됩니다. 이제부터 두 노드 사이에서 데이터 교환이 가능하게 됩니다.

데이터 전송

TCP가 항상 두 노드 사이에서 분명한 연결을 요청하기 때문에 분명한 수신자가 없는 네트워크에 대하여 Broadcast 또는 Multicast 메시지를 전송하는 일은 불가능합니다. 데이터는 분명한 연결을 통해서만 신뢰성 있게 전송됩니다. 다양한 메커니즘은 데이터가 오류 없이 수신자에게 잘 도달하도록 보장합니다.

CRC check-sum은 전송 중 세그먼트의 데이터에 오류가 발생하지 않도록 보호합니다. 이전 세그먼트가 수신자에 나중에 도달한다고 할지라도, 이전에 언급한 시퀀스 넘버를 사용하여 세그먼트의 순서를 알 수 있습니다.

발신자에게 각 세그먼트의 수신이 오류 없이 완료되었다는 정보를 제공하기 위해 ACK 넘버가 사용됩니다. 이는 Set ACK 플래그가 있는 세그먼트를 전송하여 이루어집니다. 이는 세그먼트에 유효한 확인 넘버가 있다는 신호를 전송합니다, 그 후 발신자는 세그먼트 내에 있는 ACK 넘버를 해석합니다. 이는 수신이 성공적으로 완료된 세그먼트에 대한 정보를 제공합니다. 또한 각 세그먼트는 윈도우 필드에서 사용할 수 있는 메모리에 대한 최신 정보를 포함하고 있기 때문에 발신자는 항상 현재 수신자에게 얼만큼의 데이터를 전송할 수 있는지에 대한 정보를 갖게 됩니다.

발신자가 정의된 시간 내에 성공적인 수신에 대한 신호를 받지 못하는 경우, 세그먼트를 다시 전송하게 되는데, 이는 세그먼트에 오류가 있거나 수신자에게 도달하지 않았다는 의미이기 때문입니다. 경과 시간은 각 세그먼트에 존재하여 개별적으로 카운트 다운되는 재전송 타이머(Retransmission Timer)로 불립니다. 확인 신호를 수신하면 세그먼트의 해당 타이머는 지워집니다.

연결의 종결

모든 데이터를 교환이 성공적으로 이루어진 경우, 연결을 종결시킬 수 있습니다. 이를 위해, 노드는 연결 종료 신호인 FIN 플래그 설정이 있는 세그먼트를 전송합니다. 이러한 FIN 세그먼트의 수신자는 연결이 반만 폐쇄되도록 확인 신호로 응답해야 합니다. 이 노드 역시 연결을 종료하길 원하는 경우, 오리지널 발신자에게 Set FIN 플래그가 있는 세그먼트를 전송하게 됩니다. 이 역시 확인된 경우, 연결의 종료가 완료됩니다. 이 경우 더 이상 데이터를 전송할 수 없게 됩니다.

마지막 수정됨: 2019년 October 18일, Friday, PM 12:13