自己做網站推廣在那個網站鄭州做網站最好的公司
1. 概述
UDP(User Datagram?Protocol)是一種無連接的傳輸層協議,它提供了一種簡單的數據傳輸服務,不保證數據的可靠傳輸。在網絡通信中,UDP通常用于一些對實時性要求較高、數據量較小、傳輸延遲較低的應用,如音頻、視頻傳輸等。
2.?UDP特點
1、無連接
UDP傳輸的過程類似于寄信,知道對端的IP和端口號就可以直接進行數據報傳輸,不用像TCP協議需要建立連接。
2、不可靠
UDP沒有任何安全機制,發(fā)送端發(fā)送數據報以后,如果因為網絡故障該段無法發(fā)到對方,UDP協議層也不會給應用層返回任何錯誤信息。
3、面向數據報
UDP通過數據報的形式進行傳輸,用戶的請求或響應都會從數據報轉換成字符串
應用層交給UDP多長的報文,UDP原樣發(fā)送,既不會拆分也不會合并
例:用UDP傳輸100個字節(jié)的數據,如果發(fā)送端一次發(fā)送100個字節(jié),那么接收端也必須一次接收100個字節(jié),而不能循環(huán)接收10次每次接收10個字節(jié)。
4、全雙工通信
UDP的Socket既能讀也能寫,客戶端和服務器都可以發(fā)送請求/接受響應。
3.?UDP的報文結構
UDP數據報=報頭+載荷
1、報頭
對于UDP來說,報頭一共有8個字節(jié)????,包含4個字段,每個字段2個字節(jié)。
報頭=源端口+目的端口+報文長度+校驗和
應用層數據報
UDP報頭分為四個部分,每個部分占兩個字節(jié)。
- 源端口
- 目的端口
- 報文長度
- 校驗和
3.1源端口和目的端口
源端口和目的端口各占2字節(jié)(Byte)
,端口號范圍:0~65535
比如:源端口是3306,目的端口是8866。
例:
3.2 報文長度
報文的長度也用2個字節(jié)表示,范圍是0~65535
,單位是字節(jié)(Byte)
。
一般我們都說UDP最大報文長度是64KB (65536B)
,實際上是65535B
。
如果超過了64KB,可以通過以下兩種方式來解決:
- 在應用層通過代碼的方式針對應用層數據報進行手動分包,拆成多個包通過多個UDP數據報進行傳輸。
- 換成TCP協議
3.3 校驗和
1、定義
將發(fā)送前和發(fā)送后的校驗和進行比較,檢查發(fā)送前后數據報是否一致。用來驗證傳輸的數據是否是正確的。
2. 校驗和存在的意義就是用來判定當前傳輸的數據是否出錯:
如果校驗和不對,此時數據一定不對
如果校驗和對,數據也有一定概率是錯的
為了讓校驗和能夠識別率更高一些,計算時通常會以數據內容作為參數來計算,數據內容發(fā)生變化,校驗和也會發(fā)生變化。
3.校驗和主要校驗的內容
數據內容: 校驗和對數據報中的每個比特位進行求和計算,以確保數據內容在傳輸過程中沒有被篡改或損壞。
傳輸過程中的錯誤: 校驗和可以檢測到數據在傳輸過程中是否發(fā)生了錯誤,例如比特翻轉或數據丟失。
數據包的完整性: 通過與發(fā)送端發(fā)送的校驗和進行比較,接收端可以驗證數據包在傳輸過程中是否保持完整,即數據在發(fā)送端和接收端之間沒有發(fā)生改變。
4. 校驗和的實現方式
校驗和使用的是一種簡單的錯誤檢測機制,它的實現方式如下:
1.計算校驗和: 發(fā)送端在發(fā)送UDP數據包之前,會對UDP數據報文的內容進行校驗和的計算。計算過程通常包括以下步驟:
? ? ? ? 將UDP數據報文劃分為以16比特為單位的字(對于字節(jié)不足16比特的部分,可以補零)。
? ? ? ? 將這些16比特字相加,得到一個32比特的中間結果。
? ? ? ? 如果中間結果的高16比特不為0,則將其與低16比特相加,直到高16比特為0為止。
? ? ? ? 最終的校驗和就是將最后的結果按位取反得到的值。
2.校驗和字段: 發(fā)送端將計算得到的校驗和值放置在UDP數據報的校驗和字段中。
3.接收端驗證: 接收端在接收到UDP數據包后,會進行校驗和的驗證。驗證的步驟與計算過程類似:
? ? ?接收端同樣將UDP數據報文劃分為16比特的字,并對其進行求和計算。
? ? ?接收端將計算得到的校驗和與UDP數據包中的校驗和字段進行比較。
? ? ?如果兩者相等,則認為數據包未損壞;如果不相等,則認為數據包可能已經損壞。
4. 注意事項
1.無連接性:UDP是一種無連接的協議,不像TCP那樣需要建立連接和維護狀態(tài)。因此,發(fā)送端發(fā)送UDP數據報文后,無法知道是否被接收端正確接收,也無法進行重傳操作。應用層需要自行處理丟包和數據重傳的問題。
2.不可靠性:UDP不提供數據的可靠傳輸和重傳機制,也不具備擁塞控制。因此,數據報文在傳輸過程中可能會丟失、重復或亂序。應用層需要自行處理這些問題,如通過數據包序號、確認應答等方式實現可靠性傳輸。
3.數據完整性:UDP提供校驗和字段用于檢驗數據報文的完整性,但并不提供數據的糾錯功能。因此,在傳輸過程中可能會出現數據損壞的情況。應用層可以通過校驗和驗證數據的完整性,但無法進行錯誤的糾正。
4.數據包大小限制:UDP數據報文的最大長度為65535字節(jié),包括UDP頭部和數據部分。超過這個長度的數據報文將被分片或丟棄。因此,在發(fā)送UDP數據時需要注意控制數據包的大小,避免過大導致分片或丟包。如果傳輸數據超過64K,就需要在應用層手動的分包, 多次發(fā)送, 并在接收端手動拼裝。
5.適用場景:UDP適用于對實時性要求較高、傳輸延遲較低的應用場景,如音視頻傳輸、在線游戲等。但對于需要可靠傳輸和數據完整性保障的應用,應該選擇TCP協議。
6.端口號選擇:在使用UDP通信時,需要選擇合適的端口號進行通信。系統保留端口號(0-1023)通常用于特定的協議和服務,應避免使用這些端口號,以免與系統服務沖突。