接上文:五(七)層互聯(lián)網(wǎng)協(xié)議(計算機網(wǎng)絡(luò))深入淺出蹲姐,看完必懂【圖文一】
四磨取、網(wǎng)絡(luò)層
4.1 網(wǎng)絡(luò)層的由來
以太網(wǎng)協(xié)議,依靠MAC地址發(fā)送數(shù)據(jù)柴墩。理論上忙厌,單單依靠MAC地址,上海的網(wǎng)卡就可以找到洛杉磯的網(wǎng)卡了江咳,技術(shù)上是可以實現(xiàn)的逢净。
但是,這樣做有一個重大的缺點歼指。以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包爹土,所有成員人手一"包",不僅效率低东臀,而且局限在發(fā)送者所在的子網(wǎng)絡(luò)着饥。也就是說犀农,如果兩臺計算機不在同一個子網(wǎng)絡(luò)惰赋,廣播是傳不過去的。這種設(shè)計是合理的,否則互聯(lián)網(wǎng)上每一臺計算機都會收到所有包赁濒,那會引起災(zāi)難轨奄。
互聯(lián)網(wǎng)是無數(shù)子網(wǎng)絡(luò)共同組成的一個巨型網(wǎng)絡(luò),很像想象上海和洛杉磯的電腦會在同一個子網(wǎng)絡(luò)拒炎,這幾乎是不可能的挪拟。
因此,必須找到一種方法击你,能夠區(qū)分哪些MAC地址屬于同一個子網(wǎng)絡(luò)玉组,哪些不是。如果是同一個子網(wǎng)絡(luò)丁侄,就采用廣播方式發(fā)送惯雳,否則就采用"路由"方式發(fā)送。("路由"的意思鸿摇,就是指如何向不同的子網(wǎng)絡(luò)分發(fā)數(shù)據(jù)包石景,這是一個很大的主題,本文不涉及拙吉。)遺憾的是潮孽,MAC地址本身無法做到這一點。它只與廠商有關(guān)筷黔,與所處網(wǎng)絡(luò)無關(guān)往史。
這就導(dǎo)致了"網(wǎng)絡(luò)層"的誕生。它的作用是引進一套新的地址佛舱,使得我們能夠區(qū)分不同的計算機是否屬于同一個子網(wǎng)絡(luò)怠堪。這套地址就叫做"網(wǎng)絡(luò)地址",簡稱"網(wǎng)址"名眉。
于是粟矿,"網(wǎng)絡(luò)層"出現(xiàn)以后,每臺計算機有了兩種地址损拢,一種是MAC地址陌粹,另一種是網(wǎng)絡(luò)地址。兩種地址之間沒有任何聯(lián)系福压,MAC地址是綁定在網(wǎng)卡上的掏秩,網(wǎng)絡(luò)地址則是管理員分配的,它們只是隨機組合在一起荆姆。
網(wǎng)絡(luò)地址幫助我們確定計算機所在的子網(wǎng)絡(luò)蒙幻,MAC地址則將數(shù)據(jù)包送到該子網(wǎng)絡(luò)中的目標網(wǎng)卡。因此胆筒,從邏輯上可以推斷邮破,必定是先處理網(wǎng)絡(luò)地址诈豌,然后再處理MAC地址。
4.2 IP協(xié)議
規(guī)定網(wǎng)絡(luò)地址的協(xié)議抒和,叫做IP協(xié)議矫渔。它所定義的地址,就被稱為IP地址摧莽。
目前庙洼,廣泛采用的是IP協(xié)議第四版,簡稱IPv4镊辕。這個版本規(guī)定油够,網(wǎng)絡(luò)地址由32個二進制位組成。
習(xí)慣上征懈,我們用分成四段的十進制數(shù)表示IP地址叠聋,從0.0.0.0一直到255.255.255.255。
互聯(lián)網(wǎng)上的每一臺計算機受裹,都會分配到一個IP地址碌补。這個地址分成兩個部分,前一部分代表網(wǎng)絡(luò)棉饶,后一部分代表主機厦章。比如,IP地址172.16.254.1照藻,這是一個32位的地址袜啃,假定它的網(wǎng)絡(luò)部分是前24位(172.16.254),那么主機部分就是后8位(最后的那個1)幸缕。處于同一個子網(wǎng)絡(luò)的電腦群发,它們IP地址的網(wǎng)絡(luò)部分必定是相同的,也就是說172.16.254.2
應(yīng)該與172.16.254.1
處在同一個子網(wǎng)絡(luò)发乔。
但是熟妓,問題在于單單從IP地址,我們無法判斷網(wǎng)絡(luò)部分栏尚。還是以172.16.254.1
為例起愈,它的網(wǎng)絡(luò)部分,到底是前24位译仗,還是前16位抬虽,甚至前28位,從IP地址上是看不出來的纵菌。
那么阐污,怎樣才能從IP地址,判斷兩臺計算機是否屬于同一個子網(wǎng)絡(luò)呢咱圆?這就要用到另一個參數(shù)"子網(wǎng)掩碼"(subnet mask)笛辟。
所謂"子網(wǎng)掩碼"功氨,就是表示子網(wǎng)絡(luò)特征的一個參數(shù)。它在形式上等同于IP地址隘膘,也是一個32位二進制數(shù)字,它的網(wǎng)絡(luò)部分全部為1杠览,主機部分全部為0弯菊。比如,IP地址172.16.254.1踱阿,如果已知網(wǎng)絡(luò)部分是前24位管钳,主機部分是后8位,那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000
软舌,寫成十進制就是255.255.255.0
才漆。
知道"子網(wǎng)掩碼",我們就能判斷佛点,任意兩個IP地址是否處在同一個子網(wǎng)絡(luò)醇滥。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1,運算結(jié)果為1超营,否則為0)鸳玩,然后比較結(jié)果是否相同,如果是的話演闭,就表明它們在同一個子網(wǎng)絡(luò)中不跟,否則就不是。
比如米碰,已知IP地址172.16.254.1
和172.16.254.233
的子網(wǎng)掩碼都是255.255.255.0
窝革,請問它們是否在同一個子網(wǎng)絡(luò)?兩者與子網(wǎng)掩碼分別進行AND運算吕座,結(jié)果都是172.16.254.0
虐译,因此它們在同一個子網(wǎng)絡(luò)。
總結(jié)一下吴趴,IP協(xié)議的作用主要有兩個菱蔬,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網(wǎng)絡(luò)史侣。
4.3 IP數(shù)據(jù)包
根據(jù)IP協(xié)議發(fā)送的數(shù)據(jù)拴泌,就叫做IP數(shù)據(jù)包。不難想象惊橱,其中必定包括IP地址信息蚪腐。
但是前面說過,以太網(wǎng)數(shù)據(jù)包只包含MAC地址税朴,并沒有IP地址的欄位回季。那么是否需要修改數(shù)據(jù)定義家制,再添加一個欄位呢?
回答是不需要泡一,我們可以把IP數(shù)據(jù)包直接放進以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分颤殴,因此完全不用修改以太網(wǎng)的規(guī)格。這就是互聯(lián)網(wǎng)分層結(jié)構(gòu)的好處:上層的變動完全不涉及下層的結(jié)構(gòu)鼻忠。
具體來說涵但,IP數(shù)據(jù)包也分為"標頭"和"數(shù)據(jù)"兩個部分。
"標頭"部分主要包括版本帖蔓、長度矮瘟、IP地址等信息,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內(nèi)容塑娇。它放進以太網(wǎng)數(shù)據(jù)包后澈侠,以太網(wǎng)數(shù)據(jù)包就變成了下面這樣。
IP數(shù)據(jù)包的"標頭"部分的長度為20到60字節(jié)埋酬,整個數(shù)據(jù)包的總長度最大為65,535字節(jié)哨啃。因此,理論上写妥,一個IP數(shù)據(jù)包的"數(shù)據(jù)"部分棘催,最長為65,515字節(jié)。前面說過,以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分,最長只有1500字節(jié)牡整。因此,如果IP數(shù)據(jù)包超過了1500字節(jié)呼猪,它就需要分割成幾個以太網(wǎng)數(shù)據(jù)包,分開發(fā)送了砸琅。
4.4 ARP協(xié)議(得到對方的MAC地址)
關(guān)于"網(wǎng)絡(luò)層"宋距,還有最后一點需要說明。
因為IP數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包里發(fā)送的症脂,所以我們必須同時知道兩個地址谚赎,一個是對方的MAC地址,另一個是對方的IP地址诱篷。通常情況下壶唤,對方的IP地址是已知的(后文會解釋),但是我們不知道它的MAC地址棕所。
所以闸盔,我們需要一種機制,能夠從IP地址得到MAC地址琳省。
這里又可以分成兩種情況迎吵。第一種情況躲撰,如果兩臺主機不在同一個子網(wǎng)絡(luò),那么事實上沒有辦法得到對方的MAC地址击费,只能把數(shù)據(jù)包傳送到兩個子網(wǎng)絡(luò)連接處的"網(wǎng)關(guān)"(gateway)拢蛋,讓網(wǎng)關(guān)去處理。
第二種情況蔫巩,如果兩臺主機在同一個子網(wǎng)絡(luò)谆棱,那么我們可以用ARP協(xié)議,得到對方的MAC地址批幌。ARP協(xié)議也是發(fā)出一個數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中)础锐,其中包含它所要查詢主機的IP地址嗓节,在對方的MAC地址這一欄荧缘,填的是FF:FF:FF:FF:FF:FF,表示這是一個"廣播"地址拦宣。它所在子網(wǎng)絡(luò)的每一臺主機截粗,都會收到這個數(shù)據(jù)包,從中取出IP地址鸵隧,與自身的IP地址進行比較绸罗。如果兩者相同,都做出回復(fù)豆瘫,向?qū)Ψ綀蟾孀约旱腗AC地址珊蟀,否則就丟棄這個包。
總之外驱,有了ARP協(xié)議之后育灸,我們就可以得到同一個子網(wǎng)絡(luò)內(nèi)的主機MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一臺主機之上了昵宇。
五磅崭、傳輸層(UDP協(xié)議,TCP協(xié)議)
5.1 傳輸層的由來
有了MAC地址和IP地址瓦哎,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺主機上建立通信砸喻。
接下來的問題是,同一臺主機上有許多程序都需要用到網(wǎng)絡(luò)蒋譬,比如割岛,你一邊瀏覽網(wǎng)頁,一邊與朋友在線聊天犯助。當一個數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來的時候蜂桶,你怎么知道,它是表示網(wǎng)頁的內(nèi)容也切,還是表示在線聊天的內(nèi)容扑媚?
也就是說腰湾,我們還需要一個參數(shù),表示這個數(shù)據(jù)包到底供哪個程序(進程)使用疆股。這個參數(shù)就叫做"端口"(port)费坊,它其實是每一個使用網(wǎng)卡的程序的編號。每個數(shù)據(jù)包都發(fā)到主機的特定端口旬痹,所以不同的程序就能取到自己所需要的數(shù)據(jù)附井。
"端口"是0到65535之間的一個整數(shù),正好16個二進制位两残。0到1023的端口被系統(tǒng)占用永毅,用戶只能選用大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天人弓,應(yīng)用程序會隨機選用一個端口沼死,然后與服務(wù)器的相應(yīng)端口聯(lián)系。
"傳輸層"的功能崔赌,就是建立"端口到端口"的通信意蛀。相比之下,"網(wǎng)絡(luò)層"的功能是建立"主機到主機"的通信健芭。只要確定主機和端口县钥,我們就能實現(xiàn)程序之間的交流。因此慈迈,Unix系統(tǒng)就把主機+端口若贮,叫做"套接字"(socket)。有了它痒留,就可以進行網(wǎng)絡(luò)應(yīng)用程序開發(fā)了谴麦。
5.2 UDP協(xié)議
現(xiàn)在,我們必須在數(shù)據(jù)包中加入端口信息狭瞎,這就需要新的協(xié)議细移。最簡單的實現(xiàn)叫做UDP協(xié)議,它的格式幾乎就是在數(shù)據(jù)前面熊锭,加上端口號弧轧。
UDP數(shù)據(jù)包,也是由"標頭"和"數(shù)據(jù)"兩部分組成碗殷。
"標頭"部分主要定義了發(fā)出端口和接收端口精绎,"數(shù)據(jù)"部分就是具體的內(nèi)容。然后锌妻,把整個UDP數(shù)據(jù)包放入IP數(shù)據(jù)包的"數(shù)據(jù)"部分代乃,而前面說過,IP數(shù)據(jù)包又是放在以太網(wǎng)數(shù)據(jù)包之中的,所以整個以太網(wǎng)數(shù)據(jù)包現(xiàn)在變成了下面這樣:
[圖片上傳中搁吓。原茅。。(6)]
UDP數(shù)據(jù)包非常簡單堕仔,"標頭"部分一共只有8個字節(jié)擂橘,總長度不超過65,535字節(jié),正好放進一個IP數(shù)據(jù)包摩骨。
5.3 TCP協(xié)議
UDP協(xié)議的優(yōu)點是比較簡單通贞,容易實現(xiàn),但是缺點是可靠性較差恼五,一旦數(shù)據(jù)包發(fā)出昌罩,無法知道對方是否收到。
為了解決這個問題灾馒,提高網(wǎng)絡(luò)可靠性茎用,TCP協(xié)議就誕生了。這個協(xié)議非常復(fù)雜你虹,但可以近似認為绘搞,它就是有確認機制的UDP協(xié)議彤避,每發(fā)出一個數(shù)據(jù)包都要求確認傅物。如果有一個數(shù)據(jù)包遺失,就收不到確認琉预,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包了董饰。
因此,TCP協(xié)議能夠確保數(shù)據(jù)不會遺失圆米。它的缺點是過程復(fù)雜卒暂、實現(xiàn)困難、消耗較多的資源娄帖。
TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣也祠,都是內(nèi)嵌在IP數(shù)據(jù)包的"數(shù)據(jù)"部分。TCP數(shù)據(jù)包沒有長度限制近速,理論上可以無限長诈嘿,但是為了保證網(wǎng)絡(luò)的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度削葱,以確保單個TCP數(shù)據(jù)包不必再分割奖亚。
六、應(yīng)用層
應(yīng)用程序收到"傳輸層"的數(shù)據(jù)析砸,接下來就要進行解讀昔字。由于互聯(lián)網(wǎng)是開放架構(gòu),數(shù)據(jù)來源五花八門首繁,必須事先規(guī)定好格式作郭,否則根本無法解讀陨囊。
"應(yīng)用層"的作用,就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式夹攒。
舉例來說谆扎,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email芹助、WWW堂湖、FTP等等。那么状土,必須有不同協(xié)議規(guī)定電子郵件无蜂、網(wǎng)頁、FTP數(shù)據(jù)的格式蒙谓,這些應(yīng)用程序協(xié)議就構(gòu)成了"應(yīng)用層"斥季。
這是最高的一層,直接面對用戶累驮。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的"數(shù)據(jù)"部分酣倾。因此,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣谤专。
至此躁锡,整個互聯(lián)網(wǎng)的五層結(jié)構(gòu),自下而上全部講完了置侍。這是從系統(tǒng)的角度映之,解釋互聯(lián)網(wǎng)是如何構(gòu)成的。下一篇蜡坊,我反過來杠输,從用戶的角度,自上而下看看這個結(jié)構(gòu)是如何發(fā)揮作用秕衙,完成一次網(wǎng)絡(luò)數(shù)據(jù)交換的蠢甲。
參考鏈接:互聯(lián)網(wǎng)協(xié)議入門(一)-阮一峰
好看的人兒,點個喜歡? 你會更好看哦~~