寫在前面的話,只有你自己知道你是否真的努力了,不要在看似努力的外表下浪費時間,表演給別人看,自己的提高才
是真的。這一章我們開始學習集線器,交換機和路由器,由于這一章實在是太艱澀難懂了,所以所記錄的筆記我會簡略一些
,那么我們開始吧!
這次的筆記我希望能回答如下問題:
1:信號從計算機流出后,會在網(wǎng)線中經(jīng)過集線器等設備前進,那么,信號是如何在網(wǎng)線和集線器傳輸?shù)模?/p>
2:信號在傳說過程中會衰減,還會受到噪聲干擾而失真,如何抑制這些影響呢?
3:交換機的工作方式是什么樣的呢?
交換機并不只是簡單地讓信號 流過,而是先接收信號并將其還原為數(shù)字信息,
然后再重新轉換成信號并發(fā)送出去的過程。這里我們將詳細探索這一過程。
4:路由器是如何進行包轉發(fā)操作的呢?
5:路由器與交換機是什么關系呢?
6:路由器還有什么其他的附加功能呢?(地址轉換和包過濾)
我會在下面的筆記中按個回家上面的問題,希望大家看完以后能收貨滿滿,歡迎拍磚?。?!
信號是如何在網(wǎng)線和集線器傳輸?shù)模?/h3>
首先,大家要明白一個觀點:每一個包都是獨立傳輸?shù)?/h4>
為什么呢?大家應該知道,計算機發(fā)送出來的網(wǎng)絡包會通過集線器,路由器等設備轉發(fā),最
后才會到大目的地,而這這些轉發(fā)設備是根據(jù)包頭部中的控制信息,在轉發(fā)設備內(nèi)部一個寫
有轉發(fā)規(guī)則的表中進行查詢,以此來判斷包的目的地,然后將包朝目的地方向進行轉發(fā)。
郵遞員在發(fā)送信的時候不看里面的內(nèi)容,同樣的,轉發(fā)設備在轉發(fā)包時也不看數(shù)據(jù)的內(nèi)容。
無論包里面裝的是應用程序的數(shù)據(jù)或者是TCP協(xié)議的控制信息。都不會對包的傳輸操作本身產(chǎn)生影響。
因此,所有的包在傳輸?shù)侥康牡氐倪^程中都是獨立的,相互之間沒有任何關聯(lián)。
了解了這個概念以后,我們現(xiàn)在開始探索之旅吧!

為了防止網(wǎng)線中的信號衰減,我們做了很多的努力


上面的兩個圖連起來才是一副整圖。
我們從信號流網(wǎng)卡進入網(wǎng)線開始:
。網(wǎng)卡中的PHY(MAU)A模 塊負責將包轉換成電信號,信號通過RJ-45接口進入雙絞線,這部分的放
大圖如圖3.2的右側部分所示。以太網(wǎng)信號的本質是正負變化的電壓,大
家可以認為網(wǎng)卡的PHY(MAU)模塊就是一個從正負兩個信號端子輸出信 號的電路。
PHY(MAU):以太網(wǎng)有多重派生方式,每種方式中信號收發(fā)模塊的名稱都 不一樣?,F(xiàn)在 100
Mbit/s 以上的以太網(wǎng)中叫作 PHY(物理層裝置),以前低 速方式中則叫作
MAU(介質連接單元)。
網(wǎng)卡的PHY(MAU)模塊直接連接圖3.2 右側中的RJ-45 接口,信號
從這個接口中的1號和2號針腳流入網(wǎng)線。然后,信號會通過網(wǎng)線到達集
線器的接口,這個過程就是單純地傳輸電信號而已。
但是,信號到達集線器的時候并不是跟剛發(fā)送出去的時候一模一樣。
集線器收到的信號有時會出現(xiàn)衰減(圖 3.3)。 信號在網(wǎng)線的傳輸過程中,
能量會逐漸損失。網(wǎng)線越長,信號衰減就越嚴重。
同時,信號損失能量并非只是變?nèi)醵?。在?章的圖2.25、圖2.26、
圖2.27中我們已經(jīng)看到,以太網(wǎng)中的信號波形是方形的,但損失能量會讓
信號的拐角變圓,這是因為電信號的頻率越高,能量的損失率越大 A。信號
的拐角意味著電壓發(fā)生劇烈的變化,而劇烈的變化意味著這個部分的信號
頻率很高。高頻信號更容易損失能量,因此本來劇烈變化的部分就會變成
緩慢的變化,拐角也就變圓了。
即便線路條件很好,沒有噪聲,信號在傳輸過程中依然會發(fā)生失真,
如果再加上噪聲的影響,失真就會更厲害。噪聲根據(jù)強度和類型會產(chǎn)生不
同的影響,無法一概而論,但如果本來就已經(jīng)衰減的信號再進一步失真,
就會出現(xiàn)對0和1的誤判,這就是產(chǎn)生通信錯誤的原因。
為了抑制噪聲,我們用雙絞:
局域網(wǎng)網(wǎng)線使用的是雙絞線,其中“雙絞”的意思就是以兩根信號線
為一組纏繞在一起,這種擰麻花一樣的設計是為了抑制噪聲的影響。
關于為什么??我這里就不寫了,看不懂,大家看圖吧.

除此之外還有其他的一些公益也能夠提升性能:
。例如在 信號線之間加入隔板保持距離,以及在外面包裹可阻擋電磁波的金屬屏 蔽網(wǎng)等。有了這些工藝的幫助,我們現(xiàn)在可以買到性能指標不同的各種
網(wǎng)線。
從網(wǎng)線到接線器,接線器的工作
當信號到達集線器后,會廣播到整個網(wǎng)絡中。以太網(wǎng)的基本架構就是將包發(fā)到所有的設備,然后由設備根據(jù)接收方MAC地址來判斷應該接收那些包,
而集線器就是這一架構的忠實實現(xiàn),它就是負責按照以太網(wǎng)的基本架構將信號廣播出去的。
下面我們看它的工作方式:
集線器的內(nèi)部結構如圖3.2左側所示。
首先,在每個接口的后面裝有和網(wǎng)卡中的PHY(MAU)功能相同的模塊,但是如果他們像網(wǎng)卡短一樣采用直連式連線,是無法正常接收信號的,要正常接收信號,必須將“發(fā)送線圖”和“接收線圖”連接起來。在圖3.2中,集線器中的PHY(MAU)模塊與接口之間采用交叉接線的原因正式于此。

集線器的接口中有一個MDI/MDI-XB 切換開關,現(xiàn)在你應該知道它是干什么用的了吧A?
MDI就是對RJ-45接口和信號收發(fā)模塊進行直連接線,
而MDI-X則是交叉接線。由于集線器的接口一般都是MDI-X模式,要將
兩臺集線器相連時,就需要將其中一臺改成MDI模式(圖3.5(a))。 如果
集線器上沒有MDI切換開關,而且所有的接口又都是MDI-X時,可以用
交叉網(wǎng)線連接兩臺集線器。所謂交叉網(wǎng)線,就是一種將發(fā)送和接收信號線 反過來接的網(wǎng)線
信號到達集線器的PHY(MAU)模塊后,會進入中繼電路。中繼電路
的基本功能就是將輸入的信號廣播到集線器的所有端口上。當然,也有一
些產(chǎn)品具有信號整形、錯誤抑制等功能,但基本上就是將輸入的信號原封
不動地輸出到網(wǎng)線接口。
接下來,信號從所有接口流出,到達連接在集線器上的所有設備。然
后,這些設備在收到信號之后會通過MAC頭部中的接收方MAC地址判
斷是不是發(fā)給自己的,如果是發(fā)給自己的就接受,否則就忽略 A。這樣,網(wǎng)
絡包就能夠到達指定MAC地址的接收方了。
由于集線器只是原封不動地將信號廣播出去,所以即便信號受到噪聲
的干擾發(fā)生了失真,也會原樣發(fā)送到目的地。這時,接收信號的設備,也
就是交換機、路由器、服務器等,會在將信號轉換成數(shù)字信息后通過FCSA
校驗發(fā)現(xiàn)錯誤,并將出錯的包丟棄。當然,丟棄包并不會影響數(shù)據(jù)的傳輸,
因為丟棄的包不會觸發(fā)確認響應。因此協(xié)議棧的TCP模塊會檢測到丟包, 并對該包進行重傳。
看到這里,大家應該對上面的問題有了一個大概的理解了。下面我們看第二個問題:
2.交換機的工作方式是什么樣的呢?
交換機的工作方式是什么樣的呢?也就是包時如何通過交換機的呢?交換機的設計師將網(wǎng)絡包鴛鴦的轉發(fā)到目的地。看下圖:

首先,當信號到達網(wǎng)線接口,并由PHY(MAU)模塊進行接收,這一部分和集線器是相同的。。也就
是說,它的接口和PHY(MAU)模塊也是以 MDI-X模式進行連接的
B,當信號從雙絞線傳入時,就會進入PHY(MAU) 模塊的接收部分。
接下來,PHY(MAU)模塊會將網(wǎng)線中的信號轉換為通用格式,然后
傳遞給MAC模塊。MAC模塊將信號轉換為數(shù)字信息,然后通過包末尾的
FCS校驗錯誤,如果沒有問題則存放到緩沖區(qū)中 。這部分操作和網(wǎng)卡基本
相同,大家可以認為交換機的每個網(wǎng)線接口后面都是一塊網(wǎng)卡。網(wǎng)線接口
和后面的電路部分加在一起稱為一個端口,也就是說交換機的一個端口就
相當于計算機上的一塊網(wǎng)卡 。但交換機的工作方式和網(wǎng)卡有一點不同。網(wǎng)
卡本身具有MAC地址,并通過核對收到的包的接收方MAC地址判斷是
不是發(fā)給自己的,如果不是發(fā)給自己的則丟棄;相對地,交換機的端口不
核對接收方MAC地址,而是直接接收所有的包并存放到緩沖區(qū)中。因此,
和網(wǎng)卡不同,交換機的端口不具有MAC地址 。
將包存入緩沖區(qū)后,接下來需要查詢一下這個包的接收方MAC地址
是否已經(jīng)在MAC地址表中有記錄了。MAC地址表主要包含兩個信息,一
個是設備的MAC地址,另一個是該設備連接在交換機的哪個端口上。以
圖3.7中的地址表為例,MAC地址和端口是一一對應的,通過這張表就能
夠判斷出收到的包應該轉發(fā)到哪個端口。舉個例子,如果收到的包的接收
方MAC地址為00-02-B3-1C-9C-F9,則與圖3.7的表中的第3行匹配,根
據(jù)端口列的信息,可知這個地址位于8號端口上,然后就可以通過交換電
路將包發(fā)送到相應的端口了 B。
3.交換電路又是如何工作的呢?

這個就牛逼了。交換點圖的結構如圖,它可以將輸入端和輸出端連接起來。
其中,信號線排列成網(wǎng)格狀,每一個交叉點都有一個交換開關。交換點圖的輸入端和輸出端分別連接各個接收端口和發(fā)送端口,網(wǎng)絡包通過這個網(wǎng)格狀的電路在端口之間流動。
牛逼吧。舉個例子:
假設現(xiàn)在要將包從2號端口發(fā)送到7號端口,那么信號會從輸入端
的2號線進入交換電路,這時,如果讓左起的6個開關水平導通,然后將
第7個開關切換為垂直導通,信號就會像圖上一樣流到輸出端7號線路, 就像水一樣流過去了。
于是網(wǎng)絡包就被發(fā)送到了7號端口。
當網(wǎng)絡包通過交換電路到達發(fā)送端口時,端口中的MAC模塊和PHY
(MAU)模塊會執(zhí)行發(fā)送操作,將信號發(fā)送到網(wǎng)線中,這部分和網(wǎng)卡發(fā)送信 號的過程是一樣的。
根據(jù)以太網(wǎng)的規(guī)則,首先應該確認沒有其他設備在發(fā)
送信號,也就是確認信號收發(fā)模塊中的接收線路沒有信號進來。如果檢測
到其他設備在發(fā)送信號,則需要等待信號發(fā)送完畢;如果沒有其他信號,
或者其他信號已經(jīng)發(fā)送完畢,這時就可以將包的數(shù)字信息轉換為電信號發(fā) 送出去
如果在發(fā)送過程中檢測到其他設備發(fā)送信號,就意味著出
現(xiàn)了信號碰撞,這時需要發(fā)送阻塞信號以停止網(wǎng)絡中所有的發(fā)送操作,等
待一段時間后再嘗試重新發(fā)送,這一步和網(wǎng)卡也是一樣的
交換機根據(jù)MAC地址表查找MAC地址,然后將信號發(fā)送到相 應的端口。
那么,交換機是怎么維護MAC地址表的呢?
維護操作有兩種:
第一種:是收到包時,,將發(fā)送方MAC地址以及其輸入端口的號碼寫入 MAC地址表中。
由于收到包的那個端口就連接著發(fā)送這個包的設備,所以
只要將這個包的發(fā)送方MAC地址寫入地址表,以后當收到發(fā)往這個地址
的包時,交換機就可以將它轉發(fā)到正確的端口了。交換機每次收到包時都
會執(zhí)行這個操作,因此只要某個設備發(fā)送過網(wǎng)絡包,它的MAC地址就會 被記錄到地址表中。
第二種:刪除地址表中的某條記錄。
這是為了為防止設備移動時產(chǎn)生問題:
那么如果筆記本電腦拿到會議室以后,會議室里的交換機又如何工作的呢?
只要筆記本電腦連接到會議室的交換機,交換機就會根據(jù)筆記本電
腦發(fā)出的包來更新它的地址表。因此,對于目的地的交換機來說,不需要
什么特別的措施就可以正常工作了。
總之,交換機會自行更新或刪除地址表中的記錄,不需要手動維護 A。
當?shù)刂繁淼膬?nèi)容出現(xiàn)異常時,只要重啟一下交換機就可以重置地址表,也
不需要手動進行維護。
交換機的特有工作模式:全雙工模式
全雙工模式是交換機特有的工作模式,它可以同時進行發(fā)送和接收操 作,集線器不具備這樣的特性。
使用集線器時,如果多臺計算機同時發(fā)送信號,信號就會在集線器內(nèi) 部混雜在一起,進而無法使用,這種現(xiàn)象稱為碰撞,是以太網(wǎng)的一個重要 特征。不過,只要不用集線器,就不會發(fā)生碰撞。
而使用雙絞線時,發(fā)送和接收的信號線是各自獨立的 A,因此在雙絞線
中信號不會發(fā)生碰撞。網(wǎng)線連接的另一端,即交換機端口和網(wǎng)卡的PHY
(MAU)模塊以及MAC模塊,其內(nèi)部發(fā)送和接收電路也是各自獨立的,信
號也不會發(fā)生碰撞。因此,只要不用集線器,就可以避免信號碰撞了。
如果不存在碰撞,也就不需要半雙工模式中的碰撞處理機制了。也就
是說,發(fā)送和接收可以同時進行。然而,以太網(wǎng)規(guī)范中規(guī)定了在網(wǎng)絡中有
信號時要等該信號結束后再發(fā)送信號,因此發(fā)送和接收還是無法同時進行。
于是,人們對以太網(wǎng)規(guī)范進行了修訂,增加了一個無論網(wǎng)絡中有沒有信號
都可以發(fā)送信號的工作模式,同時規(guī)定在這一工作模式下停用碰撞檢測 (圖3.10)。
這種工作模式就是全雙工模式。在全雙工模式下,無需等待其
他信號結束就可以發(fā)送信號,因此它比半雙工模式速度要快 B。由于雙方可
以同時發(fā)送數(shù)據(jù),所以可同時傳輸?shù)臄?shù)據(jù)量也更大,性能也就更高。

交換機可同時執(zhí)行多個轉發(fā)操作
交換機只將包轉發(fā)到具有特定MAC地址的設備連接的端口,其他端
口都是空閑的。如圖3.7中的例子所示,當包從最上面的端口發(fā)送到最下
面的端口時,其他端口都處于空閑狀態(tài),這些端口可以傳輸其他的包,因
此交換機可以同時轉發(fā)多個包。
相對地,集線器會將輸入的信號廣播到所有的端口,如果同時輸入多
個信號就會發(fā)生碰撞,無法同時傳輸多路信號,因此從設備整體的轉發(fā)能
力來看,交換機要高于集線器。
在這里還有一個自動協(xié)商,講的是全雙工模式和半雙工模式的切換,以提高最優(yōu)的傳輸速率,這里就不在詳訴了。
下面我們來看第四個問題:
4:路由器是如何進行包轉發(fā)操作的呢?
網(wǎng)絡包經(jīng)過集線器和交換機之后,現(xiàn)在到達了路由器,并在此被轉發(fā)到下一個路由器,這一步轉發(fā)的工作原理和交換機類似,也是通過查表判斷包轉發(fā)的目標。不過在具體的操作過程上,路由器和交換機是有區(qū)別的。為什么呢?
因為路由器是基于IP設計的,而交換機是基于以太網(wǎng)設計的??磮D:

書上說,這個圖畫的已經(jīng)非常的簡略了,可是我還是看不懂怎么辦呢?看下面書上說的:
大家只要看明白路由器包括轉發(fā)模塊和端口模塊兩部分就可以了。其中轉
發(fā)模塊負責判斷包的轉發(fā)目的地,端口模塊負責包的收發(fā)操作。這一分工模
式在第2章介紹計算機內(nèi)部結構的時候也出現(xiàn)過,換句話說,路由器轉發(fā)模
塊和端口模塊的關系,就相當于協(xié)議棧的IP模塊和網(wǎng)卡之間的關系。因此,
大家可以將路由器的轉發(fā)模塊想象成IP模塊,將端口模塊想象成網(wǎng)卡。
通過更換網(wǎng)卡,計算機不僅可以支持以太網(wǎng),也可以支持無線局域網(wǎng),
路由器也是一樣。如果路由器的端口模塊安裝了支持無線局域網(wǎng)的硬件,
就可以支持無線局域網(wǎng)了。
。此外,計算機的網(wǎng)卡除了以太網(wǎng)和無線局域網(wǎng)
之外很少見到支持其他通信技術的品種,而路由器的端口模塊則支持除局
域網(wǎng)之外的多種通信技術,如ADSL、FTTH,以及各種寬帶專線等,只要
端口模塊安裝了支持這些技術的硬件即可
路由器的基本原理:
路由器在轉發(fā)包時,首先會通過端口將發(fā)過來的包接收進來,這一步的工
作過程取決于端口對應的通信技術。對于以太網(wǎng)端口來說,就是按照以太
網(wǎng)規(guī)范進行工作,而無線局域網(wǎng)端口則按照無線局域網(wǎng)的規(guī)范工作,總之
就是委托端口的硬件將包接收進來。接下來,轉發(fā)模塊會根據(jù)接收到的包
的IP頭部中記錄的接收方IP地址,在路由表中進行查詢,以此判斷轉發(fā)
目標。然后,轉發(fā)模塊將包轉移到轉發(fā)目標對應的端口,端口再按照硬件
的規(guī)則將包發(fā)送出去,也就是轉發(fā)模塊委托端口模塊將包發(fā)送出去的意思。
還有一些補充:
剛才我們講到端口模 塊會根據(jù)相應通信技術的規(guī)范來執(zhí)行包收發(fā)的操作,這意味著端口模塊是
以實際的發(fā)送方或者接收方的身份來收發(fā)網(wǎng)絡包的。以以太網(wǎng)端口為例,
路由器的端口具有MAC地址 ,因此它就能夠成為以太網(wǎng)的發(fā)送方和接收 方
。端口還具有IP地址,從這個意義上來說,它和計算機的網(wǎng)卡是一樣
的。當轉發(fā)包時,首先路由器端口會接收發(fā)給自己的以太網(wǎng)包 ,然后查詢
轉發(fā)目標,再由相應的端口作為發(fā)送方將以太網(wǎng)包發(fā)送出去。
這一點和交換機是不同的,交換機只是將進來的包轉發(fā)出去而已,它自己并不會成為
發(fā)送方或者接收方。
路由器的各個端口都具有 MAC 地址和 IP 地址。
自己吐槽一下,這一篇我寫的已經(jīng)想吐了...
在查表判斷轉發(fā)目標這一點上,路由器和交換機的大體思路是類似的,不過具體的工作過程有所不同。
交換機是通過MAC頭部中的接收 方MAC地址來判斷轉發(fā)目標的,而路由器則是根據(jù)IP頭部中的IP地址
來判斷的。由于使用的地址不同,記錄轉發(fā)目標的表的內(nèi)容也會不同。
那么,我們看一下路由表中的信息是什么樣的?

路由器根據(jù)“IP 地址”判斷轉發(fā)目標。
最左側的目標地址列記錄的是接收方的信息。這里可能不是很容易理
解,實際上這里的IP地址只包含表示子網(wǎng)的網(wǎng)絡號部分的比特值,而表示
主機號部分的比特值全部為0B。路由器會將接收到的網(wǎng)絡包的接收方IP
地址與路由表中的目標地址進行比較,并找到相應的記錄。交換機在地址
表中只匹配完全一致的記錄,而路由器則會忽略主機號部分,只匹配網(wǎng)絡 號部分
打個比方,路由器在轉發(fā)包的時候只看接收方地址屬于哪個區(qū), ×× 區(qū)發(fā)往這一邊,×× 區(qū)發(fā)往那一邊。
在匹配地址的過程中,路由器需要知道網(wǎng)絡號的比特數(shù),因此路由表 中還有一列子網(wǎng)掩碼。子網(wǎng)掩碼的含義和第1章的圖1.9(b)中介紹的子網(wǎng) 掩碼基本相同,通過這個值就可以判斷出網(wǎng)絡號的比特數(shù)。
上面的介紹就是路由器的工作方式,如果想進一步學習,請看書。
這里我們看一下路由器的包接收操作的整個工作過程:
首先,路由器會接收網(wǎng)絡 包。路由器的端口有各種不同的類型,這里我們只介紹以太網(wǎng)端口是如何
接收包的。以太網(wǎng)端口的結構和計算機的網(wǎng)卡基本相同,接收包并存放到
緩沖區(qū)中的過程也和網(wǎng)卡幾乎沒有區(qū)別。
首先,信號到達網(wǎng)線接口部分,其中的PHY(MAU)模塊和MAC模
塊將信號轉換為數(shù)字信息,然后通過包末尾的FCS進行錯誤校驗,如果沒
問題則檢查MAC頭部中的接收方MAC地址,看看是不是發(fā)給自己的包,
如果是就放到接收緩沖區(qū)中,否則就丟棄這個包。如果包的接收方MAC
地址不是自己,說明這個包是發(fā)給其他設備的,如果接收這個包就違反了 以太網(wǎng)的規(guī)則。
路由器的端口都具有MAC地址,只接收與自身地址匹配的包, 遇到不匹配的包則直接丟棄
查詢路由表確定輸出端口
完成包接收操作之后,路由器就會丟棄包開頭的MAC頭部。MAC頭
部的作用就是將包送達路由器,其中的接收方MAC地址就是路由器端口
的MAC地址。因此,當包到達路由器之后,MAC頭部的任務就完成了, 于是MAC頭部就會被丟棄。
通過路由器轉發(fā)的網(wǎng)絡包,其接收方 MAC 地址為路由器端口的 MAC 地址
如果在路由表中無法找到匹配的記錄,路由器會丟棄這個包,并通過 ICMPA 消息告知發(fā)送方 B。
找不到匹配路由時選擇默認路由
TODO 路由表中子網(wǎng)掩碼為 0.0.0.0 的記錄表示“默認路由”。
包的有效期
從路由表中查找到轉發(fā)目標之后,網(wǎng)絡包就會被轉交給輸出端口,并 最終發(fā)送出去,但在此之前,路由器還有一些工作要完成。
第一個工作是更新IP 頭部中的TTL(Time to Live,生存時間)字段 (參見第2章的表2.2)。 TTL字段表示包的有效期,包每經(jīng)過一個路由器的 轉發(fā),這個值就會減1,當這個值變成0時,就表示超過了有效期,這個 包就會被丟棄。
發(fā)送方在發(fā)送包時會將TTL設為64或128,也就是說包經(jīng)過這么多 路由器后就會“壽終正寢”。
通過分片功能拆分大網(wǎng)絡包
這里的分片拆包讓我想到了第二章中TCP對數(shù)據(jù)的拆分,不是數(shù)據(jù)已經(jīng)拆分過了嗎,為什么這里還要分片呢?
這是因為路由器的端口并不只有以太網(wǎng)一種,也可以支持其他局域網(wǎng)或專線通信技術。不同的線圖和局域網(wǎng)類型各自能傳輸?shù)淖畲蟀L度也不同,因此輸出端口的最大長度可能會小于輸入端口。即使兩個端口的最大包長度相同,也可能會因為添加一些頭部數(shù)據(jù)而導致包的實際長度發(fā)生變化,ADSL,FTTH等寬帶接入技術中使用的PPPoE協(xié)議就屬于這種情況。
那么它和TCP對數(shù)據(jù)進行拆分的機制有什么不同呢?
TCP拆分數(shù)據(jù)的操作是在數(shù)據(jù)裝在包里之前進行的。拆好好后的一個數(shù)據(jù)正好是裝在一個包里的,而從IP分片的角度看,這樣一個包其實是一個未拆分的整體,也就是說,分片是堆一個完整的包再進行拆分的過程。
下面我們看分片操作的具體過程,看下圖:

首先,我們需要知道輸出端口的MTU。最大的包長度是由端口類型決定的。
在此之前還需要看一下IP頭部中的標志字段,確認是否可以分片。
如果查詢標志字段發(fā)現(xiàn)不能分片,那么就只能丟棄這個包,并通過ICMP消息通知發(fā)送方。
標志是可以分片,則按照輸出端口的MTU對數(shù)據(jù)進行一次拆分。
在分片中,TCP頭部及其后面的部分都是可分片的數(shù)據(jù),盡管TCP頭部不屬于用戶數(shù)據(jù),但從IP來看也是TCP請求傳輸?shù)臄?shù)據(jù)的一部分。數(shù)據(jù)拆分后,每一份數(shù)據(jù)前面會加上IP頭部,其大部分內(nèi)容都和原本的頭部一模一樣,但其中有部分字段需要更新,這些字段用于記錄分片相關的信息。大家看IP頭部結構中的那張圖,上面有兩個字段關于分片的:
分片偏移量:表示當前包的內(nèi)容為整個IP消息的第幾個字節(jié)開始的內(nèi)容
表示(FLAG):該字段有3個比特,其中2個比特有效,分別代表是否允許分片,以及當前當前包是否為分包
路由器的發(fā)送操作和計算機相同
到這里,發(fā)送前的準備工作就已經(jīng)完成了,接下來就會進入包的發(fā)送操作。
而這一步操作取決于輸出端口的類型。。如果是以太網(wǎng)端口,則按照以太
網(wǎng)的規(guī)則將包轉換為電信號發(fā)送出去;如果是ADSL則按照ADSL的規(guī)則 來轉換,以此類推。
這里,我們假設路由器位于公司等局域網(wǎng)的內(nèi)部,即輸出端口也是以太網(wǎng),看看這種情況是如何操作的。
以太網(wǎng)的包發(fā)送操作是根據(jù)以太網(wǎng)規(guī)則來進行的,即便設備種類不同,
規(guī)則也是相同的。也就是說,其基本過程和協(xié)議棧中的 IP 模塊發(fā)送包的過 程是相同的,即在包前面加上 MAC
頭部,設置其中的一些字段,然后將 完成的包轉換成電信號并發(fā)送出去。
首先:查表,我們需要通過查詢路由表的網(wǎng)關列判斷對方的地址。如果網(wǎng)關列是一個IP地址,則這個IP地址就是我們要
轉發(fā)到目標的地址;如果網(wǎng)關為空,則IP頭部中的接受放IP地址就是要轉發(fā)到的目標地址。
然后:拿到IP地址之后,我們先在ARP緩沖中查詢,如果找不到則發(fā)送ARP查詢請求。
路由器判斷下一個轉發(fā)目標的方法如下。
如果路由表的網(wǎng)關列內(nèi)容為IP地址,則該地址就是下一個轉 發(fā)目標。
如果路由表的網(wǎng)關列內(nèi)容為空,則 IP 頭部中的接收方 IP 地址 就是下一個轉發(fā)目標
接著:這里就是發(fā)送方的MAC地址字段,這里填寫輸出端口的MAC地址。還有一個以太類型字段,填寫(0800十六進制)
網(wǎng)絡包完成以后,接下來會將其轉換成電信號并通過端口發(fā)送出去。這一步的工作過程和計算機是相同的。
例如當以太網(wǎng)工作在半雙工模式時,需要先確認線路中有沒有其他信號
才能發(fā)送。如果檢測到碰撞,則需要等待一段時間后重發(fā)。如果以太網(wǎng)在全雙工模式,則不需要確認線路中的信號,則可以直接發(fā)送。
如果輸出端口為以太網(wǎng),則發(fā)送出去的網(wǎng)絡包會通過交換機到達下一個路由器。由于接收方MAC地址就是下一個路由器的地址,
所以交換機會根據(jù)這一地址將包傳輸?shù)较乱粋€路由器。接下來,下一個路由器會將包轉發(fā)給再下一個路由器,經(jīng)過層層轉發(fā)之后,網(wǎng)絡包就到達了最終的目的地。
路由器也會使用 ARP 來查詢下一個轉發(fā)目標的 MAC 地址
路由器與交換機的關系
書上說了很大一堆話來解釋,一句話來概括:
路由器將包的傳輸工作委托給了交換機進行。
他們就像IP協(xié)議和以太網(wǎng)的關系,IP協(xié)議本身也沒有傳輸包的功能,它也是把傳輸工作委托給以太網(wǎng)。路由器是基于IP設計的,而交換機是基于以太網(wǎng)設計的。
從包的轉發(fā)目標來看:
IP并不是委托以太網(wǎng)將包傳輸?shù)阶罱K的目的地,而是傳輸?shù)较乱粋€路由器。
在創(chuàng)建MAC頭部時,也是從IP的路由表中查找出下一個路由器的IP地址,并通過ARP查詢出MAC地
址,然后將MAC地址寫入MAC頭部中,這表示IP對以太網(wǎng)的委托只是將包傳輸?shù)较乱粋€路由器就行
了。當包到達下一個路由器后,下一個路由器又會重新委托以太網(wǎng)將包傳輸?shù)较乱粋€路由器。隨著這一過程反復執(zhí)行,包就會最終到達IP的目的地,也就是通信的對象。
IP(路由器)負責將包送達通信對象這一整體過程,而其中將包 傳輸?shù)较乱粋€路由器的過程則是由以太網(wǎng)(交換機)來負責的。
路由器的附加功能--地址轉換
1.通過地址轉換有效利用 IP 地址
這里我們需要解釋一下地址轉換功能出現(xiàn)的背景。所謂地址,就是用來識別每一臺設備的標志,
因為每臺設備都應該有一個唯一不重復的地址。
私有地址:規(guī)定某些地址是用于內(nèi)網(wǎng)的,這些地址就叫做私有地址。面向公司內(nèi)部的。
共有地址:原來的固定地址,面向互聯(lián)網(wǎng)的。
在制定私有地址規(guī)則時,這些地址屬于公有地址中還沒有分配的范圍。
換句話說,私有地址本身并沒有什么特別的結構,只不過是將公有地址中
沒分配的一部分拿出來規(guī)定只能在內(nèi)網(wǎng)使用它們而已。這個范圍中的地址
和其他公司重復也沒關系,所以對于這些地址不作統(tǒng)一管理,不需要申請,
任何人都可以自由使用。當然,如果在公司內(nèi)部地址有重復就無法傳輸網(wǎng)
絡包了,因此必須避免在內(nèi)網(wǎng)中出現(xiàn)重復的地址。
盡管這樣的確能節(jié)省一部分地址,但僅憑這一點還無法完全解決問題。
公司內(nèi)網(wǎng)并不是完全獨立的,而是需要通過互聯(lián)網(wǎng)和其他很多公司相連接,
所以當內(nèi)網(wǎng)和互聯(lián)網(wǎng)之間需要傳輸包的時候,問題就出現(xiàn)了,因為如果很
多地方都出現(xiàn)相同的地址,包就無法正確傳輸了。

于是,當公司內(nèi)網(wǎng)和互聯(lián)網(wǎng)連接的時候,需要采用圖3.17 這樣的結
構,即將公司內(nèi)網(wǎng)分成兩個部分,一部分是對互聯(lián)網(wǎng)開放的服務器,另一
部分是公司內(nèi)部設備。其中對互聯(lián)網(wǎng)開放的部分分配公有地址,可以和互
聯(lián)網(wǎng)直接進行通信,這一部分和之前介紹的內(nèi)容是一樣的。相對地,內(nèi)網(wǎng)
部分則分配私有地址,內(nèi)網(wǎng)中的設備不能和互聯(lián)網(wǎng)直接收發(fā)網(wǎng)絡包,而是
通過一種特別的機制進行連接,這個機制就叫地址轉換。
2.地址轉換的基本原理
地址轉換的基本原理是在轉發(fā)網(wǎng)絡包時對IP頭部中的IP地址和端口號進行改寫。
具體的過程我們看圖說:

假設現(xiàn)在要訪問Web服務器,看看包是如何傳輸?shù)模?/p>
首先,TCP 連接操作的第一個包被轉發(fā)到互聯(lián)網(wǎng)時,會像圖3.18 這
樣,將發(fā)送方IP地址從私有地址改寫成公有地址。這里使用的公有地址是
地址轉換設備 的互聯(lián)網(wǎng)接入端口的地址。與此同時,端口號也需要進行改
寫,地址轉換設備會隨機選擇一個空閑的端口。然后,改寫前的私有地址
和端口號,以及改寫后的公有地址和端口號,會作為一組相對應的記錄保
存在地址轉換設備內(nèi)部的一張表中。
具備地址轉換功能的設備不僅有路由器,有些防火墻也有地址轉換功能,
它的工作方式和路由器是相同的,因此這里我們雖然用了地址轉換設備這
個詞,但在這里的上下文中指的就是路由器。
改寫發(fā)送方IP地址和端口號之后,包就被發(fā)往互聯(lián)網(wǎng),最終到達服務
器,然后服務器會返回一個包。服務器返回的包的接收包是原始包的發(fā)送
方,因此返回的包的接收方就是改寫后的公有地址和端口號。這個公有地
址其實是地址轉換設備的地址,因此這個返回包就會到達地址轉換設備。
接下來,地址轉換設備會從地址對應表中通過公有地址和端口號找到
相對應的私有地址和端口號,并改寫接收方信息,然后將包發(fā)給公司內(nèi)網(wǎng),
這樣包就能夠到達原始的發(fā)送方了。
在后面的包收發(fā)過程中,地址轉換設備需要根據(jù)對應表查找私有地址
和公有地址的對應關系,再改寫地址和端口號之后進行轉發(fā)。當數(shù)據(jù)收發(fā)
結束,進入斷開階段,訪問互聯(lián)網(wǎng)的操作全部完成后,對應表中的記錄就 會被刪除。
通過這樣的機制,具有私有地址的設備就也可以訪問互聯(lián)網(wǎng)了。從互
聯(lián)網(wǎng)一端來看,實際的通信對象是地址轉換設備(這里指的是路由器)。
上面是以公司內(nèi)網(wǎng)為例來進行介紹的,家庭網(wǎng)絡中的工作過程也是完
全相同的,只是規(guī)模不同而已。
從互聯(lián)網(wǎng)訪問公司內(nèi)網(wǎng)

對于從公司內(nèi)網(wǎng)訪問互聯(lián)網(wǎng)的包,即便其發(fā)送方私有地址和端口號沒
有保存在對應表中也是可以正常轉發(fā)的,因為用來改寫的公有地址就是地
址轉換設備自身的地址,而端口號只要隨便選一個空閑的端口就可以了,
這些都可以由地址轉換設備自行判斷。然而,對于從互聯(lián)網(wǎng)訪問公司內(nèi)
網(wǎng)的包,如果在對應表中沒有記錄就無法正常轉發(fā)。因為如果對應表中
沒有記錄,就意味著地址轉換設備無法判斷公有地址與私有地址之間的對 應關系。
換個角度來看,這意味著對于沒有在訪問互聯(lián)網(wǎng)的內(nèi)網(wǎng)設備,是無法
從互聯(lián)網(wǎng)向其發(fā)送網(wǎng)絡包的。而且即便是正在訪問的設備,也只能向和互
聯(lián)網(wǎng)通信中使用的那個端口發(fā)送網(wǎng)絡包,無法向其他端口發(fā)送包。也就是
說,除非公司主動允許,否則是無法從互聯(lián)網(wǎng)向公司內(nèi)網(wǎng)發(fā)送網(wǎng)絡包的。
這種機制具有防止非法入侵的效果
不過,有時候我們希望能夠從互聯(lián)網(wǎng)訪問公司內(nèi)網(wǎng),這需要進行一些
設置才能實現(xiàn)。之所以無法從互聯(lián)網(wǎng)訪問內(nèi)網(wǎng),是因為對應表里沒有相應
的記錄,那么我們只要事先手動添加這樣的記錄就可以了(圖3.19)。 一般
來說,用于外網(wǎng)訪問的服務器可以放在地址轉換設備的外面并為它分配一
個公有地址,也可以將服務器的私有地址手動添加到地址轉換設備中,這
樣就可以從互聯(lián)網(wǎng)訪問到這臺具有私有地址的服務器了 B。
路由器的附加功能呢--包過濾功能
下面來介紹一下包過濾功能。包過濾也是路由器的一個重要附加功能,
剛才的地址轉換看起來有點復雜,不過包過濾的機制并不復雜。包過濾就
是在對包進行轉發(fā)時,根據(jù)MAC頭部、IP頭部、TCP頭部的內(nèi)容,按照 事先設置好的規(guī)則決定是轉發(fā)這個包,還是丟棄這個包。我們通常說的防 火墻設備或軟件,大多數(shù)都是利用這一機制來防止非法入侵的。
包過濾的原理非常簡單,但要想設置一套恰當?shù)囊?guī)則來區(qū)分非法訪問
和正常訪問,只阻止非法入侵而不影響正常訪問,是非常不容易的。舉個
例子,為了防止從互聯(lián)網(wǎng)非法入侵內(nèi)網(wǎng),我們可以將來自互聯(lián)網(wǎng)的所有包
都屏蔽掉,但是這會造成什么結果呢?正如我們第2章介紹過的TCP的工
作過程一樣,網(wǎng)絡包是雙向傳輸?shù)?,如果簡單地阻止來自互?lián)網(wǎng)的全部包,
那么從內(nèi)網(wǎng)訪問互聯(lián)網(wǎng)的操作也會無法正常進行。
這個話題其實非常有趣,由于包過濾的使用方法和服務器的工作相關, 所以我們在探索服務器時再詳細介紹吧。
當網(wǎng)絡包通過互聯(lián)網(wǎng)接入路由器之后,它終于要進入互聯(lián)網(wǎng)內(nèi)部了, 下一章將對這一部分進行探索。
過幾天再寫一篇總結,已經(jīng)吐了 Over...