TCP-IP協(xié)議詳解(7) UDP協(xié)議

我們已經(jīng)講解了物理層谣拣、連接層和網(wǎng)絡層撬讽。最開始的連接層協(xié)議種類繁多(Ethernet、Wifi缎脾、ARP等等)祝闻。到了網(wǎng)絡層,我們只剩下一個IP協(xié)議(IPv4和IPv6是替代關(guān)系)遗菠。進入到傳輸層(transport layer)联喘,協(xié)議的種類又開始繁多起來(比如TCP华蜒、UDP、SCTP等)豁遭。這就好像下面的大樹叭喜,根部(連接層)分叉很多,然后統(tǒng)一到一個樹干(網(wǎng)絡層)堤框,到了樹冠(傳輸層)部分又開始開始分叉域滥,而每個樹枝上長出更多的樹葉(應用層)。我們在網(wǎng)絡層已經(jīng)看到蜈抓,通過樹干的統(tǒng)一启绰,我們實現(xiàn)了一個覆蓋全球的互聯(lián)網(wǎng)絡(Internet)。然而沟使,我們可能出于不同的目的利用這張“網(wǎng)”委可,隨之使用的方式也有所區(qū)分。不同的傳輸層協(xié)議(以及更多的應用層協(xié)議)正是我們使用“網(wǎng)”的不同方式的體現(xiàn)腊嗡。

網(wǎng)絡分層的“藝術(shù)”觀點

傳輸層最重要的協(xié)議為TCP協(xié)議和UDP協(xié)議着倾。這兩者使用“網(wǎng)”的方式走了兩個極端。兩個協(xié)議的對比非常有趣燕少。TCP協(xié)議復雜卡者,但傳輸可靠。UDP協(xié)議簡單客们,但傳輸不可靠崇决。其他的各個傳輸層協(xié)議在某種程度上都是這兩個協(xié)議的折中。我們先來看傳輸層協(xié)議中比較簡單的UDP協(xié)議底挫。我們將參考許多之前文章的內(nèi)容(協(xié)議森林01,03,05)恒傻。

UDP協(xié)議簡介

UDP(User Datagram Protocol)傳輸與IP傳輸非常類似。你可以將UDP協(xié)議看作IP協(xié)議暴露在傳輸層的一個接口建邓。UDP協(xié)議同樣以數(shù)據(jù)包(datagram)的方式傳輸盈厘,它的傳輸方式也是“Best Effort”的,所以UDP協(xié)議也是不可靠的(unreliable)官边。那么沸手,我們?yōu)槭裁床恢苯邮褂肐P協(xié)議而要額外增加一個UDP協(xié)議呢? 一個重要的原因是IP協(xié)議中并沒有端口(port)的概念注簿。IP協(xié)議進行的是IP地址到IP地址的傳輸罐氨,這意味者兩臺計算機之間的對話。但每臺計算機中需要有多個通信通道滩援,并將多個通信通道分配給不同的進程使用。一個端口就代表了這樣的一個通信通道塔嬉。正如我們在網(wǎng)絡協(xié)議概覽中提到的收信人的概念一樣玩徊。UDP協(xié)議實現(xiàn)了端口租悄,從而讓數(shù)據(jù)包可以在送到IP地址的基礎上,進一步可以送到某個端口恩袱。

UDP:依然不是那么“可靠”

盡管UDP協(xié)議非常簡單泣棋,但它的產(chǎn)生晚于更加復雜的TCP協(xié)議。早期的網(wǎng)絡開發(fā)者開發(fā)出IP協(xié)議和TCP協(xié)議分別位于網(wǎng)絡層和傳輸層畔塔,所有的通信都要先經(jīng)過TCP封裝潭辈,再經(jīng)過IP封裝(應用層->TCP->IP)。開發(fā)者將TCP/IP視為相互合作的套裝澈吨。但很快把敢,網(wǎng)絡開發(fā)者發(fā)現(xiàn),IP協(xié)議的功能和TCP協(xié)議的功能是相互獨立的谅辣。對于一些簡單的通信修赞,我們只需要“Best Effort”式的IP傳輸就可以了,而不需要TCP協(xié)議復雜的建立連接的方式(特別是在早期網(wǎng)絡環(huán)境中桑阶,如果過多的建立TCP連接柏副,會造成很大的網(wǎng)絡負擔,而UDP協(xié)議可以相對快速的處理這些簡單通信)蚣录。UDP協(xié)議隨之被開發(fā)出來割择,作為IP協(xié)議在傳輸層的“傀儡”。這樣萎河,網(wǎng)絡通信可以通過應用層->UDP->IP的封裝方式荔泳,繞過TCP協(xié)議。由于UDP協(xié)議本身異常簡單公壤,實際上只為IP傳輸起到了橋梁的作用换可。我們將在TCP協(xié)議的講解中看到更多TCP協(xié)議和UDP協(xié)議的對比。

IP和他的傀儡UDP

UDP的數(shù)據(jù)包同樣分為頭部(header)和數(shù)據(jù)(payload)兩部分厦幅。UDP是傳輸層(transport layer)協(xié)議沾鳄,這意味著UDP的數(shù)據(jù)包需要經(jīng)過IP協(xié)議的封裝(encapsulation),然后通過IP協(xié)議傳輸到目的電腦确憨。隨后UDP包在目的電腦拆封译荞,并將信息送到相應端口的緩存中。

UDP協(xié)議的頭部

來自wikipedia


上面的source port和destination port分別為UDP包的出發(fā)端口和目的地端口休弃。Length為整個UDP包的長度吞歼。

checksum的算法與IP協(xié)議的header checksum算法相類似。然而塔猾,UDP的checksum所校驗的序列包括了整個UDP數(shù)據(jù)包篙骡,以及封裝的IP頭部的一些信息(主要為出發(fā)地IP和目的地IP)。這樣,checksum就可以校驗IP:端口的正確性了糯俗。在IPv4中尿褪,checksum可以為0,意味著不使用checksum得湘。IPv6要求必須進行checksum校驗杖玲。

端口與socket

端口(port)是伴隨著傳輸層誕生的概念。它可以將網(wǎng)絡層的IP通信分送到各個通信通道淘正。UDP協(xié)議和TCP協(xié)議盡管在工作方式上有很大的不同摆马,但它們都建立了從一個端口到另一個端口的通信。

IP:端口

隨著我們進入傳輸層鸿吆,我們也可以調(diào)用操作系統(tǒng)中的API囤采,來構(gòu)建socket。Socket是操作系統(tǒng)提供的一個編程接口伞剑,它用來代表某個網(wǎng)絡通信斑唬。應用程序通過socket來調(diào)用系統(tǒng)內(nèi)核中處理網(wǎng)絡協(xié)議的模塊,而這些內(nèi)核模塊會負責具體的網(wǎng)絡協(xié)議的實施黎泣。這樣恕刘,我們可以讓內(nèi)核來接收網(wǎng)絡協(xié)議的細節(jié),而我們只需要提供所要傳輸?shù)膬?nèi)容就可以了抒倚,內(nèi)核會幫我們控制格式褐着,并進一步向底層封裝。因此托呕,在實際應用中含蓉,我們并不需要知道具體怎么構(gòu)成一個UDP包,而只需要提供相關(guān)信息(比如IP地址项郊,比如端口號馅扣,比如所要傳輸?shù)男畔?,操作系統(tǒng)內(nèi)核會在傳輸之前會根據(jù)我們提供的相關(guān)信息構(gòu)成一個合格的UDP包(以及下層的包和幀)着降。socket是一個比較大的課題差油,在協(xié)議森林系列中不會過多深入。

總結(jié)

端口是傳輸層帶來的最重要的概念任洞。我們進一步了解了UDP協(xié)議蓄喇。如果已經(jīng)掌握了IP協(xié)議,那么UDP協(xié)議就沒有任何困難可言交掏,它只是IP協(xié)議暴露在傳輸層上的接口妆偏。

代碼講解詳見:UDP程序設計


【TCP/IP詳解】系列教程

互聯(lián)網(wǎng)協(xié)議入門 1

互聯(lián)網(wǎng)協(xié)議入門 2

TCP-IP協(xié)議詳解(1)網(wǎng)絡協(xié)議概觀

TCP-IP協(xié)議詳解(2) 以太網(wǎng)與WiFi協(xié)議

TCP-IP協(xié)議詳解(3) IP/ARP/RIP/BGP協(xié)議

TCP-IP協(xié)議詳解(4)IPv4與IPv6地址

TCP-IP協(xié)議詳解(5)IP協(xié)議詳解

TCP-IP協(xié)議詳解(6) ICMP協(xié)議

TCP-IP協(xié)議詳解(7) UDP協(xié)議

TCP-IP協(xié)議詳解(8) TCP協(xié)議與流通信

TCP-IP協(xié)議詳解(9) TCP連接

TCP-IP協(xié)議詳解(10) TCP滑窗管理

TCP-IP協(xié)議詳解(11) TCP重傳

TCP-IP協(xié)議詳解(12) TCP堵塞控制

TCP-IP協(xié)議詳解(13) DNS協(xié)議

TCP-IP協(xié)議詳解(14) CIDR與NAT

TCP-IP協(xié)議詳解(15) HTTP協(xié)議概覽

圖解TCP-IP協(xié)議

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盅弛,一起剝皮案震驚了整個濱河市钱骂,隨后出現(xiàn)的幾起案子叔锐,更是在濱河造成了極大的恐慌,老刑警劉巖罐柳,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掌腰,死亡現(xiàn)場離奇詭異,居然都是意外死亡张吉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門催植,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮蛹,“玉大人,你說我怎么就攤上這事创南÷字遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵稿辙,是天一觀的道長昆码。 經(jīng)常有香客問我,道長邻储,這世上最難降的妖魔是什么赋咽? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮吨娜,結(jié)果婚禮上脓匿,老公的妹妹穿的比我還像新娘。我一直安慰自己宦赠,他們只是感情好陪毡,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勾扭,像睡著了一般毡琉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妙色,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天桅滋,我揣著相機與錄音,去河邊找鬼燎斩。 笑死虱歪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的栅表。 我是一名探鬼主播笋鄙,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怪瓶!你這毒婦竟也來了萧落?” 一聲冷哼從身側(cè)響起践美,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎找岖,沒想到半個月后陨倡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡许布,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年兴革,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜜唾。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡杂曲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袁余,到底是詐尸還是另有隱情擎勘,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布颖榜,位于F島的核電站棚饵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掩完。R本人自食惡果不足惜噪漾,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藤为。 院中可真熱鬧怪与,春花似錦、人聲如沸缅疟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽存淫。三九已至耘斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桅咆,已是汗流浹背括授。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岩饼,地道東北人荚虚。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像籍茧,于是被迫代替她去往敵國和親版述。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的寞冯,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的渴析,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,068評論 6 174
  • 個人認為晚伙,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 計算機網(wǎng)絡就是用 物理鏈路 將各個孤立的工作站或主機連接在一起,組成 數(shù)據(jù)鏈路母债,從而達到資源共享和通信的目的午磁。 網(wǎng)...
    打不死的小強qz閱讀 2,933評論 0 6
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network场斑,根據(jù)使用者...
    保川閱讀 5,956評論 1 13
  • 前言 從去年年底開始大約花了半年時間去啃《TCP/IP協(xié)議 詳解》這本書漓踢。雖然整體過了一遍,也給了我一些基礎能夠參...
    Noskthing閱讀 22,647評論 13 170