TCP는 모든 데이터가 목적지에 도달 할 수 있도록 송수신하는 데이터를 추적 관리하며 만약에 데이터가 목적지에

 정상적으로 도착하지 않는 경우 세그먼트를 재전송해서 신뢰성을 보장합니다.

 이번글에서 세그먼트 재전송이 어떻게 이루어지는지 확인 해 봅니다.

TCP 세그먼트 재전송 타이머 및 큐

 1. 재전송 큐에 세그먼트 삽입, 재전송 타이머 시작

  송신하는 장비에서 데이터 세그먼트를 전송하면 TCP는 세그먼트의 복사본을 재전송 큐라고 불리는 곳에 

  삽입합니다. 재전송 타이머는 재전송 큐에 삽입 될 때 시작됩니다. 재전송 큐는 재전송 타이머가 만료될 때까지 남은

  시간을 기준으로 정렬 되어 있어서 만료시간이 가장 적은 세그먼트를 알 수 있습니다.

 2. 승인 처리

  상대방 장비에서 타이머 만료전에 승인이 온다면 승인된 세그먼트를 재전송 큐에서 제거합니다. 

 3. 재전송 시간 만료

  재전송 타이머가 만료될 때까지 승인이 오지 않는다면 해당 세그먼트는 자동적으로 재전송됩니다.

  재전송한 세그먼트도 전송이 성공할 보장이 없기 때문에 재전송하더라도 계속 재전송 대기 큐에 남게 되고

  재전송 타이머만 초기화합니다. 만약 다음에도 승인이 오지 않는다면 세그먼트를 재전송을 반복합니다.

  일정 횟수 이상 재전송이 실패한다면 TCP는 연결에 문제가 있다고 생각하고 연결을 종료합니다.

TCP 세그먼트의 승인된 시간 인지 

 TCP가 세그먼트가 승인되었는지는 어떻게 알 수 있을까요?

 이전에 살펴보았던 슬라이딩 윈도우 데이터 송수신 에서 송수신시 상대방에서는 승인 번호를 전달 받는다고

 설명드렸습니다. 승인 번호는 누적 순서번호를 사용하기 때문에 해당 승인 번호보다 작은 순서 번호를 가지는 모든

 데이터는 상대방에게 전달되었다는 뜻입니다. 그러므로 승인 번호보다 작은 순서 번호를 가진 세그먼트를 재전송

 큐에서 제거합니다. 

TCP 재전송 예제

TCP 일반적인 재전송 큐 및 타이머

 예제의 그림을 통해서 재전송에 대해서 설명합니다. 예제에서는 클라이언트가 서버로 3개의 세그먼트를 전송합니다. 

 전송 후에 클라이언트는 3개의 세그먼트 모두 다 재전송 큐에 등록 해 두고 서버의 승인을 기다립니다. 

 전송 도중에 3번 세그먼트가 전송 실패 되었고 서버에서는 1,2번 세그먼트를 받아서 2번 세그먼트까지 승인을 합니다. 

 서버의 승인번호를 받은 클라이언트에서는 1,2번 세그먼트를 재전송 큐에서 제거하고 3번 세그먼트의 승인을

 기다립니다. 전송 실패한 3번 세그먼트는 재전송 타이머의 시간은 만료가 되고 TCP는 3번 세그먼트를 다시

 재전송한 후에 재전송 큐에서 제거하지 않고 재전송 타이머 시간을 초기화 합니다. 

 3번 세그먼트가 서버에 도착을 하고 승인을 받아서 재전송 로직이 완료 됩니다. 

+ Recent posts