夜光序言:
脆弱的人才會四處遊說自己的不幸,堅強的人隻會不動聲色的愈加強大。
正文:
無連接配接傳輸:UDP
UDP 隻是做了傳輸協定能夠做的最少工作。除了多路複用/多路分解功能及少量的差錯檢測外,它幾乎沒有對 IP 增加别的東西。
UDP 從應用程序得到資料,附加上多路複用/多路分解服務所需的源端口号和目的端口号字段,及兩個其他的小字段,然後将形成的封包段交給網絡層。
網絡層将該傳輸層封包段封裝到一個 IP 資料報中,然後盡力而為地将此資料報傳遞給接收主機。
如果該封包段到達接收主機,則 UDP 使用目的端口号來将封包段中的資料傳遞給正确的應用程序。
使用 UDP 時,在發送封包段之前,發送方和接收方的傳輸層實體之間沒有進行握手。
是以,UDP 被稱為無連接配接的。
DNS 是一個通常使用 UDP 的應用層協定的例子。
當主機中的 DNS用戶端要進行一次查詢時,它構造了一個 DNS查詢消息并将其交給 UDP。
無須與目的端系統握手,主機端的 UDP 為此封包添加首部字段,然後将形成的封包段交給網絡層。網絡層将此 UDP 封包段封裝進一個 IP 資料報中,然後将其發送給一個 DNS 伺服器。
查詢主機中的 DNS 用戶端便等待對該查詢的響應。
如果它沒有收到響應,則要麼試着向另一個名字伺服器發送該查詢,要麼通知調用的應用程式它不能獲得響應。
使用 UDP 主要有以下原因:
.應用層能更好地技制要發送的資料和發送時間。實時應用通常要求最快的發送速率,不想過分地延遲封包段的傳送,且能容忍一些資料丢失,而 TCP 服務模型并不是特别适合這些應用的需求。
.無需連接配接建立。TCP 在開始資料傳輸之前要經過三次握手。UDP 卻不需要任何淮備即可進行資料傳輸。是以 UDP 不會引入建立連接配接的時延。
.無連接配接狀态。TCP 需要在端系統中維護連接配接狀态。此連接配接狀态包括接收和發送緩存、擁塞控制參數、序号與确認号的參數。UDP 不維護連接配接狀态,也不跟蹤這些參數。
.分組首部開梢小。每個 TCP 封包段都有 20 位元組的首部開銷,而 UDP 僅有 8 位元組的開銷。
是以電子郵件、遠端終端通路、Web 及檔案傳輸都是運作在 TCP 之上。因為所有這些應用都需要 TCP 的可靠資料傳輸服務。然而,有很多重要的應用是運作在 UDP 上而不是 TCP上。UDP 被用于 RIP 選路表的更新,因為 RIP 更新被周期性地發送(通常每 5 分鐘一次),以便丢失的更新能被最近的更新所替代,是以更新丢失或過時的 RIP 是毫無意義的。
UDP 也用于承載網絡管理資料(SNMP)。DNS 運作在 UDP 之上,避免了 TCP 的連接配接建立時延。
但是可通過在應用程式自身中建立可靠性機制來完成 UDP 的可靠資料傳輸,例如一些音視訊用戶端程式。
1 UDP 封包段結構
UDP 首部隻有 4 個字段,源和目的端口号、長度和校驗和,每個字段由兩個位元組組成。
通過目的端口号可以使目的主機将應用資料交給運作在目的端系統中的相應程序(即執行多路分解功能)。而在傳回消息時使用源端口号。
接收主機使用校驗和來檢查封包段中是否存在差錯。
長度字段指明了包括首部在内的 UDP 封包段長度(以位元組為機關)。
2 校驗和
校驗和提供了差錯檢測功能,即當 UDP 封包段從源到達目的時,校驗和用于确定其中的比特是否發生了改變(例如,由千鍊路中或者路由器中存儲資料時的噪聲幹擾)。
校驗和的計算:發送方的 UDP 對封包段中的所有 16 比特字的和進行反碼運算,求和時遇到的任何溢出都被回卷。得到的結果放在 UDP 封包段中的校驗和字段。
下面是簡單例子。
假定我們有下面 2 個 16 比特字:
在接收方,全部的 3 個 16 比特字(包括校驗和)一起相加。如果分組中無差錯,則顯然在接收方這個和将是 1111 1111 1111 1111。如果有 1 個比特是 0,那麼我們就知道分組中出現了差錯。