上一篇說了路由協議相關知識點,包括如何通過路由規則選擇數據報出口,動态路由協議等信息。
今天是五一,那麼就來聊一下UDP相關的知識點,依然是八股文。
❝
如果MAC層定義了本地局域網的傳輸行為, IP層定義了整個網絡端到端的傳輸行為, 這兩層基本定義了這樣的現象:網絡傳輸是以包為單位的,二層叫幀,網絡層叫包,傳輸層叫段。包單獨傳輸,自行選路,在不同的設備封裝解封裝,不保證到達。
❞
UDPUDP是一個簡單的面向數據包的運輸層協議
進程的每個輸出操作都正好産生一個UDP數據報,并組裝成一份待發送的IP數據報。
UDP不提供可靠性,隻負責把應用程序傳給IP層的數據發送出去,但并不保證它們能到達目的地。
「UDP特點」
1、UDP首部
- 溝通簡單
- 随意傳輸,誰都可以傳輸數據到相應端口上
- 不會根據網絡情況進行改變
端口号表示發送進程和接收進程。
由于IP層已經把IP數據報分配給TCP或UDP(根據IP首部中協議字段值)
因此TCP端口号由TCP來查看,而UDP端口号由UDP來查看。
TCP端口号與UDP端口号是相互獨立的。
UDP長度字段值是UDP首部和UDP數據的字節長度。
最小值為8字節,也就是沒有數據
IP數據報長度值是數據報全長,因此UDP數據報長度是全長減去IP首部的長度。
2、UDP校驗和UDP檢驗和覆蓋UDP首部和UDP數據,而IP檢驗和隻覆蓋IP的首部,不涉及到數據。
UDP的檢驗和是可選的,而TCP的檢驗和是必需的。
UDP檢驗和的基本計算方法與IP首部檢驗和計算方法類似,但存在不同點。
UDP數據報的長度可以為奇數字節,但檢驗和算法是把若幹個16bit字相加。解決方法是在必要時在最後增加填充字節0,這隻是為了檢驗和的計算。
UDP數據報和TCP端都包含一個12字節長的僞首部,為了計算檢驗和而設置的。
僞首部包含IP首部的一些字段,目的是讓UDP兩次檢查數據是否已經正确到達目的地。
如果檢驗和的計算結果是0,則存入的值為全1(65535),這在二進制反碼計算中是等效的。
如果傳送的檢驗和為0,說明發送端沒有計算檢驗和。
如果發送端沒有計算檢驗和而接收端檢測到檢驗和有差錯,那麼UDP數據報就要被悄悄地丢棄。
3、IP分片
「當需發送的數據包大小大于路徑MTU時,就需要進行IP數據報分片」
把一份IP數據報分片以後,隻有到達目的地才進行重新組裝。
重新組裝由目的端的IP層來完成,目的是使分片和重新組裝過程對運輸層(TCP和UDP)是透明的。
已經分片過的數據報有可能會再次進行分片,IP首部中包含的數據為分片和重新組裝提供了足夠的信息。
對于發送端發送的每份IP數據報來說,其标識字段都包含一個唯一值,在數據報分片時非複制到每個片中。
标志字段用其中一個比特來表示“更多的片”。
除了最後一片外,其他每個組成數據報的片都要把該比特置 1。
片偏移字段指的是該片偏移原始數據報開始處的位置。
當數據報被分片後,每個片的總長度值要改為該片的長度值。
标志字段中有一個比特稱作“不分片”位,如果這一比特為1,IP将不對數據報進行分片。相反把數據報丢棄并發送一個ICMP差錯報文。
當IP數據報分片後,每一片都成為一個分組,有自己的IP首部,并在選擇路由器時與其他分組獨立。固有可能在到達目的端時失序。
一片數據的丢失也要重傳整個數據報。因為對數據報分片的是中間路由器,而不是起始端系統,後者根本不知道數據報是如何分片的。
4、ICMP不可達報錯(需分片)發生ICMP不可達差錯的另一種情況是,當路由器收到一份需要分片的數據報,而在IP首部又設置了不分片(DF)的标志比特。
如果路由器沒有提供過這種新的ICMP差錯報文格式,那麼下一站的MTU就設為0.
5、Traceroute能深入探索TCP/IP協議的方便可用的工具。
不能保證從源端發往目的端的兩份連續的IP數據報具有相同的路由。
開始時發送一個TTL字段為1的UDP數據報,然後将TTL字段每次加1,以确定路徑中的每個路由器。每個路由器在丢棄UDP數據報時都返回一個ICMP超時報文2,而最終目的主機則産生一個ICMP端口不可達的報文。
Traceroute除了能發現路由之外,還能用它來确定路徑MTU。
「确定路徑MTU:」 發送分組,設置“不分片”标志比特。發送的第一個分組長度正好與出口MTU相等,每次收到ICMP“不能分片”差錯是就減少分組的長度。
6、最大UDP數據報長度理論上,IP數據報的最大長速度是65535字節,這是IP首部16比特總長度字段所限制的。
去除20字節的IP首部和8字節的UDP首部,UDP數據報中用戶數據的最長長度為65507字節。
但一般實現所提供的長度比這個最大值小。
兩個限制因素:
(1)應用程序可能會受到其程序接口的限制。例如socket API可以設置接收和發送緩存的長度。
(2)TCP/IP的内核實現。可能存在一些實現特性(或差錯),使IP數據報長度小于65535字節。
7、ICMP源站抑制報錯當一個系統接收數據報的速度比其處理速度快時,可能會産生此報錯。
「可能」一詞是因為即使一個系統已經沒有緩存并丢棄數據報,也不要求它一定要發送源站抑制報文。
UDP與TCP的區别
(1) TCP是面向連接的,UDP是面向無連接的。
「什麼是面向連接?」
面向連接的協議會先建立連接,例如,TCP會進行三次握手,UDP不會。
所謂的建立連接,是為了在客戶端和服務端維護連接,而建立一定的數據結構來維護雙方交互的狀态,用這樣的數據結構來保證所謂的面向連接的特性。
(2)TCP提供可靠交互,通過TCP連接傳輸的數據,無差錯、不丢失、不重複、按序到達。
而UDP繼承了IP包的特性,不保證不丢失,不保證按順序到達。
(3)TCP是面向字節流的,而UDP繼承了IP的特性,基于數據包的,一個一個發,一個一個收。
(4)TCP有擁塞控制,根據接收方的吞吐量控制發送速度,但UDP沒有。
(5)TCP是有狀态的服務,UDP是無狀态服務。
使用場景
- 需要資源少,在網絡情況較好的内網,或者對于丢包不敏感的應用。
- 不需要建立連接,而是可以廣播的應用DHCP就是一種廣播的形式,基于UDP協議。多播,D類地址,也即組播地址。使用此地址可将包組播給一批機器。
- 需要處理速度快,時延低,可以容忍少數丢包,但是要求即便網絡擁塞,也不改變發送速度。
===============================
我是Liusy,一個喜歡健身的程序員。
獲取更多幹貨以及最新消息,請關注公衆号:上古僞神
如果對您有幫助,點個關注、轉發就是對我最大的支持!!!謝謝
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!