# UDP (User Datagram Protocol) 用戶資料報協定 ###### tags: `Technology` `Internet` ## 簡介 一種在 **[傳輸層](https://hackmd.io/gJIzD0-VTi6VtW2JbpkMcg)(Transport layer)** 的協定,為**無連線傳輸(connectionless communication)** ,規則訂於[RFC768](https://tools.ietf.org/html/rfc768)。 ## 特色 * 一種**簡單**的資料傳輸協定,只做傳輸層非做不可的事,像是多工/解多工以及一些簡單的錯誤偵測,幾乎是應用程式直接跟網路層對話。 * 沒有保證一定會成功傳遞訊息 → **不可靠(Unreliable)** ,因此UDP又被稱為 **==Unreliable== Datagram Protocol** :laughing::grin::stuck_out_tongue_closed_eyes:。 * 不會進行任何握手程序 → **無連線**,不會為了建立連線造成任何延遲。 * **無連線狀態(stateless)** ,不會維護連線狀態,適用於要支援較多用戶的應用上,如:串流媒體(streaming media) * 即時性應用:fire: * 較小的封包標頭負擔 ## UDP結構 下圖為UDP區段的結構,UDP標頭(header)只有4個欄位,皆為2 bytes。  1. 來源端埠號(Source Port Number) 2. 目的端埠號(Destination Port Number) 3. 長度(Length) - header+data的bytes數 4. 檢查和(Checksum) ## UDP 檢查和 (Checksum) ### 流程 1. 將UDP segment中所有16-bits的字組全部加起來,如果加到最後一個bits有進位就補到最低位元(Least significant bit,LSB) 2. 取**1's complement**,這個就是我們的checksum。 3. 在接收端,就會將整個segment及checksum的16bits字組全部加起來,總和應該要是1111111111111111,如果有0就代表傳輸發生了錯誤。 ### 範例 * 2筆16位元組: 1011101110110101、1000111100001100 * 加起來!注意要將進位位元繞回最低位元做運算。 得到和為:0100101011000010 * 和的1's complement為1011010100111101,此即為checksum!:sparkles::star: **UDP僅提供錯誤檢查,並不會提供錯誤復原的服務:bangbang:** ## UDP v.s. TCP 應用 | 應用 | 應用層協定 | 傳輸層協定 | | :--- | :---: | :---: | | <i class="fa fa-envelope"></i> 電子郵件 | SMTP | TCP | | <i class="fa fa-laptop"></i> 遠端終端機連線 | Telnet | TCP | | <i class="fa fa-internet-explorer"></i> 網頁 | HTTP | TCP | | <i class="fa fa-file"></i> 檔案傳輸 | FTP | TCP | | <i class="fa fa-exchange"></i> 遠端檔案伺服器 | NFS | 一般是UDP | | <i class="fa fa-youtube-play"></i> 串流多媒體 | 一般是私人協定 | UDP或TCP | | <i class="fa fa-skype"></i> 網際網路電話 | 一般是私人協定 | UDP或TCP | | <i class="fa fa-user-circle"></i> 網路管理 | SNMP | 一般是UDP | | <i class="fa fa-refresh"></i> 繞送協定 | RIP | 一般是UDP | | <i class="fa fa-address-card-o"></i> 網域名稱轉譯 | DNS | 一般是UDP | ## Reference 1. Computer Networking: A Top-Down Approach 6/E 2. https://en.wikipedia.org/wiki/User_Datagram_Protocol 3. https://zh.wikipedia.org/wiki/%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%E6%8A%A5%E5%8D%8F%E8%AE%AE
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up