前言
本文將我學(xué)習(xí)的計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)知識(shí)做個(gè)匯總,以求備忘,形成體系以及將來能融會(huì)貫通。
什么是計(jì)算機(jī)網(wǎng)絡(luò)
簡單地說就是由多臺(tái)計(jì)算機(jī)(節(jié)點(diǎn))相互連通(邊)形成的通信系統(tǒng)。相對(duì)于其他的通信網(wǎng)絡(luò)如無線電廣播和電視信號(hào)而言,計(jì)算機(jī)網(wǎng)絡(luò)傳輸?shù)男畔⑹嵌M(jìn)制數(shù)字。
什么是網(wǎng)絡(luò)協(xié)議
兩個(gè)中國人之間交流需要雙方都懂得漢語普通話,一個(gè)中國人和一個(gè)美國人交流則需要雙方都懂英語。如果其中一人是聾啞人,雙方則需要手語來交流。人與人之間的想要交流信息需要雙方都接受的編碼方式以及這種編碼方式的格式和意義,我們把這種格式和意義叫做語言。計(jì)算機(jī)之間的交流也是一樣的道理,編碼方式為二進(jìn)制數(shù)字,這些數(shù)字的格式和意義叫做協(xié)議。
OSI七層模型和TCP/IP五層模型
人類通過抽象來處理復(fù)雜的,無法一下子理解的事物。一個(gè)復(fù)雜的問題可以被分解成很多不同的抽象層次,每一個(gè)層次相對(duì)易于處理。計(jì)算機(jī)技術(shù)里也經(jīng)常使用抽象的方法。比如在學(xué)習(xí)和理解計(jì)算機(jī)原理的時(shí)候,我們分別學(xué)習(xí)計(jì)算機(jī)體系結(jié)構(gòu),操作系統(tǒng),編譯原理,編程語言幾個(gè)層次的知識(shí),最后再從上到下或者從下到上的融會(huì)貫通起來。計(jì)算機(jī)網(wǎng)絡(luò)也是一個(gè)復(fù)雜的系統(tǒng), 需要處理很多如數(shù)據(jù)傳輸介質(zhì),信號(hào)格式,可靠性,性能和安全等問題,所以也被分為幾個(gè)層次來設(shè)計(jì)和構(gòu)建。
ISO提出了OSI七層模型并將其標(biāo)準(zhǔn)化,但由于其過于復(fù)雜不容易實(shí)現(xiàn),實(shí)際的網(wǎng)絡(luò)(如因特網(wǎng))大多使用TCP/IP五層模型,即物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,和應(yīng)用層。本文將主要討論五層模型。
上圖鏈接自selfimpr1991的CSDN博客(http://blog.csdn.net/wenqian1991/article/details/42467643)。此圖非常形象地表述了各層之間的關(guān)系。兩個(gè)主機(jī),其用戶之間的通信是發(fā)送者主機(jī)從上至下,接收者主機(jī)從下往上。發(fā)送者用戶(應(yīng)用層)的數(shù)據(jù)經(jīng)由傳輸層、網(wǎng)絡(luò)層、鏈路層,然后通過物理層(媒介)連接到接收者的物理層,然后從下往上經(jīng)鏈路層、網(wǎng)絡(luò)層、傳輸層再到應(yīng)用層的接收者用戶。來回通信的話就是彼此交換發(fā)送者,接收者。需要注意的是,從上往下,數(shù)據(jù)報(bào)是越來越大,因?yàn)榘牡刂沸畔⒃絹碓蕉?,有效載荷(數(shù)據(jù)包)是不變的。傳輸層則添加了雙方的端口號(hào),網(wǎng)絡(luò)層添加了雙方的IP地址,鏈路層首部包含雙方的MAC地址,層層添加,反過來,從下至上則是層層過濾。
接下來我們?cè)敿?xì)了解每一層。
物理層 (Physical Layer)
物理層是最底層也叫做第一層,主要包括實(shí)現(xiàn)網(wǎng)絡(luò)系統(tǒng)的硬件。具體包括傳輸介質(zhì)(如CAT5網(wǎng)線,電話線,無線電波等等),網(wǎng)絡(luò)設(shè)備(如交換機(jī),路由器,網(wǎng)卡,調(diào)制解調(diào)器等)以及操作這些設(shè)備的軟件(如路由器軟件,計(jì)算機(jī)操作系統(tǒng)等)。
二進(jìn)制信息傳輸
計(jì)算機(jī)網(wǎng)絡(luò)的信息傳輸在物理上是通過電流或電磁波實(shí)現(xiàn)的。當(dāng)然機(jī)械波也可以傳輸信息只是比較低效,比如說話就是通過聲波在空氣中的傳播實(shí)現(xiàn)的;聲波也可以在固體傳播,比如在鐵皮管子上梆梆敲響也可以在緊急情況下傳遞信息,這些暫不討論。電流在導(dǎo)體上傳播, 或者電磁波在空氣中傳播時(shí),根據(jù)其隨時(shí)間而變化的性質(zhì)可以畫出波形圖,如下圖所示的典型正弦波:

X軸代表時(shí)間,Y軸代表信號(hào)強(qiáng)度。如果是電信號(hào),Y軸為電壓,如果是電磁波,Y軸則為電場強(qiáng)度。無論物理意義如何,Y軸代表的信號(hào)強(qiáng)度變化范圍被稱為“振幅”。信號(hào)成周期性變化,一秒鐘內(nèi)重復(fù)的周期個(gè)數(shù)稱為“頻率”。信號(hào)開始時(shí)可能處于一個(gè)周期內(nèi)的任何位置,這個(gè)位置稱為“相位”。
模擬信號(hào)(Analog Signal)是指波形為連續(xù)變化的信號(hào)。比如電模擬信號(hào)展現(xiàn)出連續(xù)變化的電壓。上圖所示的正弦波就是模擬信號(hào)。
數(shù)字信號(hào)(Digital Signal)是指波形不連續(xù)而是離散地變化的信號(hào)。比如電數(shù)字信號(hào)展現(xiàn)出不連續(xù)的,突然變化的電壓,如下圖所示的方形波:
將原始二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為模擬/數(shù)字信號(hào)的設(shè)備就是調(diào)制解調(diào)器 (MODEM),戲稱為‘’貓”。調(diào)制解調(diào)器包括兩個(gè)主要組件,調(diào)制器(MOdulator)和解調(diào)器(DEModulator)。在計(jì)算機(jī)A發(fā)送信息給計(jì)算機(jī)B的過程中,A首先將二進(jìn)制數(shù)字通過調(diào)制器轉(zhuǎn)化為信號(hào),然后信號(hào)(比如電流)在介質(zhì)上傳輸(比如導(dǎo)體),到達(dá)B后通過解調(diào)器轉(zhuǎn)換回二進(jìn)制數(shù)字,完成傳輸過程。
模擬信號(hào)和數(shù)字信號(hào)都可以用來表示二進(jìn)制數(shù)字(0和1)。只要對(duì)信號(hào)進(jìn)行有規(guī)律的,事先規(guī)定好意義的變化就行了。比如上面的正弦波形圖,可以規(guī)定信號(hào)強(qiáng)度到達(dá)頂峰時(shí)為1, 到達(dá)最低谷時(shí)為0;也可以規(guī)定強(qiáng)度在X軸以上時(shí)為1, 以下時(shí)為0。而在方波圖里也可以做類似的規(guī)定。除了振幅,也可以變化頻率和相位來表示信息。調(diào)制的過程就是通過改變(調(diào)制)信號(hào)的振幅,頻率,相位或者任意的組合來使得波形發(fā)生有意義的變化,來表示信息。解調(diào)則是相反的過程。具體解釋參見此文。
物理層以信號(hào)的形式傳輸二進(jìn)制數(shù)字,每一個(gè)二進(jìn)制數(shù)字(0或者1)叫做比特(bit),即Binary Digit的縮寫。在物理層上傳輸?shù)男畔⑹窍?101001110011......這樣連續(xù)的比特流,并不能區(qū)分哪一段比特是代表具體什么意義,這是上一層(數(shù)據(jù)鏈路層)的工作。
傳輸介質(zhì)和信道
傳輸介質(zhì)是信號(hào)得以傳輸?shù)拿浇?,廣義上說可以是真空,空氣,水,金屬等等。信號(hào)發(fā)射端與接收端之間的介質(zhì)形成的信號(hào)通道稱為信道。
有線網(wǎng)絡(luò)的典型介質(zhì)以前是電話線,現(xiàn)在更多的是同軸電纜和光纖。無線網(wǎng)絡(luò)則可以使用不同頻率/波長的電磁波,如下圖所示:

電磁波的頻率與波長成反向變化的關(guān)系,頻率 X 波長=光速。電磁波的能量決定了它能在介質(zhì)中傳輸多遠(yuǎn),在空氣中傳輸?shù)碾姶挪芰康乃p正比于傳輸距離的平方,是衰減很快的。頻率越高的電磁波波長越短,更傾向于沿直線傳播,更難進(jìn)行衍射和反射,就像一頭紅了眼的公牛只知道朝著紅布方向沖過去,不管中間有什么障礙物都直接撞。不同材料的障礙物會(huì)對(duì)電磁波造成不同程度的能量損耗,比如光能輕易地穿透玻璃而無法穿透墻壁。所以頻率高的電磁波適合視距范圍內(nèi)點(diǎn)到點(diǎn)的直接傳輸,發(fā)射端與接收端之間不能有障礙物。由于地球曲率的原因,高頻電磁波無法直接進(jìn)行超視距傳輸,需要設(shè)置中繼站。相反,頻率低的電磁波很容易通過衍射或者反射繞過障礙物,更適合在復(fù)雜地形傳播。
最常見的IEEE 802 (也就是WIFI)使用2.4GHz 和 5GHz兩種頻率。頻譜上是在10的9次方,即廣播電視頻段和微波頻段的交界處。很多偏僻的島嶼會(huì)使用微波與大陸通信。
網(wǎng)絡(luò)工程師需要根據(jù)實(shí)際情況和需求,以及各種介質(zhì)的性質(zhì)來決定網(wǎng)絡(luò)的物理傳輸介質(zhì)。
帶寬
單位時(shí)間內(nèi)信道可以傳輸?shù)男畔⒘?。?shù)字信號(hào)的帶寬單位一般用千/兆/吉比特每秒(Kbps/Mbps/Gbps)。頻率越高的電磁波單位時(shí)間內(nèi)波形變化越多,所以可以攜帶的信息越多,帶寬也就越大。目前常見的以太網(wǎng)局域網(wǎng)(LAN)帶寬是100Mbps。
單工,半雙工(Half Duplex),與全雙工(Full Duplex)通信
單工是指信號(hào)在介質(zhì)上只能以一個(gè)方向流動(dòng),即A電腦只能發(fā)送信號(hào)給B電腦而無法收取信號(hào)。
半雙工是指信號(hào)在介質(zhì)上可以雙向流動(dòng),但同一時(shí)刻只能單向流動(dòng)。
全雙工是指信號(hào)在同一時(shí)刻可以在介質(zhì)上雙向流動(dòng),介質(zhì)利用率更高。
集線器(Hub)
最后來說一下(基本上)工作在物理層的設(shè)備,集線器。先上圖

集線器是最簡單,最底層的網(wǎng)絡(luò)設(shè)備。它的基本功能是對(duì)信號(hào)的放大和轉(zhuǎn)發(fā),也就是相當(dāng)于多口的中繼器。電信號(hào)從任何端口流入,都會(huì)被放大并轉(zhuǎn)發(fā)給其他所有端口,也就是數(shù)據(jù)廣播。用集線器組成的網(wǎng)絡(luò)成為共享式網(wǎng)絡(luò),因?yàn)榫W(wǎng)絡(luò)中的所有電腦會(huì)收到所有的數(shù)據(jù),并且共享帶寬。共享式網(wǎng)絡(luò)的優(yōu)點(diǎn)是簡單低成本,缺點(diǎn)是安全性差(一臺(tái)電腦發(fā)送/接受的數(shù)據(jù)能被所有電腦收到,毫無隱私可言),性能差(很容易形成廣播風(fēng)暴導(dǎo)致帶寬用盡)。另外集線器一般是半雙工的工作方式所以通信效率較低。
安全
攻擊集線器或者共享式網(wǎng)絡(luò)十分簡單,連接到網(wǎng)絡(luò)中后即可以發(fā)送大量數(shù)據(jù)造成廣播風(fēng)暴,耗盡帶寬。
數(shù)據(jù)鏈路層 (Data Link Layer)
也簡稱為鏈路層。這一層在物理層的基礎(chǔ)上加入了邏輯控制的基本功能,來實(shí)現(xiàn)一小段數(shù)據(jù)(信息)從A到B的傳輸。
物理層以連續(xù)比特流的形式傳輸信息,此時(shí)我們還不能分辨那一段比特代表什么意義。鏈路層的最基本功能就是把連續(xù)的比特流切分為一段一段固定長度的0/1序列,叫做“幀”(Frame),并把每一個(gè)幀從發(fā)送者送達(dá)接收者。鏈路層關(guān)心的是每個(gè)幀的長度是多少,格式如何,包括什么內(nèi)容,這些都是鏈路層協(xié)議要規(guī)定好的。它并不關(guān)心幀里面的數(shù)據(jù)是和含義。
在鏈路層中各個(gè)節(jié)點(diǎn)是以MAC地址為唯一標(biāo)識(shí)的。MAC地址, 即Media Access Control Address, 共6個(gè)字節(jié)的二進(jìn)制數(shù),是所有網(wǎng)絡(luò)設(shè)備出廠時(shí)設(shè)置的全球唯一的地址。其中前三個(gè)字節(jié)表示由IEEE分配給廠商的地址,將燒錄在每一塊網(wǎng)絡(luò)接口卡的ROM中。而制造商通常為其每一網(wǎng)絡(luò)接口卡分配后三個(gè)字節(jié)。所以得知一個(gè)MAC地址后,就可以在網(wǎng)上查找這塊網(wǎng)卡的生產(chǎn)商了。如這個(gè)網(wǎng)站https://aruljohn.com/mac/68A3C4A2C1E7。黑客則可以進(jìn)一步查詢這家廠商生產(chǎn)網(wǎng)卡的已知BUG,然后利用BUG進(jìn)行攻擊。
借用鄧義兵的博客上形象的比喻:幀就像信封,而鏈路層則像是社區(qū)里的郵差負(fù)責(zé)把信從A戶送到B戶。
常見的鏈路層協(xié)議包括IEEE802.3也就是俗稱的以太網(wǎng)協(xié)議(Ethernet),以及IEEE 802.11也就是俗稱的WIFI。以太網(wǎng)協(xié)議用于有線網(wǎng)絡(luò)傳輸,WIFI用于無線。不太常見的協(xié)議則包括令牌環(huán)網(wǎng)和SNAP。
以太網(wǎng)協(xié)議的具體介紹見http://blog.51cto.com/lbzxy/125527,這里我轉(zhuǎn)載并總結(jié)一下。
以太網(wǎng)
以太網(wǎng)這個(gè)術(shù)語通常是指由DEC,Intel和Xerox公司在1982年聯(lián)合公布的一個(gè)標(biāo)準(zhǔn),它是當(dāng)今TCP/IP采用的主要的局域網(wǎng)技術(shù),它采用一種稱作CSMA/CD的媒體接入方法。幾年后,IEEE802委員會(huì)公布了一個(gè)稍有不同的標(biāo)準(zhǔn)集,其中802.3針對(duì)整個(gè)CSMA/CD網(wǎng)絡(luò),802.4針對(duì)令牌總線網(wǎng)絡(luò),802.5針對(duì)令牌環(huán)網(wǎng)絡(luò);此三種幀的通用部分由802.2標(biāo)準(zhǔn)來定義。這里主要討論802.3。
以太網(wǎng)V2和IEEE802.3兩種以太網(wǎng)幀的格式如下圖所示:


圖片來自Wikipedia:https://en.wikipedia.org/wiki/Ethernet_frame
整個(gè)幀的大小根據(jù)其包含的數(shù)據(jù)大小而不定,主要分為以下部分:
前導(dǎo)信息(Premeable):在以太網(wǎng)V2中是8個(gè)字節(jié),IEEE802.3中是7個(gè)字節(jié)。內(nèi)容為交替出現(xiàn)的1和0,即10101010?10101010?10101010?10101010?10101010?10101010?10101010?10101010 (注意我故意加入空格方便閱讀,實(shí)際比特流不包含空格)
幀起始定界符(Start Frame Delimiter, SFD):僅在802.3中有效,1個(gè)字節(jié),格式與前導(dǎo)信息基本相同,最后兩位都是1,即10101011
目標(biāo)地址(Destination MAC Address): 接收方MAC地址。以太網(wǎng)V2支持6個(gè)字節(jié)的MAC地址,802.3則支持6個(gè)字節(jié)與2個(gè)字節(jié)(主要用于早期局域網(wǎng),現(xiàn)已少見)兩種格式的MAC地址。
源地址(Source MAC Address): 發(fā)送方MAC地址。
類型字段(EtherType): 2個(gè)字節(jié)的類型字段僅用于Ethernet II幀。該字段用于標(biāo)識(shí)數(shù)據(jù)字段中包含的高層協(xié)議,也就是說,該字段告訴接收設(shè)備如何解釋數(shù)據(jù)字段。在以太網(wǎng)中,多種協(xié)議可以在局域網(wǎng)中同時(shí)共存,例如:類型字段取值為十六進(jìn)制0800的幀將被識(shí)別為IP協(xié)議幀,而類型字段取值為十六進(jìn)制8137的幀將被識(shí)別為IPX和SPX傳輸協(xié)議幀。因此,在 Ethernet II的類型字段中設(shè)置相應(yīng)的十六進(jìn)制值提供了在局域網(wǎng)中支持多協(xié)議傳輸?shù)臋C(jī)制。在IEEE802.3標(biāo)準(zhǔn)中類型字段被替換為長度字段,因而Ethernet II幀和IEEE802.3幀之間不能兼容。
長度字段(Length):?用于IEEE802.3的兩字節(jié)長度字段定義了數(shù)據(jù)字段包含的字節(jié)數(shù)。不論是在Ethernet II還是IEEE 802.3標(biāo)準(zhǔn)中,從前序到FCS字段的幀長度最小必須是64字節(jié)。最小幀長度保證有足夠的傳輸時(shí)間用于以太網(wǎng)網(wǎng)絡(luò)接口卡精確地檢測沖突,這一最小時(shí)間是根據(jù)網(wǎng)絡(luò)的最大電纜長度和幀沿電纜長度傳播所要求的時(shí)間確定的?;谧钚L為64字節(jié)和使用六字節(jié)地址字段的要求,意味著每個(gè)數(shù)據(jù)字段的最小長度為46字節(jié)。唯一的例外是吉比特以太網(wǎng)。在1000Mbit/s的工作速率下,原來的802.3標(biāo)準(zhǔn)不可能提供足夠的幀持續(xù)時(shí)間使電纜長度達(dá)到100米。這是因?yàn)樵?000Mbit/s的數(shù)據(jù)率下,一個(gè)工作站在發(fā)現(xiàn)網(wǎng)段另一端出現(xiàn)的任何沖突之前已經(jīng)處在幀傳輸過程中的可能性很高。為解決這一問題,設(shè)計(jì)了將以太網(wǎng)最小幀長擴(kuò)展為512字節(jié)的負(fù)載擴(kuò)展方法。對(duì)除了吉比特以太網(wǎng)之外的所有以太網(wǎng)版本,如果傳輸數(shù)據(jù)少于46個(gè)字節(jié),應(yīng)將數(shù)據(jù)字段填充至46字節(jié)。不過,填充字符的個(gè)數(shù)不包括在長度字段值中。
同時(shí)支持以太網(wǎng)和IEEE802.3幀格式的網(wǎng)絡(luò)接口卡通過這一字段的值區(qū)分這兩種幀。也就是說,因?yàn)閿?shù)據(jù)字段的最大長度為1500字節(jié),所以超過十六進(jìn)制數(shù) 05DC的值說明它不是長度字段(IEEE802.3).而是類型字段(Ethernet II)。
數(shù)據(jù)字段(Payload):46到1500字節(jié)不等。這是幀所包含的具體數(shù)據(jù),一般是上一層(網(wǎng)絡(luò)層)協(xié)議所封裝的原始數(shù)據(jù)(比如IP數(shù)據(jù)包)。如前所述,數(shù)據(jù)字段的最小長度必須為46字節(jié)以保證幀長至少為64字節(jié),這意味著傳輸一字節(jié)信息也必須使用46字節(jié)的數(shù)據(jù)字段:如果填入該該字段的信息少于46字節(jié),該字段的其余部分也必須進(jìn)行填充。數(shù)據(jù)字段的最大長度為1500字節(jié)。
校驗(yàn)序列字段(Frame Check Sequence, FCS):?既可用于Ethernet II又可用于IEE802.3標(biāo)準(zhǔn)的幀校驗(yàn)序列字段提供了一種錯(cuò)誤檢測機(jī)制,用于確保接收到的數(shù)據(jù)與發(fā)送時(shí)的數(shù)據(jù)一樣。當(dāng)源節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí),它執(zhí)行一種稱為循環(huán)冗余校驗(yàn)(?C R C,Cyclical Redundancy Check)的算法。C R C利用幀中前面所有域的值生成一個(gè)惟一的4字節(jié)長的數(shù),即F C S。當(dāng)目標(biāo)節(jié)點(diǎn)接收數(shù)據(jù)幀時(shí),它使用約定好的算法重新計(jì)算CRC值并與發(fā)送的CRC值進(jìn)行比較。如果這種比較失敗,則接收節(jié)點(diǎn)認(rèn)為幀已經(jīng)在發(fā)送過程中被破壞并要求源節(jié)點(diǎn)重發(fā)該數(shù)據(jù)。CRC類似Hash算法但也有不同。相似之處在于二者都是用來檢驗(yàn)數(shù)據(jù)在傳輸過程中是否被改變的。不同之處在于CRC雖然更快速但無法像Hash算法那樣保證不同數(shù)據(jù)的CRC碼一定不同,也就是唯一性。理論上數(shù)據(jù)可能被改變的同時(shí)CRC保持不變。這是因?yàn)镃RC不像HASH一樣用來防范人為的惡意修改,而主要是為了檢測物理信號(hào)傳送過程中因受到干擾而造成的數(shù)據(jù)擾動(dòng)或者丟失。這種自然形成的擾動(dòng)和丟失恰好滿足CRC相等的概率微乎其微。但同時(shí)這種設(shè)計(jì)也為黑客在鏈路層進(jìn)行攻擊提供了可能。
以太網(wǎng)幀在物理層進(jìn)行傳輸時(shí)稱為以太包(packet),包中包含所有字段,各包之間間隔12字節(jié)。當(dāng)目標(biāo)設(shè)備接受到一個(gè)包之后,首先會(huì)去掉前導(dǎo)信息和幀起始定界符,然后對(duì)剩下的部分進(jìn)行處理。
雖然IEEE802.3標(biāo)準(zhǔn)必然要取代Ethernet II,但由于二者的相似以及Ethernet II作為IEEE802.3的基礎(chǔ)這一事實(shí),我們將這兩者均看作以太網(wǎng)。
工具
這里用最著名的網(wǎng)絡(luò)工具之一的Wireshark來進(jìn)行實(shí)驗(yàn)。
首先打開Wireshark, 選中一個(gè)正在工作的網(wǎng)卡開始抓包(Capture), 然后雙擊隨便打開一個(gè)包,如下圖所示

這是一個(gè)ARP協(xié)議的包。ARP協(xié)議是第三層網(wǎng)絡(luò)層的協(xié)議,所以Wireshark顯示了第三層以下所有層的協(xié)議包。
第一行說明了這是一個(gè)42字節(jié)的幀,在interface 0, 也就是剛剛選取的網(wǎng)卡上所捕獲。
第二行說明這是一個(gè)以太網(wǎng)V2格式的幀,以及源地址和目的地址。這里是一個(gè)ARP廣播,所以目的地址為ff:ff:ff:ff:ff:ff,意思是所有的MAC地址全部包括。
第三行說明這是一個(gè)ARP請(qǐng)求包。
下面的區(qū)域以16進(jìn)制顯示了這個(gè)包中所有的42個(gè)字節(jié)。這里沒有顯示前導(dǎo)信息,幀起始定界符和FCS (因?yàn)槲矣玫腤indows系統(tǒng)不支持,Mac和Linux應(yīng)該都可以捕捉到),所以以6字節(jié)的目標(biāo)地址開頭,然后是6字節(jié)的源地址 68:a3:c4:a2:c1:e7, 接著是2字節(jié)的類型0x0806, 也就是ARP協(xié)議的類型值,最后是數(shù)據(jù)字段的28個(gè)字節(jié)。具體含義后面再講。
物理尋址
那么兩個(gè)網(wǎng)卡是如何通過MAC地址來找到對(duì)方的呢?畢竟電信號(hào)又沒長眼睛。有線網(wǎng)里的電流只會(huì)隨著導(dǎo)體往前流動(dòng)不是嗎?
首先看看極端情況,兩個(gè)網(wǎng)卡(兩臺(tái)電腦)直接連接的情形。這需要一種特殊的網(wǎng)線叫做以太網(wǎng)交叉線(Ethernet crossover cable)來實(shí)現(xiàn)。插上兩張網(wǎng)卡后,網(wǎng)卡中Auto MDI-X技術(shù)就會(huì)自動(dòng)識(shí)別網(wǎng)線的類型,同時(shí)知道這是兩張網(wǎng)卡直連的情形了。
更普遍的情形是3張及以上的網(wǎng)卡(電腦)連成網(wǎng)絡(luò),形成局域網(wǎng)(LAN)。這時(shí)就需要額外的網(wǎng)絡(luò)設(shè)備了。工作在鏈路層的設(shè)備交換機(jī)(Switch)就出場了,來張?zhí)貙懀?/p>

交換機(jī)都有多個(gè)端口用以將多條網(wǎng)線連接起來。交換機(jī)內(nèi)部的內(nèi)存中有張MAC地址表,可以將多個(gè)MAC地址映射到其中一個(gè)端口上。所以交換機(jī)工作流程就是:
(1) 當(dāng)交換機(jī)從某個(gè)端口收到一個(gè)數(shù)據(jù)包,它先讀取包頭中的源MAC地址,這樣它就知道源MAC地址的機(jī)器是連在哪個(gè)端口上的; 如果這個(gè)MAC沒有在表中,則它會(huì)更新表格;
(2) 再去讀取包頭中的目的MAC地址,并在地址表中查找相應(yīng)的端口;?
(3) 如表中有與這目的MAC地址對(duì)應(yīng)的端口,把數(shù)據(jù)包直接復(fù)制到這端口上;?
(4) 如表中找不到相應(yīng)的端口則把數(shù)據(jù)包廣播到所有端口上,當(dāng)目的機(jī)器對(duì)源機(jī)器回應(yīng)時(shí),交換機(jī)又可以學(xué)習(xí)一目的MAC地址與哪個(gè)端口對(duì)應(yīng),在下次傳送數(shù)據(jù)時(shí)就不再需要對(duì)所有端口進(jìn)行廣播了。
用交換機(jī)可以組成局域網(wǎng)并在鏈路層工作。這個(gè)網(wǎng)絡(luò)沒有也不需要IP地址,因?yàn)镸AC地址可以用來定位。計(jì)算機(jī)A在連入這個(gè)網(wǎng)絡(luò)后,并不知道網(wǎng)絡(luò)中還有哪些其他計(jì)算機(jī),也不知道她們的MAC地址。這些需要人(網(wǎng)管)為地在網(wǎng)絡(luò)應(yīng)用程序里面設(shè)置好。當(dāng)A知道MAC 12:34:56:78:9A:bc 地址是隔壁美女的電腦后,就可以對(duì)其發(fā)送信息了。
多臺(tái)交換機(jī)可以互相聯(lián)通形成更大的網(wǎng)絡(luò),假設(shè)交換機(jī)A收到消息后查詢MAC地址表得知12:34:56:78:9A:bc對(duì)應(yīng)著5號(hào)端口,于是將幀轉(zhuǎn)發(fā)給5號(hào)端口,5號(hào)的網(wǎng)線連到另一臺(tái)交換機(jī)B,她再查詢MAC地址表繼續(xù)轉(zhuǎn)發(fā),直到幀送達(dá)美女的計(jì)算機(jī)。
交換機(jī)各個(gè)端口之間是獨(dú)立的,不共享帶寬也不共享數(shù)據(jù)。相較于集線器,交換機(jī)更加高效,安全。
由交換機(jī)組成的網(wǎng)絡(luò)叫做交換式網(wǎng)絡(luò)。
安全問題
地址泛洪,也叫做廣播風(fēng)暴,是針對(duì)交換機(jī)工作機(jī)制的一種拒絕服務(wù)攻擊手段。具體方法就是構(gòu)造大量的幀,其中的源地址和目標(biāo)地址都設(shè)置為不存在的MAC地址。這樣交換機(jī)每次都無法在地址表中查詢到條目,則會(huì)
1. 向整個(gè)網(wǎng)絡(luò)不停地廣播幀。
2.不停更新地址表中的源地址和端口對(duì)應(yīng)關(guān)系,最終造成地址表空間全部用完。
網(wǎng)絡(luò)層 (Network Layer)
在組建局域網(wǎng)時(shí)要先選定物理介質(zhì)和鏈路層協(xié)議。但世界上那么多局域網(wǎng),肯定會(huì)使用不同的介質(zhì)和協(xié)議,比如有的是WIFI無線網(wǎng)而有的是有線以太網(wǎng),有的有線網(wǎng)使用Ethernet V2協(xié)議而有的使用IEEE802.3等等。這些不同的網(wǎng)絡(luò)就像是說不同語言的人群,互相如何通信呢?首先大家需要郵局來轉(zhuǎn)發(fā)信件,其次大家要使用同一種語言。這里的郵局就是工作在網(wǎng)絡(luò)層的設(shè)備路由器,而這同一種語言就是網(wǎng)絡(luò)層協(xié)議(IP協(xié)議)。
假設(shè)WIFI網(wǎng)絡(luò)里的A電腦想給另一個(gè)以太網(wǎng)里的B電腦發(fā)送信息,那么A首先要把信息發(fā)送給能夠理解接收WIFI信號(hào)并理解WIFI協(xié)議的無線路由器,無線路由器再把消息轉(zhuǎn)發(fā)給另一臺(tái)懂得以太網(wǎng)協(xié)議的有線路由器,最后有線路由器把消息轉(zhuǎn)發(fā)給B電腦。這個(gè)過程中,A電腦,兩臺(tái)路由器和B電腦都要使用IP協(xié)議中規(guī)定的格式來處理數(shù)據(jù)。
Internet Protocol (IP) 協(xié)議
https://zhangbinalan.gitbooks.io/protocol/content/ipxie_yi_tou_bu.html
IP協(xié)議中的數(shù)據(jù)成為Datagram,中文譯為數(shù)據(jù)報(bào),真是個(gè)奇怪的名字。RFC791規(guī)定了IP協(xié)議的格式,如下圖所示

版本號(hào)(Version):長度4個(gè)比特,標(biāo)識(shí)此數(shù)據(jù)報(bào)遵循的IP協(xié)議版本號(hào)。一般為0100(IPv4)或0110 (IPv6)。
IP包頭長度(Internet Header Length, IHL): 長度4個(gè)比特,描述IP包頭長度,單位為4個(gè)字節(jié),最大長度為1111=15,即15*4字節(jié)=60字節(jié);最小長度為0101=5, 即5*4字節(jié)=20字節(jié)。因?yàn)镮P包頭中有長度可變部分,所以需要IHL。