TCP Congestion Control New Reno 2006 02 TCP

  • Slides: 31
Download presentation
TCP Congestion Control - New. Reno - 서울산업대학교 컴퓨터공학과 2006. 02 이 동 훈

TCP Congestion Control - New. Reno - 서울산업대학교 컴퓨터공학과 2006. 02 이 동 훈

목 ± TCP개요 ® ± 차 Sliding Window 혼잡제어란? ® RTO관리 ® Window관리 ®

목 ± TCP개요 ® ± 차 Sliding Window 혼잡제어란? ® RTO관리 ® Window관리 ® ® Slow Start & Congestion Avoidance ® Fast Retransmit & Fast Recovery Reno의 동작과정 ± Reno의 문제점 ± New. Reno 소개 ± New. Reno 동작과정/윈도우변화 ± Reference RTO : Retransmission Timeout SACK : Selective ACK 2

TCP 개 요 ± 연결지향 프로토콜 client SYN_SENT (active open) ± ACK를 이용한 신뢰성

TCP 개 요 ± 연결지향 프로토콜 client SYN_SENT (active open) ± ACK를 이용한 신뢰성 보장 ± SYN j Ack j+1 SYN K, 슬라이딩윈도우 LISTEN (passive open) SYN_RCVD ESTABLISHED Ack K+ 1 ESTABLISHE D 3 way-handshake의 연결확립 ± server FIN_WAIT_1 (active close) FIN_WAIT_2 FIN M 1 Ack M+ FIN N CLOSE_WAIT (passive close) LAST_ACK TIME_WAIT Ack N+ 1 CLOSED <TCP의 일반적인 연결확립과 종료> 3

Sliding Window 동작과정 수신자에 의해 광고된 윈도우(offered window) 0 1 2 3 4 5

Sliding Window 동작과정 수신자에 의해 광고된 윈도우(offered window) 0 1 2 3 4 5 6 7 0 1 2 S 0 3 0 1 2 3 4 5 6 7 0 1 2 3 0 1 2 3 4 5 6 7 0 1 2 3 S 1 0 1 2 3 4 5 6 7 0 1 2 S 2 3 송신됐지만 ACK되지 않음 k ac 0 1 2 3 4 5 6 7 0 1 2 3 S 4 S 5 S 6 즉시 송신 가능 (usable window) 1 2 3 4 5 6 7 0 1 2 3 k 0 ac ± (2) 0 1 2 3 4 5 6 7 0 1 2 3 5

TCP 혼잡제어 구현 RFC 1122 Tahoe Reno New. Ren o RTT variance Estimation O

TCP 혼잡제어 구현 RFC 1122 Tahoe Reno New. Ren o RTT variance Estimation O O Exponential RTO Backoff O O Karn’s Algorithm O O Slow Start O O Congestion Avoidance O O O 방 RTO관 리 Window 관리 법 Fast Retransmit Fast Recovery RTO(Retransmission Timeout) : 재전송을 하는 시간 RTT(Round-Trip Time) : 호스트간의 왕복시간 O Reno 수 정 7

RTO관리 ± RTT Variance Estimation ® RTT값의 변화를 추정하여 RTO를 계산 ± Exponential RTO

RTO관리 ± RTT Variance Estimation ® RTT값의 변화를 추정하여 RTO를 계산 ± Exponential RTO Backoff ® 재전송시 지수적으로 RTO증가 ± Karn’s Algorithm ® Retransmission ambiguity problem 때문에 재전송시 이전의 backoff RTO 사용 ® 재전송이 아닌 세그먼트의 ACK도착후 RTT Variance Estimation 방법사용 RTO(Retransmission Timeout) : 재전송을 하는 시간 RTT(Round-Trip Time) : 호스트간의 왕복시간 8

Window관리 ± Slow Start ± Congestion Avoidance ± Fast Retransmit ± Fast Recovery 9

Window관리 ± Slow Start ± Congestion Avoidance ± Fast Retransmit ± Fast Recovery 9

Slow Start cwnd=1 1 1: 513(512) ack 1, win 4096 cwnd=2 3 92 Ack

Slow Start cwnd=1 1 1: 513(512) ack 1, win 4096 cwnd=2 3 92 Ack 513, win 81 513: 1025 ack 1, win 4096 1025: 1537 ack 1, win 4096 4 92 Ack 1025, win 81 cwnd=3 6 7 cwnd=4 9 10 1537: 2049 ack 1, win 4096 2049: 2561 ack 1, win 4096 92 Ack 1537, win 81 2061: 3073 ack 1, win 4096 3073: 3585 ack 1, win 4096 92 Ack 2049, win 81 92 Ack 2561, win 81 cwnd=1 2 cwnd=2 5 cwnd=3 cwnd=4 8 cwnd=5 cwnd=6 11 12 cwnd=5 cwnd=6 FIN, PSH 3585: 4 13 097 ack 1, win 4096 18 80 Ack 3073, win 76 92 Ack 3585, win 81 80 Ack 4098, win 76 098, FIN 1: 1(0) ack 4 8192 acw k in 2, win 8192 (2) 14 15 16 17 cwnd=8 cwnd=9 cwnd=10 cwnd=11 cwnd=12 cwnd=13 cwnd=14 cwnd=15 cwnd=16 11

Congestion Avoidance ± 혼잡 발생시 slow start threshold설정 ® ± (1) ssthresh = cwnd/2

Congestion Avoidance ± 혼잡 발생시 slow start threshold설정 ® ± (1) ssthresh = cwnd/2 cwnd=1, cwnd=ssthresh때까지 slow start -> 지수적 증가 cwnd>=ssthersh이후, ACK받을 때마다 cwnd가 1/cwnd씩 증가1) -> RTT마다 cwnd가 1세그먼트 증가 => 선형적 증가 ce idan o v A on i t s ge Con 혼잡발생 (Timeout) ssthresh ow st ar t cwnd sl ± rt sl ow a st Round-trip times ssthresh : slow start threshold cwnd : congestion window 12 1) 실제 cwnd구하기 : cwnd+=seg. Size*seg. Size/cwnd (∵cwnd는 바이트로 구성)

Congestion Avoidance cwnd=1 cwnd=2 Slow start와 독립적인 알고리듬이지만 함께 사용 cwnd=3 cwnd=4 cwnd=5 cwnd=6

Congestion Avoidance cwnd=1 cwnd=2 Slow start와 독립적인 알고리듬이지만 함께 사용 cwnd=3 cwnd=4 cwnd=5 cwnd=6 cwnd=7 nce cwnd n 혼잡발생 stio e g (Timeout) Con rt ow sl a st ida Avo ssthresh RTT Ssthresh=8 Congestion avoidance ± (2) cwnd=8 cwnd=9 Congestion avoidance가 수행되는 slow start 13

Fast Recovery ± (1) 배 경 ® Fast Retransmit 이후 slow start / congestion

Fast Recovery ± (1) 배 경 ® Fast Retransmit 이후 slow start / congestion avoidacne 실시 ® slow start는 cwnd=1로 설정 Þ ± 비효율적 Fast Recovery ® Fast retransmit 이후 slow start 하지 않고 혼잡회피(cwnd=ssthresh) 수행 15

Fast Recovery ± (2) 동작과정 ® 3개의 중복ACK가 도착하면 (혼잡발생) ® ssthresh = max(cwnd/2,

Fast Recovery ± (2) 동작과정 ® 3개의 중복ACK가 도착하면 (혼잡발생) ® ssthresh = max(cwnd/2, 2) ® Fast Retransmit ® cwnd = ssthresh+3 (∵중복ACK 발생시킨 패킷이 수신측에 버퍼링) ® 추가 duplicate ACK도착할 때마다 cwnd를 1씩 증가, 새 cwnd로 의해 세그먼트 전송이 가능하면 전송. ® retransmit과 그 이후의 세그먼트들에 대한 축적ACK도착하면 ® cwnd=ssthersh ® Congestion Avoidance 수행 -> cwnd의 선형적 증가 ssthresh : slow start threshold cwnd : congestion window 16

Fast Recovery Fast transmit과 Fast Recovery는 독립적인 알고리듬이지만 세그먼트의 크기 : 200 SN= RTO보다는

Fast Recovery Fast transmit과 Fast Recovery는 독립적인 알고리듬이지만 세그먼트의 크기 : 200 SN= RTO보다는 짧다 함께 사용 (3) cwnd = ssthresh+3 cwnd+=1 : : : cwnd=ssthersh 1001 01 1201 Ack=8 (lost ) 001 SN= Ack=1 1401 SN= 201 1601 Ack=1 SN= 1801 SN= 201 2001 Ack=1 201 SN= Ack=1 2201 SN= 201 2401 Ack=1 201 SN= Ack=1 2601 SN= 1201 (retr Ack=1 ansm issio Ack=1201 n) SN= 201 2801 Ack=1 SN= 801 3001 Ack=2 SN= 3201 마지막 올바른 순서인 Ack=1201를 중복하여 보냄 SN=1201를 받고 Ack=2801를 보내 SN=1001~1280의 확인응답을 함 이후 Congestion Avoidance BLUE Font : Fast transmit 동작 RED Font : Fast Recovery 동작 17

Fast Recovery : 손실 패킷 : 보낼 수 있는 패킷 (cwnd) : 송신했지만 ACK

Fast Recovery : 손실 패킷 : 보낼 수 있는 패킷 (cwnd) : 송신했지만 ACK 받지 못한 패킷 0 1 2 3 4 5 6 7 cwnd=12, 8 1번 손실 2 9 10 11 12 13 14 15 16 17 18 19 1~12번 전송 1번의 3개 중복ACK 받음 0 1 2 3 4 5 6 7 8 cwnd=9+8=17, 0 1 2 3 4 5 6 7 cwnd=12/2=6, 12 1번 재전송 5~12번의 중복ACK 받음 9 10 11 12 13 14 15 16 17 18 19 13 13~17번 전송 8 버 퍼 링 2~12 9 10 11 12 13 14 15 16 17 18 19 ssthresh=12/2=6, cwnd=ssthresh+3=9 0 (4) 9 10 11 12 13 14 1번 재전송에 대한 ACK (=ACK 13) 15 16 17 18 19 1+ 2~12를 상위계층으로 전달 17 18 18번 전송 이후 Congestion Avoidance 18

Tahoe/Reno 윈도우 변화 (단일패킷 손실) ± Tahoe Reno ± 3 duplicate ACK cwnd 3

Tahoe/Reno 윈도우 변화 (단일패킷 손실) ± Tahoe Reno ± 3 duplicate ACK cwnd 3 ssthresh time Slow start Congestion Avoidance time Slow start Fast Retransmit & Congestion Avoidance Fast recovery cf. RFC 1122 (Old-Tahoe) RFC 112 2 Tahoe Reno Slow Start O O O Congestion Avoidance O O O cwnd ssthresh time Slow start RTO Slow start Congestion Avoidance Fast Retransmit Fast Recovery O 19

Reno의 동작과정 0 1 2 3 4 5 6 7 cwnd=12, 8 (1) :

Reno의 동작과정 0 1 2 3 4 5 6 7 cwnd=12, 8 (1) : 다수패킷 손실 1, 2번 손실 3 9 10 11 12 13 14 15 16 17 18 19 1~12번 전송 버 퍼 링 3~9 1번의 3개 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=12/2+3=9, ssthresh=12/2=6 1번 재전송 6~9번의 중복ACK 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ACK(2) 받음 0 1 2 3 4 5 6 7 8 1버퍼링 13 13번 전송 cwnd=9+4=13, 12 버퍼링 10~13 9 10 11 12 13 14 15 16 17 18 19 cwnd=6 (=ssthresh) cwnd제한으로 data전송불가 2번의 3개 중복ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=6/2+3=6, ssthresh=6/2=3 2번 재전송 1번 재전송에 대한 ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=6+1=7, 1+2 +3~13를 상위계층으로 전달 2번 재전송에 대한 ACK(14) 받음 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 cwnd=3 : 손실 패킷 : 보낼 수 있는 패킷 (cwnd) 20 : 송신했지만 ACK 받지 못한 패킷

Reno의 동작과정 (2) : 다수패킷 손실 1, 2번 손실 3 0 1 2 3

Reno의 동작과정 (2) : 다수패킷 손실 1, 2번 손실 3 0 1 2 3 4 5 6 7 cwnd=12, 8 9 10 11 12 13 14 15 16 17 18 19 1~12번 전송 버 퍼 링 3~9 1번의 3개 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 cwnd=12/2+3=9, 9 10 11 12 13 14 15 16 17 18 19 ssthresh=12/2=6 1번 재전송 6~9번의 중복ACK 받음 0 1 2 3 4 5 6 7 8 13번 전송 1번 재전송에 대한 ACK(2) 받음 cwnd=9+4=13, 0 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 8 12 13 1버퍼링 10~13 9 10 11 12 13 14 15 16 17 18 19 cwnd제한으로 data전송불가 cwnd=6, 2번의 3개 중복ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=6/2+3+1=7, ssthresh=6/2=3 2번 재전송에 대한 ACK(14) 받음 14 1+2 +3~13를 상위계층으로 전달 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 cwnd=3 14~16번 전송 : 손실 패킷 : 보낼 수 있는 패킷 (cwnd) : 송신했지만 ACK 받지 못한 패킷 버퍼링 14~16 21

Reno의 문제점 0 1 2 3 4 5 6 7 cwnd=12, 8 (2) 1,

Reno의 문제점 0 1 2 3 4 5 6 7 cwnd=12, 8 (2) 1, 2, 3번 손실 9 10 11 12 13 14 15 16 17 18 19 4 1~12번 전송 1번의 3개 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 12 cwnd=12/2+3=9, ssthresh=12/2=6 1번 재전송 버퍼링 4~12 7~12번의 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 13 9 10 11 12 13 14 15 16 17 18 19 1버퍼링 cwnd=9+6=15 1번 재전송에 대한 ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd제한으로 data전송불가 2번의 3개 중복ACK(2) 받음 cwnd=6 (=ssthresh) 0 1 2 3 4 5 6 7 8 버퍼링 13~15 9 10 11 12 13 14 15 16 17 18 19 cwnd=6/2+3=6 (ssthresh=6/2=3) 2번 재전송 2버퍼링 2번 재전송에 대한 ACK(3) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=3 (=ssthresh) RTO =>성능저하 3번 재전송 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=1 (=slow start) ☞New. Reno의 동작과정 슬라이드 : 손실 패킷 23 : 보낼 수 있는 패킷 (cwnd) : 송신했지만 ACK 받지 못한 패킷

Reno의 문제점 0 1 2 3 4 5 6 7 cwnd=12, 8 1, 2번

Reno의 문제점 0 1 2 3 4 5 6 7 cwnd=12, 8 1, 2번 손실 (3) 3 9 10 11 12 13 14 15 16 17 18 19 1~12번 전송 1번의 3개 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 버퍼링 3~6 7 9 10 11 12 13 14 15 16 17 18 19 cwnd=12/2+3=9, ssthresh=12/2=6 1번 재전송 6~9번의 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 cwnd=9+4=13, 0 1 2 3 4 5 6 7 12 9 10 11 12 13 14 15 16 17 18 19 13번 전송 1번 재전송에 대한 ACK(2) 받음 8 9 10 11 12 13 14 15 16 17 18 19 버퍼링 8~9 1버퍼링 13 버퍼링 10~13 cwnd=6 (=ssthresh) 2번의 3개 중복ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd=6/2+3+1=7, ssthresh=6/2=3 2번 재전송 cwnd제한으로 data전송불가 2번 재전송에 대한 ACK(7) 받음 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 cwnd=3 7번 재전송 5 6 7 8 2버퍼링 RTO =>성능저하 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 cwnd=1 (=slow start) : 손실 패킷 : 보낼 수 있는 패킷 (cwnd) 24 : 송신했지만 ACK 받지 못한 패킷

New. Reno의 동작과정 1) (1) 세개의 중복 ACK 수신후 Fast recovery상태가 아니면, ① ssthresh

New. Reno의 동작과정 1) (1) 세개의 중복 ACK 수신후 Fast recovery상태가 아니면, ① ssthresh = max(cwnd/2, 2) ② 이미 전송된 가장 높은 seq를 recover 1)변수에 저장 2) 손실된 packet을 retransmit, cwnd = ssthresh+3 3) 추가 중복 ACK가 수신될 때마다 cwnd를 1씩 증가 4) 새 cwnd로 의해 패킷 전송이 가능하면 전송. 5) 2)의 retransmit한 패킷에 대한 ACK가 수신 a. b. 수신된 ACK의 seq > recover : Fast recovery 종료 ( =Reno ) ACK의 seq <= recover : partial ACK 1) recover변수는 Fast recovery 종료 때까지 유지 26

New. Reno의 동작과정 0 1 2 3 4 5 6 7 cwnd=12, 0 1

New. Reno의 동작과정 0 1 2 3 4 5 6 7 cwnd=12, 0 1 2 3 4 8 이 페이지는 프린터출력을 하지 마십시요. 이 페이지는 애니메이션 슬라이드입니다. (3) 9 10 11 12 13 14 15 16 17 18 19 1, 2, 3번 손실 4 1~12번 전송 5 6 7 8 9 10 11 12 13 14 15 16 ssthresh=12/2=6 cwnd=12/2+3=9, 1번의 3개 중복ACK(1) 받음 12 17 18 19 recover=12 버퍼링 4~12 1번 재전송 7~12번의 중복ACK(1) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 13 13~15번 전송 cwnd=9+6=15 1번 재전송에 대한 ACK(2) 받음 (=partial ACK, ∵ 2<=12 ) 0 1 2 3 4 5 6 7 1버퍼링 8 버퍼링 13~15 9 10 11 12 13 14 15 16 17 18 19 2번 재전송 cwnd=6 (=ssthresh) 2버퍼링 13~15번의 중복ACK(2) 받음 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cwnd제한으로 data전송불가 cwnd=6+3=9 2번 재전송에 대한 ACK(3) 받음 (=partial ACK, ∵ 3<=12 ) 0 1 2 3 4 5 6 7 8 1+2+3 9 10 11 12 13 14 15 16 17 18 19 3번 재전송 cwnd=6 (=ssthresh) 3번 재전송에 대한 ACK(16) 받음 (16>12 ) 16 +4~15를 상위계층으로 전달 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 cwnd=6 (=ssthresh) ☞Reno의 문제점(2) 슬라이드 16~21번 전송 : 손실 패킷 28 : 보낼 수 있는 패킷 (cwnd) : 송신했지만 ACK 받지 못한 패킷

New. Reno 윈도우 변화 ± 다수의 패킷 손실에 대한 윈도우 변화 Partial ACK수신 &

New. Reno 윈도우 변화 ± 다수의 패킷 손실에 대한 윈도우 변화 Partial ACK수신 & 재전송 cwnd 3 duplicate ACK 3 ssthresh time New Data ACK수신 Fast Recovery 종료 29

Reference ± Stevens, W. , Allman, M. and V. Paxson, "TCP Congestion Control", RFC

Reference ± Stevens, W. , Allman, M. and V. Paxson, "TCP Congestion Control", RFC 2581, April 1999. ± S. Floyd, T. Henderson, “The New. Reno Modification to TCP's Fast Recovery Algorithm”, RFC 2582, April 1999. ± 김범준, “TCP Congestion Control Mechanism”, Netmanias white papers, Sep 2000, http: //www. netmanias. com/ ± 김범준 , “Recovery from Multiple Packet Loss in TCP”, Netmanias white papers, Nov 2000, http: //www. netmanias. com/ ± Stevens, W. , "TCP/IP Illustrated, Volume 1: The Protocols", Addison -Wesley, 1994. ± 안상현 외 2, “컴퓨터 네트워킹 : 인터넷 프로토콜 및 기술”, ITC, 2004. ± Fall and S. Floyd, “Simulation-based comparisons of Tahoe, Reno, and Sack TCP, “ Comput. Commun. Rev. , 1996. 30

감사합니다. soundpack@paran. com

감사합니다. soundpack@paran. com