傳輸層的作用
按照OSI參考模型的劃分,傳輸層負責管理兩個節點之間的數據傳輸。更具體的,網絡層能夠根據IP地址,將數據發送到指定的目標主機,而傳輸層則需要將數據發送到更為具體的某一個具體的應用程序。
傳輸層中有兩個非常具有代表性的傳輸層協議,他們分別是TCP和UDP。TCP是面向連接的,負責可靠的通信傳輸,而UDP則是不具有可靠性的,常被用于廣播和細節控制交給應用的通信傳輸。
端口號
數據鏈路和IP中的地址,分別指的是MAC地址和IP地址,前者用來識別同一鏈路中不同的計算機,后者用來識別TCP/IP網絡中互連的主機和路由器。在傳輸層中,也有類似于地址的概念,那就是端口號。端口號用來識別同一臺計算機中進行通信的不同應用程序,因此,它也被稱為程序地址。
- 端口號的作用
一臺計算機上同時運行多個程序,例如瀏覽器,email客戶端,ssh客戶端等程序都可以同時運行,傳輸層正是利用這些端口號識別本機中正在進行通信的應用程序,并準確的將數據傳輸。
根據端口號識別應用
- 如何進行通信識別
TCP/IP中,要識別一個通信,通常要5個要素:源地址IP,目標地址IP,協議號,源端口號,目標端口號,只有這5個信息完全一致,才能識別他們是否為同一個通信。
識別通信
- 端口號如何確定
在實際進行通信時,要事先確定端口號。確定端口號的方法主要有兩種: - 標準既定的端口號:一般0-1023的為知名端口號。
- 時序分配法:服務端有必要監聽端口號,接受服務的客戶端沒有必要確定端口號,這種方法下,客戶端應用程序可以完全不用自己設置端口號,而全權交給操作系統進行分配。操作系統可以為每個應用程序分配互不沖突的端口號。
- 端口號與協議
端口號由其使用的傳輸層協議決定。因此,不同的傳輸協議可以使用相同的端口號。
UDP
UDP不提供復雜的控制機制,利用IP提供面向無連接的通信服務。并且它是將應用程序發來的數據在收到的那一刻,立即按照原樣發送到網絡上的一種機制。因此,UDP不提供擁塞控制,丟包重發,順序控制等功能,但能夠簡單高效的發送數據,通常用于以下幾方面:
- 包總量較少的通信(DNS、SNMP等)
- 視頻、音頻等多媒體通信(即時通信)
- 限定于LAN等特定網絡中的應用通信
- 廣播通信(廣播、多播)
TCP
相對于UDP的面向無連接快速簡單高效,TCP則是一種面向連接的,具備順序控制、重發控制、擁塞管理等機制的可靠的通信傳輸協議。
TCP通過檢驗和、序列號、確認應答、重發控制、連接管理以及窗口控制等機制實現可靠性傳輸。
- 通過序列號與確認應答提高可靠性
在TCP中,當發送端的數據到達接收主機時,接收端主機會返回一個已收到消息的通知。這個消息叫做確認應答(ACK)。另外,為了避免接收重復的數據,TCP中會給每個數據添加序列號,接收端查詢接收數據TCP首部中的序列號和數據的長度,將自己下一步應該接收的序列號作為確認應答返送出去。通過序列號和確認應答,TCP可以實現可靠傳輸。
序列號與確認應答
- 重發超時確定
重發超時是指在重發數據之前,等待確認應答到來的那個特定時間間隔。如果超過這個時間仍未收到確認應答,發送端將進行數據重發。那么,這個重發超時的具體時間長度是如何確定的呢?
TCP中,在每次發包時都會計算往返時間及其偏差。將這個往返時間(報文段的往返時間)和偏差時間相加,重發超時的時間就是比這個總和稍大一點的值。
重發超時的確認
- 連接管理(三次握手和四次握手)
TCP提供面向連接的通信傳輸,連接是指各種設備、線路,或網絡中進行通信的兩個應用程序為了相互傳遞信息而專有的、虛擬的通信線路,也叫虛擬電路。一旦建立了連接,進行通信的應用程序只使用這個虛擬的通信線路發送和接收數據,就可以保障信息的傳輸。建立一個TCP連接需要發送三個包,也稱為三次握手,斷開一個了解需要發送四個包,也稱為四次握手。
TCP的連接與斷開
- TCP以段為單位發送數據
在建立TCP連接的同時,也可以確定發送數據包的單位,我們稱之為“最大消息長度(MSS)”。TCP在傳送大量數據時,是以MSS的大小將數據進行分割傳送。進行重發也是以MSS為單位。
MSS是在三次握手的時候,在兩端主機之間被計算得出的。兩端主機在發出建立連接的請求時,會在TCP首部中寫入MSS選項。告訴對方自己的接口能夠適應的MSS的大小,然后會在兩者之間選擇一個較小的值投入使用。
TCP以段為單位發送數據
- 利用窗口控制提高速度
TCP以段為單位,每發一個段,進行一次確認應答的處理,不過,這種方式下,包的往返時間越長通信性能越低。為了解決這個問題,TCP引入了窗口這個概念。即使在往返時間較長的情況下,它也能夠控制網絡性能的下降。如下圖所示,確認應答不再是以每個分段,而是以更大的單位進行確認時,轉發時間將會被大幅的縮短。也就是說,發送端主機,在發送了一個段以后,不必要一直等待確認應答,而是繼續發送。
窗口大小就是指無需等待確認應答而可以繼續發送數據的最大值。這個機制實現了使用大量的緩沖區,通過對多個段同時進行確認應答的功能。
TCP窗口
- 窗口控制與重發機制
在使用窗口控制中,如果出線段丟失該怎么辦?考慮兩種情況: - 數據已經到達對端,但是,確認應答未能返回,這種情況下,是不需要進行重發的,在未使用窗口控制的情況下,沒有收到確認應答的數據也是會被重發,而使用了窗口控制以后,某些確認應答即便丟失也無需重發。
IMG_5674.PNG
- 某個報文段丟失了,如下圖所示,當1001~2000的報文段丟失以后,發送端會一直收到序號為1001的確認應答,而發送端主機如果連續3次收到同一個確認應答,就會將其所對應的數據進行重發。這種機制比之前的超時管理更加高效,因此被稱為高速重發機制。
Paste_Image.png
- 流控制
TCP提供了一種機制,可以讓發送端根據接收端的實際接收能力控制發送的數據量,這就是流控制。他的具體操作是,接收端主機向發送端主機通知自己可以接收數據的大小,發送端發送不超過這個限度的數據,該大小限度就是窗口大小。TCP首部中,專門有一個字段用來通知窗口大小。
流控制
- 擁塞控制
有了TCP的窗口控制,收發主機之間能夠連續的發送大量數據包,然而,如果在通信剛開始是就發送大量數據,也可能會引發其他問題。
計算機網絡處于一個共享環境,因此,可能會因為其他主機之間的通信使得網絡擁堵。在網絡擁堵時,如果突然發送大量的數據,極有可能會導致整個網絡的癱瘓。TCP為了防止該問題的出現,在通信一開始就會通過一個叫做慢啟動的算法得出的數值,對發送數據量進行控制。
為了在發送端調節所要發送數據的量,定義了一個叫做“擁塞窗口”的概念。再慢啟動的時候,將這個擁塞窗口的大小設置為1個數據段(1MSS)發送數據,之后每一次收到一次確認應答(ACK),擁塞窗口的值就加1.在發送數據包時,將擁塞窗口的大小和接收端主機通知的窗口大小做比較,然后按照他們當匯總較小的那個值,發送比其還要小的數據量。
擁塞控制
TCP和UDP首部的格式
- UDP首部的格式
UDP首部格式
如圖所示:UDP首部由源端口號,目標端口,包長和校驗組成。
- TCP首部的格式
TCP首部格式
TCP首部主要包括源端口號,目標端口號,序列號,確認應答號,數據偏移,控制位,窗口大小,校驗和等字段組成,但沒有表示包長度和數據長度的字段。可由IP層獲知TCP的包長,由TCP的包長可知數據的長度。