目錄:
http://www.reibang.com/p/1961df2a1336
第一層(物理層)
我們常說的路由器匿刮,是在第三層上刃鳄。
網(wǎng)線有的是電腦連電腦苗桂,有的是電腦連網(wǎng)口防楷。
對于電腦連電腦校赤。這種方式就是一根網(wǎng)線灶挟,有兩個頭琉朽。一頭插在一臺電腦的網(wǎng)卡上,另一頭插在另一臺電腦的網(wǎng)卡上稚铣。水晶頭要做交叉線箱叁,用的就是1-3、2-6 交叉接法惕医。
水晶頭的第 1耕漱、2 和第 3、6 腳抬伺,它們分別起著收螟够、發(fā)信號的作用。將一端的 1 號和 3 號線峡钓、2 號和 6 號線互換一下位置妓笙,就能夠在物理層實現(xiàn)一端發(fā)送的信號,另一端能收到能岩。
電腦連電腦寞宫,除了網(wǎng)線要交叉,還需要配置這兩臺電腦的 IP 地址拉鹃、子網(wǎng)掩碼和默認網(wǎng)關(guān)辈赋。要想兩臺電腦能夠通信鲫忍,這三項必須配置成為一個網(wǎng)絡(luò),可以一個是 192.168.0.1/24钥屈,另一個是 192.168.0.2/24悟民,否則是不通的。
兩臺電腦之間的網(wǎng)絡(luò)包篷就,包含 MAC 層射亏,要完整。IP 層要封裝了 MAC 層才能將包放入物理層竭业。
到此為止鸦泳,兩臺電腦已經(jīng)構(gòu)成了一個最小的局域網(wǎng),也即LAN永品。
怎么把三臺電腦連在一起呢做鹰?
使用集線器(Hub)。這種設(shè)備有多個口鼎姐,可以將多臺電腦連接起來钾麸。但是,和交換機不同炕桨,集線器沒有大腦饭尝,它完全在物理層工作。它會將自己收到的每一個字節(jié)献宫,都復(fù)制到其他端口上去钥平。這是第一層物理層聯(lián)通的方案。
第二層(數(shù)據(jù)鏈路層)
Hub 采取的是廣播的模式姊途,如果每一臺電腦發(fā)出的包涉瘾,每個電腦都能收到,這樣就會很麻煩捷兰。需要解決幾個問題:
- 這個包是發(fā)給誰的立叛?誰應(yīng)該接收?
- 大家都在發(fā)贡茅,會不會產(chǎn)生混亂秘蛇?有沒有誰先發(fā)、誰后發(fā)的規(guī)則顶考?
- 如果發(fā)送的時候出現(xiàn)了錯誤赁还,怎么辦?
解決的是上面第二個問題
這幾個問題驹沿,都是第二層艘策,數(shù)據(jù)鏈路層,也即 MAC 層要解決的問題甚负。MAC的全稱是Medium Access Control柬焕,即媒體訪問控制。就是控制在往媒體上發(fā)數(shù)據(jù)的時候梭域,誰先發(fā)斑举、誰后發(fā)的問題。防止發(fā)生混亂病涨。這解決的是上面第二個問題富玷。這個問題中的規(guī)則,學名叫多路訪問既穆。有很多算法可以解決這個問題赎懦。比如接下來這三種方式:
方式一:分多個車道。每個車一個車道幻工,你走你的励两,我走我的。這在計算機網(wǎng)絡(luò)里叫作信道劃分囊颅;
方式二:今天單號出行当悔,明天雙號出行,輪著來踢代。這在計算機網(wǎng)絡(luò)里叫作輪流協(xié)議盲憎;
方式三:不管三七二十一,有事兒先出門胳挎,發(fā)現(xiàn)特堵饼疙,就回去。錯過高峰再出慕爬。叫作隨機接入?yún)f(xié)議窑眯。著名的以太網(wǎng),用的就是這個方式医窿。
解決的是上面第一個問題
這里用到一個物理地址伸但,叫作鏈路層地址。但是因為第二層主要解決媒體接入控制的問題留搔,所以它常被稱為MAC 地址更胖。
解決這個問題就牽扯到第二層的網(wǎng)絡(luò)包格式。對于以太網(wǎng)隔显,第二層的最開始却妨,就是目標的 MAC 地址和源的 MAC 地址。
接下來是類型括眠,大部分的類型是 IP 數(shù)據(jù)包彪标,然后 IP 里面包含 TCP、UDP掷豺,以及 HTTP 等捞烟,這都是里層封裝的事情薄声。
有了目標 MAC 地址,數(shù)據(jù)包在鏈路上廣播题画,MAC 的網(wǎng)卡才能發(fā)現(xiàn)默辨,這個包是給它的。MAC 的網(wǎng)卡把包收進來苍息,然后打開 IP 包缩幸,發(fā)現(xiàn) IP 地址也是自己的,再打開 TCP 包竞思,發(fā)現(xiàn)端口是自己表谊,也就是 80,而 nginx 就是監(jiān)聽 80盖喷。于是將請求提交給 nginx爆办,nginx 返回一個網(wǎng)頁。然后將網(wǎng)頁需要發(fā)回請求的機器课梳。然后層層封裝押逼,最后到 MAC 層。因為來的時候有源 MAC 地址惦界,返回的時候挑格,源 MAC 就變成了目標 MAC,再返給請求的機器沾歪。
解決的是上面第三個問題
第二層的最后面是CRC漂彤,也就是循環(huán)冗余檢測。通過 XOR 異或的算法灾搏,來計算整個包是否在發(fā)送的過程中出現(xiàn)了錯誤挫望,主要解決發(fā)送錯誤的問題。
ARP 協(xié)議
一個廣播的網(wǎng)絡(luò)里面接入了 N 臺機器狂窑, 我怎么知道每個 MAC 地址是誰呢媳板?這就是ARP 協(xié)議, 也就是已知 IP 地址泉哈, 求 MAC 地址的協(xié)議蛉幸。
在一個局域網(wǎng)里面,當知道了 IP 地址丛晦,不知道 MAC 怎么辦呢奕纫?靠“吼”。 DHCP也是靠“吼”烫沙,新接入一個網(wǎng)絡(luò)的機器獲取分配的IP地址匹层。
發(fā)送一個廣播包,誰是這個 IP 誰來回答锌蓄。具體詢問和回答的報文如下:
為了避免每次都用 ARP 請求升筏,機器本地也會進行 ARP 緩存撑柔。由于機器存在不斷上線下線,IP 也可能會變您访,所以 ARP 的 MAC 地址緩存過一段時間就會過期铅忿。
交換機
這種使用HUB組網(wǎng)的方法,對少數(shù)電腦沒有問題洋只,但是一旦機器數(shù)目增多,問題就出現(xiàn)了昼捍。Hub 是廣播的识虚,不管某個接口是否需要,所有的 Bit 都會被發(fā)送出去妒茬,然后讓主機來判斷是不是需要担锤。這種方式路上的車少就沒問題,車一多乍钻,產(chǎn)生沖突的概率就提高了肛循。而且把不需要的包轉(zhuǎn)發(fā)過去,純屬浪費银择。
二層設(shè)備交換機可以很好地解決這個問題多糠,會把 MAC頭拿下來, 檢查一下目標 MAC 地址浩考, 然后根據(jù)策略轉(zhuǎn)發(fā)夹孔,而不是傻傻地都轉(zhuǎn)發(fā)。
交換機通過學習析孽,知道每個口的電腦的 MAC 地址搭伤。
交換機學習過程
一臺 MAC1 電腦將一個包發(fā)送給另一臺 MAC2 電腦,當這個包到達交換機的時候袜瞬,一開始交換機也不知道 MAC2 的電腦在哪個口怜俐,所以沒辦法,它只能將包轉(zhuǎn)發(fā)給出了來的那個口之外的其他所有的口邓尤。但是拍鲤,這個時候,交換機會記住汞扎,MAC1 是來自一個明確的口殿漠。以后有包的目的地址是 MAC1 的,直接發(fā)送到這個口就可以了佩捞。
轉(zhuǎn)發(fā)表
過了一段時間之后绞幌,就有了整個網(wǎng)絡(luò)的一個結(jié)構(gòu)了,這個時候一忱,基本上不用廣播了莲蜘,全部可以準確轉(zhuǎn)發(fā)谭确。由于每個機器的 IP 地址會變,所在的口也會變票渠,因而交換機上的學習的結(jié)果(轉(zhuǎn)發(fā)表)逐哈,是有一個過期時間的。
小結(jié)
第一·问顷, MAC 層是用來解決多路訪問的堵車問題的昂秃;
第二·, ARP 是通過吼的方式來尋找目標 MAC 地址的杜窄, 吼完之后記住一段時間肠骆, 這個叫作緩存;
第三塞耕, 交換機是有 MAC 地址學習能力的蚀腿, 學完了它就知道誰在哪兒了, 不用廣播了扫外。
參考資料:
趣談網(wǎng)絡(luò)協(xié)議(極客時間)鏈接:
http://gk.link/a/106nW
GitHub鏈接:
https://github.com/lichangke/LeetCode
歡迎大家來一起交流學習