2017-03-17 103 views
2

我正在用Java編寫一個應該從某個服務器接收數據的tcp客戶端。瞭解TCP中的緩衝

據我所知,如果客戶端無法處理從服務器OS傳入的數據開始緩衝數據。但是如果緩衝區滿了會發生什麼?這種行爲是否可配置?

我的意思是我想節制服務器數據流,直到客戶端可以處理數據,所以它不會丟失。可能嗎?

+3

當接收窗口已滿時,客戶端將停止發送ACK數據包,然後服務器負責重傳(但是如果超時,則數據丟失)。 –

+0

@ElliottFrisch所以它的協議處理。好的,我知道了。但你的意思是什麼超時?服務器端的ACK超時? –

+0

@ St.Antario:如果在TCP連接的特定時間內沒有任何交換,則連接可以關閉。 –

回答

1

您的描述稱爲TCP窗口。

有一個很好的解釋here

摘錄:

在討論TCP窗口,我們最經常指的是TCP接收窗口。簡而言之,TCP接收窗口是臨時保存傳入數據的TCP連接的每一側的緩衝區。該緩衝區中的數據被髮送到應用程序,爲傳入數據清除更多空間。如果這個緩衝區填滿了,數據的接收者會提醒發送者在清除緩衝區之前不能接收更多的數據。還有幾個細節涉及到,那就是基本功能。設備在TCP標頭信息中公佈當前TCP窗口的大小。

雖然您可以輕鬆停止從緩衝區中讀取數據並讓協議完成其工作,但可以通過關閉窗口來限制數據流。

某些消息傳遞產品通過使用輔助緩衝區來管理這種情況,以最大限度地減少數據超限帶來的影響。儘管這些產品大多數主要是UDP廣播/多播。儘管如此,如果你的客戶跟不上,你會遇到問題。