計算機網路之傳輸層

2022-08-23 19:18:11 字數 2881 閱讀 9623

網路層只把分組傳送到目的主機,但是真正通訊的並不是主機而是主機中的程序。傳輸層提供了程序間的邏輯通訊,傳輸層向高層使用者遮蔽了下面網路層的核心細節,使應用程式看起來像是在兩個傳輸層實體之間有一條端到端的邏輯通訊通道。

(向兩個主機中程序間的通訊提供通用資料傳輸服務)

區別:

首部字段只有 8 個位元組,包括源埠、目的埠、長度、檢驗和。12 位元組的偽首部是為了計算檢驗和臨時新增的。

假設 a 為客戶端,b 為伺服器端。

三次握手的原因,為什麼不是兩次

第三次握手是為了防止失效的連線請求到達伺服器,讓伺服器錯誤開啟連線。

客戶端傳送的連線請求如果在網路中滯留,那麼就會隔很長一段時間才能收到伺服器端發回的連線確認。客戶端等待乙個超時重傳時間之後,就會重新請求連線。但是這個滯留的連線請求最後還是會到達伺服器,如果不進行三次握手,那麼伺服器就會開啟兩個連線。如果有第三次握手,客戶端會忽略伺服器之後傳送的對滯留連線請求的連線確認,不進行第三次握手,因此就不會再次開啟連線。

以下描述不討論序號和確認號,因為序號和確認號的規則比較簡單。並且不討論 ack,因為 ack 在連線建立之後都為 1。

四次揮手的原因

客戶端傳送了 fin 連線釋放報文之後,伺服器收到了這個報文,就進入了 close-wait 狀態。這個狀態是為了讓伺服器端傳送還未傳送完畢的資料,傳送完畢之後,伺服器會傳送 fin 連線釋放報文。

time_wait

客戶端接收到伺服器端的 fin 報文後進入此狀態,此時並不是直接進入 closed 狀態,還需要等待乙個時間計時器設定的時間 2msl。這麼做有兩個理由:

tcp 使用超時重傳來實現可靠傳輸:如果乙個已經傳送的報文段在超時時間內沒有收到確認,那麼就重傳這個報文段。

乙個報文段從傳送再到接收到確認所經過的時間稱為往返時間 rtt,加權平均往返時間 rtts 計算如下:

其中,0 ≤ a < 1,rtts 隨著 a 的增加更容易受到 rtt 的影響。

超時時間 rto 應該略大於 rtts,tcp 使用的超時時間計算如下:

其中 rttd 為偏差的加權平均值。

視窗是快取的一部分,用來暫時存放位元組流。傳送方和接收方各有乙個視窗,接收方通過 tcp 報文段中的視窗字段告訴傳送方自己的視窗大小,傳送方根據這個值和其它資訊設定自己的視窗大小。

傳送視窗內的位元組都允許被傳送,接收視窗內的位元組都允許被接收。如果傳送視窗左部的位元組已經傳送並且收到了確認,那麼就將傳送視窗向右滑動一定距離,直到左部第乙個位元組不是已傳送並且已確認的狀態;接收視窗的滑動類似,接收視窗左部位元組已經傳送確認並交付主機,就向右滑動接收視窗。

接收視窗只會對視窗內最後乙個按序到達的位元組進行確認,例如接收視窗已經收到的位元組為 ,其中 按序到達,而 就不是,因此只對位元組 31 進行確認。傳送方得到乙個位元組的確認之後,就知道這個位元組之前的所有位元組都已經被接收。

流量控制是為了控制傳送方傳送速率,保證接收方來得及接收。

接收方傳送的確認報文中的視窗字段可以用來控制傳送方視窗大小,從而影響傳送方的傳送速率。將視窗字段設定為 0,則傳送方不能傳送資料。

如果網路出現擁塞,分組將會丟失,此時傳送方會繼續重傳,從而導致網路擁塞程度更高。因此當出現擁塞時,應當控制傳送方的速率。這一點和流量控制很像,但是出發點不同。流量控制是為了讓接收方能來得及接收,而擁塞控制是為了降低整個網路的擁塞程度。

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

傳送方需要維護乙個叫做擁塞視窗(cwnd)的狀態變數,注意擁塞視窗與傳送方視窗的區別:擁塞視窗只是乙個狀態變數,實際決定傳送方能傳送多少資料的是傳送方視窗。

為了便於討論,做如下假設:

傳送的最初執行慢開始,令 cwnd = 1,傳送方只能傳送 1 個報文段;當收到確認後,將 cwnd 加倍,因此之後傳送方能夠傳送的報文段數量為:2、4、8 ...

注意到慢開始每個輪次都將 cwnd 加倍,這樣會讓 cwnd 增長速度非常快,從而使得傳送方傳送的速度增長速度過快,網路擁塞的可能性也就更高。設定乙個慢開始門限 ssthresh,當 cwnd >= ssthresh 時,進入擁塞避免,每個輪次只將 cwnd 加 1。

如果出現了超時,則令 ssthresh = cwnd / 2,然後重新執行慢開始。

在接收方,要求每次接收到報文段都應該對最後乙個已收到的有序報文段進行確認。例如已經接收到 m1 和 m2,此時收到 m4,應當傳送對 m2 的確認。

在傳送方,如果收到三個重複確認,那麼可以知道下乙個報文段丟失,此時執行快重傳,立即重傳下乙個報文段。例如收到三個 m2,則 m3 丟失,立即重傳 m3。

在這種情況下,只是丟失個別報文段,而不是網路擁塞。因此執行快恢復,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此時直接進入擁塞避免。

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

計算機網路之傳輸層

明天就考計算機網路,暫時先簡單的寫一寫 tcp 協議,日後再繼續寫完這一層吧。實際的傳輸通道總是不夠理想的,不可避免的會發生一些差錯,這就需要我們制定一些規則來使得傳輸變得可靠,tcp 協議就這樣應運而出。這是 tcp 協議中採用的最簡單的一種實現可靠傳輸的協議。如下圖,停止等待 就是傳送端傳送乙個...

計算機網路 傳輸層

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

計算機網路(傳輸層)

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