제 22 장 TCP Persist Timer
Contents Introduction TCP Persist Timer Silly Window Syndrome Summary
Introduction Window를 기반으로 한 TCP 흐름 제어 TCP의 Dead Lock 상태 데이터 패킷 전송 시 수신 가능한 Window Size를 지정(Receiver) Window Size가 “0” 이면? 데이터 전송을 중지하고 대기 상태(Sender) TCP의 Dead Lock 상태 Sender/Receiver 모두 대기 상태 데이터 패킷에 대한 Ack 메시지가 분실될 경우 발생 Ack 패킷에 대한 응답확인패킷이 없음
TCP Persist Timer 정의 Window Probes 특성 Receiver의 Window Size 증가 여부를 확인하기 위해 일정 간격으로 Sender 측에서 구동하는 Timer Window Size가 0 인 패킷을 수신할 때 동작 Window Probes 특성 Persist Timer 종료 후 Window 증가 여부 확인 패킷을 전송(Window Probing) 1 byte의 데이터 포함 Window Size가 증가 될 때까지 반복(재전송 Timeout과 다른점)
TCP Persist Timer 예(1) bsdi % sock -i -s -P100000 5555
TCP Persist Timer 예(2)
Spacing of Window Probes 약 5, 6, 12, 24, 48, 60 초 간격으로 전송 TCP는 500ms 타이머에 의존 다음 클럭 주기까지 시간 : 500ms - 응답시간(4ms) Persist Timer 계산 : TCP의 지수 backoff 사용 항상 5~60초 사이에 Timeout LAN Connection의 timeout : 1.5초( 2,4,8 배수로 계속)
Silly Window Syndrome 정의 CASE full-sized segment 대신에 적은 양의 data가 connection을 통해 교환되는 현상 CASE Receiver: 작은 Window를 통지 Sender : 적은 양의 데이터를 송신
Avoidance of Silly Window Syndrome Receiver는 small segment를 통보해서는 안됨. Window가 one-full-sized segment로 증가할 때 통보 Receiver의 buffer space의 1/2로 증가 할 때 통보 Sender는 다음 조건을 만족할 때 data를 전송함. Full-sized segment를 전송할 수 있을 때 Receiver에 의해 통보된 maximum sized window의 1/2 이상을 전송할 수 있을 때 모든 데이터를 전송할 수 있고 Ack를 기대하지 않을 때 Nagle algorithm이 enable 되어 있는 상태가 아닐 때
SWS 회피를 위한 데이터 전송 시나리오(1) sun % sock -i -n6 bsdi 7777 bsdi % sock -i -s -P4 -p2 -r256 7777 sun.1069 PSH 1:1025(1024) ack 1, win 4096 PSH 1025:2049(1024) ack 1, win 4096 bsdi.7777 PSH 2049:3073(1024) ack 1, win 4096 PSH 3073:4097(1024) ack 1, win 4096 ack 4097, win 0 1 2 3 4 5 4097:4098(1) ack 1, win 4096 6 ack 4098, win 0 7 4098:4099(1) ack 1, win 4096 8 ack 4099, win 0 9 4099:4100(1) ack 1, win 4096 10 ack 4100, win 1533 11 0.0 0.002026(0.0020) 0.003737(0.0017) 0.005361(0.0016) 0.170306(0.1649) 5.151768(4.9815) 5.170308(0.0185) 10.151592(4.9813) 10.170299(0.0187) 15.151466(4.9812) 15.170296(0.0188)
SWS 회피를 위한 데이터 전송 시나리오(2) sun.1069 bsdi.7777 12 13 14 15 16 17 18 19 20 21 4100:5124(1024) ack 1, win 4096 ack 5124, win 509 5124:5633(509) ack 1, win 4096 ack 5633, win 0 5633:5634(1) ack 1, win 4096 ack 5634, win 1279 FIN, PSH 5634:6145(511) ack 1, win 4096 ack 6146, win 767 ack 6146, win 2816 FIN 1:1(0) ack 6146, win 4096 ack 2, win 4096 22 sun.1069 bsdi.7777 15.172006(0.0017) 15.370307(0.1983) 20.151782(4.7815) 20.170297(0.0185) 25.151162(4.9809) 25.170302(0.0191) 25.171801(0.0015) 25.174401(0.0026) 39.991658(14.8173) 51.991775(12.0001) 51.992665(0.0009)
Receiver에 의한 SWS 회피 Event
Sender에 의한 SWS 회피 Event
Silly Window Syndrome Avoidance Receiver에 의한 silly window syndrome avoidance 세그먼트 7에서 receiver는 window를 0으로 advertise 함 Receiver는 full-sized segment 혹은 그 buffer의 1/2을 위한 공간을 가지고 있지 않기 때문이다. Sender에 의한 silly window syndrome avoidance 세그먼트 13에서 window size가 509 byte인데 바로 전송하지 않음 Sender는 Persist Timer가 종료된 후 14번 segment에서 509byte를 전송 (window를 계속 open 할 것인가를 확인하기 위해 약 5초간 대기)
Summary Window를 기반으로 하는 TCP에서 데이터 흐름 제어를 원활하게 하기 위해 receiver가 zero-sized window를 advertise할 때 set된다. Sender는 retransmission interval을 이용해서 closed window probing을 계속한다. Silly window syndrome 회피는 TCP가 small window를 advertise하거나 small segment를 전송하는 것을 방지한다.