5.1 運輸層協議概述
運輸層的主要功能:
1、 運輸層為應用行程之間提供端到端的邏輯通信(但網路層是為主機之間提供邏輯通信);
2、 運輸層還要對收到的報文進行差錯檢測;
3、 運輸層需要有兩種不同的運輸協議,即面向連接的 TCP 和無連接的UDP;
運輸層的兩個主要協議:
1、 用戶資料報協議 UDP:當運輸層采用無連接的 UDP 協議時,這種邏輯通信信道是一條不可靠信道;
2、 傳輸控制協議 TCP:當運輸層采用面向連接的 TCP 協議時,盡管下面的網路是不可靠的(只提供盡最大努力服務),但這種邏輯通信信道就相當于一條全雙工的可靠信道,
TCP 與 UDP
1、 TCP:TCP 傳送的資料單位協議是 TCP 報文段,TCP 則提供面向連接的服務,TCP 不提供廣播或多播服務,由于 TCP 要提供可靠的、面向連接的運輸服務,因此不可避免地增加了許多的開銷,這不僅使協議資料單元的首部增大很多,還要占用許多的處理機資源,
2、 UDP:UDP 傳送的資料單位協議是 UDP 報文或用戶資料報,UDP 在傳送資料之前不需要先建立連接,對方的運輸層在收到 UDP 報文后,不需要給出任何確認,雖然 UDP 不提供可靠交付,但在某些情況下 UDP是一種最有效的作業方式,
三類埠
1、 熟知埠:數值一般為 0~1023;
2、 登記埠號:數值為 1024~49151,為沒有熟知埠號的應用程式使用的,使用這個范圍的埠號必須在 IANA 登記,以防止重復;
3、 客戶埠號或短暫埠號:數值為 49152~65535,留給客戶行程選擇暫時使用,當服務器行程收到客戶行程的報文時,就知道了客戶行程所使用的動態埠號,通信結束后,這個埠號可供其他客戶行程以后使用,
5.2 用戶資料報協議 UDP
UDP 概述:UDP 只在 IP 的資料報服務之上增加了很少一點的功能,即埠的功能和差錯檢測的功能,
UDP 的主要特點:
1、 UDP 是無連接的,即發送資料之前不需要建立連接,
2、 UDP 使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制,
3、 UDP 是面向報文的,UDP 沒有擁塞控制,很適合多媒體通信的要求,
4、 UDP 支持一對一、一對多、多對一和多對多的互動通信,
5、 UDP 的首部開銷小,只有 8 個位元組,
面向報文的 UDP 作業流程:
1、 發送方 UDP 對應用程式交下來的報文,在添加首部后就向下交付 IP層,UDP 對應用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界;
2、 應用層交給 UDP 多長的報文,UDP 就照樣發送,即一次發送一個報文;
3、 接收方 UDP 對 IP 層交上來的 UDP 用戶資料報,在去除首部后就原封不動地交付上層的應用行程,一次交付一個完整的報文;
4、 應用程式必須選擇合適大小的報文,
5.3 傳輸控制協議 TCP
TCP 的概述
1、 TCP 是面向連接的運輸層協議;
2、 每一條 TCP 連接只能有兩個端點(endpoint),每一條 TCP 連接只能是點對點的(一對一);
3、 TCP 提供可靠交付的服務;
4、 TCP 提供全雙工通信;
5、 面向位元組流,

TCP 協議的注意點:
1、 TCP 連接是一條虛連接而不是一條真正的物理連接,
2、 TCP 對應用行程一次把多長的報文發送到 TCP 的快取中是不關心的,
3、 TCP 根據對方給出的視窗值和當前網路擁塞的程度來決定一個報文段應包含多少個位元組(UDP 發送的報文長度是應用行程給出的),
4、 TCP 可把太長的資料塊劃分短一些再傳送,TCP 也可等待積累有足夠多的位元組后再構成報文段發送出去,
TCP 的連接
1、 每一條 TCP 連接有兩個端點;
2、 TCP 連接的端點不是主機,不是主機的 IP 地址,不是應用行程,也不是運輸層的協議埠,TCP 連接的端點叫做套接字(socket)或插口;
3、 埠號拼接到(contatenatedwith)IP 地址即構成了套接字,

5.4 可靠傳輸的作業原理
連續 ARQ 協議采用累計確認的方式:即不必對收到的分組逐個發送確認,而是對按序到達的最后一個分組發送確認,這樣就表示:到這個分組為止的所有分組都已正確收到了,
TCP 可靠通信的具體實作
1、 TCP 連接的每一端都必須設有兩個視窗——一個發送視窗和一個接收視窗;
2、 TCP 兩端的四個視窗經常處于動態變化之中,
5.5TCP 報文段的首部格式
TCP 報文段首部格式

TCP 報文段首部一些重要的欄位
1、 確認 ACK——只有當 ACK=1 時確認號欄位才有效,當 ACK=0 時,確認號無效,
2、 推送 PSH(PuSH)——接收 TCP 收到 PSH=1 的報文段,就盡快地交付接收應用行程,而不再等到整個快取都填滿了后再向上交付,
3、 同步 SYN——同步 SYN=1 表示這是一個連接請求或連接接受報文,
4、 視窗欄位——占 2 位元組,用來讓對方設定發送視窗的依據,單位為位元組,
5、 選項欄位——長度可變,TCP 最初只規定了一種選項,即最大報文段長度 MSS,MSS 告訴對方 TCP:“我的快取所能接收的報文段的資料欄位的最大長度是 MSS 個位元組,”
6、 終止 FIN(FINis)——用來釋放一個連接,FIN=1 表明此報文段的發送端的資料已發送完畢,并要求釋放運輸連接,
5.7TCP 的流量控制
流量控制:流量控制(flowcontrol)就是讓發送方的發送速率不要太快,既要讓接收方來得及接收,也不要使網路發生擁塞,利用滑動視窗機制可以很方便地在 TCP 連接上實作流量控制,
持續計時器
1、 TCP 為每一個連接設有一個持續計時器,
2、 只要 TCP 連接的一方收到對方的零視窗通知,就啟動持續計時器,
3、 若持續計時器設定的時間到期,就發送一個零視窗探測報文段(僅攜帶1 位元組的資料),而對方就在確認這個探測報文段時給出了現在的視窗值,
4、 若視窗仍然是零,則收到這個報文段的一方就重新設定持續計時器,
5、 若視窗不是零,則死鎖的僵局就可以打破了,

5.8TCP 的擁塞控制
擁塞控制與流量控制
1、 擁塞控制:擁塞控制所要做的都有一個前提,就是網路能夠承受現有的網路負荷,擁塞控制是一個全域性的程序,涉及到所有的主機、所有的路由器,以及與降低網路傳輸性能有關的所有因素,
2、 流量控制:擁塞控制是一個全域性的程序,涉及到所有的主機、所有的路由器,以及與降低網路傳輸性能有關的所有因素,流量控制所要做的就是抑制發送端發送資料的速率,以便使接收端來得及接收,
擁塞視窗:發送方維持一個叫做擁塞視窗 cwnd(congestionwindow)的狀態變數,擁塞視窗的大小取決于網路的擁塞程度,并且動態地在變化,發送方讓自己的發送視窗等于擁塞視窗,如再考慮到接收方的接收能力,則發送視窗還可能小于擁塞視窗,發送方控制擁塞視窗的原則是:只要網路沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組發送出去,但只要網路出現擁塞,擁塞視窗就減小一些,以減少注入到網路中的分組數,
慢開始演算法的原理:
1、 在主機剛剛開始發送報文段時可先設定擁塞視窗 cwnd=1,即設定為一個最大報文段 MSS 的數值,
2、 在每收到一個對新的報文段的確認后,將擁塞視窗加 1,即增加一個MSS 的數值,
3、 用這樣的方法逐步增大發送端的擁塞視窗 cwnd,可以使分組注入到網路的速率更加合理,
設定慢開始門限狀態變數 ssthresh
1、 當 cwnd<ssthresh 時,使用慢開始演算法,
2、 當 cwnd>ssthresh 時,停止使用慢開始演算法而改用擁塞避免演算法,
3、 當 cwnd=ssthresh 時,既可使用慢開始演算法,也可使用擁塞避免演算法,
當網路出現擁塞時,無論在慢開始階段還是在擁塞避免階段,只要發送方判斷網路出現擁塞(其根據就是沒有按時收到確認),就要把慢開始門限 ssthresh設定為出現擁塞時的發送方視窗值的一半(但不能小于 2),然后把擁塞視窗cwnd 重新設定為 1,執行慢開始演算法,

1、 當 TCP 連接進行初始化時,將擁塞視窗置為 1,圖中的視窗單位不使用位元組而使用報文段,慢開始門限的初始值設定為 16 個報文段,即ssthresh=16,
2、 發送端的發送視窗不能超過擁塞視窗 cwnd 和接收端視窗 rwnd 中的最小值,我們假定接收端視窗足夠大,因此現在發送視窗的數值等于擁塞視窗的數值
3、 在執行慢開始演算法時,擁塞視窗 cwnd 的初始值為 1,發送第一個報文段 M0,
4、 發送端每收到一個確認,就把 cwnd 加 1,于是發送端可以接著發送M1 和 M2 兩個報文段,
5、 接收端共發回兩個確認,發送端每收到一個對新報文段的確認,就把發送端的 cwnd 加 1,現在cwnd 從 2 增大到 4,并可接著發送后面的 4個報文段,
6、 發送端每收到一個對新報文段的確認,就把發送端的擁塞視窗加 1,因此擁塞視窗 cwnd 隨著傳輸輪次按指數規律增長,
7、 當擁塞視窗 cwnd 增長到慢開始門限值 ssthresh 時(即當 cwnd=16時),就改為執行擁塞避免演算法,擁塞視窗按線性規律增長,
8、 假定擁塞視窗的數值增長到 24 時,網路出現超時,表明網路擁塞了,
9、 更新后的 ssthresh 值變為 12(即發送視窗數值 24 的一半),擁塞視窗再重新設定為 1,并執行慢開始演算法,
10、 當 cwnd=12 時改為執行擁塞避免演算法,擁塞視窗按按線性規律增長,每經過一個往返時延就增加一個 MSS 的大小,
乘法減小:“乘法減小“是指不論在慢開始階段還是擁塞避免階段,只要出現一次超時(即出現一次網路擁塞),就把慢開始門限值 ssthresh 設定為當前的擁塞視窗值乘以 0.5,
加法增大:“加法增大”是指執行擁塞避免演算法后,在收到對所有報文段的確認后(即經過一個往返時間),就把擁塞視窗 cwnd 增加一個 MSS 大小,使擁塞視窗緩慢增大,以防止網路過早出現擁塞,
快重傳:快重傳演算法首先要求接收方每收到一個失序的報文段后就立即發出重復確認,這樣做可以讓發送方及早知道有報文段沒有到達接收方,發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,

快恢復:當發送端收到連續三個重復的確認時,就執行“乘法減小”演算法,把慢開始門限 ssthresh 減半,但接下去不執行慢開始演算法,)由于發送方現在認為網路很可能沒有發生擁塞,因此現在不執行慢開始演算法,即擁塞視窗 cwnd現在不設定為 1,而是設定為慢開始門限 ssthresh 減半后的數值,然后開始執行擁塞避免演算法(“加法增大”),使擁塞視窗緩慢地線性增大,

發送視窗的上限值:發送方的發送視窗的上限值應當取為接收方視窗 rwnd 和擁塞視窗 cwnd 這兩個變數中較小的一個,即應按以下公式確定:

1、 當 rwnd<cwnd 時,是接收方的接收能力限制發送視窗的最大值,
2、 當 cwnd<rwnd 時,則是網路的擁塞限制發送視窗的最大值,
5.9TCP 的運輸連接管理
TCP 連接的建立:三次握手
1、 第一次握手

2、 第二次握手

3、 第三次握手

TCP 連接的釋放:四次揮手
1、 第一次揮手

2、 第二次揮手

3、 第三次揮手

4、 第四次揮手

TCP 連接必須經過時間 2MSL 的連接釋放后才真正釋放掉

1、 第一,為了保證 A 發送的最后一個 ACK 報文段能夠到達 B,
2、 第二,防止“已失效的連接請求報文段”出現在本連接中,A 在發送完最后一個 ACK 報文段后,再經過時間 2MSL,就可以使本連接持續的時間內所產生的所有報文段,都從網路中消失,這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304890.html
標籤:其他
下一篇:網路TCP/IP基礎(資料傳輸)
