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
'Computer Network' 카테고리의 다른 글
[컴퓨터 네트워크] 인터넷 프로토콜: IP (0) | 2022.11.08 |
---|---|
[컴퓨터 네트워크] TCP 혼잡 제어(Congestion Control) (0) | 2022.11.01 |
[컴퓨터 네트워크] TCP 세그먼트 구조와 재전송 타이머(TCP Segment & Retransmission Timer) (0) | 2022.10.13 |
[컴퓨터 네트워크] TCP 연결관리(Connection Management) (0) | 2022.10.12 |
[컴퓨터 네트워크] 오류 복구3: Selective_Repeat ARQ (0) | 2022.10.09 |
댓글