Chapter3.6 TCP 신뢰 전송과 흐름 제어
- TCP 세그먼트 전송 규칙
- 누적 수신확인(Cumulative Acknowledgement)
- 단일 타이머(Single Timer) - 재전송 기반 오류 복구
- Timeout에 의한 재전송
- 빠른 재전송(Fast Retransmission - 흐름 제어(Flow Control)
TCP 세그먼트 전송 규칙
- 누적 수신 확인(Cumulative Acknowledgement)
- 누적적으로 완전하게 수신된 바이트 스트림 번호 확인
- 중복 ACK 세그먼트 수신 가능
- 중복 ACK(Duplicate ACK)
- 이미 수신한 확인번호(Acknowledgement Number)를 가진 ACK
- 중복 ACK 수신
- 순서가 바뀐 세그먼트 도착
- 중간 세그먼트 손실
- 단일 타이머(Single Timer)
- 누적 수신 확인이 되지 않은 가장 오래된 세그먼트에 대한 재전송 타이머 유지
*오른쪽 그림에서
139까지 정상 수신되었기에, ACK가 100이 아닌, 140이 된다.(누적수신확인)
재전송 기반 오류 복구
- Timeout에 의한 재전송
- Timeout 동안 누적 미수신 세그먼트 재전송
- 라우터 버퍼 오버플로우(Buffer Overflow)에 의한 세그먼트 손실
- 네트워크 혼잡 상황에 따른 버퍼 오버플로우 발생
- 충분히 긴 시간(timeout) 동안 ACK 미수신
* 누적 수신 확인하기 때문에,
ACK 세그먼트를 받지 않았다고 해서, 그 세그먼트를 반드시 재전송 하는 것은 아니다!
- 빠른 재전송(Fast Retransmission)
- 세그먼트가 손실된 상황에서 Timeout까지 불필요한 긴 시간 대기 회피
- 3개 중복 ACK가 도착하면 Timeout과 무관하게 누적 수신 확인 다음 세그먼트 재전송
*Timeout에 의해 패킷이 손실되었다고 판단하는 것이 아니라,
중복된 ACK 세그먼트 3개를 받았을 때 Timeout 보다 더 빨리 손실을 판단하는 것
→ 더 빠르게 재전송 가능 → 재전송 시간 줄임 → 네트워크 성능 높임
- Timeout 전에 중복 ACK 발생 상황 이유
- 순서가 바뀐 세그먼트 도착
- 중간 세그먼트 손실
- 순서가 바뀐 세그먼트 도착
- 1~2개의 중복 ACK 후에 정상 ACK 회신
- 연속된 세그먼트의 도착 시간에 큰 차이가 없음
- 3개 이상의 중복 ACK가 발생하면 순서 문제가 아니라고 판단 → 손실!
- 중간 세그먼트 손실
- 라우터에 경미한 버퍼 오버플로우 발생
- 오버플로우 상황이 바로 개선되어 다음 세그먼트들은 정상 도착
[그림] 빠른 재전송
흐름 제어(Flow Control)
: 송신 TCP가 지나치게 많은 데이터를 한꺼번에 송신함으로써
수신 TCP의 버퍼가 넘쳐(overflow) 데이터 손실이 발생하는 문제를 방지하는 메커니즘
- 방안
- 수신 TCP는 자신의 수신 버퍼내의 여유 공간의 크기를 송신 TCP에게 통지하고,
송신 TCP는 통지된 여유 공간의 크기보다 적은 양의 데이터를 송신
- 수신윈도우(RecvWindow, rwnd)
- 수신 버퍼 내의 여유 공간의 크기
- 수신윈도우 변화
- 연결 설정 시에 수신버퍼크기와 동일하게 설정
- 수신 데이터의 버퍼 저장과 응용 프로세스에 의한 버퍼 데이터 읽기 과정에서 수신 윈도우 변화
*변하는 수신윈도우의 상태를 송신자에게 반드시 알려주어야 한다. (by. ACK 세그먼트를 통해)
- 수신윈도우 통보
- 수신 TCP가 송신 TCP로 전달하는 세그먼트의 수신윈도우 필드에 포함되어 통보
- 송신 TCP의 흐름 제어
- 마지막으로 송신한 바이트 번호와 확인 세그먼트를 통해
마지막으로 수신 확인된 바이트 번호의 차이가 항상 수신윈도우보다 작게 유지 - 마지막송신바이트번호 - 마지막수신확인바이트번호 ≤ 수신윈도우
- (LastByteSent - LastByAcked ≤ rwnd)
- 수신윈도우 0
- 송신 TCP는 더 이상 데이터를 전송하지 않고 수신 TCP로부터 변경된 수신윈도우가 도착하길 기다림
- 수신 TCP는 송신 TCP로 전송할 확인 세그먼트가 없어 수신윈도우 변화를 통보하지 못함
- Deadlock 상태 진입
*ACK 세그먼트 (rwnd=0)
- 윈도우 프로브(Probe) 세그먼트
- 수신윈도우가 0일 때 송신 TCP가 수신 TCP에게 주기적으로 전송하는 1바이트 세그먼트
- 수신 TCP는 프로브 세그먼트에 대한 확인 세그먼트를 통해 최신 수신윈도우 정보를 송신 TCP에게 제공
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터네트워크] Chapter4.1 인터넷 프로토콜(IP) (0) | 2023.12.14 |
---|---|
[컴퓨터네트워크] Chapter3.7 TCP 혼잡 제어 (0) | 2023.12.14 |
[컴퓨터네트워크] Chapter3.5 TCP 세그먼트 구조와 재전송 타이머 (0) | 2023.12.12 |
[컴퓨터네트워크] Chapter3.5 TCP 연결관리 (0) | 2023.12.04 |
[컴퓨터네트워크] Chapter3.4 오류복구3_Selective_Repeat ARQ (1) | 2023.12.03 |