TCP는 Transmission Control Protocol의 약자로 신뢰할 수 있는 방식으로 데이터를 전송합니다.
TCP 3-way handshake를 통해 두 호스트간의 연결을 설정합니다.
클라이언트에서 서버로 SYN을 보냅니다.
클라이언트가 서버에 연결하려는 경우 SYN(=1), 메시지를 서버로 보냅니다.
메시지에는 sequence number, ack(=0), window 크기, 최대 segment 크기가 있습니다.
예를 들어, window 크기가 2000bit 이고, 최대 세그먼트 크기가 200bit인 경우 최대 10개의 세그먼트를 전송할 수 있습니다.
서버는 클라이언트가 보낸 데이터를 확인하고 SYN, ACK로 응답합니다.
이때 ACK는 1로 설정하여 클라이언트에 확인했다는 의미를 보냅니다. ACK의 acknowledgement 번호는 클라이언트로부터 받은 sequence 번호보다 1 큽니다.
예를 들어, 클라이언트로부터 SYN(= 1), sequence 번호(= 10000) 를 받았다면 서버는 ACK(= 1), acknowledgement 번호(= 10001)를 전송합니다.
또한 서버쪽에서도 연결할 경우 SYN(= 1), window 크기와 최대 세그먼트 크기를 클라이언트에 전송합니다.
이 단계를 완료한 후 클라이언트에서 서버 측으로의 연결이 설정됩니다.
마지막으로 클라이언트는 서버의 응답을 받은후, ACK(= 1), acknowledgement 번호(서버의 sequence number + 1)를 서버로 전송합니다.
SYN는 0으로 유지됩니다.
이 단계에서 서버에서 클라이언트 측으로의 연결이 설정됩니다.
연결이 설정되면 데이터 전송을 위해 클라이언트의 maximum segment size와 서버의 maximum segment size를 비교하여 최소값으로 설정됩니다.
TCP는 두가지 타입의 연결을 지원합니다.
TCP 4-way handshake란?
클라이언트가 TCP 종료한다고 가정하겠습니다.
RST 세그먼트가 전송될 때 연결 해제됩니다. 아래와 같은 케이스일 시, RST 세그먼트를 보낼 수 있습니다.
출처