一、概述
1、什么是UDP
UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務
2、什么時候用UDP
對速度要求比較高時使用UDP,比如視頻聊天(流暢度優先時),qq聊天,dns域名解析等
3、怎么用UDP
java socker實現udp編程(具體使用DatagramSocket )
4、UDP的特點
UDP 是無連接的,即發送數據之前不需要建立連接。
UDP 使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制。
UDP 是面向報文的。UDP 沒有擁塞控制,很適合多媒體通信的要求。
UDP 支持一對一、一對多、多對一和多對多的交互通信。
UDP 的首部開銷小,只有 8 個字節。
5、UDP存在的問題
1、沒有擁塞控制。當很多主機都向網絡發送高數據量的視頻流時,網絡很容易就占滿,導致大家都無法接收
2、是不可靠傳輸。需要引入確認機制改進UDP不可靠的問題
二、UDP報文格式
源端口:源端口號。在需要對方回信時。不需要時可用全0
目的端口:目的端口號。這在終點交付報文時必須使用
長度:UDP 用戶數據報的長度,其最小值是8(僅有首部)
檢驗和:檢測 UDP 用戶數據報在傳輸中是否有錯。有錯就丟棄
另外UDP還有偽首部:
即並不是真正的UDP報文首部信息,包含源ip地址,目的ip地址等信息。只是在計算校驗和時,臨時添加在UDP首部的
三、UDP校驗和的計算
一、二進制反碼求和?
1、假設要傳輸的數據為1100,1010 。那么首先得到數據的反碼為:0011,0101
2、然后將0011 + 0101 ==》得到:1000 具體是這樣的:(0+0=00 1+0=01 1+1=10)
二、反碼計算
將以上的結果再求反碼得到校驗和: 0111。 那么傳送的數據就是1100,1010,0111(校驗和)
三、怎么判斷數據是否正確
接收方收到之后,同樣將數據進行二進制求和:即0011,0101,1000==》最后求和得到1111。如果全為1,那么說明數據是准確的
四、抓包演示
參考鏈接:
https://zhuanlan.zhihu.com/p/64154915
https://blog.csdn.net/stone_Yu/article/details/81611067
https://blog.csdn.net/yjxsdzx/article/details/71937886
https://www.jianshu.com/p/f1bd10f3d170
https://blog.csdn.net/u012063703/article/details/45850343
如果本篇博客有任何錯誤和建議,歡迎大佬們批評指正
我是知逆,我們下期見
Peace