无连接传输:UDP
一、UDP簡單介紹
(1)UDP是“無修飾”、“不加渲染的”因特網傳輸層協議。
(2)UDP提供“盡最大努力”服務,即不保證可靠交付,同時也不使用擁塞控制。使得UDP數據段可能丟失或傳遞失序的報文到應用程序。
(3)UDP是面向無連接的協議,即在UDP接收者與發(fā)送者之間沒有握手、每個UDP數據段的處理獨立于其它數據段。
(4)UDP只在IP的數據報服務之上增加了很少一點的功能,即端口的功能和差錯檢測的功能。
為什么會有UDP呢?主要有以下幾點:
(1)不需要建立連接,這樣就減少了延遲。
(2)在發(fā)送者和接收者之間不需要連接狀態(tài),使得數據傳輸更簡單。
(3)具有很小的數據段首部。
(4)沒有擁塞控制,UDP能夠用盡可能快的速度傳遞。 很適合多媒體通信的要求。
二、UDP是面向報文的
UDP是面向報文的,具體表現為:應用層傳輸的是報文,到傳輸層之后將應用層的報文轉換為數據段,在數據段前端加上UDP首部,再將首部和數據部分傳送到IP層時,IP層的前端又添加了IP首部。UDP主要用于流式多媒體的應用。可以容忍丟包,速度非常快。
三、UDP的首部格式
首部格式:由兩個字段構成,分別為首部字段與數據字段。首部字段有8個字節(jié),又由4個字段構成,分別為源端口、目的端口、長度、校驗和。每個字段都有兩個字節(jié)。長度是首部和數據的總長度。
四、UDP基于端口的分用
UDP是基于端口的分用:端口1、端口2、端口3通過應用層的端口到了下層傳輸層時進行UDP分用,加上UDP首部之后,將首部和數據報傳到了下層的IP層。這是從上到下的過程,如果是從上到下的話IP層的數據段在傳送時由UDP進行分用,通過分用將數據傳到應用層的每一個端口。
五、UDP校驗和
在計算校驗和時,臨時把“偽首部”和UDP用戶數據報連接在一起。偽首部僅僅是為了計算檢驗和。這個過程中我們要去校驗發(fā)送到對端的數據報是不是本身發(fā)的數據報。為了解決這個問題使用校驗和去進行校驗。在這個過程中可以看到目的IP地址是4個字節(jié)、0是1字節(jié)、17是1字節(jié)、UDP長度是2字節(jié),通過下面的偽首部可以看到總共是12個字節(jié),偽首部再加上源端口號,目的端口號、長度與校驗和又封裝成了UDP用戶數據報的首部,UDP用戶數據報首部加上數據發(fā)到下層IP層進行數據發(fā)送。
校驗原理就是一個差錯檢測的過程。
發(fā)送方將用戶數據發(fā)到了接收方,發(fā)送方將數據段看成16bit的整數序列,發(fā)送方的UDP對報文段中的所有16比特字的和進行反碼運算,求和時遇到的任何溢出都被回卷。將校驗和的值放入UDP的校驗和域。接收方計算收到數據段的校驗和,然后檢查校驗和是否等于校驗和域中的值。如果相等說明數據完整。
計算校驗和例子如下圖所示:
總結
- 上一篇: 使用TCP的简单C/S程序
- 下一篇: Linux学习:文件描述符表