【網絡編程】【UDP】UDP協議介紹

一、UDP介紹

       UDP和TCP相比是截然不同的,是一個簡單的傳輸協議。全稱是用戶數據包協議(User Datagram Protocol),是一個無連接協議。UDP不保證UDP數據報會到達其最終目的地,不保證各個數據報的先後順序跨網絡後保持不變,也不保證每個數據報只到達次。

       我們使用UDP進行網絡編程所遇到的問題是它缺乏可靠性。如果一個 數據報到達了其最終目的地,但是校驗和檢測發現有錯誤,或者該數據報在網絡傳輸途中被丟棄了,它就無法被投遞給UDP套接字,也不會被源端自動重傳。如果想要確保一個數據報到達其目的地, 可以往應用程序中添置一大堆 的特性:來自對端的確認、本端的超時與重傳等。

       每個UDP數據報都有一個長度。如果一個數據報正確地到達其目的地,那麼該數據報的長度將隨數據一道傳遞給接收端應用進程。我們已經提到過TCP是一個字節流(byte stream)協議,沒有任何記錄邊界。

      UDP是無連接的,因爲UDP客戶與服務器不必存在任何長期的關係。所以服務器和客戶端都可以用同一個UDP套接字和不同的對端通訊。

 

       這一端的UDP簡單地給來自用戶的數據報安上它的8字節的首部以構成UDP數據報,然後傳遞給IP。IPv4或IPv6給UDP數據報安上相應的IP首部以構成IP數據報,執行路由操作確定外出接口,然後或者直接把數據報加入數據鏈路層輸出隊列(如果適合於MTU),或者分片後再把每個片段加入數據鏈路層的輸出隊列。如果某個UDP應用進程發送大數據報(譬如說2000字節數據報),那麼它們相比TCP應用數據更有可能被分片,因爲TCP會把應用數據劃分成MSS大小59的塊,而UDP卻沒有對等的手段。

       從寫一個UDP套接字的write調用成功返回表示所寫的數據報或其所有片段已被加入數據鏈路層的輸出隊列。如果該隊列沒有足夠的空間存放該數據報或它的某個片段,內核通常會返回一個ENOBUFS錯誤給它的應用進程。

 

       儘管UDP無法提供TCP提供的衆多特性,需要使用UDP的場合依然不少。廣播或多播應用必須使用UDP。簡單的請求應答情形也可以使用UDP,不過必須在應用程序中增加某種形式的可靠性。UDP不應該用於海量數據的傳送。

 

二、UDP協議

 

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