偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

瀏覽器輸入一個(gè)網(wǎng)址發(fā)生了什么(四) :網(wǎng)絡(luò)包在局域網(wǎng)中傳輸——路由器和交換機(jī)如何轉(zhuǎn)發(fā)包

網(wǎng)絡(luò)
在我們實(shí)際生活中,家里的路由器已經(jīng)集成了集線器和交換機(jī)的功能,網(wǎng)絡(luò)包到達(dá)家里的路由器之后就能立刻進(jìn)入互聯(lián)網(wǎng)。

上一節(jié)我們介紹了網(wǎng)絡(luò)包經(jīng)過協(xié)議棧的IP模塊的封裝后,經(jīng)由網(wǎng)卡發(fā)送出本機(jī)。

瀏覽器輸入一個(gè)網(wǎng)址發(fā)生了什么(三) IP模塊封裝、ARP協(xié)議、IP協(xié)議、ICMP協(xié)議和網(wǎng)卡原理

接下來我們將介紹數(shù)據(jù)從客戶端主機(jī)傳輸出去后,在局域網(wǎng)內(nèi)經(jīng)歷了什么。

 

網(wǎng)絡(luò)包從客戶端主機(jī)發(fā)出后,要經(jīng)過集線器、交換機(jī)和路由器最終進(jìn)入到互聯(lián)網(wǎng)。在我們實(shí)際生活中,家里的路由器已經(jīng)集成了集線器和交換機(jī)的功能,網(wǎng)絡(luò)包到達(dá)家里的路由器之后就能立刻進(jìn)入互聯(lián)網(wǎng)。

這里為了理解集線器、交換機(jī)和路由器的功能,故而將每個(gè)功能獨(dú)立出介紹以方便理解。

如下圖所示:

一、電信號(hào)到達(dá)集線器

從之前的內(nèi)容我們知道,計(jì)算機(jī)網(wǎng)卡會(huì)將MAC模塊封裝的數(shù)據(jù)幀轉(zhuǎn)為電信號(hào)(0和1組成的高低電平),該電信號(hào)會(huì)沿著計(jì)算機(jī)連接的網(wǎng)線到達(dá)集線器。

集線器包含多個(gè)插口(接口),每個(gè)插口可能連接著其他集線器,交換機(jī),路由器或者多個(gè)計(jì)算機(jī)。每個(gè)接口背后都裝有網(wǎng)卡中PHY(MUA)功能相同的模塊用于接收和發(fā)送電信號(hào)。

集線器上的每一個(gè)接口既可發(fā)送也可接收,但每一個(gè)接口不能在發(fā)送的同時(shí)又接收,或者接收的時(shí)候同時(shí)發(fā)送,這是因?yàn)榧€器是基于半雙工的工作模式。

當(dāng)信號(hào)通過網(wǎng)線到達(dá)集線器接收接口后面的PHY(MUA)模塊之后,會(huì)進(jìn)入中繼電路,中繼電路的基本功能是將輸入的信號(hào)廣播到該集線器的所有接口之上,信號(hào)就會(huì)從這些接口發(fā)向所有連到該集線器的所有設(shè)備。

PS:集線器不會(huì)對發(fā)送過來的數(shù)據(jù)進(jìn)行解析和處理,也就是說,當(dāng)集線器接收到電信號(hào)之后,不會(huì)將電信號(hào)還原為數(shù)字信息(也就是不會(huì)將電信號(hào)還原為數(shù)據(jù)幀和數(shù)據(jù)包),而是將電信號(hào)直接轉(zhuǎn)發(fā)。

二、電信號(hào)從集線器到達(dá)交換機(jī)

交換機(jī)和集線器一樣也有眾多接口或者說端口,并且每個(gè)接口后面也裝著PHY(MUA)模塊用于收發(fā)電信號(hào)。與集線器不同的是交換機(jī)內(nèi)部存儲(chǔ)著一張MAC地址與網(wǎng)線端口的對應(yīng)表(MAC地址表)而且交換機(jī)是一個(gè)包含數(shù)據(jù)鏈路層的設(shè)備,具有MAC模塊,可以校驗(yàn)和解析數(shù)據(jù)幀,而集線器則沒有,集線器不會(huì)將電信號(hào)轉(zhuǎn)為數(shù)據(jù)幀(而是直接轉(zhuǎn)發(fā)電信號(hào)),更不用說解析數(shù)據(jù)幀。

當(dāng)電信號(hào)被交換機(jī)的某一個(gè)端口接收到之后,由PHY(MUA)模塊將電信號(hào)還原為數(shù)據(jù)幀,再由MAC模塊校驗(yàn)數(shù)據(jù)幀內(nèi)的數(shù)據(jù)是否正確(FCS校驗(yàn)),如果正確則把幀里面的以太網(wǎng)包放到緩沖區(qū)中。

PS:我們可以理解為交換機(jī)的每一個(gè)端口都相當(dāng)于一塊網(wǎng)卡,具有MAC模塊并且擁有自己的緩沖區(qū)。實(shí)際上并非每個(gè)端口都有獨(dú)立的PHY(MUA)、MAC和內(nèi)存,而是由一個(gè)控制芯片同時(shí)控制多個(gè)端口。而交換機(jī)中實(shí)際上也沒有網(wǎng)卡,因此交換機(jī)也沒有MAC地址。

網(wǎng)卡本身是具有MAC地址的,所以網(wǎng)卡能夠核對接收到的包的接收方MAC地址是否是自己的MAC地址,如果不是則丟棄包。但交換機(jī)由于沒有網(wǎng)卡也沒有MAC地址,因此交換機(jī)會(huì)接收所有發(fā)給它的包存到緩沖區(qū)并轉(zhuǎn)發(fā),而不會(huì)丟棄(如果發(fā)送方MAC地址對應(yīng)的接口和接收方MAC對應(yīng)的接口相同則會(huì)丟棄該包,后面會(huì)介紹)。

包放入緩沖區(qū)后,MAC模塊會(huì)獲取到以太網(wǎng)包MAC頭部的發(fā)送方MAC地址和接收方MAC地址。

一方面,交換機(jī)會(huì)將發(fā)送方MAC地址和交換機(jī)對應(yīng)接收端口的端口號(hào)的映射關(guān)系記錄到MAC地址表中,這樣交換機(jī)就知道這個(gè)發(fā)送方MAC地址的設(shè)備是連接在哪個(gè)端口上的,下次有其他機(jī)器要發(fā)送數(shù)據(jù)給這個(gè)MAC地址時(shí),交換機(jī)就知道要將數(shù)據(jù)通過哪個(gè)接口發(fā)出。

另一方面,交換機(jī)會(huì)查詢接收方MAC地址是否在MAC地址表有記錄的發(fā)送端口,例如查詢到接收方MAC地址為00-02-B3-1C-9C-F9則對應(yīng)下面的MAC地址表中的第三行,交換機(jī)就會(huì)把包從端口8發(fā)送出去。

PS:如果交換機(jī)接收到某個(gè)包其接收方MAC地址是主機(jī)A的MAC地址,那么交換機(jī)接收這個(gè)包的端口不一定是直接連著主機(jī)A,而可能是連接著幫A轉(zhuǎn)發(fā)包的集線器或幫A轉(zhuǎn)發(fā)包的其他交換機(jī)。

從上圖中我們也可以看出,交換機(jī)的端口也是分為接收端口和發(fā)送端口的。00-02-B3-1C-9C-F9這個(gè)MAC地址對應(yīng)的端口號(hào)為8,那么交換機(jī)針對該MAC地址的發(fā)送端口號(hào)和接收端口號(hào)都是8,但是發(fā)送端口和輸出端口本身不是同一個(gè)端口,而是不同的2個(gè)端口,只是它們的端口號(hào)都是8。這里涉及到交換機(jī)的交換電路。如下圖所示:

左邊是交換機(jī)的輸入端口,下方是輸出端口,左邊8號(hào)端口是交換機(jī)對00-02-B3-1C-9C-F9機(jī)器的接收端口,下方8號(hào)端口是交換機(jī)對00-02-B3-1C-9C-F9機(jī)器的發(fā)送端口。

MAC地址表的維護(hù)

像我們剛才所說,當(dāng)收到包時(shí)交換機(jī)會(huì)把發(fā)送方MAC地址與接收端口的端口號(hào)記錄到MAC地址表,并且交換機(jī)每次收到包都會(huì)執(zhí)行這個(gè)操作。這樣以后當(dāng)收到發(fā)往這個(gè)地址的包,交換機(jī)就能將它發(fā)到正確的端口了。

但是地址表中的記錄不能永久有效,會(huì)在一段時(shí)間不使用之后自動(dòng)刪除,這是為了避免類似于設(shè)備發(fā)生移動(dòng)導(dǎo)致地址表中記錄不再正確的情況,例如筆記本電腦從辦公室移動(dòng)到了會(huì)議室,連了不同的網(wǎng)線。

地址表記錄的有效期為幾分鐘,但如果在有效期內(nèi),某條記錄就過時(shí)了(發(fā)生了設(shè)備移動(dòng)的情況),那么交換機(jī)依舊會(huì)將包轉(zhuǎn)發(fā)給老的端口,通信就會(huì)發(fā)生錯(cuò)誤。此時(shí)只需重啟一下交換機(jī),地址表會(huì)被清空并更新正確的信息。

下面我們看一種特殊情況:如果交換機(jī)查詢MAC地址表發(fā)現(xiàn)記錄中接收方MAC地址對應(yīng)的接口和發(fā)送方MAC地址對應(yīng)的發(fā)送接口相同,那么交換機(jī)會(huì)如何處理,如下圖所示:

A發(fā)送了一個(gè)給B的數(shù)據(jù)包,我們發(fā)現(xiàn)A和B都連接在同一臺(tái)集線器上,集線器會(huì)把A的包廣播到該集線器所有的端口,其中就包括B。因此B接收到集線器發(fā)給他的包之后,校驗(yàn)MAC地址發(fā)現(xiàn)是自己的MAC地址,于是B會(huì)響應(yīng)回包,經(jīng)過集線器,集線器再通過廣播的方式把回包傳回給A。

但是集線器也連接著左側(cè)的交換機(jī)上,因此集線器同樣會(huì)把這個(gè)包發(fā)給交換機(jī),交換機(jī)一查MAC地址表會(huì)發(fā)現(xiàn)發(fā)送端口和接收端口是同一個(gè)端口號(hào),為了避免計(jì)算機(jī)B接收重復(fù)的包,因此交換機(jī)會(huì)丟棄這個(gè)包,而不會(huì)把包又轉(zhuǎn)發(fā)回集線器而又由集線器轉(zhuǎn)發(fā)給B。

另一種特殊情況就是MAC地址表中無法找到指定的MAC地址,這是因?yàn)樵揗AC地址的設(shè)備沒有向交換機(jī)發(fā)送過包,或者M(jìn)AC記錄因過了有效期而被刪除。

此時(shí)交換機(jī)會(huì)將包轉(zhuǎn)發(fā)給除了源端口之外的其他所有端口??赡苡腥藭?huì)擔(dān)心這樣發(fā)過多的包會(huì)不會(huì)造成網(wǎng)絡(luò)擁塞,其實(shí)不用擔(dān)心,因?yàn)橹灰繕?biāo)設(shè)備做出響應(yīng)(這里主要指ARP響應(yīng)),交換機(jī)就會(huì)根據(jù)回包將其MAC地址記錄到地址表,下次就無需這樣廣播轉(zhuǎn)發(fā)。

另外,如果接收方MAC地址是一個(gè)廣播地址那么交換機(jī)也會(huì)將包發(fā)送到除了源端口外的其他端口。

交換機(jī)是全雙工的工作模式,這也是交換機(jī)和集線器的區(qū)別。交換機(jī)的發(fā)送和接收端口是相互獨(dú)立的,發(fā)送端口只能發(fā)送不能接收,接收端口亦然;但是發(fā)送端口在發(fā)送的時(shí)候,接收端口也能接收,這就是全雙工模式的特點(diǎn)。而集線器的單個(gè)端口可以接收也可以發(fā)送,但接收和發(fā)送不能同時(shí)進(jìn)行,否則就會(huì)發(fā)生信號(hào)碰撞,所以當(dāng)集線器接收某個(gè)包時(shí),它需要將這個(gè)包轉(zhuǎn)發(fā)給其他所有端口,導(dǎo)致其他端口這段期間不能接收包。從轉(zhuǎn)發(fā)能力而言,集線器是低于交換機(jī)的。

三、網(wǎng)絡(luò)包經(jīng)路由器并轉(zhuǎn)發(fā)

網(wǎng)絡(luò)包經(jīng)過集線器和交換機(jī)轉(zhuǎn)發(fā)之后達(dá)到路由器,并被轉(zhuǎn)發(fā)到下一個(gè)路由器。

當(dāng)然,網(wǎng)絡(luò)包不一定非要先經(jīng)過集線器再到交換機(jī)再到路由器,也可能集線器連接著路由器,包到達(dá)集線器后就能轉(zhuǎn)發(fā)到路由器;也可能是計(jì)算機(jī)直接連著路由器,網(wǎng)絡(luò)包從計(jì)算機(jī)發(fā)出后直接到達(dá)路由器;在局域網(wǎng)中,路由器與路由器之間也存在著眾多的集線器和交換機(jī),從當(dāng)前路由器到下一跳路由器需要經(jīng)過這兩臺(tái)路由器之間的集線器和交換機(jī);也可能路由器內(nèi)部本身就集成了集線器和交換機(jī)的功能,這樣包就可以按上述所說的轉(zhuǎn)發(fā)方式直接被轉(zhuǎn)發(fā)到下一跳路由器。

當(dāng)然本小節(jié)的重點(diǎn)不是集線器和交換機(jī),而是路由器的轉(zhuǎn)發(fā)機(jī)制。和交換機(jī)不同,路由器是基于IP設(shè)計(jì)的(具有網(wǎng)絡(luò)層和鏈路層),而交換機(jī)是基于以太網(wǎng)設(shè)計(jì)的(只有鏈路層),因此路由器可以解析MAC包和IP包,交換機(jī)則只能解析MAC包;交換機(jī)是通過包中的接收方MAC地址判斷轉(zhuǎn)發(fā)目標(biāo),而路由器則是根據(jù)包中接收方的IP地址判斷轉(zhuǎn)發(fā)目標(biāo)。

1.路由器結(jié)構(gòu)簡化圖

路由器內(nèi)部包含兩部分:轉(zhuǎn)發(fā)模塊和端口模塊。

轉(zhuǎn)發(fā)模塊負(fù)責(zé)根據(jù)包內(nèi)目的地IP判斷包應(yīng)該轉(zhuǎn)發(fā)到哪個(gè)下一跳路由器;端口模塊負(fù)責(zé)執(zhí)行包的收發(fā)操作。

2.端口模塊

端口模塊包含PHY(MUA)模塊(可以接收電信號(hào)將幀轉(zhuǎn)為數(shù)字信息)、MAC模塊(將幀解析為以太網(wǎng)包)和內(nèi)存緩沖區(qū)(暫存網(wǎng)絡(luò)數(shù)據(jù)),端口模塊對于路由器而言就相當(dāng)于網(wǎng)卡對于計(jì)算機(jī)一樣。路由器的每個(gè)端口都具有獨(dú)立的MAC地址和IP地址。

不同類型的路由器安裝的端口模塊也不同,例如具有ADSL組件的路由器(一般用作為互聯(lián)網(wǎng)中的路由器),具有FTTH組件的路由器(互聯(lián)網(wǎng)中的路由器),支持專線的路由器(公司局域網(wǎng)中的路由器),支持無線局域網(wǎng)或以太網(wǎng)的路由器(局域網(wǎng)中的路由器)。

不同端口模塊的路由器支持不同的通信功能,例如具有ADSL通信功能的路由器在把包轉(zhuǎn)發(fā)之前會(huì)為包添加MAC頭部、PPPOE頭部和PPP頭部(用于在互聯(lián)網(wǎng)中傳輸和鑒權(quán))并發(fā)送到互聯(lián)網(wǎng)中;而具有以太網(wǎng)或無線局域網(wǎng)功能的路由器在轉(zhuǎn)發(fā)時(shí)只添加MAC頭部,并且只支持包在局域網(wǎng)內(nèi)傳輸和解析。

一般而言,計(jì)算機(jī)的網(wǎng)卡支持以太網(wǎng)和無限局域網(wǎng)的通信技術(shù),而路由器的端口模塊除了支持以太網(wǎng)和無線局域網(wǎng)還支持如ADSL,F(xiàn)TTH以及各種寬帶專線的通信,只需要端口模塊安裝了支持這些技術(shù)的硬件即可。

一個(gè)路由器可以有多個(gè)端口和多種類型的端口(意味著這個(gè)路由器既支持包在局域網(wǎng)中轉(zhuǎn)發(fā)也支持在互聯(lián)網(wǎng)中轉(zhuǎn)發(fā)),每個(gè)端口都可能連接著一根網(wǎng)線(如果端口類型是無線的則不用連網(wǎng)線),端口類型不同,連的網(wǎng)線種類也不同。

3.轉(zhuǎn)發(fā)模塊

路由器的轉(zhuǎn)發(fā)模塊中有一個(gè)重要的表叫做路由表,如下所示:

路由器中的路由表內(nèi)容,以及匹配規(guī)則和之前介紹的計(jì)算機(jī)內(nèi)的路由表一樣。

其中,第一列“目標(biāo)地址”記錄的是接收方的信息,但它不是具體某臺(tái)設(shè)備的IP,而是只有IP的網(wǎng)絡(luò)號(hào)部分的IP段,表示主機(jī)號(hào)部分的比特值都為0。

第二列表示目標(biāo)地址的子網(wǎng)掩碼,用于路由器判斷所需比對的網(wǎng)絡(luò)號(hào)的比特?cái)?shù)。

路由器在比對路由表和接收方IP時(shí),只會(huì)比對 接收方IP的網(wǎng)絡(luò)號(hào)而忽略主機(jī)號(hào)。

4.路由聚合

路由表第一列和第二列中記錄的可能不是目標(biāo)地址IP的真正子網(wǎng),這是路由聚合的結(jié)果。所謂的路由聚合就是將多個(gè)子網(wǎng)合并為一個(gè)子網(wǎng),并在路由表中生成一條記錄,這樣就能減少路由表中的記錄數(shù)。

例如有3個(gè)子網(wǎng):10.10.1.0/24、10.10.2.0/24和10.10.3.0/24。路由器B需要轉(zhuǎn)發(fā)接收方IP為10.10.2.100的包,但實(shí)際上路由器B的路由表 中并沒有上面的3個(gè)子網(wǎng)的記錄,而是將上面3個(gè)子網(wǎng)合并成一個(gè)10.10.0.0/16的子網(wǎng)記錄起來(這里記錄的是聚合后的地址),并將下一跳指向路由器A。如下所示:

目標(biāo)地址

子網(wǎng)掩碼

網(wǎng)關(guān)

接口

躍點(diǎn)數(shù)

10.10.0.0

255.255.0.0

路由器A的IP

路由器B某接口的IP

1

此時(shí)在路由器B中就只需匹配目標(biāo)地址10.10.2.100的前16個(gè)位,即10.10。匹配正確后B會(huì)將這個(gè)包轉(zhuǎn)發(fā)給路由器A。

路由器A的路由表則記了上面3個(gè)子網(wǎng)的記錄,根據(jù)10.10.2.100匹配到10.10.2.0/24這個(gè)子網(wǎng)和下一跳的IP地址,如下所示:

目標(biāo)地址

子網(wǎng)掩碼

網(wǎng)關(guān)

接口

躍點(diǎn)數(shù)

10.10.1.0

255.255.255.0

...

路由器A的5號(hào)端口的IP

1

10.10.2.0

255.255.255.0

...

路由器A的2號(hào)端口的IP

1

10.10.3.0

255.255.255.0

...

路由器A的8號(hào)端口的IP

1

圖片

路由聚合是將多個(gè)子網(wǎng)聚合為一個(gè)子網(wǎng),路由表記錄聚合后的子網(wǎng)地址。相反的,路由器也可能將一個(gè)子網(wǎng)細(xì)分并注冊到路由表形成多條記錄。甚至也可以將某臺(tái)具體計(jì)算機(jī)的地址寫入路由,此時(shí)第二列的子網(wǎng)掩碼為255.255.255.255,表示匹配路由表時(shí)需要匹配所有32個(gè)比特的值。

至于網(wǎng)關(guān)、接口和躍點(diǎn)數(shù)在上面介紹計(jì)算機(jī)的路由表已經(jīng)介紹過,這里不再贅述。第4列接口在計(jì)算機(jī)中代表某一塊網(wǎng)卡,在路由器中代表路由器眾多端口中的某一個(gè)端口。

PS:路由表的維護(hù)方式與交換機(jī)不同,交換機(jī)對MAC地址表的維護(hù)是通過記錄發(fā)送方的以太網(wǎng)包MAC地址以及交換機(jī)接收端口的端口號(hào)、記錄接收方的響應(yīng)以太網(wǎng)包的MAC頭部和交換機(jī)接收該包的接收端口實(shí)現(xiàn)的。路由表的維護(hù)則通過人手動(dòng)維護(hù)以及根據(jù)路由協(xié)議通過路由器之間的信息交換由路由器自行維護(hù)。

那么回到正題,當(dāng)包到達(dá)路由器時(shí)路由器是怎么處理的,這會(huì)根據(jù)路由器的端口不同而異(如以太網(wǎng)端口,無線局域網(wǎng)端口,ADSL等),這里只介紹路由器以太網(wǎng)端口是如何接收和轉(zhuǎn)發(fā)包的。

首先信號(hào)到達(dá)網(wǎng)線接口部分,由PHY(MUA)模塊和MAC模塊將電信號(hào)轉(zhuǎn)為數(shù)字信息,檢驗(yàn)幀尾部FCS,查看接收方的MAC地址是不是發(fā)送給自己的,放入接收緩沖區(qū);如果不是發(fā)給自己的包則丟棄(交換機(jī)不具有MAC地址,只負(fù)責(zé)轉(zhuǎn)發(fā),因此交換機(jī)不會(huì)因?yàn)樾r?yàn)MAC地址不是自己的MAC地址而丟棄以太網(wǎng)包,而是根據(jù)MAC地址表轉(zhuǎn)發(fā))。

校驗(yàn)完MAC地址之后,MAC頭部的任務(wù)就完成了然后被丟棄(MAC頭部的任務(wù)就是將包送到指定MAC地址的路由器上,因此其實(shí)上一章中我們介紹通過ARP協(xié)議向局域網(wǎng)中廣播以獲取接收方的MAC地址實(shí)際上是獲取路由器的MAC地址而不是遠(yuǎn)端目標(biāo)主機(jī)的MAC地址)。然后路由器會(huì)根據(jù)IP包頭部的接收方IP地址匹配路由表的記錄,從而找到下一跳路由器的IP(即路由表中的網(wǎng)關(guān)列)和輸出端口(路由表的接口列,即通過本路由器的哪個(gè)端口發(fā)出這個(gè)包)。需要注意,如果匹配到的記錄的網(wǎng)關(guān)列為具體IP地址,則該地址就是下一個(gè)轉(zhuǎn)發(fā)目標(biāo),如果網(wǎng)關(guān)列為空,則IP頭部的接收方IP地址就是下一個(gè)轉(zhuǎn)發(fā)目標(biāo)。

如果無法在路由表中匹配到對應(yīng)記錄,路由器會(huì)丟棄這個(gè)包,并通過ICMP消息告知發(fā)送方。

在發(fā)出這個(gè)包前,路由器需要重新封裝MAC頭部,因?yàn)橹暗腗AC頭部已經(jīng)被丟棄。此時(shí)MAC頭部填入的發(fā)送方MAC地址不是源發(fā)送端的MAC地址,而是本路由器的某發(fā)送端口的MAC地址(路由器有多個(gè)端口,每一個(gè)端口都有一個(gè)MAC地址)。接收方的MAC地址則根據(jù)下一個(gè)轉(zhuǎn)發(fā)目標(biāo)的IP(可能是下一跳路由器的IP,也可能是目標(biāo)主機(jī)的IP)通過ARP查詢的方式獲取,當(dāng)然路由器中也有ARP緩存,因此會(huì)先在ARP緩存中查詢。

網(wǎng)絡(luò)包封裝完畢后,會(huì)在端口模塊將數(shù)字信息轉(zhuǎn)為電信號(hào)發(fā)送出去,這個(gè)過程和在計(jì)算機(jī)的發(fā)送包過程一樣。如果輸出端口是以太網(wǎng)類型,則網(wǎng)絡(luò)包會(huì)通過交換機(jī)到達(dá)下一個(gè)路由器并經(jīng)過路由器的層層轉(zhuǎn)發(fā),網(wǎng)絡(luò)包到達(dá)最終目的地(當(dāng)然這里省略了包如何從局域網(wǎng)進(jìn)入互聯(lián)網(wǎng)的過程介紹,我們會(huì)在下一章再介紹)。

需要注意的是,如果路由器通過以太網(wǎng)類型的端口發(fā)出包則此時(shí)以太網(wǎng)包的頭部只有MAC頭部,如果是通過ADSL類型的端口(將包發(fā)送到網(wǎng)絡(luò)服務(wù)運(yùn)營商和互聯(lián)網(wǎng))發(fā)出則以太網(wǎng)包會(huì)包含MAC、PPPoE和PPP頭部。

5.默認(rèn)路由

對于局域網(wǎng)中的路由器而言,可能小的局域網(wǎng)中的路由器和計(jì)算機(jī)數(shù)量不多,因此所有轉(zhuǎn)發(fā)目標(biāo)都能夠?qū)懙铰酚杀?。但如果是互?lián)網(wǎng)中的路由器,由于互聯(lián)網(wǎng)中的設(shè)備數(shù)量太多,無法將所有目標(biāo)IP的網(wǎng)絡(luò)號(hào)都記錄到路由表中。因此路由表會(huì)在最后一行配置默認(rèn)路由的記錄,這一行的目標(biāo)地址列和子網(wǎng)掩碼列為0.0.0.0,子網(wǎng)掩碼為0.0.0.0表示需要匹配網(wǎng)絡(luò)包接收方IP的比特?cái)?shù)為0,即無需匹配。而這一條記錄的網(wǎng)關(guān)列即為默認(rèn)網(wǎng)關(guān),一般會(huì)填寫為接入互聯(lián)網(wǎng)的路由器地址。

換句話說,如果包內(nèi)的接收方IP無法匹配到路由表中的其他所有記錄,且路由表中有0.0.0.0這條默認(rèn)網(wǎng)關(guān)記錄,那么接收方IP就會(huì)匹配到這條記錄并轉(zhuǎn)發(fā)到默認(rèn)網(wǎng)關(guān)。

當(dāng)然,如果路由器中沒有設(shè)置默認(rèn)網(wǎng)關(guān),那么當(dāng)匹配路由表中所有記錄失敗時(shí),路由器會(huì)發(fā)送ICMP消息給發(fā)送方。

6.包的有效期

在路由器轉(zhuǎn)發(fā)包之前,其轉(zhuǎn)發(fā)模塊會(huì)更新IP頭部的TTL字段。該字段表示有效期,每經(jīng)過一個(gè)路由器的轉(zhuǎn)發(fā)這個(gè)值就會(huì)減1,當(dāng)這個(gè)值變?yōu)?時(shí)就表示超過了有效期,這個(gè)包就會(huì)被丟棄。

這個(gè)機(jī)制是為了防止包在轉(zhuǎn)發(fā)的過程中陷入死循環(huán),如果路由表中的配置正確是不會(huì)出現(xiàn)這種情況的,但如果信息有問題或者設(shè)備故障等原因切換備用路由器導(dǎo)致暫時(shí)性的路由混亂就會(huì)出現(xiàn)這種情況。

TTL一般會(huì)設(shè)置為64或128。

7.通過分片功能拆分大網(wǎng)絡(luò)包

路由器的端口類型不只以太網(wǎng)一種,也可以支持其他局域網(wǎng)或?qū)>€通信技術(shù)。不同端口類型的線路能傳輸?shù)淖畲蟀L度(MTU)也不同,像在以太網(wǎng)中,以太網(wǎng)包的MTU(包括以太網(wǎng)頭部)為1500。

當(dāng)路由器的輸入端口和輸出端口是不同的端口類型(像局域網(wǎng)內(nèi)的路由器輸入端口和輸出端口可能都是以太網(wǎng)類型的端口和線路,但接入互聯(lián)網(wǎng)的路由器的輸入端口為以太網(wǎng)類型端口,輸出端口是ADSL類型的端口),且輸出端口能傳輸?shù)腗TU小于輸入端口時(shí),一旦傳入的包的大小超過了輸出端口的MTU,就會(huì)導(dǎo)致包無法發(fā)送。如下所示

有時(shí)候即使輸入和輸出端口的MTU一樣,但可能由于包經(jīng)過重新封裝添加了額外的頭部數(shù)據(jù)導(dǎo)致包的長度超過輸出端口的MTU。例如ADSL和FTTH等端口類型在發(fā)出包之前需要在IP頭部前添加PPP頭部和PPPoE頭部再添加MAC頭部。

為了避免包超過輸出端口MTU而無法發(fā)送包的情況出現(xiàn),路由器中的IP模塊提供了分片功能,首先它會(huì)看看這個(gè)要發(fā)送出去的包能否直接發(fā)送出去,將輸出端口的MTU與包的長度(數(shù)據(jù)幀的包長度,不包括幀的報(bào)頭和FCS)比較,如果輸出端口的MTU小于包的長度則會(huì)對這個(gè)包分片,拆分之前會(huì)看一下IP頭部的標(biāo)志字段是否允許分片;如果標(biāo)志字段表示不能分片,則路由器會(huì)丟棄該包并發(fā)送ICMP消息給發(fā)送方。

分片如下圖所示:

圖中(a)的藍(lán)色部分就是被拆分的內(nèi)容

每個(gè)分片都會(huì)添加相同的MAC頭部和IP頭部(如果是在以太網(wǎng)中傳輸則為這兩個(gè)頭部,如果是通過ADSL則還需要PPP和PPPoE頭部)。

需要注意的是,這里對IP包的分片和之前在協(xié)議棧中介紹的TCP模塊對HTTP消息的分片不同。TCP模塊對HTTP消息的分片是在數(shù)據(jù)被裝進(jìn)包里之前進(jìn)行的,而且每個(gè)分片都包含一個(gè)TCP頭部。而路由器則是直接對IP包進(jìn)行分片,每個(gè)分片都有一個(gè)IP頭部,但是所有分片只有一個(gè)TCP頭部。TCP分片也是因?yàn)橐l(fā)送的數(shù)據(jù)可能大于MTU因而分片。

假如有客戶端有1M的http消息要發(fā)送,則這1M的內(nèi)容會(huì)在TCP模塊中被分為幾百多個(gè)分片包(IP包),但經(jīng)過路由器的時(shí)候,每個(gè)IP包還可能再被路由器的IP模塊分片為兩個(gè)小包。

8.路由器與交換機(jī)以及路由器之間的關(guān)系

簡單的來說,路由器負(fù)責(zé)通過將包不斷傳遞給下一跳路由器最終把包送達(dá)通信對象這一整個(gè)過程(由網(wǎng)絡(luò)層如IP模塊負(fù)責(zé))。而包從一個(gè)路由器到達(dá)下一個(gè)路由器則是由交換機(jī)負(fù)責(zé)廣播獲取MAC地址實(shí)現(xiàn)(由鏈路層如以太網(wǎng)線路等負(fù)責(zé))。

網(wǎng)絡(luò)中除了以太網(wǎng)之外,還有無線局域網(wǎng)、ADSL和FTTH等等眾多類型的網(wǎng)絡(luò),如果當(dāng)前路由器和下一跳路由器是通過以太網(wǎng)連接的,則當(dāng)前路由器的IP模塊會(huì)委托以太網(wǎng)將包傳遞給下一個(gè)路由器;如果當(dāng)前路由器和下一跳路由器是通過ADSL連接,則會(huì)委托ADSL線路傳遞。IP本身不負(fù)責(zé)包的傳輸,而是委托鏈路層的各種通信技術(shù)(以太網(wǎng)、ADSL、FTTH、無線局域網(wǎng)等)把包傳給下一個(gè)路由器。

當(dāng)然,現(xiàn)在基本上很多的路由器都內(nèi)置了交換機(jī)功能,因此路由器本身就具有廣播,以及進(jìn)行ARP查詢MAC地址的功能。

四、路由器的附加功能

上面我們介紹了路由器的基本功能,即根據(jù)網(wǎng)絡(luò)包頭部接收方IP來查詢路由表,獲取下一跳地址,并以接力的方式將包傳送到目標(biāo)地址的計(jì)算機(jī)上。

除了這個(gè)基本功能之外,路由器還有一些附加功能,這里介紹比較重要的兩個(gè)功能:地址轉(zhuǎn)換和過濾。

1.地址轉(zhuǎn)換

我們知道一臺(tái)設(shè)備只有一個(gè)唯一的IP地址,如果網(wǎng)絡(luò)中出現(xiàn)有重復(fù)IP地址的設(shè)備就會(huì)無法正常傳輸網(wǎng)絡(luò)包。可是隨著互聯(lián)網(wǎng)設(shè)備數(shù)量增長,IP地址會(huì)被很快分配完。為了解決這個(gè)問題,我們?nèi)菰S相互獨(dú)立的不同內(nèi)網(wǎng)之間的機(jī)器出現(xiàn)IP重復(fù)而同一內(nèi)網(wǎng)的機(jī)器的IP不重復(fù)的情況,只要不同內(nèi)網(wǎng)之間的設(shè)備不直接進(jìn)行通信就行。為此我們提出了私有地址和公有地址的概念。

公有地址中沒分配的一部分拿出來規(guī)定只能在內(nèi)網(wǎng)使用的地址叫做私有地址,而互聯(lián)網(wǎng)中分配的固定地址叫做公有地址。

私有地址的范圍如下:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

不同內(nèi)網(wǎng)的兩臺(tái)機(jī)器即使出現(xiàn)上面范圍內(nèi)的IP地址重復(fù)也沒有關(guān)系。

下面我們以公司內(nèi)網(wǎng)為例。一般而言,公司內(nèi)網(wǎng)中的設(shè)備會(huì)分為兩部分,一部分是對互聯(lián)網(wǎng)開放的服務(wù)器,一部分是公司內(nèi)部設(shè)備。對互聯(lián)網(wǎng)開放的設(shè)備分配公有地址,對公司內(nèi)部設(shè)備分配私有地址,被分配私有地址的設(shè)備只能夠與內(nèi)網(wǎng)的設(shè)備直接通信而不能和互聯(lián)網(wǎng)直接收發(fā)網(wǎng)絡(luò)包。

如果內(nèi)網(wǎng)中的設(shè)備想和互聯(lián)網(wǎng)中的設(shè)備通信就需要一種特別的機(jī)制,這個(gè)機(jī)制就是地址轉(zhuǎn)換。

地址轉(zhuǎn)換的原理就是依靠路由器在轉(zhuǎn)發(fā)網(wǎng)絡(luò)包時(shí)對IP包頭部的IP地址和端口進(jìn)行改寫。

當(dāng)內(nèi)網(wǎng)的設(shè)備要把網(wǎng)絡(luò)包發(fā)送到遠(yuǎn)程的目標(biāo)機(jī)器,在網(wǎng)絡(luò)包經(jīng)過路由器的時(shí)候,路由器會(huì)將IP包頭部的發(fā)送方IP地址(私有地址)換為路由器接收端口的地址(該路由器的端口地址是一個(gè)公有地址),并且將包 TCP頭部的端口號(hào)也改寫為路由器分配的一個(gè)空閑端口號(hào)。

改寫前的私有地址和端口號(hào),改寫后的公有地址和端口號(hào)會(huì)對應(yīng)的記錄到路由器的一張表中。

這個(gè)被替換后的公有地址其實(shí)是地址轉(zhuǎn)換設(shè)備的IP,即路由器的IP。所以實(shí)際上真正的發(fā)送者不是內(nèi)網(wǎng)的計(jì)算機(jī),而是該路由器。

服務(wù)端的回包的接收方IP會(huì)寫之前發(fā)送方的公有地址,即198.18.8.31,這個(gè)公網(wǎng)IP是路由器的IP。當(dāng)包到達(dá)公司網(wǎng)關(guān)路由器時(shí),路由器會(huì)根據(jù)回包的接收方IP和端口查上面的映射表找到對應(yīng)的內(nèi)網(wǎng)設(shè)備并轉(zhuǎn)發(fā)給該設(shè)備(上圖的表格中只有一個(gè)公有IP,但真實(shí)情況其實(shí)還可能有多個(gè)公有地址,因?yàn)槁酚善饔卸鄠€(gè)端口)。

在公有地址只有一個(gè)的情況下,可以用不同的端口號(hào)來區(qū)別內(nèi)網(wǎng)的不同終端。這樣就不至于服務(wù)端的回包無法找到準(zhǔn)確的內(nèi)網(wǎng)設(shè)備。

這個(gè)公有地址和私有地址的映射表的某條記錄會(huì)在某內(nèi)網(wǎng)計(jì)算機(jī)A與外網(wǎng)服務(wù)器B建立連接時(shí)(A發(fā)送連接請求的TCP包到達(dá)路由器時(shí))生成,之后該內(nèi)網(wǎng)計(jì)算機(jī)A與外網(wǎng)設(shè)備B的通信都會(huì)使用這條轉(zhuǎn)換記錄,直到A與B通信完畢,斷開連接,A關(guān)閉用于與B通信的套接字后,(此時(shí)這個(gè)私有地址的端口號(hào)就失效)這條記錄才會(huì)被刪除。

我們發(fā)現(xiàn)路由器做地址轉(zhuǎn)換的時(shí)候還改寫了端口號(hào),這樣做是為了在地址轉(zhuǎn)換時(shí)讓公有地址的一個(gè)端口號(hào)對應(yīng)一個(gè)私有IP地址,提高公有地址的利用率。如果不改寫端口號(hào),就意味著每轉(zhuǎn)換一個(gè)私有地址都需要一個(gè)新的公有地址。假如這個(gè)公司的局域網(wǎng)只被分配了10個(gè)公有地址,但是公司有1000臺(tái)設(shè)備(1000個(gè)私有地址),就意味著只有10臺(tái)內(nèi)部設(shè)備能夠同時(shí)和互聯(lián)網(wǎng)通信。

上面我們介紹了內(nèi)網(wǎng)設(shè)備作為客戶端,互聯(lián)網(wǎng)中的遠(yuǎn)程設(shè)備作為服務(wù)端情況下的路由器地址轉(zhuǎn)換。下面我們再說說公司內(nèi)網(wǎng)設(shè)備作為服務(wù)端,從互聯(lián)網(wǎng)訪問公司內(nèi)網(wǎng)設(shè)備時(shí)路由器的地址轉(zhuǎn)換。

其實(shí)基本原理還是通過復(fù)用一個(gè)(或多個(gè))公有地址的多個(gè)端口號(hào)來對應(yīng)多個(gè)私有地址建立映射進(jìn)行轉(zhuǎn)換,唯一的不同在于內(nèi)網(wǎng)設(shè)備作為客戶端請求的情況下,這個(gè)地址轉(zhuǎn)換表的記錄是在設(shè)備發(fā)出請求并經(jīng)過路由器時(shí)才生成的(即動(dòng)態(tài)生成);而內(nèi)網(wǎng)設(shè)備作為服務(wù)端供互聯(lián)網(wǎng)請求的情況下,路由器中的地址轉(zhuǎn)換表記錄需要提前手動(dòng)添加,而且只要內(nèi)網(wǎng)設(shè)備不停止提供服務(wù),里面的記錄就不會(huì)刪除。如圖:

 

這樣一來,互聯(lián)網(wǎng)中的某個(gè)用戶訪問198.18.8.31:8080其實(shí)訪問的就是公司內(nèi)網(wǎng)中的 10.10.1.1這臺(tái)機(jī)器的80端口所提供的服務(wù)。

2.路由器的包過濾功能

包過濾就是對包轉(zhuǎn)發(fā)時(shí)根據(jù)MAC頭部、IP頭部和TCP頭部按時(shí)限設(shè)定好的規(guī)則決定轉(zhuǎn)發(fā)這個(gè)包還是丟棄這個(gè)包。我們常說的防火墻設(shè)備和軟件就是利用這一機(jī)制。

這一原理雖然簡單,但是想要靈活控制不容易,例如如何防止來自互聯(lián)網(wǎng)的包經(jīng)過路由器進(jìn)入內(nèi)網(wǎng),但是又允許內(nèi)網(wǎng)發(fā)出的包能通過路由器轉(zhuǎn)發(fā)給互聯(lián)網(wǎng)。

很多朋友會(huì)想,如果希望內(nèi)網(wǎng)能訪問互聯(lián)網(wǎng)而不讓互聯(lián)網(wǎng)訪問內(nèi)網(wǎng),只需允許路由器轉(zhuǎn)發(fā)由內(nèi)網(wǎng)發(fā)向互聯(lián)網(wǎng)的包,而禁止轉(zhuǎn)發(fā)由互聯(lián)網(wǎng)發(fā)到內(nèi)網(wǎng)的包就行。

可是網(wǎng)絡(luò)包是雙向傳輸?shù)?,例如TCP應(yīng)答機(jī)制中,內(nèi)網(wǎng)設(shè)備發(fā)送了帶有序號(hào)的網(wǎng)絡(luò)包,服務(wù)端就會(huì)回一個(gè)ACK包。此時(shí)這個(gè)ACK包就被攔截導(dǎo)致內(nèi)網(wǎng)向客戶端發(fā)起的請求無法正常響應(yīng)(應(yīng)該說客戶端的請求包都無法正常傳輸完,客戶端主機(jī)會(huì)一直等服務(wù)端的應(yīng)答包)。

這部分內(nèi)容將會(huì)在探索服務(wù)器時(shí)介紹。

責(zé)任編輯:趙寧寧 來源: 程序員阿沛
相關(guān)推薦

2024-11-04 09:10:00

2024-11-04 08:10:00

2010-07-28 15:08:43

2010-07-28 15:00:29

2010-04-02 09:29:33

無線局域網(wǎng)交換機(jī)

2022-09-22 17:02:42

網(wǎng)絡(luò)硬件

2022-09-22 19:19:52

網(wǎng)絡(luò)硬件路由器交換機(jī)

2022-09-22 19:23:11

網(wǎng)絡(luò)硬件路由器交換機(jī)

2022-09-22 17:00:46

路由器

2022-09-23 10:02:35

網(wǎng)絡(luò)硬件路由器

2011-09-14 14:40:32

無線局域網(wǎng)交換機(jī)無線網(wǎng)絡(luò)無線局域網(wǎng)

2010-03-17 12:56:50

局域網(wǎng)交換機(jī)

2011-08-08 10:47:07

路由器交換機(jī)

2017-06-01 14:33:04

交換機(jī)路由器網(wǎng)絡(luò)設(shè)備

2011-03-24 14:05:14

Nagios監(jiān)控

2010-03-22 18:15:26

WLAN無線局域網(wǎng)交換

2009-12-09 14:21:48

邊界路由器

2009-08-06 20:52:22

2010-08-18 10:33:15

無線路由器

2009-12-08 13:02:12

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)