UDP는 IP 패킷 유실이 발생할 경우 UDP 데이터그램도 덩달아 드롭됩니다. 하지만 TCP는 똑같은 상황에서도 데이터가 상대방에게 정확히 전송됩니다. 이것이 가능한 이유는 TCP 자체가 갖고 있는 흐름 제어 기능(data f low control) 때문입니다.
일상생활에서 사용하는 우편은 크게 보통 우편과 등기 우편으로 구분합니다. 보통 우편은 그냥 편지함에 던져집니다. 지나가는 사람이 슬쩍 가로채도 어쩔 수가 없습니다. 하지만 등기 우편은 수신자가 편지를 받는 것을 배달부가 확인해 줍니다. 등기 우편이 전송되지 못하면 발신인에게 반송됩니다. TCP 흐름 제어 기능은 등기 우편과 비슷합니다.
TCP에서 보낼 스트림 데이터는 세그먼트(segment)라는 IP 패킷에 넣을 수 있는 크기의 단위로 쪼개집니다. 그러고 나서 IP 패킷 안에 세그먼트를 넣어서 수신자에게 전송됩니다. 그리고 수신자는 IP 패킷을 받으면 여기서 세그먼트를 꺼내 받은 세그먼트 응답을 송신자에게 반송합니다. 이 응답을 ack 혹은 acknowledge라고 합니다.
보낸 쪽에서는 일정 시간 안에 세그먼트에 대한 ack가 회신되지 않으면, 상대방이 받았다는 응답이 올 때까지 다시 세그먼트를 보냅니다.
▲ 그림 2-30 세그먼트 응답이 올 때까지 보냄