計算機網路 TCP怎麼保證可靠?

2021-10-09 09:52:28 字數 3281 閱讀 7380

tcp資料段以位元組為單位對資料段中的「資料」部分進行一一編號,確保每個位元組的資料都可以有序傳送和接收。

序號->序號tcp傳送的資料段中「資料」部分(不包括tcp資料段頭部),每個位元組都有乙個序號,每個資料段中的「序號」欄位是以該資料段中第乙個位元組的序號進行填充的。

確認號->確認號確認號指傳送包含這個「確認號」的資料段的一端期望接收另一端的下乙個資料段的起始序號。同時也暗示了在此序號前的所有位元組資料均已正確接收。

ack-> ack是乙個表明「確認號」字段是否有效的標誌位。只有ack欄位的值為1,資料段中的「確認號」才有意義,否則資料段中的「確認號」沒有意義,即不具有上面所說的「確認號」含義,因為tcp通常不會針對單個資料段進行確認,而是一次性對多個連續資料段進行確認。只需要對最近收到的那個資料段進行確認,即表明前面所有資料段均已正確接收。

tcp要求每接收乙個資料段都必須由接收端向傳送端返回乙個確認資料段(可以用乙個確認資料段一次確認前面多個資料段),其中的「確認號」表明了接收端已正確接收的資料段序號(「確認號」前面的所有資料段)。

tcp可一次連續傳送多個資料段

tcp不需要等待接收對方傳送的確認資料段(「ack」欄位為1的資料段)就可以一次性連續傳送多個資料段,這樣可大大提高資料傳送效率。但一次性可傳送多少個資料段是受對方返回的「視窗大小」字段值和當前可用「傳送視窗」大小雙重限制的。因為傳送端對還沒有收到確認的資料段要進行快取,這需要占用一定的「傳送視窗」大小。

僅對連續接收的資料段進行確認

返回的確認資料段中的「確認號」欄位值僅代表對端已正確接收的連續資料段(最高位元組序號+1),而不一定是已正確接收資料段中的「最高序號+1」,因為中間可能還有些資料段因為網路延遲而暫時未收到,或出現了傳輸錯誤而丟失了。

假設每個資料段的長度大小均100位元組,接收端收到了序號為1、101、201、401四個資料段。其中序號為301的資料段暫時沒收到,此時接收端返回的確認資料段中的「確認號」只能是301,而不會是501,也就是只對前三個資料段進行確認,不會對後面的401資料段進行確認,因為中間的301資料段還沒收到。當後面收到了301資料段後,可能會返回乙個「確認號」為501的資料段,這時就代表301和401資料段均已正確接收了。

不連續序號的資料將先快取

當主機接收到的資料段序號不連續時,不連續部分不會向應用層的應用程序進行提交,而是先快取在「接收視窗」中,等待接收到中斷的序號的資料段後再一起提交。這時,儘管接收端已正確接收了某些資料,但仍不能及時向應用層提交,需要占用「接收視窗」空間。對於沒有按先後次序正確接收的資料,在向應用層提交時會重新按資料段序號進行組合,然後再提交給應用層。

如某主機先後接收到了對端發來的序號分別為1、101、201、301、601、401、801、501的資料段(假設資料段大小均100位元組),則該主機首先把1、101、201、301這四個資料段向應用層提交,並向傳送端傳送乙個「確認號」為401的確認資料段,從而可以從「接收視窗」中刪除這四個資料段,釋放「接收視窗」;然後再把601、401、801這三個資料段先快取在「接收視窗」中,直到接收到501號資料段,再按401、501、601順序重組並向應用層提交,接著傳送乙個「確認號」為701的確認資料段,從而又可以從「接收視窗」中刪除這三個資料段,釋放「接收視窗」,但此時「接收視窗」中仍快取有801號資料段,因為701號資料段還沒有得到確認。

在tcp中有乙個重傳定時器(retransmission timer,rtt),在傳送乙個資料段的同時也啟動了該定時器。如果在定時器過期之前該資料段還沒有被對方確認的話,則定時器停止,然後重傳對應序號的資料段。

rtt值是乙個資料段往返傳送端和接收端的時間總和

如果在重傳定時器超時後仍沒收到乙個資料段的確認,則可能會重傳對應序號後面的所有資料段,因為後面的這些資料段均暫時不會被確認.

(selective ack,sack)機制。在sack支援下,僅可以重傳缺少部分的資料,而不會重傳那些已正確接收的資料。就是在tcp資料段格式的頭部「可選項」欄位中新增乙個代表支援sack的選項。但這個選項在不同的資料段中有不同的欄位名稱和不同的含義。

假設接收端已收到1、101、201、401、501這五個序號的資料段,在傳送確認號為301的確認資料段時,在sack擴充套件選項中標記401(起始序號為401,結束序號為500)和501(起始序號為501,結束序號為600)這兩個不連續的資料段。這時傳送端就會知道,不需要再傳送401和501這兩個資料段了,只需傳送301號資料段即可。這樣大大節省了網路資源,也提高了資料傳輸效率。

tcp連線的每一方都有固定大小的緩衝空間,tcp的接收端只允許傳送端傳送接收端緩衝區能接納的資料。當接收方來不及處理傳送方的資料,能提示傳送方降低傳送的速率,防止包丟失。tcp使用的流量控制協議是可變大小的滑動視窗協議。

接收方有即時視窗(滑動視窗),隨ack報文傳送。

1)假設現在傳送端收到了接收端發來的乙個確認資料段,「確認號」為301,「視窗大小」為500,表示可以連續傳送5個資料段(起始序號為301)。左邊那個虛線「傳送視窗」代表的就是後面傳送的301、401、501、601、701這五個資料段,此時因為已達到了對方視窗大小值,不能繼續傳送了,需要停下來等待對端的確認。

2)如果某一時間收到了乙個「確認號」為501的確認資料段(「ack」字段值為1的資料段,下同),表示接收端已正確接收了301和401這兩個資料段,即從「傳送視窗」中刪除這兩個資料段,視窗向前滑動200位元組

假設以上返回的確認資料段中的「視窗大小」為400(這裡起到了流量控制的作用),理論上說,傳送端可以一次性連續傳送4個資料段,但因為「傳送視窗」中快取了原來已傳送的501、601和701這三個資料段(300位元組),於是此次只能傳送100位元組,即801號資料段。

3)如果此時收到了乙個「確認號」為801的確認資料段,同時「視窗大小」字段值又為500了(這裡也起到了流量控制的作用)

如果在資料傳輸過程中有乙個或多個資料段丟失,則傳送端接收不到對這些資料段的確認資料段,這時可以通過上節介紹的超時重傳來解決。

當網路擁塞時,減少資料的傳送。

如果網路出現擁塞,分組將會丟失,此時傳送方會繼續重傳,從而導致網路擁塞程度更高。因此當出現擁塞時,應當控制傳送方的速率。

這一點和流量控制很像,但是出發點不同。流量控制是為了讓接收方能來得及接收,而擁塞控制是為了降低整個網路的擁塞程度。

tcp 主要通過四個演算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復。

計算機網路 TCP如何保證可靠傳輸

tcp 協議如何保證可靠傳輸?1 資料被分割成資料塊。2 tcp 給傳送的每 個包編號,接收 對包排序,把有序資料傳給應 層。3 校驗和 保持 部和資料的檢驗和。如果收到報文段的檢驗和有錯,將丟棄且不確認收到該報 段。4 接收端丟棄重複資料。5 流量控制 利 滑動窗 實現,只允許傳送 接收端緩衝區 ...

計算機網路3 可靠傳輸

title 計算機網路3 可靠傳輸 mathjax true date 2020 03 19 13 33 04 categories 計算機網路 tags 計算機網路 keywords 計算機網路 不可靠傳輸,voice over ip dns rpc dhcp?16位源埠,16位目標埠,16位ud...

計算機網路 TCP協議

tcp 傳送的資料單元稱為報文段。乙個 tcp 報文段分為 tcp 首部和 tcp 資料兩部分,整個 tcp 報文段作為 ip 資料報的資料部分封裝在 ip 資料報中,如圖所示 各欄位意義如下 tcp 是面向連線的協議,因此每個 tcp 連線都有三個階段 建立連線 資料傳送和連線釋放。tcp 連線的...