Computer Network

[컴퓨터 네트워크] TCP 신뢰 전송과 흐름 제어

JunsuKim 2022. 10. 31.
728x90

TCP 세그먼트 전송 규칙

누적 수신 확인

  • 누적적으로 완전하게 수신된 바이트 스트림 번호 확인
  • 중복 ACK 세그먼트 수신 가능

중복 ACK

  • 이미 수신한 확인번호를 가진 ACK

중복 ACK 수신

  • 순서가 바뀐 세그먼트 도착
  • 중간 세그먼트 손실

단일 타이머(Single Timer)

  • 누적 수신 확인이 되지 않은 가장 오래된 세그먼트에 대한 재전송 타이머 유지

재전송 기반 오류 복구

Timeout에 의한 재전송

  • Timeout동안 누적 ACK 미수신 세그먼트 재전송

  • 라우터 버퍼 오버플로우(Buffer Overflow)에 의한 세그먼트 손실
  • 네트워크 혼잡 상황에 따른 버퍼 오버플로우 발생
  • 충분히 긴 시간(timeout) 동안 ACK 미수신

빠른 재전송

  • 세그먼트가 손실된 상황에서 Timeout까지 불필요한 긴 시간 대기 회피
  • 3개 중복 ACK 도착하면 Timeout과 무관하게 누적 수신 확인 다음 세그먼트 재전송

Timeout 전에 중복 ACK 발생 상황 이유

  • 순서가 바뀐 세그먼트 도착
  • 중간 세그먼트 손실

순서가 바뀐 세그먼트 도착

  • 1~2개의 중복 ACK 후에 정상 ACK 회신
  • 연속된 세그먼트의 도착 시간에 큰 차이가 없음
  • 3개 이상의 중복 ACK가 발생하면 순서 문제가 아니라고 판단

중간 세그먼트 손실

  • 라우터에 경미한 버퍼 오버플로우 발생
  • 오버플로우 상황이 바로 개선되어 다음 세그먼트들은 정상 도착

흐름 제어(Flow Control)

정의

  • 송신 TCP가 지나치게 많은 데이터를 한꺼번에 송신함으로써 수신 TCP의 버퍼가 넘쳐(oveflow) 데이터 손실이 발생하는 문제를 방지하는 메커니즘

방안

  • 수신 TCP는 자신의 수신 버퍼 내의 여유 공간의 크기를 송신 TCP에게 통지하고, 송신 TCP는 통지된 여유 공간의 크기보다 적은 양의 데이터를 송신

수신 윈도우(RecvWindow, rwnd)

  • 수신 버퍼 내의 여유 공간의 크기

수신윈도우 변화

  • 연결 설정 시에 수신버퍼크기와 동일하게 설정
  • 수신 데이터의 버퍼 저장과 응용 프로세스에 의한 버퍼 데이터 읽기 과정에서 수신윈도우 변화

수신윈도우 통보

  • 수신 TCP가 송신 TCP로 전달하는 세그먼트의 수신윈도우 필드에 포함되어 통보

송신 TCP의 흐름 제어

  • 마지막으로 송신한 바이트 번호와 확인 세그먼트를 통해 마지막으로 수신 확인된 바이트 번호의 차이가 항상 수신윈도우보다 작게 유지
  • 마지막 송신바이트 번호 - 마지막 수신바이트 번호 ≤ 수신윈도우
    (LastByteSent - LastByteAcked ≤ rwnd)

수신윈도우 0

  • 송신 TCP는 더 이상 데이터를 전송하지 않고 수신 TCP로부터 변경된 수신 윈도우가 도착하길 기다린다.
  • 수신 TCP는 송신 TCP로 전송할 확인 세그먼트가 없어 수신윈도우 변화를 통보하지 못한다.
  • DeadLock 상태에 진입

윈도우 프로브(Probe) 세그먼트

  • 수신윈도우가 0일때 송신 TCP가 수신 TCP에게 주기적으로 전송하는 1바이트 세그먼트
  • 수신 TCP는 프로브 세그먼트에 대한 확인 세그먼트를 통해 최신 수신윈도우 정보를 송신 TCP에게 제공한다. 
728x90

댓글