目錄
一、UDP概述
二、UDP的首部格式
三、UDP緩沖區
四、基于UDP的應用層協議
五、常見問題?
一、UDP概述
UDP(User Datagram Protocol,用戶數據協議報)是傳輸層協議,提供不可靠服務,其特點包括:
- 無連接:知道對端的IP和端口號就能直接進行傳輸,不需要建立連接。
- 不可靠:沒有確認應答機制,沒有重傳機制,如果因為網絡故障導致數據無法發送到對方,UDP協議層也不會給應用層返回任何的錯誤信息。
- 面向數據報:不能夠靈活的控制讀寫數據的次數和數量,應用層交給UDP多長的報文,UDP原樣發送,既不會拆分,也不會合并。如用UDP傳輸100個字節的數據,如果發送端調用一次sendto,發送100個字節,那么接收端也必須調用對應的recvfrom一次接收100個字節,而不能循環調用10次recvfrom,每次接收10字節。
二、UDP的首部格式
UDP數據報分為首部和用戶數據部分,整個UDP數據報作為IP數據報的數據部分封裝在IP數據報中,UDP數據報文結構如圖所示:
UDP首部有8個字節,由4個字段構成,每個字段都是兩個字節
- ?源端口號:表示發送端的端口號,字段長16位。該字段是可選項,有時候可能不會設置源端口號。沒有源端口號的時候該字段的值設置為0,可用于不需要返回的通信中。
- 目的端口號:表示接收端的端口號,字段長度16位。
- UDP長度:UDP的數據報的長度(包括首部和數據)其最小值為8(只有首部)。
- UDP校驗和:檢測UDP數據報在傳輸中是否出錯,出錯則丟棄。該字段是可選的,當源主機不想計算校驗和,則直接令該字段全為0。
三、UDP緩沖區
- UDP沒有真正意義上的發送緩沖區,調用sendto會直接交給內核,由內核將數據傳給網絡層協議進行后續的傳輸動作。
- UDP具有接收緩沖區,但是這個接收緩沖區不能保證收到的UDP報的順序和發送UDP報的順序一致,如果緩沖區滿了,再到達的UDP數據就會被丟棄。
四、基于UDP的應用層協議
- NFS:網絡文件系統
- TFTP:簡單文件傳輸協議
- DHCP:動態主機配置協議
- BOOTP:啟動協議(用于無盤設備啟動)
- DNS:域名解析協議
五、常見問題
1. UDP報文的分離方式
先拿到固定長度的報頭(8字節),在從報頭中拿到16位UDP長度,使用16位UPD長度減去8字節,就是有效載荷(數據)。
2. UDP報文的交付方式
根據首部中的16位端口號,進行向上交付,因為進程綁定了端口號,所以會交付到進程中。
3. 為什么應用層編寫代碼,端口號用uint16_t的變量來保存
因為UDP協議的端口號是16位的