寫在前面的話千劈,只有你自己知道你是否真的努力了,不要在看似努力的外表下浪費時間辛孵,表演給別人看丛肮,自己的提高才
是真的。這一章我們開始學習集線器觉吭,交換機和路由器腾供,由于這一章實在是太艱澀難懂了,所以所記錄的筆記我會簡略一些
鲜滩,那么我們開始吧!
這次的筆記我希望能回答如下問題:
1:信號從計算機流出后伴鳖,會在網(wǎng)線中經(jīng)過集線器等設(shè)備前進,那么徙硅,信號是如何在網(wǎng)線和集線器傳輸?shù)模?/p>
2:信號在傳說過程中會衰減榜聂,還會受到噪聲干擾而失真,如何抑制這些影響呢嗓蘑?
3:交換機的工作方式是什么樣的呢须肆?
交換機并不只是簡單地讓信號 流過,而是先接收信號并將其還原為數(shù)字信息桩皿,
然后再重新轉(zhuǎn)換成信號并發(fā)送出去的過程豌汇。這里我們將詳細探索這一過程。
4:路由器是如何進行包轉(zhuǎn)發(fā)操作的呢泄隔?
5:路由器與交換機是什么關(guān)系呢拒贱?
6:路由器還有什么其他的附加功能呢?(地址轉(zhuǎn)換和包過濾)
我會在下面的筆記中按個回家上面的問題佛嬉,希望大家看完以后能收貨滿滿逻澳,歡迎拍磚!E弧斜做!
信號是如何在網(wǎng)線和集線器傳輸?shù)模?/h3>
首先,大家要明白一個觀點:每一個包都是獨立傳輸?shù)?/h4>
為什么呢湾揽?大家應該知道瓤逼,計算機發(fā)送出來的網(wǎng)絡包會通過集線器笼吟,路由器等設(shè)備轉(zhuǎn)發(fā),最
后才會到大目的地抛姑,而這這些轉(zhuǎn)發(fā)設(shè)備是根據(jù)包頭部中的控制信息赞厕,在轉(zhuǎn)發(fā)設(shè)備內(nèi)部一個寫
有轉(zhuǎn)發(fā)規(guī)則的表中進行查詢艳狐,以此來判斷包的目的地定硝,然后將包朝目的地方向進行轉(zhuǎn)發(fā)。
郵遞員在發(fā)送信的時候不看里面的內(nèi)容毫目,同樣的蔬啡,轉(zhuǎn)發(fā)設(shè)備在轉(zhuǎn)發(fā)包時也不看數(shù)據(jù)的內(nèi)容。
無論包里面裝的是應用程序的數(shù)據(jù)或者是TCP協(xié)議的控制信息镀虐。都不會對包的傳輸操作本身產(chǎn)生影響箱蟆。
因此,所有的包在傳輸?shù)侥康牡氐倪^程中都是獨立的刮便,相互之間沒有任何關(guān)聯(lián)空猜。
了解了這個概念以后,我們現(xiàn)在開始探索之旅吧恨旱!
為了防止網(wǎng)線中的信號衰減辈毯,我們做了很多的努力
上面的兩個圖連起來才是一副整圖。
我們從信號流網(wǎng)卡進入網(wǎng)線開始:
搜贤。網(wǎng)卡中的PHY(MAU)A模 塊負責將包轉(zhuǎn)換成電信號谆沃,信號通過RJ-45接口進入雙絞線,這部分的放
大圖如圖3.2的右側(cè)部分所示仪芒。以太網(wǎng)信號的本質(zhì)是正負變化的電壓唁影,大
家可以認為網(wǎng)卡的PHY(MAU)模塊就是一個從正負兩個信號端子輸出信 號的電路。
PHY(MAU):以太網(wǎng)有多重派生方式掂名,每種方式中信號收發(fā)模塊的名稱都 不一樣【萆颍現(xiàn)在 100
Mbit/s 以上的以太網(wǎng)中叫作 PHY(物理層裝置),以前低 速方式中則叫作
MAU(介質(zhì)連接單元)饺蔑。
網(wǎng)卡的PHY(MAU)模塊直接連接圖3.2 右側(cè)中的RJ-45 接口锌介,信號
從這個接口中的1號和2號針腳流入網(wǎng)線。然后膀钠,信號會通過網(wǎng)線到達集
線器的接口掏湾,這個過程就是單純地傳輸電信號而已。
但是肿嘲,信號到達集線器的時候并不是跟剛發(fā)送出去的時候一模一樣融击。
集線器收到的信號有時會出現(xiàn)衰減(圖 3.3)。 信號在網(wǎng)線的傳輸過程中雳窟,
能量會逐漸損失尊浪。網(wǎng)線越長匣屡,信號衰減就越嚴重。
同時拇涤,信號損失能量并非只是變?nèi)醵训纷鳌T诘?章的圖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)線使用的是雙絞線杯瞻,其中“雙絞”的意思就是以兩根信號線
為一組纏繞在一起,這種擰麻花一樣的設(shè)計是為了抑制噪聲的影響炫掐。
關(guān)于為什么魁莉??我這里就不寫了募胃,看不懂旗唁,大家看圖吧.
除此之外還有其他的一些公益也能夠提升性能:
。例如在 信號線之間加入隔板保持距離痹束,以及在外面包裹可阻擋電磁波的金屬屏 蔽網(wǎng)等检疫。有了這些工藝的幫助,我們現(xiàn)在可以買到性能指標不同的各種
網(wǎng)線祷嘶。
從網(wǎng)線到接線器屎媳,接線器的工作
當信號到達集線器后夺溢,會廣播到整個網(wǎng)絡中。以太網(wǎng)的基本架構(gòu)就是將包發(fā)到所有的設(shè)備烛谊,然后由設(shè)備根據(jù)接收方MAC地址來判斷應該接收那些包风响,
而集線器就是這一架構(gòu)的忠實實現(xiàn),它就是負責按照以太網(wǎng)的基本架構(gòu)將信號廣播出去的丹禀。
下面我們看它的工作方式:
集線器的內(nèi)部結(jié)構(gòu)如圖3.2左側(cè)所示状勤。
首先,在每個接口的后面裝有和網(wǎng)卡中的PHY(MAU)功能相同的模塊湃崩,但是如果他們像網(wǎng)卡短一樣采用直連式連線荧降,是無法正常接收信號的,要正常接收信號攒读,必須將“發(fā)送線圖”和“接收線圖”連接起來。在圖3.2中辛友,集線器中的PHY(MAU)模塊與接口之間采用交叉接線的原因正式于此薄扁。
集線器的接口中有一個MDI/MDI-XB 切換開關(guān),現(xiàn)在你應該知道它是干什么用的了吧A废累?
MDI就是對RJ-45接口和信號收發(fā)模塊進行直連接線邓梅,
而MDI-X則是交叉接線。由于集線器的接口一般都是MDI-X模式邑滨,要將
兩臺集線器相連時日缨,就需要將其中一臺改成MDI模式(圖3.5(a))岛琼。 如果
集線器上沒有MDI切換開關(guān)眷昆,而且所有的接口又都是MDI-X時,可以用
交叉網(wǎng)線連接兩臺集線器上荡。所謂交叉網(wǎng)線哎壳,就是一種將發(fā)送和接收信號線 反過來接的網(wǎng)線
信號到達集線器的PHY(MAU)模塊后毅待,會進入中繼電路。中繼電路
的基本功能就是將輸入的信號廣播到集線器的所有端口上归榕。當然尸红,也有一
些產(chǎn)品具有信號整形、錯誤抑制等功能刹泄,但基本上就是將輸入的信號原封
不動地輸出到網(wǎng)線接口外里。
接下來,信號從所有接口流出特石,到達連接在集線器上的所有設(shè)備盅蝗。然
后,這些設(shè)備在收到信號之后會通過MAC頭部中的接收方MAC地址判
斷是不是發(fā)給自己的县匠,如果是發(fā)給自己的就接受风科,否則就忽略 A撒轮。這樣,網(wǎng)
絡包就能夠到達指定MAC地址的接收方了贼穆。
由于集線器只是原封不動地將信號廣播出去题山,所以即便信號受到噪聲
的干擾發(fā)生了失真,也會原樣發(fā)送到目的地故痊。這時顶瞳,接收信號的設(shè)備,也
就是交換機愕秫、路由器慨菱、服務器等,會在將信號轉(zhuǎn)換成數(shù)字信息后通過FCSA
校驗發(fā)現(xiàn)錯誤戴甩,并將出錯的包丟棄符喝。當然,丟棄包并不會影響數(shù)據(jù)的傳輸甜孤,
因為丟棄的包不會觸發(fā)確認響應协饲。因此協(xié)議棧的TCP模塊會檢測到丟包, 并對該包進行重傳缴川。
看到這里茉稠,大家應該對上面的問題有了一個大概的理解了。下面我們看第二個問題:
2.交換機的工作方式是什么樣的呢把夸?
交換機的工作方式是什么樣的呢而线?也就是包時如何通過交換機的呢?交換機的設(shè)計師將網(wǎng)絡包鴛鴦的轉(zhuǎn)發(fā)到目的地恋日“蚶海看下圖:
首先,當信號到達網(wǎng)線接口谚鄙,并由PHY(MAU)模塊進行接收各拷,這一部分和集線器是相同的。闷营。也就
是說烤黍,它的接口和PHY(MAU)模塊也是以 MDI-X模式進行連接的
B,當信號從雙絞線傳入時傻盟,就會進入PHY(MAU) 模塊的接收部分速蕊。
接下來,PHY(MAU)模塊會將網(wǎng)線中的信號轉(zhuǎn)換為通用格式娘赴,然后
傳遞給MAC模塊规哲。MAC模塊將信號轉(zhuǎn)換為數(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地址表主要包含兩個信息,一
個是設(shè)備的MAC地址欢际,另一個是該設(shè)備連接在交換機的哪個端口上。以
圖3.7中的地址表為例矾兜,MAC地址和端口是一一對應的损趋,通過這張表就能
夠判斷出收到的包應該轉(zhuǎn)發(fā)到哪個端口。舉個例子椅寺,如果收到的包的接收
方MAC地址為00-02-B3-1C-9C-F9浑槽,則與圖3.7的表中的第3行匹配,根
據(jù)端口列的信息返帕,可知這個地址位于8號端口上桐玻,然后就可以通過交換電
路將包發(fā)送到相應的端口了 B。
3.交換電路又是如何工作的呢荆萤?
這個就牛逼了镊靴。交換點圖的結(jié)構(gòu)如圖,它可以將輸入端和輸出端連接起來链韭。
其中偏竟,信號線排列成網(wǎng)格狀,每一個交叉點都有一個交換開關(guān)敞峭。交換點圖的輸入端和輸出端分別連接各個接收端口和發(fā)送端口踊谋,網(wǎng)絡包通過這個網(wǎng)格狀的電路在端口之間流動。
牛逼吧旋讹。舉個例子:
假設(shè)現(xiàn)在要將包從2號端口發(fā)送到7號端口殖蚕,那么信號會從輸入端
的2號線進入交換電路轿衔,這時,如果讓左起的6個開關(guān)水平導通睦疫,然后將
第7個開關(guān)切換為垂直導通害驹,信號就會像圖上一樣流到輸出端7號線路, 就像水一樣流過去了笼痛。
于是網(wǎng)絡包就被發(fā)送到了7號端口裙秋。
當網(wǎng)絡包通過交換電路到達發(fā)送端口時,端口中的MAC模塊和PHY
(MAU)模塊會執(zhí)行發(fā)送操作缨伊,將信號發(fā)送到網(wǎng)線中,這部分和網(wǎng)卡發(fā)送信 號的過程是一樣的枷恕。
根據(jù)以太網(wǎng)的規(guī)則谭胚,首先應該確認沒有其他設(shè)備在發(fā)
送信號,也就是確認信號收發(fā)模塊中的接收線路沒有信號進來胡控。如果檢測
到其他設(shè)備在發(fā)送信號旁趟,則需要等待信號發(fā)送完畢;如果沒有其他信號锡搜,
或者其他信號已經(jīng)發(fā)送完畢橙困,這時就可以將包的數(shù)字信息轉(zhuǎn)換為電信號發(fā) 送出去
如果在發(fā)送過程中檢測到其他設(shè)備發(fā)送信號,就意味著出
現(xiàn)了信號碰撞耕餐,這時需要發(fā)送阻塞信號以停止網(wǎng)絡中所有的發(fā)送操作凡傅,等
待一段時間后再嘗試重新發(fā)送,這一步和網(wǎng)卡也是一樣的
交換機根據(jù)MAC地址表查找MAC地址肠缔,然后將信號發(fā)送到相 應的端口夏跷。
那么,交換機是怎么維護MAC地址表的呢桩砰?
維護操作有兩種:
第一種:是收到包時拓春,,將發(fā)送方MAC地址以及其輸入端口的號碼寫入 MAC地址表中亚隅。
由于收到包的那個端口就連接著發(fā)送這個包的設(shè)備硼莽,所以
只要將這個包的發(fā)送方MAC地址寫入地址表,以后當收到發(fā)往這個地址
的包時,交換機就可以將它轉(zhuǎn)發(fā)到正確的端口了懂鸵。交換機每次收到包時都
會執(zhí)行這個操作偏螺,因此只要某個設(shè)備發(fā)送過網(wǎng)絡包,它的MAC地址就會 被記錄到地址表中匆光。
第二種:刪除地址表中的某條記錄套像。
這是為了為防止設(shè)備移動時產(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)絡中有
信號時要等該信號結(jié)束后再發(fā)送信號退腥,因此發(fā)送和接收還是無法同時進行。
于是嗅蔬,人們對以太網(wǎng)規(guī)范進行了修訂,增加了一個無論網(wǎng)絡中有沒有信號
都可以發(fā)送信號的工作模式瘪板,同時規(guī)定在這一工作模式下停用碰撞檢測 (圖3.10)。
這種工作模式就是全雙工模式厢拭。在全雙工模式下,無需等待其
他信號結(jié)束就可以發(fā)送信號楞捂,因此它比半雙工模式速度要快 B胶坠。由于雙方可
以同時發(fā)送數(shù)據(jù)乡数,所以可同時傳輸?shù)臄?shù)據(jù)量也更大净赴,性能也就更高哨啃。
交換機可同時執(zhí)行多個轉(zhuǎn)發(fā)操作
交換機只將包轉(zhuǎn)發(fā)到具有特定MAC地址的設(shè)備連接的端口,其他端
口都是空閑的魔吐。如圖3.7中的例子所示,當包從最上面的端口發(fā)送到最下
面的端口時辞色,其他端口都處于空閑狀態(tài)桦卒,這些端口可以傳輸其他的包,因
此交換機可以同時轉(zhuǎn)發(fā)多個包洞慎。
相對地,集線器會將輸入的信號廣播到所有的端口嘿棘,如果同時輸入多
個信號就會發(fā)生碰撞拢蛋,無法同時傳輸多路信號,因此從設(shè)備整體的轉(zhuǎn)發(fā)能
力來看蔫巩,交換機要高于集線器谆棱。
在這里還有一個自動協(xié)商
,講的是全雙工模式
和半雙工模式
的切換,以提高最優(yōu)的傳輸速率圆仔,這里就不在詳訴了歪沃。
下面我們來看第四個問題:
4:路由器是如何進行包轉(zhuǎn)發(fā)操作的呢碳默?
網(wǎng)絡包經(jīng)過集線器和交換機之后凑保,現(xiàn)在到達了路由器惠爽,并在此被轉(zhuǎn)發(fā)到下一個路由器结胀,這一步轉(zhuǎn)發(fā)的工作原理和交換機類似歹垫,也是通過查表判斷包轉(zhuǎn)發(fā)的目標。不過在具體的操作過程上匾效,路由器和交換機是有區(qū)別的。為什么呢其徙?
因為路由器是基于IP設(shè)計的避诽,而交換機是基于以太網(wǎng)設(shè)計的∷阈荆看圖:
書上說,這個圖畫的已經(jīng)非常的簡略了,可是我還是看不懂怎么辦呢啸罢?看下面書上說的:
大家只要看明白路由器包括轉(zhuǎn)發(fā)模塊和端口模塊兩部分就可以了柄延。其中轉(zhuǎn)
發(fā)模塊負責判斷包的轉(zhuǎn)發(fā)目的地搞糕,端口模塊負責包的收發(fā)操作。這一分工模
式在第2章介紹計算機內(nèi)部結(jié)構(gòu)的時候也出現(xiàn)過,換句話說,路由器轉(zhuǎn)發(fā)模
塊和端口模塊的關(guān)系,就相當于協(xié)議棧的IP模塊和網(wǎng)卡之間的關(guān)系。因此是牢,
大家可以將路由器的轉(zhuǎn)發(fā)模塊想象成IP模塊促王,將端口模塊想象成網(wǎng)卡蹋盆。
通過更換網(wǎng)卡,計算機不僅可以支持以太網(wǎng),也可以支持無線局域網(wǎng)纽哥,
路由器也是一樣映皆。如果路由器的端口模塊安裝了支持無線局域網(wǎng)的硬件,
就可以支持無線局域網(wǎng)了。
微猖。此外,計算機的網(wǎng)卡除了以太網(wǎng)和無線局域網(wǎng)
之外很少見到支持其他通信技術(shù)的品種缘屹,而路由器的端口模塊則支持除局
域網(wǎng)之外的多種通信技術(shù)凛剥,如ADSL、FTTH轻姿,以及各種寬帶專線等犁珠,只要
端口模塊安裝了支持這些技術(shù)的硬件即可
路由器的基本原理:
路由器在轉(zhuǎn)發(fā)包時,首先會通過端口將發(fā)過來的包接收進來互亮,這一步的工
作過程取決于端口對應的通信技術(shù)犁享。對于以太網(wǎng)端口來說,就是按照以太
網(wǎng)規(guī)范進行工作豹休,而無線局域網(wǎng)端口則按照無線局域網(wǎng)的規(guī)范工作炊昆,總之
就是委托端口的硬件將包接收進來。接下來威根,轉(zhuǎn)發(fā)模塊會根據(jù)接收到的包
的IP頭部中記錄的接收方IP地址凤巨,在路由表中進行查詢,以此判斷轉(zhuǎn)發(fā)
目標洛搀。然后敢茁,轉(zhuǎn)發(fā)模塊將包轉(zhuǎn)移到轉(zhuǎn)發(fā)目標對應的端口,端口再按照硬件
的規(guī)則將包發(fā)送出去留美,也就是轉(zhuǎn)發(fā)模塊委托端口模塊將包發(fā)送出去的意思彰檬。
還有一些補充:
剛才我們講到端口模 塊會根據(jù)相應通信技術(shù)的規(guī)范來執(zhí)行包收發(fā)的操作,這意味著端口模塊是
以實際的發(fā)送方或者接收方的身份來收發(fā)網(wǎng)絡包的谎砾。以以太網(wǎng)端口為例逢倍,
路由器的端口具有MAC地址 ,因此它就能夠成為以太網(wǎng)的發(fā)送方和接收 方
景图。端口還具有IP地址瓶堕,從這個意義上來說,它和計算機的網(wǎng)卡是一樣
的症歇。當轉(zhuǎn)發(fā)包時郎笆,首先路由器端口會接收發(fā)給自己的以太網(wǎng)包 ,然后查詢
轉(zhuǎn)發(fā)目標忘晤,再由相應的端口作為發(fā)送方將以太網(wǎng)包發(fā)送出去宛蚓。
這一點和交換機是不同的,交換機只是將進來的包轉(zhuǎn)發(fā)出去而已设塔,它自己并不會成為
發(fā)送方或者接收方凄吏。
路由器的各個端口都具有 MAC 地址和 IP 地址。
自己吐槽一下,這一篇我寫的已經(jīng)想吐了...
在查表判斷轉(zhuǎn)發(fā)目標
這一點上痕钢,路由器和交換機的大體思路是類似的图柏,不過具體的工作過程有所不同。
交換機是通過MAC頭部中的接收 方MAC地址來判斷轉(zhuǎn)發(fā)目標的任连,而路由器則是根據(jù)IP頭部中的IP地址
來判斷的蚤吹。由于使用的地址不同,記錄轉(zhuǎn)發(fā)目標的表的內(nèi)容也會不同随抠。
那么裁着,我們看一下路由表中的信息是什么樣的?
路由器根據(jù)“IP 地址”判斷轉(zhuǎn)發(fā)目標拱她。
最左側(cè)的目標地址列記錄的是接收方的信息二驰。這里可能不是很容易理
解,實際上這里的IP地址只包含表示子網(wǎng)的網(wǎng)絡號部分的比特值秉沼,而表示
主機號部分的比特值全部為0B桶雀。路由器會將接收到的網(wǎng)絡包的接收方IP
地址與路由表中的目標地址進行比較,并找到相應的記錄唬复。交換機在地址
表中只匹配完全一致的記錄背犯,而路由器則會忽略主機號部分,只匹配網(wǎng)絡 號部分
打個比方盅抚,路由器在轉(zhuǎn)發(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)端口的結(jié)構(gòu)和計算機的網(wǎng)卡基本相同,接收包并存放到
緩沖區(qū)中的過程也和網(wǎng)卡幾乎沒有區(qū)別悲没。
首先篮迎,信號到達網(wǎng)線接口部分,其中的PHY(MAU)模塊和MAC模
塊將信號轉(zhuǎn)換為數(shù)字信息,然后通過包末尾的FCS進行錯誤校驗甜橱,如果沒
問題則檢查MAC頭部中的接收方MAC地址逊笆,看看是不是發(fā)給自己的包,
如果是就放到接收緩沖區(qū)中岂傲,否則就丟棄這個包难裆。如果包的接收方MAC
地址不是自己,說明這個包是發(fā)給其他設(shè)備的譬胎,如果接收這個包就違反了 以太網(wǎng)的規(guī)則差牛。
路由器的端口都具有MAC地址,只接收與自身地址匹配的包堰乔, 遇到不匹配的包則直接丟棄
查詢路由表確定輸出端口
完成包接收操作之后偏化,路由器就會丟棄包開頭的MAC頭部。MAC頭
部的作用就是將包送達路由器镐侯,其中的接收方MAC地址就是路由器端口
的MAC地址侦讨。因此,當包到達路由器之后苟翻,MAC頭部的任務就完成了韵卤, 于是MAC頭部就會被丟棄。
通過路由器轉(zhuǎn)發(fā)的網(wǎng)絡包崇猫,其接收方 MAC 地址為路由器端口的 MAC 地址
如果在路由表中無法找到匹配的記錄沈条,路由器會丟棄這個包,并通過 ICMPA 消息告知發(fā)送方 B诅炉。
找不到匹配路由時選擇默認路由
TODO 路由表中子網(wǎng)掩碼為 0.0.0.0 的記錄表示“默認路由”蜡歹。
包的有效期
從路由表中查找到轉(zhuǎn)發(fā)目標之后,網(wǎng)絡包就會被轉(zhuǎn)交給輸出端口涕烧,并 最終發(fā)送出去月而,但在此之前,路由器還有一些工作要完成议纯。
第一個工作是更新IP 頭部中的TTL(Time to Live父款,生存時間)字段 (參見第2章的表2.2)。 TTL字段表示包的有效期瞻凤,包每經(jīng)過一個路由器的 轉(zhuǎn)發(fā)憨攒,這個值就會減1,當這個值變成0時阀参,就表示超過了有效期浓恶,這個 包就會被丟棄。
發(fā)送方在發(fā)送包時會將TTL設(shè)為64或128结笨,也就是說包經(jīng)過這么多 路由器后就會“壽終正寢”包晰。
通過分片功能拆分大網(wǎng)絡包
這里的分片拆包讓我想到了第二章中TCP對數(shù)據(jù)的拆分湿镀,不是數(shù)據(jù)已經(jīng)拆分過了嗎,為什么這里還要分片呢伐憾?
這是因為路由器的端口并不只有以太網(wǎng)一種勉痴,也可以支持其他局域網(wǎng)或?qū)>€通信技術(shù)。不同的線圖和局域網(wǎng)類型各自能傳輸?shù)淖畲蟀L度也不同树肃,因此輸出端口的最大長度可能會小于輸入端口蒸矛。即使兩個端口的最大包長度相同,也可能會因為添加一些頭部數(shù)據(jù)而導致包的實際長度發(fā)生變化胸嘴,ADSL
,FTTH
等寬帶接入技術(shù)中使用的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)容都和原本的頭部一模一樣弃理,但其中有部分字段需要更新溃论,這些字段用于記錄分片相關(guān)的信息。大家看IP頭部結(jié)構(gòu)中的那張圖痘昌,上面有兩個字段關(guān)于分片的:
分片偏移量:表示當前包的內(nèi)容為整個IP消息的第幾個字節(jié)開始的內(nèi)容
表示(FLAG):該字段有3個比特钥勋,其中2個比特有效炬转,分別代表是否允許分片,以及當前當前包是否為分包
路由器的發(fā)送操作和計算機相同
到這里算灸,發(fā)送前的準備工作就已經(jīng)完成了扼劈,接下來就會進入包的發(fā)送操作。
而這一步操作取決于輸出端口的類型菲驴。荐吵。如果是以太網(wǎng)端口,則按照以太
網(wǎng)的規(guī)則將包轉(zhuǎn)換為電信號發(fā)送出去赊瞬;如果是ADSL則按照ADSL的規(guī)則 來轉(zhuǎn)換先煎,以此類推。
這里巧涧,我們假設(shè)路由器位于公司等局域網(wǎng)的內(nèi)部薯蝎,即輸出端口也是以太網(wǎng),看看這種情況是如何操作的褒侧。
以太網(wǎng)的包發(fā)送操作是根據(jù)以太網(wǎng)規(guī)則來進行的良风,即便設(shè)備種類不同,
規(guī)則也是相同的闷供。也就是說烟央,其基本過程和協(xié)議棧中的 IP 模塊發(fā)送包的過 程是相同的,即在包前面加上 MAC
頭部歪脏,設(shè)置其中的一些字段疑俭,然后將 完成的包轉(zhuǎn)換成電信號并發(fā)送出去。
首先:查表婿失,我們需要通過查詢路由表的網(wǎng)關(guān)列判斷對方的地址钞艇。如果網(wǎng)關(guān)列是一個IP地址,則這個IP地址就是我們要
轉(zhuǎn)發(fā)到目標的地址豪硅;如果網(wǎng)關(guān)為空哩照,則IP頭部中的接受放IP地址就是要轉(zhuǎn)發(fā)到的目標地址。
然后:拿到IP地址之后懒浮,我們先在ARP緩沖中查詢飘弧,如果找不到則發(fā)送ARP查詢請求。
路由器判斷下一個轉(zhuǎn)發(fā)目標的方法如下砚著。
如果路由表的網(wǎng)關(guān)列內(nèi)容為IP地址次伶,則該地址就是下一個轉(zhuǎn) 發(fā)目標。
如果路由表的網(wǎng)關(guān)列內(nèi)容為空稽穆,則 IP 頭部中的接收方 IP 地址 就是下一個轉(zhuǎn)發(fā)目標
接著:這里就是發(fā)送方的MAC地址字段冠王,這里填寫輸出端口的MAC地址。還有一個以太類型字段舌镶,填寫(0800十六進制)
網(wǎng)絡包完成以后柱彻,接下來會將其轉(zhuǎn)換成電信號并通過端口發(fā)送出去豪娜。這一步的工作過程和計算機是相同的。
例如當以太網(wǎng)工作在半雙工模式時绒疗,需要先確認線路中有沒有其他信號
才能發(fā)送侵歇。如果檢測到碰撞,則需要等待一段時間后重發(fā)吓蘑。如果以太網(wǎng)在全雙工模式惕虑,則不需要確認線路中的信號,則可以直接發(fā)送磨镶。
如果輸出端口為以太網(wǎng)溃蔫,則發(fā)送出去的網(wǎng)絡包會通過交換機到達下一個路由器。由于接收方MAC地址就是下一個路由器的地址琳猫,
所以交換機會根據(jù)這一地址將包傳輸?shù)较乱粋€路由器伟叛。接下來,下一個路由器會將包轉(zhuǎn)發(fā)給再下一個路由器脐嫂,經(jīng)過層層轉(zhuǎn)發(fā)之后统刮,網(wǎng)絡包就到達了最終的目的地。
路由器也會使用 ARP 來查詢下一個轉(zhuǎn)發(fā)目標的 MAC 地址
路由器與交換機的關(guān)系
書上說了很大一堆話來解釋账千,一句話來概括:
路由器將包的傳輸工作委托給了交換機進行侥蒙。
他們就像IP協(xié)議和以太網(wǎng)的關(guān)系,IP協(xié)議本身也沒有傳輸包的功能匀奏,它也是把傳輸工作委托給以太網(wǎng)鞭衩。路由器是基于IP設(shè)計的,而交換機是基于以太網(wǎng)設(shè)計的娃善。
從包的轉(zhuǎn)發(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)(交換機)來負責的闽坡。
路由器的附加功能--地址轉(zhuǎn)換
1.通過地址轉(zhuǎn)換有效利用 IP 地址
這里我們需要解釋一下地址轉(zhuǎn)換功能出現(xiàn)的背景栽惶。所謂地址愁溜,就是用來識別每一臺設(shè)備的標志,
因為每臺設(shè)備都應該有一個唯一不重復的地址外厂。
私有地址:規(guī)定某些地址是用于內(nèi)網(wǎng)的冕象,這些地址就叫做私有地址。面向公司內(nèi)部的汁蝶。
共有地址:原來的固定地址渐扮,面向互聯(lián)網(wǎng)的。
在制定私有地址規(guī)則時掖棉,這些地址屬于公有地址中還沒有分配的范圍。
換句話說,私有地址本身并沒有什么特別的結(jié)構(gòu)撰豺,只不過是將公有地址中
沒分配的一部分拿出來規(guī)定只能在內(nèi)網(wǎng)使用它們而已洒琢。這個范圍中的地址
和其他公司重復也沒關(guān)系,所以對于這些地址不作統(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 這樣的結(jié)
構(gòu)术奖,即將公司內(nèi)網(wǎng)分成兩個部分,一部分是對互聯(lián)網(wǎng)開放的服務器轻绞,另一
部分是公司內(nèi)部設(shè)備采记。其中對互聯(lián)網(wǎng)開放的部分分配公有地址,可以和互
聯(lián)網(wǎng)直接進行通信政勃,這一部分和之前介紹的內(nèi)容是一樣的唧龄。相對地,內(nèi)網(wǎng)
部分則分配私有地址奸远,內(nèi)網(wǎng)中的設(shè)備不能和互聯(lián)網(wǎng)直接收發(fā)網(wǎng)絡包既棺,而是
通過一種特別的機制進行連接讽挟,這個機制就叫地址轉(zhuǎn)換。
2.地址轉(zhuǎn)換的基本原理
地址轉(zhuǎn)換的基本原理是在轉(zhuǎn)發(fā)網(wǎng)絡包時對IP頭部中的IP地址和端口號進行改寫丸冕。
具體的過程我們看圖說:
假設(shè)現(xiàn)在要訪問Web服務器耽梅,看看包是如何傳輸?shù)模?/p>
首先,TCP 連接操作的第一個包被轉(zhuǎn)發(fā)到互聯(lián)網(wǎng)時胖烛,會像圖3.18 這
樣眼姐,將發(fā)送方IP地址從私有地址改寫成公有地址。這里使用的公有地址是
地址轉(zhuǎn)換設(shè)備 的互聯(lián)網(wǎng)接入端口的地址佩番。與此同時妥凳,端口號也需要進行改
寫,地址轉(zhuǎn)換設(shè)備會隨機選擇一個空閑的端口答捕。然后逝钥,改寫前的私有地址
和端口號,以及改寫后的公有地址和端口號拱镐,會作為一組相對應的記錄保
存在地址轉(zhuǎn)換設(shè)備內(nèi)部的一張表中艘款。
具備地址轉(zhuǎn)換功能的設(shè)備不僅有路由器,有些防火墻也有地址轉(zhuǎn)換功能沃琅,
它的工作方式和路由器是相同的哗咆,因此這里我們雖然用了地址轉(zhuǎn)換設(shè)備這
個詞,但在這里的上下文中指的就是路由器益眉。
改寫發(fā)送方IP地址和端口號之后晌柬,包就被發(fā)往互聯(lián)網(wǎng),最終到達服務
器郭脂,然后服務器會返回一個包年碘。服務器返回的包的接收包是原始包的發(fā)送
方,因此返回的包的接收方就是改寫后的公有地址和端口號展鸡。這個公有地
址其實是地址轉(zhuǎn)換設(shè)備的地址屿衅,因此這個返回包就會到達地址轉(zhuǎn)換設(shè)備。
接下來莹弊,地址轉(zhuǎn)換設(shè)備會從地址對應表中通過公有地址和端口號找到
相對應的私有地址和端口號涤久,并改寫接收方信息,然后將包發(fā)給公司內(nèi)網(wǎng)忍弛,
這樣包就能夠到達原始的發(fā)送方了响迂。
在后面的包收發(fā)過程中,地址轉(zhuǎn)換設(shè)備需要根據(jù)對應表查找私有地址
和公有地址的對應關(guān)系细疚,再改寫地址和端口號之后進行轉(zhuǎn)發(fā)蔗彤。當數(shù)據(jù)收發(fā)
結(jié)束,進入斷開階段,訪問互聯(lián)網(wǎng)的操作全部完成后幕与,對應表中的記錄就 會被刪除。
通過這樣的機制镇防,具有私有地址的設(shè)備就也可以訪問互聯(lián)網(wǎng)了啦鸣。從互
聯(lián)網(wǎng)一端來看,實際的通信對象是地址轉(zhuǎn)換設(shè)備(這里指的是路由器)来氧。
上面是以公司內(nèi)網(wǎng)為例來進行介紹的诫给,家庭網(wǎng)絡中的工作過程也是完
全相同的,只是規(guī)模不同而已啦扬。
從互聯(lián)網(wǎng)訪問公司內(nèi)網(wǎng)
對于從公司內(nèi)網(wǎng)訪問互聯(lián)網(wǎng)的包中狂,即便其發(fā)送方私有地址和端口號沒
有保存在對應表中也是可以正常轉(zhuǎn)發(fā)的,因為用來改寫的公有地址就是地
址轉(zhuǎn)換設(shè)備自身的地址扑毡,而端口號只要隨便選一個空閑的端口就可以了胃榕,
這些都可以由地址轉(zhuǎn)換設(shè)備自行判斷。然而瞄摊,對于從互聯(lián)網(wǎng)訪問公司內(nèi)
網(wǎng)的包勋又,如果在對應表中沒有記錄就無法正常轉(zhuǎn)發(fā)。因為如果對應表中
沒有記錄换帜,就意味著地址轉(zhuǎn)換設(shè)備無法判斷公有地址與私有地址之間的對 應關(guān)系楔壤。
換個角度來看,這意味著對于沒有在訪問互聯(lián)網(wǎng)的內(nèi)網(wǎng)設(shè)備惯驼,是無法
從互聯(lián)網(wǎng)向其發(fā)送網(wǎng)絡包的蹲嚣。而且即便是正在訪問的設(shè)備,也只能向和互
聯(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)狂丝,這需要進行一些
設(shè)置才能實現(xiàn)换淆。之所以無法從互聯(lián)網(wǎng)訪問內(nèi)網(wǎng),是因為對應表里沒有相應
的記錄几颜,那么我們只要事先手動添加這樣的記錄就可以了(圖3.19)倍试。 一般
來說,用于外網(wǎng)訪問的服務器可以放在地址轉(zhuǎn)換設(shè)備的外面并為它分配一
個公有地址蛋哭,也可以將服務器的私有地址手動添加到地址轉(zhuǎn)換設(shè)備中县习,這
樣就可以從互聯(lián)網(wǎng)訪問到這臺具有私有地址的服務器了 B。
路由器的附加功能呢--包過濾功能
下面來介紹一下包過濾功能。包過濾也是路由器的一個重要附加功能躁愿,
剛才的地址轉(zhuǎn)換看起來有點復雜叛本,不過包過濾的機制并不復雜。包過濾就
是在對包進行轉(zhuǎn)發(fā)時彤钟,根據(jù)MAC頭部来候、IP頭部、TCP頭部的內(nèi)容逸雹,按照 事先設(shè)置好的規(guī)則決定是轉(zhuǎn)發(fā)這個包营搅,還是丟棄這個包。我們通常說的防 火墻設(shè)備或軟件梆砸,大多數(shù)都是利用這一機制來防止非法入侵的转质。
包過濾的原理非常簡單,但要想設(shè)置一套恰當?shù)囊?guī)則來區(qū)分非法訪問
和正常訪問帖世,只阻止非法入侵而不影響正常訪問休蟹,是非常不容易的。舉個
例子日矫,為了防止從互聯(lián)網(wǎng)非法入侵內(nèi)網(wǎng)鸡挠,我們可以將來自互聯(lián)網(wǎng)的所有包
都屏蔽掉,但是這會造成什么結(jié)果呢搬男?正如我們第2章介紹過的TCP的工
作過程一樣拣展,網(wǎng)絡包是雙向傳輸?shù)模绻唵蔚刈柚箒碜曰ヂ?lián)網(wǎng)的全部包缔逛,
那么從內(nèi)網(wǎng)訪問互聯(lián)網(wǎng)的操作也會無法正常進行备埃。
這個話題其實非常有趣,由于包過濾的使用方法和服務器的工作相關(guān)褐奴, 所以我們在探索服務器時再詳細介紹吧按脚。
當網(wǎng)絡包通過互聯(lián)網(wǎng)接入路由器之后,它終于要進入互聯(lián)網(wǎng)內(nèi)部了敦冬, 下一章將對這一部分進行探索辅搬。
過幾天再寫一篇總結(jié),已經(jīng)吐了 Over...