一般常規用途如下
udp詳解
udp是傳輸層的協議,使用者資料報協議udp只在ip的資料報服務至上增加了復用和分用的功能以及差錯檢測的功能。擁有面向無連線的報文,不可靠傳輸的特點。udp對應用層交下來的資料只新增首部,並進行特別的處理,就交給網路層;對網路層傳遞上來的使用者資料報拆封首部後,原封不動的交給應用層,由於udp提供不可靠服務,具有tcp所沒有的優勢
udp 特點:
udp無連線,時間上不存在建立連線需要的時延。空間上,tcp需要在端系統中維護連線狀態,需要一定的開銷。此連線裝入包括接收和傳送快取,擁塞控制引數和序號與確認號的引數。ucp不維護連線狀態,也不跟蹤這些引數,開銷小。空間和時間上都具有優勢。
舉個例子:
dns如果執行在tcp之上而不是udp,那麼dns的速度將會慢很多。
http使用tcp而不是udp,是因為對於基於文字資料的web網頁來說,可靠性很重要。
同一種專用應用伺服器在支援udp時,一定能支援更多的活動客戶機。
分組首部開銷小**,tcp首部20位元組,udp首部8位元組。
udp提供盡最大努力的交付,不保證可靠交付。所有維護傳輸可靠性的工作需要使用者在應用層來完成。沒有tcp的確認機制、重傳機制。如果因為網路原因沒有傳送到對端,udp也不會給應用層返回錯誤資訊
udp是面向報文的,對應用層交下來的報文,新增首部後直接鄉下交付為ip層,既不合併,也不拆分,保留這些報文的邊界。對ip層交上來udp使用者資料報,在去除首部後就原封不動地交付給上層應用程序,報文不可分割,是udp資料報處理的最小單位。
正是因為這樣,udp顯得不夠靈活,不能控制讀寫資料的次數和數量。比如我們要傳送100個位元組的報文,我們呼叫一次sendto函式就會傳送100位元組,對端也需要用recvfrom函式一次性接收100位元組,不能使用迴圈每次獲取10個位元組,獲取十次這樣的做法。
首部格式
·使用者資料報udp分為兩個字段:資料字段和首部字段,從圖來分析使用者資料報udp的首部格式。
udp首部欄位很簡單,由4個字段組成,每個欄位的長度都是兩個位元組,共8位元組。
源埠 原埠號,在需要對方回信時選用,不需要時可全0
目的埠 目的埠號,這在終點交付報文時必須使用,不然資料交給誰呢?
長度 udp的長度,最小值為8位元組,僅有首部
檢驗和 檢測使用者資料報在傳輸過程是否有錯,有錯就丟棄。
在傳輸的過程中,如果接收方udp發現收到的報文中的目的埠不存在,會直接丟棄,然後由網際控制報文協議icmp給傳送方傳送「埠不可達」差錯報文。
偽首部計算校驗和時,需要在udp之前增加12個位元組的偽首部。這種首部並不是使用者資料報的真正首部。偽首部並不在網路中傳輸,只是在計算檢驗和,臨時新增在udp使用者資料報前,得到乙個臨時的使用者資料報。
udp的校驗和是把首部和資料部分一起校驗,傳送方計算校驗和的一般步驟:
將首部的校驗和字段填充為0(零)
把偽首部和使用者資料報udp看出16位的字串連線起來
如果資料部分不是偶數位元組,則填充乙個全零位元組(該位元組不傳送到網路層)
按二進位制反馬計算出這些16位字的和
然後將和寫入校驗和字段,就可以傳送到網路層了。
接收方收到使用者資料報後,連同偽首部一起,按二進位制反碼求這些16位字的和,無差錯結果是應全為1.否則出錯,直接丟棄該報文。
注意事項
校驗時,若udp資料報部分的長度不是偶數個位元組,則需要填入乙個全0位元組,但是次位元組和偽首部一樣,是不傳送的。
如果udp校驗和校驗出udp資料報是錯誤的,可以丟棄,也可以交付上層,但是要附上錯誤報告,告訴上層這是錯誤的資料報。
通過偽首部,不僅可以檢查源埠號,目的埠號和udp使用者資料報的資料部分,還可以檢查ip資料報的源ip位址和目的位址。
這種差錯檢驗的檢錯能力不強,但是簡單,速度快
UDP協議與UDP通訊
1 udp協議 udp是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一台計算機向另外一台計算機傳送資料時,傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料。但是在使用udp協議傳送資料時,由於udp的面向無連線性,...
UDP程式設計
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...
UDP程式設計
通常使用 點分十進位制 字串表示ip位址,用3個 劃分成四個區。每個區的表示範圍為0 255 埠號具有2個位元組16個位元位的整數 ip是將資料從a主機交付給b主機 埠號用來標識乙個程序,乙個埠號只能被乙個程序占用 ip位址 埠號 套接字,可以進行資料層面的來往,本質上就是程序間的通訊 每乙個程序都...