UDP協(xié)議詳解

相比于TCP協(xié)議(傳輸控制協(xié)議)來說,UDP協(xié)議(用戶數(shù)據(jù)報協(xié)議)要簡單很多蕊连。

UDP協(xié)議的首部格式

UDP協(xié)議的首部有8個字節(jié)深滚,一共四個字段,每個字段的長度都是2個字節(jié)仪缸。

1.16位源端口號:發(fā)送方的端口號辅鲸,不用的話可以置0

2.16位目的端口號:接受方的端口號。

3.16位UDP長度:首部 + 數(shù)據(jù)的總長度腹殿,單位為字節(jié)独悴。也就是說一個UDP能傳輸?shù)臄?shù)據(jù)最大長度是64K(包含UDP首部);然而我們需要傳輸?shù)臄?shù)據(jù)超過64K锣尉,就需要在應用層手動的分包刻炒,多次發(fā)送,并在接收端手動拼裝自沧。

4.16位UDP檢驗和:是為了接收方進行數(shù)據(jù)校驗設計的坟奥,如果校驗不通過的話數(shù)據(jù)會被丟棄树瞭,后面會單獨講解。當源主機不想計算校驗和爱谁,則直接令該字段全為0.

UDP的特點

1.無連接:UDP是無連接的協(xié)議晒喷,他在進行數(shù)據(jù)傳輸之前不需要先建立連接,也沒有各種重傳機制访敌、擁塞控制和流量控制凉敲,所以傳輸速度很快,消耗很低寺旺,延遲小爷抓,數(shù)據(jù)傳輸效率高,適合對可靠性要求不高的應用程序阻塑,或者可以保障可靠性的應用程序蓝撇,如DNS、TFTP陈莽、SNMP等渤昌。

2.不可靠:只負責數(shù)據(jù)的發(fā)送,不關心數(shù)據(jù)是否送達走搁,沒有確認機制独柑,主機收到數(shù)據(jù)也不會有響應

3.分組首部開銷小,TCP的首部是20字節(jié)朱盐,UDP的首部是8字節(jié)

4.面向報文的:TCP(面向連接的傳輸控制協(xié)議)是面向字節(jié)傳輸群嗤,而UDP是面向報文傳輸菠隆,對于應用層交下來的報文段不進行拆分合并兵琳,直接保留原有報文段的邊界然后添加UDP的首部就交付給網(wǎng)絡層。不論報文的長短骇径,UDP都不會進行處理躯肌。因此為了避免報文段過短降低傳輸效率以及報文段過長導致網(wǎng)絡層對IP數(shù)據(jù)進行分片操作,應用層應該選擇合適長度的報文交付給運輸層的UDP破衔。

協(xié)議對比

UDP和TCP協(xié)議的主要區(qū)別是兩者在如何實現(xiàn)信息的可靠傳遞方面不同清女。TCP協(xié)議中包含了專門的傳遞保證機制,當數(shù)據(jù)接收方收到發(fā)送方傳來的信息時晰筛,會自動向發(fā)送方發(fā)出確認消息嫡丙;發(fā)送方只有在接收到該確認消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認信息為止读第。與TCP不同曙博,UDP協(xié)議并不提供數(shù)據(jù)傳送的保證機制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)包的丟失怜瞒,協(xié)議本身并不能做出任何檢測或提示父泳。因此,通常人們把UDP協(xié)議稱為不可靠的傳輸協(xié)議

TCP 是面向連接的傳輸控制協(xié)議惠窄,而UDP 提供了無連接的數(shù)據(jù)報服務蒸眠;TCP 具有高可靠性,確保傳輸數(shù)據(jù)的正確性杆融,不出現(xiàn)丟失或亂序楞卡;UDP 在傳輸數(shù)據(jù)前不建立連接,不對數(shù)據(jù)報進行檢查與修改擒贸,無須等待對方的應答臀晃,所以會出現(xiàn)分組丟失、重復介劫、亂序徽惋,應用程序需要負責傳輸可靠性方面的所有工作;UDP 具有較好的實時性座韵,工作效率較 TCP 協(xié)議高险绘;UDP 段結構比 TCP 的段結構簡單,因此網(wǎng)絡開銷也小誉碴。TCP 協(xié)議可以保證接收端毫無差錯地接收到發(fā)送端發(fā)出的字節(jié)流宦棺,為應用程序提供可靠的通信服務。對可靠性要求高的通信系統(tǒng)往往使用 TCP 傳輸數(shù)據(jù)黔帕。 [6]

TCP面向字節(jié)流和UDP面向報文的區(qū)別

TCP面向字節(jié)流
打個比方比喻TCP代咸,你家里有個蓄水池,你可以里面倒水成黄,蓄水池上有個龍頭矛物,你可以通過龍頭將水池里的水放出來润脸,然后用各種各樣的容器裝(杯子践盼、礦泉水瓶环础、鍋碗瓢盆)接水。

上面的例子中闻伶,往水池里倒幾次水和接幾次水是沒有必然聯(lián)系的滨攻,也就是說你可以只倒一次水,然后分10次接完蓝翰。另外光绕,水池里的水接多少就會少多少;往里面倒多少水畜份,就會增加多少水诞帐,但是不能超過水池的容量,多出的水會溢出漂坏。

結合TCP的概念景埃,水池就好比接收緩存媒至,倒水就相當于發(fā)送數(shù)據(jù),接水就相當于讀取數(shù)據(jù)谷徙。好比你通過TCP連接給另一端發(fā)送數(shù)據(jù)拒啰,你只調(diào)用了一次write,發(fā)送了100個字節(jié)完慧,但是對方可以分10次收完谋旦,每次10個字節(jié);你也可以調(diào)用10次write屈尼,每次10個字節(jié)册着,但是對方可以一次就收完。(假設數(shù)據(jù)都能到達)但是脾歧,你發(fā)送的數(shù)據(jù)量不能大于對方的接收緩存(流量控制)甲捏,如果你硬是要發(fā)送過量數(shù)據(jù),則對方的緩存滿了就會把多出的數(shù)據(jù)丟棄鞭执。

UDP面向報文
UDP和TCP不同司顿,發(fā)送端調(diào)用了幾次write,接收端必須用相同次數(shù)的read讀完兄纺。UPD是基于報文的大溜,在接收的時候,每次最多只能讀取一個報文估脆,報文和報文是不會合并的钦奋,如果緩沖區(qū)小于報文長度,則多出的部分會被丟棄疙赠。也就說付材,如果不指定MSG_PEEK標志,每次讀取操作將消耗一個報文棺聊。

原因
其實伞租,這種不同是由TCP和UDP的特性決定的贞谓。TCP是面向連接的限佩,也就是說,在連接持續(xù)的過程中裸弦,socket中收到的數(shù)據(jù)都是由同一臺主機發(fā)出的(劫持什么的不考慮)祟同,因此,知道保證數(shù)據(jù)是有序的到達就行了理疙,至于每次讀取多少數(shù)據(jù)自己看著辦晕城。

而UDP是無連接的協(xié)議,也就是說窖贤,只要知道接收端的IP和端口砖顷,且網(wǎng)絡是可達的贰锁,任何主機都可以向接收端發(fā)送數(shù)據(jù)。這時候滤蝠,如果一次能讀取超過一個報文的數(shù)據(jù)豌熄,則會亂套。比如物咳,主機A向發(fā)送了報文P1锣险,主機B發(fā)送了報文P2,如果能夠讀取超過一個報文的數(shù)據(jù)览闰,那么就會將P1和P2的數(shù)據(jù)合并在了一起芯肤,這樣的數(shù)據(jù)是沒有意義的。

UDP的首部校驗
校驗的時候需要在UDP數(shù)據(jù)報之前增加12字節(jié)的偽首部压鉴,偽首部僅僅是為了計算校驗和崖咨,并不是是真實存在的數(shù)據(jù)結構。他會從網(wǎng)絡層獲取到源IP地址和目的IP地址然后結合自己的UDP長度進行校驗油吭。這樣既檢查了UDP數(shù)據(jù)報掩幢,又對IP數(shù)據(jù)報的源地址和目的IP地址進行了檢驗。

UDP校驗和的計算方法和IP數(shù)據(jù)報首部校驗的計算方法很相似上鞠,都是用二進制反碼運算求和再取反际邻,但是IP數(shù)據(jù)報只是對IP數(shù)據(jù)報的頭部進行校驗,UDP的校驗是把首部和數(shù)據(jù)部分一起校驗芍阎。

發(fā)送方世曾,首先是把全零放入校驗和字段并且添加偽首部,然后把UDP數(shù)據(jù)報看成是由許多16位的子串連接起來谴咸,若UDP數(shù)據(jù)報的數(shù)據(jù)部分不是偶數(shù)個字節(jié)轮听,則要在數(shù)據(jù)部分末尾增加一個全零字節(jié)(此字節(jié)不發(fā)送),接下來就按照二進制反碼計算出這些16位字的和岭佳。將此和的二進制反碼寫入校驗和字段血巍。在接收方,把收到得UDP數(shù)據(jù)報加上偽首部(如果不為偶數(shù)個字節(jié)珊随,還需要補上全零字節(jié))后述寡,按二進制反碼計算出這些16位字的和。當無差錯時其結果全為1,叶洞。否則就表明有差錯出現(xiàn)鲫凶,接收方應該丟棄這個UDP數(shù)據(jù)報。

1.校驗時衩辟,如果UDP數(shù)據(jù)報部分的長度不是偶數(shù)個字節(jié)則會填入一個全0字節(jié)螟炫,但是填入的這個字節(jié)是不發(fā)送的。

2.如果接收方計算出的校驗和不一致艺晴,那么可以丟棄也可以交付上層昼钻,但是要附上錯誤報告掸屡,告訴上層這是錯誤的數(shù)據(jù)報。

3.偽首部的校驗可以同時校驗端口號和IP地址

這種差錯校驗的驗錯能力不強然评,但是簡單速度快折晦。

應用

UDP也常用于多媒體應用(如IP電話,實時視頻會議沾瓦,流媒體等)數(shù)據(jù)的可靠傳輸對他們而言并不重要满着,TCP的擁塞控制會使他們有較大的延遲,也是不可容忍的

應用層協(xié)議DNS(域名服務)贯莺、DHCP(動態(tài)主機配置協(xié)議)风喇、TFTP(簡單文件傳輸協(xié)議)、SNMP(簡單網(wǎng)絡管理協(xié)議)缕探、RIP(路由信息協(xié)議)傳輸層協(xié)議都是采用的UDP協(xié)議魂莫。

應用層協(xié)議FTP(文件傳輸協(xié)議)、Telnet(遠程終端協(xié)議)爹耗、SMTP(簡單郵件傳輸協(xié)議)耙考、HTTP(超文本傳輸協(xié)議)、BGP(邊界網(wǎng)關協(xié)議)傳輸層協(xié)議采用的是TCP協(xié)議潭兽。

相關閱讀:
TCP面向字節(jié)流和UDP面向報文的區(qū)別
【網(wǎng)絡】傳輸層協(xié)議——UDP協(xié)議
百度百科
UDP協(xié)議的詳細解析

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倦始,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子山卦,更是在濱河造成了極大的恐慌鞋邑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账蓉,死亡現(xiàn)場離奇詭異枚碗,居然都是意外死亡,警方通過查閱死者的電腦和手機铸本,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門肮雨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箱玷,你說我怎么就攤上這事怨规。” “怎么了汪茧?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵椅亚,是天一觀的道長限番。 經(jīng)常有香客問我舱污,道長,這世上最難降的妖魔是什么弥虐? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任扩灯,我火速辦了婚禮媚赖,結果婚禮上,老公的妹妹穿的比我還像新娘珠插。我一直安慰自己惧磺,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布捻撑。 她就那樣靜靜地躺著磨隘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顾患。 梳的紋絲不亂的頭發(fā)上番捂,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音江解,去河邊找鬼设预。 笑死,一個胖子當著我的面吹牛犁河,可吹牛的內(nèi)容都是我干的鳖枕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼桨螺,長吁一口氣:“原來是場噩夢啊……” “哼宾符!你這毒婦竟也來了?” 一聲冷哼從身側響起灭翔,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吸奴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缠局,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则奥,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年狭园,在試婚紗的時候發(fā)現(xiàn)自己被綠了读处。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡唱矛,死狀恐怖罚舱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绎谦,我是刑警寧澤管闷,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站窃肠,受9級特大地震影響包个,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冤留,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一碧囊、第九天 我趴在偏房一處隱蔽的房頂上張望树灶。 院中可真熱鬧,春花似錦糯而、人聲如沸天通。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽像寒。三九已至,卻和暖如春瓜贾,著一層夾襖步出監(jiān)牢的瞬間萝映,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工阐虚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留序臂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓实束,卻偏偏與公主長得像奥秆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咸灿,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348