300x250

1. 연결종

4way handshake와 상태 천이
1. Client APPClose()되어 FIN 전송 후 FIN_WAIT_1 상태로 대기
2. ServerFIN을 받으면 해당 포트를 CLOSE_WAIT로 바꾸고
    ACK
를 보냄

3. ACK를 받은 ClientFIN_WAIT_2로 변경
    그와 동시에 Server에서는 App에게 Close()를 요청

4. Close를 받은 APP은 종료 프로세스를 진행시켜 Close()가 되고
    ServerFIN 패킷을 전송 후 LAST_ACK 상태로 천이
5.Client FIN_WAIT_2에서 FIN을 받으면 ACK를 응답하고 자신은
   TIME_WAIT
로 상태를 변경

 

6. ClientACK를 받으면 서버는 자신의 포트도 CLOSED 상태로 변경
 
 

2. 연결 설정과 연결 패킷 분석

연결 설정
1.Server Open(오른쪽)
2.Client Connection(왼쪽)

 

=> ClientConnect 호출 시 SYN가 전송되고 연결 시작

연결 종료
1.Client에서 2를 눌러 Close() 호출(왼쪽)

 

Client -> Server FIN,ACK 패킷 전송

2.   Server에서 2를 눌러 Close() 호출(오른쪽)

 

Server -> Client FIN,ACK 패킷 전송
TIME_WAIT 상태
송신기는 ACK를 보내고 2MSL(Maximum Segment Lifetime) Wait를 수행
수신기가 ACK받지 못한 경우에 받을 때 까지 FIN을 전송함.
2MSL 대기 상태에 있는 동안, socket pair 재사용 X
 
 
14. TCP 타임아웃과 재전송
 
contents
1.개요
2.간단한 타임아웃과 재전송 예제
3.재전송 타임아웃의 설정
4.타이머 기반 재전송
5.빠른 재전송
6.선택 확인 응답을 가진 재전송
7.의사 타임아웃과 재전송
8.패킷 재순서화
9.재패킷화

 

10.정리
 

1. 개요

재전송과 타임아웃
TCP는 데이터 세그먼트나 ACK가 손실 되면 재전송을 수행.
시간기반
ACK 기반
 
TCP는 데이터 전송 후 타이머를 설정하고, 타이머 종료 까지 ACK를 받지 못하면 timeout이 발생함.

 

TimeoutRetransmission Time Out(RTO)라 부르는 시간이 지난 후 발생 함.
14장 학습 목표
세그먼트 손실 시 무엇을 전송할 것인가?
손실에 대한 응답은 어떻게 하는가?
RTORTT 측정에 기반을 두고 설정되는 방식?
SACK의 사용법?
TCP의 동작에 따른 IP 패킷의 재정렬의 영향
TCP 재전송 시 자신의 패킷 크기를 변경 시키는 방법
 

2. 간단한 타임아웃과 재전송 예제

재전송
1:1 환경에서의 재전송
net.ipv4.tcp_retries1(재전송 횟수)
net.ipv4.tcp_retries2(재전송 종료 시간, RTO)
 
1:N 환경에서의 재전송
네트워크 링크에 장애로 인해 트래픽의 경로가 재설정 되면
RTT(Round Trip Time)
를 수정해야 함.
RTTRTO의 계산과정에 필요하기 때문에 RTO는 동적으로 변하게 됨

 

RTT = Round Trip Time
RTO = Retransmission Time Out
 

3. 재전송 타임아웃의 설정

RTTRTO의 관계
RTT샘플
패킷(Seq Number로 구분)을 전송하고 이 패킷에 대한 ack를 수신하는데 필요한 시간을 측정 하는 것
 

 

RTT 샘플을 모아 RTT 값의 범위를 결정하고 이를 기반으로 RTO를 설정함.
고전적인 RTT 추정 방법
스무드 RTT 추정기(SRTT, Smoothed RTT estimator)
SRTT = a(SRTT) + (1 – a)RTTs
자신의 현재 값과 새로운 RTTs를 기반으로 갱신 됨.
상수 a0.8~0.9 사이의 비례인자

=> static 방법

 
RTO = min(ubound, max(Ibound, (SRTT)b))
Ubound = RTO의 상한(1분 정도)
Ibound = RTO의 하한(1초 정도)

 

B = 1.3 ~ 2.0 사이의 인자.
재전송 모호성
RTT 샘플 측정의 문제
패킷이 전송 -> 타임아웃 -> 패킷 재전송 -> 확인응답 수신
어떤 패킷의 ACK인가?
 
해결방법

 

타임스탬프 옵션을 사용
타임스탬프 옵션을 가진 RTT 측정
LinuxWindows를 포함하는 대부분에서 사용하는 알고리즘.
 

 

타임스탬프 옵션(TSOPT)은 왕복시간 측정(RTTM, Round-Trip Time Measurement)을 위해 사용 됨.
알고리즘 설명
1.송신자는 전송할 세그먼트의 TSOPT 옵션을 설정하고 TSV32bit 타임스탬프 값을 설정.
세그먼트가 전송 될 때마다 TCP 시간 값을 포함하게 됨.
  2. 수신기는 ACK 세그먼트의 TSER(TS Echo Reply)TSV값을 

        기록하여 전달
    3.
새로운 세그먼트가 LastACK 값과 일치하는 순서번호를 가진다면
        TSV
tsrecent에 저장 됨.

    4. ACK를 수신한 송신기는 자신의 Time에서 TSER을 뺀 값을
        RTT
추정을 위한 샘플 값으로 사용 함.

 

TSOPT를 사용한 예제
(순서에 벗어난 세그먼트의 처리)
 
 

4. 타이머 기반 재전송

챕터목표
재전송 타임아웃(RTO)를 설정하여 패킷의 왕복 시간을 알아냈음.

 

이를 기반으로 어떻게 재전송 하는가?
 
타이머 기반 재전송
TCPRTO 시간 까지 ACK를 수신하지 못하면 타이머 기반
재전송을 수행함.
 
타이머 기반 재전송은 데이터 전송률을 감소시킴.
혼잡 제어에 기반을 두고 자신의 송신 윈도우 크기를 감소 시킴
RTO에 적용되는 back off 인자의 증가(지수 배 back off)
ACK 가 수신되면 지수는 1로 재설정 됨.
 
이 방법은 네트워크의 이용률을 감소 시키기 때문에 빠른 재전송이라는 다른 방법 또한 제공함.

 

 
 
 

5. 빠른 재전송

기본 알고리즘
수신기로부터의 ACK에 기반을 두고 패킷을 재전송.
수신기는 세그먼트를 받으면 다음 세그먼트를 보내 달라는 ACK를 전송.

 

순서에 벗어난 세그먼트를 받으면 중복 ACK를 전송.
 
기본 알고리즘

 

중복 ACK임계값(dupthresh)에 도달하면 아직 받지못한 세그먼트를 전송.
 
 

6. 선택 확인 응답을 가진 재전송

빠른 재전송의 문제점
수신기가 손실 세그먼트를 1개씩 밖에 알려주지 못함.
SACK 옵션을 사용하여 해결할 수 있음.
SACK 옵션은 10byte ~ 40byte까지 사용 가능

 

SACK 옵션이 10byte일 경우
최대 4개의 블록에 대한 정보를 포함 할 수 있음
수신기에서 SACK option의 동작 예

 

송신기에서 SACK option의 동작

 

수신기로부터의 SACK 으로부터 hole을 채우기 위한 세그먼트를 추론하여 전송.
Wireshark에서 SACK 옵션 허용
 

7. 의사 타임아웃과 재전송

의사  재전송
데이터를 손실하지 않은 경우에도 재전송을 수행하는 것.
원하지 않는 재전송
E.g.
너무 일찍 종료된 타임아웃
 
원인
의사 타임아웃
실제 RTT가 최근 RTO를 초과할 때 발생
패킷 재순서화(8)
ACK 손실

 

 
의사  타임아웃의 처리
검출 알고리즘과 응답 알고리즘
 
검출 알고리즘
의사 재전송의 검출
아이펠 검출 알고리즘
 
응답 알고리즘
의사 재전송이라고 간주되면 TCP에 의해 실행 되는 알고리즘
아이펠 응답 알고리즘

 

혼잡 제어(16)에서 좀 더 자세히 다룸.
아이펠 검출 알고리즘
1.전송 시 TCP TSOPT 옵션을 사용함.
2.송신기에서 재전송이 실행 되면(타이머 기반 or 빠른 재전송) TSV 값이 저장됨.
3.ACK를 수신하면 ACKTSER을 검사함.
4.TSV < TSER 이라면 ACK는 재전송이 아니라 일반 전송에
해당 되고, 의사 재전송이라는 것을 의미함.
 

 

 

8. 패킷 재순서화

패킷 재순서화
재전송을 유발하는 다른 Case.
IP네트워크에서 발생함.
원인
IP패킷 사이의 상대적인 순서를 보장 하지 않기 때문.
결과
수신기에 도착한 패킷의 순서가 뒤바뀜.
재전송을 유발함.

 

패킷 재순서화의 영향

 

재전송을 유발함.
해결방법

 

심각한 재순서화는 일반적이지 않으며, dupthresh를 설정하여 처리 가능.
 

9. 재패킷화

패킷화
패킷 재전송 시 효율을 높이는 방법.
TCP가 타임아웃 되어 재전송 할 때 좀 더 큰 세그먼트를 전송
하는 것.
패킷화 된 세그먼트의 크기는
수신기로부터 통보된 MSS를 초과할 수 없음.
경로 MTU를 초과할 수 없음.

 

 

10. 정리

타임아웃 발생과 재전송 전략
송신기가 패킷을 전송할 때 네트워크를 끄는 경우
타이머를 기반으로 재전송.
각 재전송은 2진 지수형 백 오프를 사용
 
재전송 모호성
타임스탬프 옵션을 사용하여 해결
 
빠른 재전송
타이머 종료 없이 ACK 개수를 이용하여 재전송.
 
선택 확인 응답 재전송

 

SACK 옵션을 사용하여 재전송
RTT 추정
재전송 타임아웃 값을 계산하는데 사용 됨.
 
의사 재전송
RTT 추정 값이 실제 RTT 보다 작을 때 발생
의자 재전송 탐지 알고리즘
아이펠 검출 알고리즘
의사 재전송 처리 알고리즘

 

아이펠 응답 알고리즘

 

반응형

+ Recent posts