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先指數增加再線性。