兩個內容:
tcp通過讓接收方指明希望從傳送方接收的資料位元組數(即視窗大小)來進行流量控制。如果視窗大小為0會發生什麼情況呢?這將有效阻止傳送方傳送資料,直到視窗變為非0為止。
接受資料的流程:
假設視窗為0之後,馬上對這些資料進行處理,處理之後把它交給應用層,一段時間之後接收方又可以接收新的訊息,這時接收方就會給傳送方傳送乙個訊息,告訴傳送方,假設為:我的視窗可以接收1000個資料,也就是說接收方調整了視窗的大小,並告訴了傳送方,傳送發接收到這個訊息後,它知道接收方可以接收1000個位元組的資料了,因此會進行資料的封裝,然後傳送。 通過調整視窗的大小繼續進行資料的傳送。
下面有個問題:如果視窗改變為1000的訊息沒有收到咋辦呢?
上述情況總結:假設乙個場景:如果乙個確認丟失了,則雙方就有可能因為等待對方而使連線終止,接收方等待接收資料(因為它已經向傳送方通告了乙個非0的視窗),而傳送方在等待允許它繼續傳送資料的視窗更新。為防止這種死鎖情況的發生,傳送方使用乙個堅持定時器(persist timer)來周期性地向接收方查詢,以便發現視窗是否已增大。這些從傳送方發出的報文段稱為視窗探查(window probe)。
這個訊息丟失,將會形成死鎖:接收方和傳送方都會等待,視窗重置訊息時沒有超時重傳機制的
解決這個問題需要:堅持定時器
這是學到的第二個定時器:
堅持定時器工作流程:
(1)傳送端收到0視窗通告後,就啟動堅持定時器,並在定時器溢位的時候向客戶端查詢視窗是否已經增大。
(2)在定時器未到,就收到非零通告,則關閉該定時器,並傳送資料。
(3)若定時器已到,還沒有收到非零通告,就發探查報文。
(4)如果探查報文ack的通告視窗為0,就將堅持定時器的值加倍,tcp的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數退避序列來作為每一次的溢位時間,重複1、2、3步,如果通告視窗非零,傳送資料,關閉定時器。
計算機網路 TCP協議
tcp 傳送的資料單元稱為報文段。乙個 tcp 報文段分為 tcp 首部和 tcp 資料兩部分,整個 tcp 報文段作為 ip 資料報的資料部分封裝在 ip 資料報中,如圖所示 各欄位意義如下 tcp 是面向連線的協議,因此每個 tcp 連線都有三個階段 建立連線 資料傳送和連線釋放。tcp 連線的...
計算機網路 TCP協議
tcp協議是面向連線的協議,把連線作為最基本的抽象。每一條tcp連線唯一的被通訊兩端的兩個端點所確定。tcp協議是點對點,而不是點對多點。端點又被稱為套接字,tcp協議規定,ip位址拼接埠號就構成套接字。1 可靠資料運輸原理 1 tcp協議傳送兩種資料報,一種資料報用來傳輸資料,一種資料報用來傳送控...
計算機網路 TCP的流量控制
滑動視窗機制 任意時刻,傳送方都維持乙個連續的允許傳送的幀的序列,稱為傳送視窗,同時接收方也維持乙個連續的允許接收的幀的序列,稱為接收視窗。傳送視窗和接受視窗序列的上下界可以不同,大小也可以不同。傳送方視窗內的序列號代表那些已經傳送但是未收到確認的幀,或者可以被傳送的幀。傳送方的視窗大小由接收方確定...