TCP的侷限性有哪些?

爬蜥發表於2018-06-24

長肥管道遇到的問題有哪些?

在頻寬乘積很大的時候,即處於長肥網路中,容易暴露出問題

capacity(b)=bandwidth(b/s) * round-trip time(s)

視窗過小的問題。

  • 問題:TCP首部視窗大小為16bit,從而視窗限制在65535個位元組,但是當前存在大頻寬時延乘積,比如橫跨大陸的gigabit線路,能達到7500000位元組,為了提升吞吐量,需要更大的視窗。
  • 解決方案:通過定義選項實現對16bit的擴大操作。

只能在SYN報文段中使用這個選項,而且只有主動建立連線的一方傳送這個選項後,被動建立連線的一方才可以在SYN中使用這個選項

RTT測量不夠精確。

  • 問題:TCP的RTT計算是採用的取樣方式,比如每個視窗中有8個報文段時,取樣速率為1/8,但是如果有100個報文段時,取樣速率為資料速率的1/100,造成取樣不精確,容易引起不必要的重傳。
  • 解決方案:使用時間戳選項,在每個報文段中放置一個時間戳,接收方在確認中返回這個數值,從而允許傳送方為每一個收到的ACK計算RTT。

只有在主動傳送的SYN中設定了這個選項,並且另一方中收到了這個選項,才能在後續的報文中進行設定

報文段標識有可能重複。

  • 問題1:假如網路中有一個被延遲一段時間的報文,它的連線被釋放,一個新的連線在兩個主機之間建立,這個報文段有可能再次被送達
  • 解決思路:IP首部中的TTL定義每個IP段的生存時間上線,並且每個報文段有一個生存時間MSL
  • 問題2:網路非常快,導致再一個MSL的時候序號就反生了迴繞
  • 解決方式:複用RTT測量時候的時間戳選項,傳送發對這個每個包使得這個時間戳遞增,那麼當收到報文時,如果發現時間戳比上次收到的時間戳要大,但是序號要小,就拋棄

TCP的實際運用的限制有哪些?

  1. 不能比最慢的鏈路執行得更快
  2. 不能比最慢的機器的記憶體執行的更快
  3. 不能夠比由接收方提供的視窗大小除以往返時間所得到的頻寬執行的更快

路徑MTU是如何影響TCP分段的?

  • 在連線建立時,TCP使用輸出介面或對端宣告的MSS的最小MTU最為起始的報文段大小,
  • 此後,這個連結上的所有被TCP傳送的IP資料包都將設定DF位元,如果某個中間路由器需要對一個設定了DF標誌的資料包進行分片,它就丟棄這個資料包,併產生一個ICMP的“不能分片”的報錯。
  • 如果收到了這個報錯,TCP就減少段大小進行重新傳輸

設定DF位元是用來發現當前路由器是否需要對正在傳送的IP資料包進行分片,如果一個待轉發的IP資料包被設定了DF標誌,但長度又超過MTU,那麼路由器將返回ICMP不可達的差錯

由於路由是動態變化的,在最後一次減少路徑MTU的一段時間之後,可以嘗試一個較大的值,RFC 1191推薦10分鐘

附錄

把書讀薄(TCP/IP詳解 卷一 第二十四章)

來源:https://juejin.im/post/5b2f9dd0f265da59aa2d9476

相關文章