Linux 零視窗 糊塗視窗以及Nagle演算法

2021-10-08 13:21:09 字數 1038 閱讀 6327

滑動視窗

傳送方傳送資料速率與接收方接收資料速率相匹配。

零視窗問題

定義tcp報頭結構中有16位的視窗大小:由接收方填充, 用來告知傳送方當前本端還能接收的資料長度。如果接收方不斷從網路中接收並快取資料,但是應用程式並沒有處理快取的資料。直到最後,接收方就會向傳送方傳送乙個0視窗的報文段。

如何處理?

持續計時器 +零視窗探測報文段

為了解決這個問題,tcp為每乙個連線設有乙個持續計時器(persistence timer)。只要tcp連線的一方收到對方的零視窗通知,就啟動持續計時器。若持續計時器設定的時間到期,就傳送乙個零視窗探測報文段(僅攜帶1位元組的資料),而對方就在確認這個探測報文段時給出了現在的視窗值。如果視窗仍然是零,那麼收到這個報文段的一方就重新設定持續計時器。如果視窗不是零,那麼死鎖的僵局就可以打破了。

糊塗視窗問題

小視窗問題

定義接收方每次給傳送方通告的視窗大小只有很小的位元組數。

如何處理?

要解決這個問題,可以讓接收方等待一段時間,使得或者接收快取已有足夠空間容納乙個最長的報文段,或者等到接收快取已有一半空閒的空間。只要出現這兩種情況之一,接收方就發出確認報文,並向傳送方通知當前的視窗大小。此外,傳送方也不要傳送太小的報文段,而是把資料積累成足夠大的報文段,或達到接收方快取的空間的一半大小。

nagle演算法(處理糊塗視窗)

演算法內容

在tcp的實現中廣泛使用nagle演算法。

演算法如下:若傳送應用程序把要傳送的資料逐個位元組地送到tcp的傳送快取,則傳送方就把第乙個資料位元組先傳送出去,把後面到達的資料位元組都快取起來。當傳送方收到對第乙個資料字元的確認後,再把傳送快取中的所有資料組裝成乙個報文段傳送出去,同時繼續對隨後到達的資料進行快取。只有在收到對前乙個報文段的確認後才繼續傳送下乙個報文段。當資料到達較快而網路速率較慢時,用這樣的方法可明顯地減少所用的網路頻寬。nagle 演算法還規定,當到達的資料已達到傳送視窗大小的一半或已達到報文段的最大長度時,就立即傳送乙個報文段。

糊塗視窗綜合症

當傳送端應用程序產生資料很慢 或接收端應用程序處理接收緩衝區資料很慢,或二者兼而有之 就會使應用程序間傳送的報文段很小,特別是有效載荷很小。極端情況下,有效載荷可能只有1個位元組 而傳輸開銷有40位元組 20位元組的ip頭 20位元組的tcp頭 這種現象就叫糊塗視窗綜合症 如果傳送端為產生資料很慢的...

糊塗視窗綜合症

當傳送端應用程序產生資料很慢 或接收端應用程序處理接收緩衝區資料很慢,或二者兼而有之 就會使應用程序間傳送的報文段很小,特別是有效載荷很小。極端情況下,有效載荷可能只有1個位元組 而傳輸開銷有40位元組 20位元組的ip頭 20位元組的tcp頭 這種現象就叫糊塗視窗綜合症 如果傳送端為產生資料很慢的...

糊塗視窗綜合症

糊塗視窗綜合症 摘自tcpip協議詳解.卷1 基於視窗的流量控制方案,如t c p所使用的,會導致一種被稱為 糊塗視窗綜合症s w s silly window syndrome 的狀況。如果發生這種情況,則少量的資料將通過連線進行交換,而不是滿長度的報文段 clark 1982 該現象可發生在兩端...