計算機網絡原理(10)——TCP協議

一、TCP概述

  • 點對點:一個發送方,一個接收方。

  • 可靠的按序的字節流

  • 流水線機制:TCP擁塞控制和流量控制設置窗口尺寸。

  • 發送方/接收方緩存

  • 全雙工(full-duplex):同一連接中能夠傳輸雙向數據流。

  • 面向連接

    • 通信雙方在發送數據之前必須建立連接;
    • 連接狀態只在連接的兩端中維護,在沿途節點中並不維護狀態;
    • TCP連接包括:兩臺主機上的緩存、連接狀態變量、socket等。
  • 流量控制機制

二、TCP:序列號和ACK

序列號

  • 序列號指的是segment中第一個字節的編號,而不是segment的編號
  • 建立TCP連接時,雙方隨機選擇序列號

ACKs

  • 希望接收到的下一個字節的序列號
  • 累計確認:該序列號之前的所有字節均已被正確接收到

問題:接收方如何處理亂序到達的segment?

  • TCP規範中沒有規定,由TCP的實現者做出決策

三、TCP可靠數據傳輸概述

  • TCP在IP層提供的不可靠服務基礎上實現可靠數據傳輸服務
  • 流水線機制
  • 累計確認
  • TCP使用單一重傳定時器
  • 觸發重傳的事件
    • 超時
    • 收到重複ACK
  • 漸進式
    • 暫不考慮重複ACK
    • 暫不考慮流量控制
    • 暫不考慮擁塞控制

四、TCP RTT和超時

如何設置定時器的超時時間?

  • 大於RTT,但RTT是變化的

  • 過短:不必要的重傳

  • 過長:對段丟失時間反應慢

如何估計RTT?

  • SampleRTT:測量從段發出去到收到ACK的時間,忽略重傳
  • SampleRTT變化:測量多個SampleRTT,求平均值,形成RTT的估計值EstimatedRTT

定時器超時時間的設置

  • EstimatedRTT+“安全邊界”

  • EstimatedRTT變化大→較大的邊界

測量RTT的變化值:SampleRTT與EstimatedRTT的差值

  • DevRTT=(1-β)×DevRTT + β×|SampleRTT-EstimatedRTT|(typically,β=0.25)

定時器超時時間的設置

TimeoutInterval=EstimatedRTT+4×DevRTT

五、TCP發送方事件

  • 從應用層收到數據
    • 創建Segment
    • 序列號是Segment第一個字節的編號
    • 開啓計時器
    • 設置超時時間:TimeOutInterval
  • 超時
    • 重傳引起超時的segment
    • 重啓定時器
  • 收到ACK
    • 如果確認此前未確認的segment
    • 更新SendBase
    • 如果窗口中還有未被確認的分組,重新啓動定時器

六、快速重傳機制

  • TCP的實現中,如果發生超時,超時時間間隔將重新設置,即將超時時間間隔加倍,導致其很大
    • 重發丟失的分組之前要等待很長時間
  • 通過重複ACK檢測分組丟失
    • Sender會背靠背地發送多個分組
    • 如果某個分組丟失,可能會引發多個重複的ACK
  • 如果sender收到對同一數據的3個ACK,則假定該數據之後的段已經丟失
    • 快速重傳:在定時器超時之前即進行重傳

七、TCP流量控制

  • 思想:接收方爲TCP連接分配buffer
    • 上層應用可能處理buffer中數據的速度較慢
    • 控制發送方不會傳輸的太多、太快以至於淹沒接收方(buffer溢出)
  • 本質:速度匹配機制

八、TCP連接管理

  • TCP sender和receiver在傳輸數據前需要建立連接
  • 初始化TCP變量
    • seq.#
    • Buffer和流量控制信息
  • Client:連接發起者
  • Server:等待客戶連接請求
  • 建立:三次握手
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章