본문 바로가기
Computer Science/컴퓨터 네트워크

컴퓨터 네트워크: TCP timers

by 청량리 물냉면 2021. 11. 11.
반응형

TCP: Transmission Control Protocol

10. TCP timers

 

TCP timers

  • Retransmission timer: 재전송 타이머, time-out detect 시 사용, packet loss를 detect하면 slow start로 들어감
  • Persistence timer: 영속 타이머
  • Keepalive timer
  • TIME-WAIT

 

Retransmission timer

time-out detect 시 사용

 

Persistence timer

Lost acknowledgments가 적절히 처리되지 않은 경우 deadlock이 발생할 수 있다.

  • Receiver가 rwnd=0을 보내 Sender가 데이터 송신을 멈춘 상황.
  • Receiving Buffer에 MSS만큼의 공간이 생기거나 1/2만큼 빈 공간이 생길 때 Receiver는 rwnd=k (k: 빈 공간 용량)를 보내 상대방을 깨운다.
  • 이때 상대방을 깨우려고 보낸 Ack이 유실된다면, Sender는 Receiver가 자신을 깨우기를 기다리고 Receiver는 Sender가 데이터를 보내주기를 무한정으로 기다리게 되는 deadlock이 발생한다. 

 

해결방안: Persistence Timer 사용

  • Receiver가 rwnd=0을 보내 Sender가 데이터 송신을 멈춘 상황. 이 때 persistence timer가 작동한다.
  • persistence timer가 만료되었는데도 상대방에게서 아무런 반응이 없으면, Sender는 일단 작은 사이즈의 데이터(probe segment)를 상대방에게 보내본다.
  • 데이터를 보내면 해당 데이터에 대한 Ack이 도착한다. rwnd가 여전히 0이면 상대방 수신버퍼가 아직 비워지지 않았다는 의미. rwnd = k이면 중간에 Receiver가 보낸 Ack이 유실되었을 가능성이 존재

 

Keepalive timer

  • 살아있나 찔러보기
  • 정상적인 종료 시 서버는 클라이언트와 FIN과 ACK을 주고 받으며 프로그램을 종료하고 Sending buffer와 Receiver buffer를 삭제한다. 
  • 비정상 종료(하드웨어적으로 컴퓨터가 죽음 ex. power down, reset 버튼 눌러서 다시 시작)시 server는 client가 살아있다고 생각하고 sending buffer와 receiver buffer를 계속 유지한다. 
  • 오랜 기간 동안 idle 상태에 있는 것을 방지하기 위해 서버는 2시간 동안 클라이언트로부터 세그먼트를 전송 받지 못하면 클라이언트에 probe 세그먼트를 전송해 본다.
  • probe 세그먼트에 대한 Ack이 돌아온다면 client는 살아있는 것이고, 그렇지 않다면 client는 종료되었을 가능성이 높다. 

 

TIME-WAIT

연결 종료를 요청한 client TIME-WAIT 상태로 가서 2MSL만큼 기다린다.

바로 연결을 종료하지 않고 대기하는 이유는 다음과 같다.

→ Timer가 만료되면 프로그램은 close

 

 

RTO (타이머의 time-out 값) 구하기

*RTT: Round Trip Time, 왕복 시간

Smoothed RTT (평균)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 측정 시: RTTs = RTTm ☞최초 측정값을 평균으로 대입해서 시작
  • 첫 번째 이후의 측정 시: RTTs = (1-α)RTTs + α RTTm ☞(7/8)*기존 평균값 + (1/8)*측정값
  • RTTm: 측정값
  • 새로운 측정값에 적은 가중치를 부여(Exponentially Weighted Moving Average(EWMA, 지수가중평균) 방식)
  • α = 1/8

 

RTT Deviation (편차)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 측정 시: RTTd = RTTm/2 ☞RTTd = 처음 측정값*(1/2)
  • 첫 번째 이후의 측정 시: RTTd = (1-ß)RTTd + ß |RTTs-RTTm| ☞(3/4)*기존편차 + (1/4)*|측정된 편차|
  • |RTTs - RTTm|: s와 m이 얼만큼 벌어졌는지 계산
  • ß= 1/4

 

RTO (타이머의 time-out 값)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 이후의 측정 시: RTO = RTTs + 4*RTTd
  • RTTs: 평균. RTT는 혼잡이나 네트워크 상황에 따라 2배 정도까지 왔다갔다 하기 때문에 평균을 계속 측정한다.
  • RTTd: 편차. 혼잡이 커질수록 편차도 커진다.(편차도 계속 측정)

 

Example 15.3

연결 설정 및 데이터 전송 단계의 일부를 보여주는 그림

1. 첫 번째 SYN segment 전송 시 RTTm, RTTs, RTTd 값은 존재하지 않는다. 설정된 RTO 값(6.00초)은 시스템이 정한 값이다. 만약 이 첫 번째 SYN이 사라진다면 Time-out에 의해 detect된다. (3-duplicate Ack 없음)

2. 전송한 세그먼트에 대해 SYN+ACK이 도착하면, 데이터 전송 후 ACK을 받기까지의 시간 RTTm이 측정된다.

(RTTm = 1.5초)

3. 첫 번째 데이터 segment가 전송되면 새로운 RTT 측정이 시작된다. 측정이 이미 진행 중이므로 두 번째 데이터 segment에 대한 RTT 측정은 시작되지 않는다. (TCP에서는 하나의 RTT을 측정하는 중에는 다른 segment가 전송되어도 해당 segment의 RTT를 측정하지 않는다.)

  • 마지막 ACK segment의 도착은 다음 RTTm 값을 계산하는 데 사용된다. (RTTm = 첫 번째 data segment 전송부터 ACK을 받기까지 걸린 시간)
  • 이때 리시버는 두 data segment(seq: 1401, seq: 1501)를 모두 받았지만 하나의 ACK만 전송하였다.(cumulative 방식, 두 개당 ACK 하나)

이를 이용해 RTO를 구하면, 계산된 값은 다음과 같다.

 

Karn’s Algorithm (칸의 알고리즘)

RTT를 정확히 측정할 수 없는 경우

(a) 세그먼트를 재전송하여 데이터 전송 후 Time-out으로 인해 데이터를 재전송하여, 재전송한 세그먼트에 대해 ACK을 받은 경우.  

(b) 데이터 전송 후 ACK이 도착하지 않아 데이터를 재전송하였는데 첫번째로 전송한 original 세그먼트의 ACK이 뒤늦게 도착. (재전송한 세그먼트에 대한 ACK은 유실되었다고 가정.)

 

☞ (a), (b) 둘 모두 세그먼트를 2개 전송하고 ACK을 하나 받은 상황. 이 경우 original 세그먼트에 대한 ACK인지 재전송 세그먼트에 대한 ACK인지 판단이 모호하다.

재전송 세그먼트에 의한 모호성 때문에 TCP의 정확한 RTT를 계산하기 어려울 수 있다.

☞ 이러한 문제를 해결하기 위해서 Karn의 알고리즘이 제안되었다. 

 

Karn’s Algorithm

  • 재전송된 세그먼트의 RTT는 RTO 계산에 사용하지 않는다. 
  • 정상 세그먼트(재전송 세그먼트X)에 대한 ACK이 수신된 후에 RTT 측정을 다시 시작한다.
  • 모호한 값은 RTO값을 계산하는 데 반영 하지 않음으로써 시간 추정의 정확도를 향상시키는 방법이다.

 

Example 15.4

그림 15.4은 이전 예제의 연속이다. 재전송이 존재하며 Karn의 알고리즘이 적용된다.

이전 예제

 

그림 15.4

1. 그림 15.4의 첫 번째 세그먼트가 전송되지만 손실된다.

2. RTO 타이머는 4.74초 후에 만료된다.

3. 세그먼트에 대한 ACK을 받지 못했기 때문에 첫 번째 세그먼트를 재전송한다. 이때 타이머는 이전 RTO 값의 2배인 9.48로 설정된다.(time out 후에는 slow start(전송량을 두배씩 늘려나가기))

4. 이번에는 제한 시간 전에 ACK을 수신하였다. 그러나 재전송 세그먼트에 대해서는 RTT를 계산하지 않는다. 따라서 RTTm, RTTs, RTTd, RTO는 변하지 않는다. RTO를 다시 계산하기 전에 새로운 세그먼트를 보내고 ACK를 받을 때까지 기다린다.(Karn's 알고리즘)

5. ACK이 도착하면 이번에는 RTTm값을 측정해 RTO값을 구한다. 

 

Example RTT estimation

메사추세츠 주립대 - 프랑스 시간 측정

RTT값의 편차는 큰 편(대략 최저 180, 최고 330)이지만, RTT 평균은 일정한 추세를 보인다. 

반응형