運輸層:幫你理解TCP、UDP的相關知識

 

運輸層位於網絡層之上、應用層之下,向它上面的應用層提供通信服務;屬於面向通信部分的最高層,也是用戶功能中的最底層。

從網絡層來說,通信的兩端是主機;IP數據報的搜捕明確標誌了兩個主機的IP地址,但是這種說法還不夠清楚。通常一個主機中會同時有多個應用程序,數據發送給主機之後又將要發送給哪個應用程序?所以,從運輸層的角度來看,通信的真正端點不是主機而是主機的進程,也就是說,端到端的通信是應用進程之間的通信。學習運輸層的協議之前我們先來了解一下其功能;

運輸層的功能

運輸層有一個很重要的功能:複用和分用;

  • 複用:是指在發送方不同的應用進程都可以使用同一個運輸層協議傳輸數據;
  • 分用:是指接收方的傳輸層在剝去報文的首部後能夠把這些數據正確交付母的應用進程;

網絡層和運輸層有一個明顯的區別:網絡層是爲主機之間主機提供邏輯通信;運輸層爲應用進程之間的提供端到端的邏輯通信。(“邏輯通信”的意思是:從應用層看來,只要把應用層的報文交給下面的運輸層,運輸層就可以直接把這報文傳送到對方的運輸層)

運輸層的兩個主要協議

運輸層有兩個非常出名的協議:用戶數據報協議UDP、傳輸控制協議TCP;相信很多不是很瞭解網絡的同學也一定都知道TCP和UDP,甚至還知道UDP在傳送數據之前不需要建立連接,TCP則提供面向連接服務

前面我們已經數據發送給目的地址,接下來就需要利用目的地址提供的功能來識別終點,而不需要知道具體實現這個功能的進程是哪一個,解決辦法就是在傳輸層使用協議端口號(簡稱端口);端口號只是爲了標誌本計算機應用層各個進程在和運輸層交互是的層間接口,主要分爲兩大類:

  1. 服務器端使用的端口號;這裏又分爲兩類,最重要的一類是熟知端口號(或系統端口號),數值爲0~123,主要是給TCP/IP最重要的一些應用程序,讓所有用戶都知道。另一類是登記端口號,數值爲1024~49151,給沒有熟知端口號的應用程序使用,防止重複;
  2. 客戶端使用的端口號;數值爲49152~65535,這類端口號僅在用戶進程運行時才動態選擇,又被成爲短暫端口號;

接下來,讓我們正式學習一下UDP和TCP這兩個協議吧~

用戶數據報協議UDP

UDP只是在IP的數據報服務至上增加了複用和分用的功能及差錯檢測的功能,其主要特點是:

  1. UDP是無連接的
  2. UDP使用盡最大努力交付,即不保證可靠傳輸;
  3. UDP是面向報文的,適合一次傳輸少量數據
  4. UDP沒有擁塞控制,因此網絡出現的擁塞不會使源主機的發送速率降低;
  5. UDP支持一對一、一對多、多對一和多對多的交互通信
  6. UDP的首部開銷小,只有8個字節,TCP的有20個字節;

用戶數據報UDP有兩個字段:數據字段和首部字段。首部字段只有8個字節,由四個字段組成,每個字段的長度都是兩個字節

  • 源端口。源端口號,在需要對方回信是選用,不需要時可用全0;
  • 目的端口。目的端口號,在終點交付報文時必須要使用到;
  • 長度。UDP用戶數據報的長度,最小值是8(只有首部);
  • 檢驗和。檢驗UDP用戶數據報在傳輸中是否有錯,有錯就丟棄;

 image.pngimage.png

UDP檢驗: 傳輸控制協議TCP

TCP協議是TCP/IP體系中非常複雜的一個協議;首先,我們來了解一下TCP最主要的特點:

  1. TCP是面向連接的運輸層協議;
  2. 每一條TCP連接只能有兩個端點,只能是點對點的;
  3. TCP提供可靠交付的服務;通過TCP連接傳送的數據,無差錯、不丟失、不重複,並且有序到達;
  4. TCP提供全雙工通信;TCP連接的兩端有發送緩存和接收緩存:
  • 發送緩存:準備發送的數據和已經發送但尚未收到確定的數據;
  • 接收緩存:按序到達但尚未被接受應用程序讀取的數據和不按序到達的數據;

     5. 面向字節流;TCP中的“流”指的是流入到進程或從進程留出的字節序列

然後,我們還是要先來認識一下TCP的首部報文格式:

image.png

  • 序號:在一個TCP連接中傳送的字節流中的每一個字節都按順序編號,本字段表示本報文段所發送數據的第一個字節的序號。
  • 確認號:期望收到對方下一個報文段的第一個數據字節的序號。若確認號爲N,則證明到序號N-1爲止的所有數據都已正確收到。
  • 數據偏移(首部長度) : TCP報文段的數據起始處距離TCP報文段的起始處有多遠,以4B位單位,即1個數值是4B。
  • 6個控制位
    • 緊急位URG: URG=1時, 標明此報文段中有緊急數據,是高優先級的數據,應儘快傳送,不用在緩存裏排隊,配合緊急指針字段使用。
    • 終止位FIN:FIN=1時, 表明此報文段發送方數據已發完,要求釋放連接。
    • 同步位SYN:SYN=1時, 表明是一一個連接請求/連接接受報文。
    • 復位RST:RST=1時, 表明TCP連接中出現嚴重差錯,必須釋放連接,然後再重新建立傳輸鏈接。
    • 推送位PSH:PSH=1時, 接收方儘快交付接收應用進程,不再等到緩存填滿再向上交付。
    • 確認位ACK:ACK=1時 確認號有效,在連接建立後所有傳送的報文段都必須把ACK置爲1。
  • 窗口:指的是發送本報文段的一方的接收窗口,即現在允許對方發送的數據量。
  • 檢驗和:檢驗首部+數據,檢驗時要加上12B僞首部,第四個字段爲6。
  • 緊急指針:URG=1時纔有意義,指出本報文段中緊急數據的字節數
  • 選項:最大報文段長度MSS、窗口擴大、時間戳、選擇確認....

TCP連接管理

既然TCP是面向連接的,那麼我們就一定要知道其連接和釋放的過程;在此之前,我們要知道TCP的連接採用客戶服務器方式,主動發起連接建立的應用進程叫做客戶,而被動等待連接建立的應用進程叫做服務器;

  • TCP連接的建立(三次握手):
    • 第一步:客戶端發送連接請求報文段,無應用層數據        SYN=1,seq=x(隨機產生一個序號)
    • 第二步:服務器端爲該TCP連接分配緩存和變量,並向服務器端發送確認報文段,允許連接,無應用層數據        SYN=1,ACK=1,,seq=x(隨機),ack=x+1(確認號)
    • 第三步:客戶端爲該TCP連接分配緩存和變量,並向服務器端返回確認的確認,可以攜帶數據        SYN=1,ACK=1,seq=x+1,ack=y+1
  • TCP連接的釋放(四次揮手)
    • ​​​​​​​image.png
    • 第一步:客戶端發送連接釋放報文段,停止發送數據,主動關閉TCP連接        FIN=1, seq=u
    • 第二步:服務器端回送一個確認報文段,客戶到服務器這個方向的連接就釋放了——當前處於半關閉狀態            ACK=1,seq=v, ack=u+1
    • 第三步:服務器端發完數據,就發出連接釋放報文段,主動關閉TCP連接。        FIN=1,ACK=1, seq=w, ack=u+1
    • 第四步:客戶端回送一個確認報文段,再等到時間等待計時器設置的2MSL (最長報文段壽命)後,連接徹底關閉。        ACK=1, seq=u+1, ack=w+1

前面已經說過,TCP實現的是可靠傳輸,那麼究竟是如何實現可靠傳輸的呢?

  • 應用數據被分割成 TCP 認爲最適合發送的數據塊。
  • TCP 給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。
  • 校驗和: TCP 將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果接收端的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
  • TCP 的接收端會丟棄重複的數據。
  • 流量控制: TCP 連接的每一方都有固定大小的緩衝空間,TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。 (TCP 利用滑動窗口實現流量控制)
  • 擁塞控制: 當網絡擁塞時,減少數據的發送;
  • 停止等待協議: 也是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就- 停止發送,等待對方確認。在收到確認後再發下一個分組。 超時重傳: 當 TCP 發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段;

TCP可以進行流量控制,所謂流量控制:就是讓發送方發送速率不要太快,要讓接收方來得及接收;利用​​​​​​​滑動窗口機制可以很方便地在TCP連接上實現對發送方的流量控制。也就是在通信過程中,接收方根據自己接收緩存的大小,動態地調整發送方的發送窗口大小,發送方的發送窗口取接收窗口rwnd和擁塞窗口cwnd的最小值。

最後就是TCP擁塞控制,進行擁塞控制主要是爲了防止過多的數據注入到網絡;通過四種算法來實現:慢開始和擁塞避免、快重傳和快回復:

  • “慢開始”是指一開始向網絡注入的報文段少,並不是指擁塞窗口cwnd增長速度慢;
  • “擁塞避免"並非指完全能夠避免擁塞,而是指在擁塞避免階段將擁塞窗口控制爲按線性規律增長,使網絡比較不容易出現擁塞;
  • “快重傳”就是使發送方儘快進行重傳,而不是等超時重傳計時器超時再重傳;
  • 快恢復算法:

    • 當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把sstresh門限減半。但是並執行慢開始;

    • 考慮到如果網絡出現擁塞的話就不會收到好幾個重複的確認,所以發送方現在認爲網絡可能沒有出現擁塞。所以此時不執行慢開始算,而是將cwnd設置爲sstresh的打星,然後開始執行擁塞避免算法

image.png

image.png

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章