計算機網路7 四 傳輸層 TCP UDP

2021-09-29 20:01:35 字數 3051 閱讀 8346

六、tcp粘包、拆包問題

為程序提供通用的資料傳輸服務。由於應用層協議很多,定義通用的傳輸層協議就可以支援不斷增多的應用層協議。傳輸層具有復用和分用功能,復用就是多個應用層程序可以同時使用下面傳輸層的服務;分用則相反,指傳輸層把收到的資訊分別交付給上面應用層中的相應程序。主要使用傳輸控制協議tcp和使用者資料報協議udp

tcp報文分為首部和資料兩個部分。

tcp首部的前20個位元組是固定的,後面還有根據需要來增加的選項字段,所以tcp首部至少有 20 個位元組。(1位元組byte = 8位bit)

源埠和目的埠:它們各佔 2 個位元組,分別寫入源埠號和目的埠號,用來實現分用功能。(分用指傳輸層把收到的資訊分別交付給應用層中相應的程序)

序號:佔 4 個位元組,指的是報文段所傳送資料的第乙個位元組的序號。

資料偏移:佔 4 位,它指出 tcp報文段的資料開始處 到 tcp報文段開始處 的距離,也就是指出tcp報文段的首部長度。因為tcp首部有長度不確定的選項字段,所以設定了資料偏移欄位來指出它。

保留:佔 6 位,用於以後使用。

六個控制位:分別是urg、ack、psh、rst、syn、fin,用於說明報文段的性質。

視窗:佔 2 個位元組,指的是自己的接收視窗,用於限制對方傳送的資料量。

檢驗和:佔 2 個位元組,檢驗tcp報文在傳輸中是否出錯。需要在報文前面臨時新增乙個偽首部(12位元組)來計算檢驗和。

緊急指標:佔 2 個位元組,用於指出緊急資料的位元組數。

選項:長度可變,最多佔 40 位元組。

udp報文分為首部和資料兩個部分。

udp的首部比tcp的小,只有8個位元組(tcp的首部至少有20個位元組),其中 源埠、目的埠、長度、檢驗和,各佔 2 個位元組。

資料報校驗:檢測資料報在傳輸過程中是否有變化, 如果有,就丟棄並且不做出響應, 這時 tcp 傳送資料端超時後會重發資料;

滑動視窗:滑動視窗以位元組為單位,傳送方和接收方各有乙個視窗,接收方通過 tcp 報文段中的視窗字段告訴傳送方自己的視窗大小,傳送方根據這個值和擁塞情況來設定自己的視窗大小。傳送視窗不能超過接收視窗的數值。tcp 通過滑動視窗進行流量控制,抑制傳送端傳送資料的速率,以便接收端來得及接收。

確認應答:當 tcp 收到來自 tcp 連線另一端發來的資料時, 它會傳送乙個確認來告知對方自己收到了這個報文。

超時重傳:當 tcp 發出乙個報文段後,會啟動乙個定時器,等待目的端確認收到這個報文段。如果沒有及時收到這個確認,就會重發這個報文段。

擁塞控制:它是為了防止過多的資料注入到網路, 導致網路中的路由器或者鏈路過載。擁塞控制採用了四種演算法, 即:慢開始、擁塞避免、快重傳和快恢復。

流量控制:指抑制傳送端傳送資料的速率,以便接收端來得及接收。是個端到端的問題

擁塞控制:指防止過多的資料注入網路,導致路由器或鏈路過載,是個全域性性的過程,涉及所有主機和路由器)

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

慢開始與擁塞避免:

首先使用慢開始演算法,傳送方維持乙個叫做擁塞視窗的狀態變數(cwnd),一開始傳送方設定 cwnd 的值為1,傳送第1個報文段,當收到確認後,將 cwnd 的值乘以2,每個輪次都這樣增長,也就是2,4,8,16… 為了防止增長過快導致網路擁塞,所以需要設定乙個慢開始演算法的閾值(ssthresh)。當 cwnd 小於這個閾值時,使用慢開始演算法;當大於這個閾值時,改用擁塞避免演算法,每次只將 cwnd 加1,控制為線性增長。如果出現了超時,就將閾值設為當前 cwnd 值的一半,同時設定 cwnd = 1,然後重新執行慢開始演算法。

快重傳與快恢復:

快重傳演算法要求接收方每次收到報文段都對最後乙個收到的有序報文段進行確認。比如已經接收到 m1 和 m2,此時收到 m4,則應該傳送對 m2 的確認。如果傳送方重複收到三個對 m2 的確認,就表示 m2 的下乙個報文段 m3 丟失了,立即重傳 m3。這種情況只是丟失個別報文段,並不是網路擁塞,因此執行快恢復演算法,令 閾值 = 當前 cwnd 值的一半 ,然後設定 cwnd = 閾值,接著執行擁塞避免演算法。

慢開始和快恢復的快慢指的是 cwnd 的設定值,而不是 cwnd 的增長速率。慢開始 cwnd 設定為 1,而快恢復 cwnd 設定為閾值 ssthresh。

產生原因:

為什麼tcp有粘包問題,而udp沒有:

如何處理粘包、拆包問題?

傳送端關閉 nagle 演算法。

傳送端將資料報封裝為固定的長度,不夠的話可以用 0 來填充,然後接收端每次從緩衝區讀取這個固定長度的資料。

給每個資料報新增乙個訊息頭,訊息頭儲存資料報的長度,接收端通過訊息頭解析出長度,然後向後讀取該長度的內容。

在資料報之間設定邊界,比如新增特殊符號,這樣接收端就可以通過這個邊界將不同資料報分離開來。

tcp端點

( 每一條 tcp 連線只能有兩個端點,連線只能是端對端。tcp 連線的端點叫套接字(socket),ip位址通過冒號拼接上埠號就構成了套接字。套接字 = (ip位址 : 埠號)。(比如ip位址為 192.3.4.5,埠號為80,則拼接出的套接字為 192.3.4.5:80)。提供全雙工通訊,允許通訊雙方的應用程序在任何時候都能傳送資料)

計算機網路 傳輸層

為什麼要劃分傳輸層?既然網路層已經能把源主機上發出的資料傳送給目的主機,那麼為什麼還需要加上乙個傳輸層呢?這就需要我們理解主機使用者應用層通訊的主體,位於兩台網路主機中真正的資料通訊主體並不是這兩台主機,而是兩台主機中的各種網路應用程序.同一時間一台主機上可能有多個程序同時執行,這時候就需要為應用程...

計算機網路(傳輸層)

網路層提供了主機之間的邏輯通訊,運輸層為運輸在不同主機上的程序之間提供了邏輯通訊。運輸層協議是在端系統中而不是在路由器中實現的。運輸協議能夠提供的服務常常受制於底層網路層協議的服務模型。底層無法提供時延或頻寬保證,運輸層協議也無法提供。但是即使底層網路協議不可靠,運輸協議也可以提供可靠的資料傳輸服務...

計算機網路 傳輸層

運輸層最重要的兩種協議 tcp協議,udp協議 真正的通訊 兩個主機之間應用程序的通訊 運輸層的重要功能 1 復用 傳送方的不同應用程序使用同乙個運輸層協議傳輸資料 應用層 運輸層 2 分用 接收方的運輸層在剝去報文首部後把資料真正交付到目的應用程序 運輸層 應用層 網路層和運輸層的區別 網路層說明...