目錄
數據鏈路層
MAC地址與IP地址
數據幀?
ARP協議?
NAT技術
代理服務器?
正向代理
反向代理?
????????上期我們學習了網絡層中的相關協議,為IP協議。IP協議通過報頭中的目的IP地址告知了數據最終要傳送的目的主機的IP地址,從而指引了數據在網絡中的一步步傳輸,而數據鏈路層作為網絡層的下一層,在數據的傳輸過程中也扮演著重要的角色,具體扮演了什么樣的角色,這是我們本期要學習的內容。
數據鏈路層
? ? ? ? 通過上圖,我們可以知道,主機B將報文沿著每個路由器,最終發送到了主機C。上期在學習IP協議時,我們已經知道當主機B發送數據到路由器F時,路由器會解析出數據中的目的IP地址,然后在自己的路由表中與路由表中子網掩碼進行按位與得到目的IP主機對應的網絡號再與路由表的目的網絡的網絡號進行比對,如果比對成功,再去判斷路由表的flag字段中是否含有G,如果含有則當前路由器將數據發送給數據的下一跳路由器,如果不含有則證明當前數據要發送的目的IP所對應的主機與當前路由器在同一局域網,所以可以直接由當前路由器進行轉發。
? ? ? ? 所以上節課我們也得出了結論,數據中的目的IP指引數據在網絡節點中一步步進行轉發,直到將數據發送到目標主機上,上節課我們也提出了數據在網絡中由一個節點轉發至與之直接相連的下一個節點(數據的下一跳節點)時,數據的轉發是通過數據幀進行轉發的,接下來我們就要向大家講述,這個數據幀究竟是什么,以及這個數據幀是如何進行轉發的。??
MAC地址與IP地址
? ? ? ? ? 我們再以上節課的用戶手機與抖音服務器的圖進行舉例。圖示如下。? ? ??
? ? ? ? 當用戶手機上的數據隨著網絡中的一個個節點傳送逐漸的靠近抖音服務器,看似是橫跨整個網絡的傳輸,其實也被分成了多個局域網的傳輸,上述的一個紅圈就是一個局域網。為什么這么說呢?
? ? ? ? 以上圖為例,以手機相連的最近的用戶路由器會給手機這個主機設備分配一個與自身網絡號相同的IP地址,那么手機就與與它最近的用戶路由器處于了同一局域網中,后續的用戶路由器又被與它最近的運營商路由器分配了與運營商相同網絡號的IP,從而用戶路由器又與運營商路由器處于同一局域網中,這樣依次每兩個相鄰節點之間都形成了一個局域網,最終與抖音服務器相連的路由器我們稱之為入口路由器,入口路由器又為抖音服務器分配了一個與自身網絡號相同的IP地址,這樣入口路由器又和抖音服務器處于同一局域網中。以上講述并不是很準確,在后續ARP協議和NAT技術講解之后,我們會為大家進一步補充數據依次傳輸的細節。
? ? ? ? 所以上述圖示,就被分成了多個局域網中主機之間的通信(一個圈就是一個局域網)。局域網之間的的主機是可以直接進行通信的。
? ? ? ? 局域網之間的通信圖示如下。
? ? ? ? 處于同一局域網中的主機之間是可以直接互相通信的,且通信的內容可以被局域網中的其它主機獲取到。正如在教室里上課,老師點名了張三,但是教室里的同學都聽到了老師點名張三的話一樣。
? ? ? ? 我們規定,在局域網中,主機之間通過mac幀進行數據傳輸。?
? ? ? ? 好了講了這么多也妹有說明MAC地址和IP地址是個啥呀,別急,以上只是鋪墊。
? ? ? ? 何為MAC地址?
? ? ? ? 簡單來說MAC地址就是一個物理地址,任何一臺主機一生產出來,就會在網卡中標識出唯一的地址,全球唯一,在局域網中通信時,兩臺主機使用mac幀進行數據傳輸,而mac幀的報頭中需要使用到MAC地址,一個為源主機MAC地址,一個為目的主機MAC地址。
? ? ? ? 何為IP地址?
? ? ? ? IP地址不是主機一生產出來就有的,而是后期相關的廠商進行分配的,IP地址分為私有IP和公網IP,私有IP在一個局域網中一定是唯一的,而在多個局域網中可以重復,公網IP是全網唯一的。在跨網絡通信時,一般要使用到IP地址,IP報頭中要封裝目的主機的公網IP,我們稱之為目的IP,目的IP指引了數據在網絡中傳輸的主體方向。
? ? ? ? 有了以上所有知識的鋪墊,我們再來講講數據幀的報文。?
數據幀?
????????數據幀又稱作MAC幀,簡單來說就是處于數據鏈路層的報文,一般情況下mac幀的有效載荷為IP報文,也可能為ARP報文(后續會講到)。數據幀的報文圖示如下。
- 目的地址(6字節):局域網中數據幀要發送的目標主機的MAC地址。
- 源地址(6字節):局域網中發送數據幀的主機的MAC地址。
- 類型(2字節):數據幀的有效載荷一般情況下有三種,一種是IP報文,一種是ARP報文(通過IP地址獲取MAC地址),一種是RARP報文(通過MAC地址獲取IP地址)。如果是IP報文則2字節類型的值填充為0800,如果是ARP報文,則2字節類型的值填充為0806,如果是RARP報文,則2字節類型填充為8035。
- 數據(有效載荷):46~1500字節,對于IP報文,如果大于1500字節就要進行分片。對于ARP報文和RARP報文,一般情況下為28字節,所以要在報文后加上PAD18字節的填充字段,保證報文的長度為46字節。
- CRC:2字節,用于差錯檢驗,接收端通過CRC檢驗數據幀的傳送是否出現了差錯。
ARP協議?
? ? ? ? ? ? ? ? 主機B發送了一個數據到主機C。其實簡單的來說確實是這樣,準確的說法就是從主機B開始,一直到數據傳送到主機C,是通過了多個局域網,最終才將數據傳送到了主機C。更準確的說,其實就是主機B發送了數據幀給路由器F,路由器F先判斷數據幀的報頭,發送數據幀報頭的目的MAC地址是自己所以進行了數據幀的解包,然后通過解包后的IP報文的目的IP地址,將這個IP地址在自己的路由表中進行查詢,首先將該IP依次和路由表中的子網進行按位與,得到的主機號與路由表中的目標網絡的網路號進行比對,對比成功,然后再去判斷flag字段的選項,發現為G,所以當前路由器就對IP報文進一步進行封裝成MAC幀,然后發送給下一跳路由器,因為當前路由器和下一條路由器都處于同一局域網(為什么處于同一局域網,在后續講NAT技術時會講到),所以可以直接發送MAC幀,后續的轉發都依靠上述原則,逐步分析MAC幀報頭和IP報文的目的IP,直到數據幀發送到了入口路由器D,路由器D對發送來的數據幀報頭進行分析,發現報頭中的目的MAC地址就是自己,所以對MAC幀進行了解包,然后對解包之后的IP報文的目的IP進行了分析,與自己的路由表中的子網掩碼按位與得到的網絡號與自己路由表中的目的網絡的網絡號進行對比,發現對比成功,然后判斷flag標志位,發現標志位為U沒有G,所以路由器D就認為目的IP主機與自己在同一局域網內,所以就將IP報文重新封裝成了MAC幀,然后將MAC幀直接在局域網內發送給目的IP對應的主機。
? ? ? ? 好了,那么此時問題來了,封裝MAC幀是需要自己的MAC地址與目的主機的MAC地址的,此時路由器D此時只知道目的IP所對應的主機的IP地址,那么如何通過IP地址獲取到MAC地址呢?
? ? ? ? 此時ARP協議就登場了。
? ? ? ? ARP報文如下圖中的以太網ARP字段所示。
- 硬件類型:硬件類型指的是鏈路層的網絡類型,1為以太網。
- 協議類型:要轉換的地址的類型,要轉為IP地址,則填充0800。
- 硬件地址長度:對于以太網而言為6字節。
- 協議地址長度:對于要轉換的IP地址而言,協議地址長度為4字節。
- op:為1表示ARP請求,為2表示為ARP應答。? ? ? ??
- 后面四個就不必多說了,分別為源主機MAC地址,源主機IP地址,目的主機MAC地址,目的主機IP地址。
? ? ? ? 我們以圖示簡單的來講解一下,怎么樣通過ARP協議,將目的主機的IP地址轉為MAC地址。????????
? ? ? ? ARP協議也是處于數據鏈路層的協議,在局域網中,剛開始主機A不知道主機B的地址,所以主機A會向主機B發送ARP請求,然后對ARP的請求報文進行封裝,封裝成了MAC幀,然后在局域網中進行廣播,然后局域網的每個主機都會接收這個MAC幀,都以為是發送給自己的,然后對MAC幀進行解包,得到了ARP報文,然后每個主機的ARP協議層首先分析ARP報文的OP字段,發現為1表明是一個請求,然后分析目的IP字段,發現目的IP地址并不是自己主機的IP地址,所以都對該ARP請求報文進行了拋棄,只有主機B發現目的IP與自己的IP地址一致,所以就會接收ARP請求,對主機A做出ARP響應,此時主機B已經通過主機A發送給自己的ARP請求獲知了,主機A的MAC地址和IP地址,響應ARP報文中,會將OP字段設置為2,表示這是一個ARP響應報文,同時填充相應的字段,然后封裝成MAC幀傳遞給同一局域網中的主機A,此時局域網中的其它主機也會接收到這個MAC幀,但是當前的MAC幀并不是以廣播的形式進行傳送的,它有明確的源MAC地址和目的MAC地址,所以當每個局域網中的主機分析到MAC幀的報頭的目的MAC地址并不是自己時,就會直接在接收到MAC幀時進行拋棄,而不是解包成ARP報文發送到ARP協議層進行分析之后再拋棄,只有主機A發現MAC幀的目的地址是自己的主機MAC地址,所以會對MAC幀進行解包,解包之后的ARP相應報文會被發送至主機A的ARP協議層,然后會分析ARP協議,發現OP字段為2,表明這是一個響應報文,然后分析得到了源MAC地址,這個源MAC地址就是主機B的地址,所以此時主機A就通過主機B的IP地址得到了主機B的MAC地址。
? ? ? ? 所以此時也就解釋了為什么上圖中的路由器D可以通過主機C的IP地址獲知主機C的MAC地址從而向主機C發送MAC幀。與此同時,在上圖由主機B到主機C,主機B可以通過路由器F給自己分配IP地址,因為DHCP協議,主機B也會獲知路由器F的IP地址,所以也會通過類似的方法獲知路由器的MAC地址,從而實現局域網MAC幀的傳輸。往后的路由器F和路由器G,也是會通過類似的方法實現MAC幀的傳送,需要注意的是,一般情況下,與主機相連的我們稱之為NAT路由器,不與主機相連的我們稱之為ISP路由器。NAT路由器的LAN口用于給局域網中的主機分配私有IP,而WAN口會被ISP路由器分配公網IP,而ISP路由器的LAN口和WAN口一般情況下都為公網IP,所以NAT路由器的WAN口公網IP和ISP的LAN口的公網IP一般都是ISP分配的公網IP,切這兩個公網IP處于同一局域網,可以發送MAC幀傳送數據,WAN口的IP又會被下一個ISP路由器分配處于同一局域網的公網IP,直到到達了最后一個入口路由器,入口路由器一般情況下也為NAT路由器,NAT路由器的WAN口公網IP是上一跳ISP路由器分配的公網IP地址,LAN口是一個私有IP地址,用于為局域網主機分配IP地址。
NAT技術
????????在學習網絡層的IP協議時,我們知道了IP協議的地址是有限的,所以為了解決IP地址不足的問題,我們引入了一個NAT技術,何為NAT技術呢?? ? ?
? ? ? ? 如上圖,主機A要發送數據幀到服務器。如果主機A發送數據時將數據幀中的IP報文的源IP寫成了自己的私有IP,那么將來服務器接收到了數據幀對數據幀進行解包之后,得到了IP報文,發現IP報文的源IP是一個私有IP,那么此時服務器就蒙了,因為私有IP是可以重復的,那么此時服務器就不知道是給哪個子網的這個私有IP對應的主機發送響應MAC幀。
? ? ? ? 基于以上問題,我們產生了NAT技術,因為我們上文已經說到了,NAT路由器的WAN接口是一個由ISP路由器分配的公網IP地址,也就是全網唯一的,所以說,當NAT路由器的LAN口給客戶端A主機分配了子網IP之后,客戶端主機A先將MAC幀發送至NAT路由器,然后NAT路由器對MAC幀進行解包,然后將解包之后的IP報文的源IP替換成了自己的的WAN口公網IP,因為公網IP是唯一的,所以當服務器發送響應MAC幀時會將響應MAC幀的有效載荷IP報文的目的IP地址填充成NAT路由器的WAN口公網IP。
? ? ? ? 說的挺好,將源IP替換成了自己的WAN口的公網IP,那么將來服務器將響應MAC幀通過NAT路由器的WAN口公網IP發送至NAT路由器時,NAT路由器怎樣將收到的MAC真發送給局域網中的客戶端A呢?這就又引申了一個概念,就是在NAT路由器將客戶端A的私有IP替換成自己的公有IP時,會生成一個對照表,大致圖示如下。
? ? ? ? 即將來NAT路由器接收到響應MAC幀時,會將響應的MAC幀通過對照表發送給局域網中的私有IP對應的主機。
? ? ? ? 那么如果上圖中的客戶端主機A和客戶端主機B都向服務器發送了MAC幀,那么經過NAT路由器將私有IP轉為公網IP之后,就會有兩個對照的記錄,那么將來NAT路由器接收到響應MAC幀時,究竟發送給哪一個局域網中的主機呢,此時又誕生了NAPT技術,即就是給私有IP和公有IP都帶上了端口號,這樣就產生了一一對應的關系,簡單圖示如下。
代理服務器?
正向代理
? ? ? ? 正如大學里的校園網,一般情況下,當學生在使用互聯網時訪問的其實并不是訪問的軟件對應的企業服務器,而是校園內的代理服務器。
????????
? ? ? ? 為什么要有校園代理服務器呢,主要有兩個原因?
- 校園內可能同時有大量相同的請求服務,比如都同時觀看愛奇藝體育中的球賽,所以如果沒有代理服務器,那么此時就會有大量相同功能的請求發送,需要多次頻繁的訪問外網。但是有了代理服務器之后,代理服務器進行分析,發現大量的請求都是為了獲取相同的一個資源,所以代理服務器就會發送相同的請求,將獲取的球賽資源緩存到自己代理服務器中,多個主機請求相同的資源時,直接就可以從代理服務器中獲取相應的資源。
- 處于安全性考慮,如果沒有代理服務器,那么此時就相當于校園內的主機可以直接與外部的服務器進行數據交換,那么如果有了惡意分子,惡意分子就直接可以攻擊校園內的主機,而校園內的主機大部分的擁有者都是學生,并不具備對于惡意攻擊的訪問能力。所有有了代理服務器之后,與外網服務器之間直接進行交互的就是代理服務器,代理服務器有專業的認識進行管理,可以有效的對不法攻擊進行防范。?
? ? ? ? 給發送端,建立的代理服務器,我們稱為正向代理。?
反向代理?
? ? ? ? 反向代理就類似于給企業端配置了一個企業端代理服務器。
? ? ? ? 為什么要在企業端配置這樣一個代理服務器呢?主要原因還是兩個。
????????1.我們知道主機與服務器之間的通信是要貫穿TCP/IP網絡協議棧的,特別是TCP協議為了保證可靠傳輸要建立連接,那么如果有多個客戶主機去訪問了同一企業服務器,那么當企業服務器就會獲取大量的連接,而維護連接又要創建大量的數據結構,所以如果大量的客戶主機訪問了同一企業服務器,就會導致這個企業服務器創建大量的維護連接的數據結構,從而增加了服務器的負載。有了企業代理服務器之后,代理服務器會合理的對用戶的請求進行分配,從而不會導致某一個企業服務器的負載過大,我們稱之為負載均衡。
? ? ? ? 圖示如下。
????????2.同樣在企業端配置企業代理服務器是為了保護企業服務器的安全,因為有了企業代理服務器,客戶主機不會與企業服務器直接進行通信,而是會與企業代理服務器進行交互,企業代理服務器會對每個客戶請求進行甄別,能夠有效的組織非法客戶的惡意請求,這樣就保證了企業服務器的安全,有人會說難道不能為企業服務器配置一些有效的防護策略嗎,當然有,但是加上企業代理服務器之后安全級別會更高。
? ? ? ? 在接收端我們配置了相應的代理服務器,我們稱之為反向代理。?
? ? ? ? 以上便是數據鏈路層的所有重點內容。
? ? ? ? 本期內容到此結束^_^