05-17 04:01
Recent Posts
Recent Comments
관리 메뉴

miinsun

[Network] TCP TimeOut, TCP 재전송 본문

Infra/Network

[Network] TCP TimeOut, TCP 재전송

miinsun 2022. 7. 12. 16:23
타임 아웃이란?
* TCP는 타이머를 통해서 데이터 재전송 여부를 판단
* timeout이 되기 전에 feedback이 오면 다음 패킷을 보냄
* timeout이 되면 패킷이 유실된 것으로 판단하고 재전송

 

RTT(Round Trip Time, 왕복 시간)

  • 세그먼트가 수신자에게 도착하고 feedback이 돌아오는 시간을 rtt라고 함
  • 타이머 시간을 결정 짓는 요소
    • 타이머 시간 판단시, 시간이 너무 짧으면 오버헤드가 발생
    • 반대로 시간이 너무 길면, 유실 대응이 늦어짐
    • 그렇다면 타이머 시간을 RTT만큼 설정하면 되지 않을까?
      • 모든 패킷의 RTT는 다르기 때문에 다른 RTT를 적정 RTT로 맞춰줘야 할 필요가 있음
      • 대표값으로 맞춰줘야함 → Estimated RTT(현재까지 측정해온 RTT의 합을 평균)

 

TCP 재전송 시나리오

  • ACK가 유실되었을 때
    1. HostA가 HostB로 데이터를 전송
      • 즉, HostA가 92~99(8 bytes)까지 해당하는 데이터 패킷을 전송함
    2. HostB가 HostA로 응답 데이터 전송
      • ACK 값 100을 전송함
    3. (2)의 과정이 유실되었을 때, timeout이 일어남
    4. timeout이후에 HostA가 HostB로 데이터를 재전송

 

 

 

  • ACK가 전송되는 도중에 timeout 발생되었을 경우
    1. HostA에서 HostB로 데이터를 두번 통신
      • 처음엔 HostA가 92~99(8 bytes)까지 해당하는 데이터 패킷을 전송함
      • 다음으로 HostA가 100~119(20 bytes)까지 해당하는 데이터 패킷을 전송함
    2. HostB가 HostA로 응답 데이터를 송신, ACK이 HostA에 도달하기 전에 timeout 발생
    3. timeout이 발생한 seqNum 92를 HostA가 HostB에 재전송을 함
    4. HostB가 HostA로 다음 데이터를 요구
      • HostB가 HostA에 ACK 120을 보냄 (즉, 120번까지 들어왔으니 그 이후를 보내달라는 의미)

 

 

  • ACK가 누적된 경우
    1. HostA에서 HostB로 데이터를 두번 통신
      • 처음엔 HostA가 92~99(8 bytes)까지 해당하는 데이터 패킷을 전송함
      • 다음으로 HostA가 100~119(20 bytes)까지 해당하는 데이터 패킷을 전송함
    2. HostB에서 HostA로 응답 데이터 전송
      1. ack = 100 유실
    3. HostA에서 ack = 100을 받기 전에 데이터 전송
      1. seq = 100, 20byte(100 ~ 119)
    4. HostB에서 응답 데이터 전송
      1. ack = 120
    5. HostA에서는 ack = 100이 유실되었어도 ack = 120을 보고 그 전 데이터까지 잘 받았다고 판단
Comments