udp的一些簡單記錄

UDP首部字段如下圖所示



UDP是無連接的傳輸協議,
爲什麼有了面向連接的可靠數據傳輸協議TCP,還要有UDP呢?
1 應用層可以高度控制要發送的數據 和發送的時間。 這裏解釋一下,難道tcp不可以嗎? tcp也可以,通過設置 TCP_NODELAY 選項來取消nagle算法,nagle算法是tcp用來擁塞控制的算法,這裏就不多扯了,看官可以自行去百度一下。


2無需建立連接,很明顯TCP發送數據,需要先進行三次握手,這得耗費一些時間和資源。這是DNS建立在UDP之上而不是TCP最重要的原因。


3無連接狀態,TCP需要維護一大堆的連接狀態,包括接收,發送緩存,擁塞控制參數,序號,確認號等。而UDP則不維護連接狀態,這可以讓主機給更多的用戶提供服務。


4首部分組小,TCP 首部20個字節,加上實際情況中選項的12個字節,32個字節。 而UDP只有短短的8個字節。大大減少了首部的開銷。


對於首部的幾個字段,簡單解釋下,源端口號,目的端口號,分別是源主機發送消息的端口號,和目的主機接收消息的端口號。

長度是指該udp報文段的整個的長度,即首部+數據的長度,這點跟TCP首部的長度字段不同,TCP首部的長度字段指的是該TCP報文段的首部的長度。長度字段佔了2個字節,因此這也限定了一個UDP報文段的最大的長度,2的16次方-1,6W多字節,如果你從應用層發送的數據長度-8(UDP首部長度)大於這個長度,將會發送失敗。

檢驗和,提供差錯檢測,怎麼個檢測法呢,檢驗和字段的值是報文段中所有的16比特字相加得到的值取反(求和過程中有溢出都丟掉不要),最後檢驗和字段和數據字段相加若不是得到16個1,則出錯了。


UDP雖然不提供可靠數據傳輸服務,但是我們可以在應用層,做一些處理,使我們的應用實現可靠的數據傳輸,如在應用層上做確認與重傳的機制。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章