week 8 - zxc22273146/TCP-IP GitHub Wiki
TCP與網路阻塞偵測與控制技術(Transport Protocols)
-
傳輸層協議的特色
可靠的(guaranteed)訊息傳遞
訊息傳遞順序與發送順序相同(in the same order)
一個訊息最多只會傳遞一份(one copy)
允許接收端對傳送端執行流量控制(flow control)
-
TCP是連線導向協議
-
TCP是位元組導向服務協議(byte-oriented service protocol),且每個位元組使用一個序號。
-
流量控制為避免傳送端傳送的資料量超過接收端的容量
壅塞控制為避免傳送端傳送的資料量超過網路的容量
-
TCP segments
TCP不會透過互聯網傳輸個別的位元組
TCP來源端會將應用程式傳送的位元組先儲存起來,等到形成一個合理大小的資料段(segment),再將此資料段送出。
TCP目的地端會先將收到的資料段內容放入接收緩衝器,接收資料的應用程式再由此緩衝器讀取資料。
-
TCP Header中的sequence number是指封包所攜帶的data第一個byte的sequence number
-
TCP滑動視窗演算法會使用TCP標頭的Acknowledgment、AdvertisedWindow、SequenceNum欄位。
-
URG旗標設為1表示此資料段包含緊急資料,而緊急資料會放在資料段的最前面部分。
RESET旗標設為1表示接收端想要中止此連線
-
pseudoheader包含了IP標頭的來源端IP位址、目的地端IP位址以及IP標頭的長度欄位。
-
weighted average of RTT(此方法在封包重送時有缺點)
EstRTT=α*EstRTT+(1-α)*SampleRTT
alpha介於0.8~0.9
TimeOut=2*EstRTT
-
Difference=SampleRTT-EstimatedRTT
EstimatedRTT=EstimatedRTT+(δ*Difference)
Deviation=Deviation+δ(|Difference|-Deviation)
TimeOut=μEstimatedRTT+øDeviation
δ between 0 and 1,μ=1,ø=4。
-
Seq=70,20bytes代表這個封包中的序號為70~89,所以等待的ACK=90(表示90以前的都收到了),也因此下一次的封包Seq是從90開始。
-
TCP Fast Retransmission:當重複收到三次ACK,便會馬上重送ACK所指的封包。如重複收三次Receiver的ACK=2,那Sender會馬上送序號為2的封包。
-
TCP傳送端根據它觀察到的網路壅塞程度來設定CongestionWindow的值
-
TCP將"封包遺失"視為壅塞訊號,而當TCP傳送端收到三個"重複回覆"時,或是當TCP傳送端發生"逾時事件"時,便會判定網路發生阻塞。
-
Additive Increase Multiplicative Decrease(AIMD):線性增加倍數減少
CongestionWindow是倍數下降(一次降一半),16到8、4、2最後是1。
增加是線性增加,每經過一個RTT便加一,1、2、3...。
但TCP不等所有ACK都收到才加MSS,而是每收到一個ACK就加一部份(CW可以較早滑動),increment=MSS*(MSS/CongestionWindow)。
-
Slow Start:每收到一個ACK就將CongWin加1個MSS
-
當CongWin低於threshold時使用slow-start(slow-start phase),當它高於threshold時,使用linearly(congestion-avoidance phase)。
當triple duplicate ACK發生時,threshold跟CongWin都降為一半,CongWin linearly增加。
當timeout發生時,threshold降到一半,CongWin降為1個MSS,CongWin先指數增加再線性。