若是你有幾臺計算機,那如何把這幾臺計算機鏈接起來?你可能會說,用一臺路由器就行了。那若是沒有路由器呢?nginx
這裏由下往上來講說網絡溝通的每一層。算法
使用路由器,是在第三層上。咱們先從第一層物理層開始說。
物理層能幹什麼?不少人大概知道,通常的網線直接連到兩臺電腦的網口上,並不能直接通信的。電腦連網口與電腦連電腦的線的接線是不一樣的。
普通的網線這樣是通不了的,因此水晶頭要作交叉線,用的就是所謂的1-三、2-6 交叉接法。緩存
水晶頭的第 一、2 和第 三、6 腳,它們分別起着收、發信號的做用。將一端的 1 號和 3 號線、2 號和 6 號線互換一下位置,就可以在物理層實現一端發送的信號,另外一端能收到。
固然電腦連電腦,除了網線要交叉,還須要配置這兩臺電腦的 IP 地址、子網掩碼和默認網關。要想兩臺電腦可以通訊,這三項必須配置成爲一個網絡,能夠一個是 192.168.0.1/24,另外一個是 192.168.0.2/24,不然是不通的。網絡
即便是電腦直接鏈接的方式,數據的發送也是須要包含 MAC 層的,要完整。IP 層要封裝了 MAC 層才能將包放入物理層。 到此爲止,兩臺電腦已經構成了一個最小的局域網,也即LAN。學習
這只是兩臺電腦,那若是有三臺電腦呢?要怎麼鏈接到一塊兒?計算機網絡
先不討論交換機。有一個叫做Hub的東西,也就是集線器。這種設備有多個口,能夠將宿舍裏的多臺電腦鏈接起來。可是,和交換機不一樣,集線器沒有大腦,它徹底在物理層工做。它會將本身收到的每個字節,都複製到其餘端口上去。這是第一層物理層聯通的方案。blog
Hub 採起的是廣播的模式。這就須要解決幾個問題:接口
這幾個問題,都是第二層,數據鏈路層,也即 MAC 層要解決的問題。MAC的全稱是Medium Access Control,即媒體訪問控制。控制什麼呢?其實就是控制在往媒體上發數據的時候,誰先發、誰後發的問題。防止發生混亂。這解決的是第二個問題。這個問題中的規則,學名叫多路訪問。有不少算法能夠解決這個問題。就像車管所管束馬路上跑的車,能想的辦法都想過了。路由
好比接下來這三種方式:效率
方式一:分多個車道。每一個車一個車道,你走你的,我走個人。這在計算機網絡裏叫做信道劃分;
方式二:今天單號出行,明天雙號出行,輪着來。這在計算機網絡裏叫做輪流協議;
方式三:無論三七二十一,有事兒先出門,發現特堵,就回去。錯太高峯再出。咱們叫做隨機接入協議。著名的以太網,用的就是這個方式。
解決了第二個問題,就是解決了媒體接入控制的問題,MAC 的問題也就解決好了。這和 MAC 地址沒什麼關係。
接下來要解決第一個問題:發給誰,誰接收?這裏用到一個物理地址,叫做鏈路層地址。可是由於第二層主要解決媒體接入控制的問題,因此它常被稱爲MAC 地址。
解決第一個問題就牽扯到第二層的網絡包格式。對於以太網,第二層的最開始,就是目標的 MAC 地址和源的 MAC 地址。
接下來是類型,大部分的類型是 IP 數據包,而後 IP 裏面包含 TCP、UDP,以及 HTTP 等,這都是裏層封裝的事情。
有了這個目標 MAC 地址,數據包在鏈路上廣播,MAC 的網卡才能發現,這個包是給它的。MAC 的網卡把包收進來,而後打開 IP 包,發現 IP 地址也是本身的,再打開 TCP 包,發現端口是本身,也就是 80,而 nginx 就是監聽 80。
因而將請求提交給 nginx,nginx 返回一個網頁。而後將網頁須要發回請求的機器。而後層層封裝,最後到 MAC 層。由於來的時候有源 MAC 地址,返回的時候,源 MAC 就變成了目標 MAC,再返給請求的機器。
對於以太網,第二層的最後面是CRC,也就是循環冗餘檢測。經過 XOR 異或的算法,來計算整個包是否在發送的過程當中出現了錯誤,主要解決第三個問題。
這裏還有一個沒有解決的問題,當源機器知道目標機器的時候,能夠將目標地址放入包裏面,若是不知道呢?一個廣播的網絡裏面接入了 N 臺機器,我怎麼知道每一個 MAC 地址是誰呢?這就是ARP 協議,也就是已知 IP 地址,求 MAC 地址的協議。
在一個局域網裏面,當知道了 IP 地址,不知道 MAC 怎麼辦呢?靠「吼」。
廣而告之,發送一個廣播包,誰是這個 IP 誰來回答。具體詢問和回答的報文就像下面這樣:
爲了不每次都用 ARP 請求,機器本地也會進行 ARP 緩存。固然機器會不斷地上線下線,IP 也可能會變,因此 ARP 的 MAC 地址緩存過一段時間就會過時。
至此,一個局域網就組建起來了。
這種組網的方法,機器少的話還能夠,機器數量一旦增多,問題就出現了。由於 Hub 是廣播的,無論某個接口是否須要,全部的數據包都會被髮送出去,而後讓主機來判斷是否是須要。一旦數據量激增,出現差錯的機率就會大增。那麼若是把目標 MAC 地址與鏈接端口關聯起來,就能提升效率了。
誰能知道目標 MAC 地址是否就是鏈接某個口的電腦的 MAC 地址呢?這就須要一個能把 MAC 頭拿下來,檢查一下目標 MAC 地址,而後根據策略轉發的設備,按第二節課中講過的,這個設備顯然是個二層設備,這個就是交換機。
一臺 MAC1 電腦將一個包發送給另外一臺 MAC2 電腦,當這個包到達交換機的時候,一開始交換機也不知道 MAC2 的電腦在哪一個口,因此沒辦法,它只能將包轉發給除了來的那個口以外的其餘全部的口。可是,這個時候,交換機會幹一件很是聰明的事情,就是交換機會記住,MAC1 是來自一個明確的口。之後有包的目的地址是 MAC1 的,直接發送到這個口就能夠了。
當交換機做爲一個關卡同樣,過了一段時間以後,就有了整個網絡的一個結構了,這個時候,基本上不用廣播了,所有能夠準確轉發。固然,每一個機器的 IP 地址會變,所在的口也會變,於是交換機上的學習的結果,咱們稱爲轉發表,是有一個過時時間的。
有了交換機,通常來講,你接個幾十臺、上百臺機器進行溝通,應該沒啥問題。