TCP는 전송된 세그먼트가 손실되거나 순서가 어긋났을 때 혹은 중복되었을 경우 이에 대한 제어나 처리를 하는 기능이 있습니다. 그 중 하나의 방법이 TCP에러제어 입니다.
TCP에러제어는 먼저 에러를 검출하는 과정을 거치며 그 방법으로 CRC와 체크섬을 사용합니다.
TCP헤더에는 체크섬이라는 필드가 있는데 이곳에서 헤더와 데이터에 대한 에러를 검사하는 기능을 통해 세그먼트가 전송되는 도중 에러가 발생했는지 확인합니다.
에러를 검출한 후 에러를 정정하는 과정을 거치는데 에러 정정에는 ARC(Automatic Repeat Request)방식을 사용합니다.
재전송방식에는 Stop-and-wait ARQ, Go-Back-N ARQ, Selective Repeat ARQ등의 방식이 있습니다.
Stop-and-wait ARQ
재전송 방식은 이름 그대로 멈추고 기다리는 방식
Pc A에서 0번 패킷을 전송했다고 가정합시다.
Pc B에서 0번 패킷을 수신하고 그에 대한 확인 응답으로 0번 ACK을 전송합니다.
A는 0번 ACK를 확인하면 1번 패킷을 전송합니다.
이 때 패킷이 손실되어서 도착하지 못하면 ACK를 받을 수 없기 때문에 timeout이 되어 1번 패킷을 재전송합니다.
Go-Back-N ARQ
어느 한 패킷이 돌아오지 않아서 에러가 발생했다며 그 번호의 패킷부터 다시 재 전송하는 방식입니다.
Pc A는 2번 패킷에 대한 ACK를 받지 못해서 타임 아웃 되고 다시 2번 패킷 부터 전송하는 방식입니다.
Selective Repeat ARQ
오류가 발생한 패킷을 선택적으로 재전송하는 방식입니다.
패킷을 전송하는 도중 2번 패킷이 손실되거나 오류가 발생하여서 B가 수신하지 못합니다. 2번 패킷을 수신했을 시 버퍼에 기록하고 수신한 패킷에 해당하는 ACK를 선택적으로 전송합니다. 모든 패킷을 전송하고 2번 패킷을 다시 전송합니다.