一文讀懂網(wǎng)絡(luò)集線器和交換機(jī)
從網(wǎng)絡(luò)實(shí)現(xiàn) 實(shí)現(xiàn)層面 網(wǎng)絡(luò)可以劃分為以太網(wǎng)、令牌環(huán)、FDDI、ATM,它們都規(guī)定了各自的物理介質(zhì)、網(wǎng)絡(luò)適配器(網(wǎng)卡)、數(shù)據(jù)傳輸協(xié)議。從網(wǎng)絡(luò) 覆蓋范圍 可以劃分為局域網(wǎng)、城域網(wǎng)、廣域網(wǎng)。但是 這只是意味著網(wǎng)絡(luò)的覆蓋范圍變大了而不是說網(wǎng)絡(luò)的實(shí)現(xiàn)發(fā)生了變化。以現(xiàn)在的網(wǎng)絡(luò)為例,無論是局域網(wǎng)、廣域網(wǎng)、還是整個互聯(lián)網(wǎng)基本上都是以太網(wǎng) 。
網(wǎng)卡網(wǎng)絡(luò)適配器即網(wǎng)卡,它是一個插在計算機(jī)主板上的(或者集成在主板上)硬件設(shè)備。在以太網(wǎng)中每個網(wǎng)卡都有一個全球唯一的48位標(biāo)識就是我們常說的“MAC地址”(一般用每16進(jìn)制每字節(jié)一組表示,比如:0a:00:27:00:00:06)。 當(dāng)計算機(jī)通訊的時候網(wǎng)卡負(fù)責(zé)實(shí)現(xiàn)帶沖突檢測的載波監(jiān)聽多路訪問技術(shù)(CSMA/CD) ,網(wǎng)卡屬于OSI參考模型中的物理層和數(shù)據(jù)鏈路層。網(wǎng)絡(luò)層以上的部分則由操作系統(tǒng)中的協(xié)議棧實(shí)現(xiàn),所以 TCP/IP協(xié)議棧其實(shí)只包含了網(wǎng)絡(luò)層(IP)和傳輸層(TCP、UDP) 。
集線器
如果僅僅是兩臺計算機(jī)通訊那么通過網(wǎng)絡(luò)傳輸介質(zhì)(比如雙絞線)把二者的網(wǎng)卡連接起來,在操作系統(tǒng)中配置網(wǎng)絡(luò)層信息(配置IP地址)就可以了。如果三臺或者多臺計算機(jī)通訊則必須借助一些額外的設(shè)備,其中集線器就是其中一種。 集線器也叫Hub,它本質(zhì)上是多端口的網(wǎng)卡,為了理解它的工作原理通過GNS3搭建一個網(wǎng)絡(luò)拓?fù)洌?/p>
上面的拓?fù)渲杏腥齻€終端,我們要做的實(shí)驗(yàn)是當(dāng)PC1和PC2通訊的時候,在Hub1-》PC3這條鏈路上是否能收到數(shù)據(jù)包。先配置PC1、PC2、PC3的IP地址
然后開啟Hub1到PC3之間的抓包,通過PC1 ping PC2。
ping一共產(chǎn)生了兩種數(shù)據(jù)包:ARP數(shù)據(jù)包是廣播包(目標(biāo)地址是ff:ff:ff:ff:ff:ff:ff)只有廣播域內(nèi)的終端可以收到;ICMP則是單播(有明確目標(biāo)地址)包只有處于沖突域中才可能收到數(shù)據(jù)包。集線器互聯(lián)起來的機(jī)器都屬于同一個廣播域也屬于同一個沖突域,所以無論是什么樣的數(shù)據(jù)包,網(wǎng)絡(luò)中的每個節(jié)點(diǎn)都會收到(即便數(shù)據(jù)包和自己無關(guān))。
集線器和每個終端都有一個物理鏈路,當(dāng)PC1發(fā)送數(shù)據(jù)到PC2的時候首先到達(dá)集線器,而集線器則把數(shù)據(jù) 從自己的每個端口發(fā)送出去 。所以 即便這次通訊和PC3沒有任何關(guān)系但是Hub1到PC3之間的鏈路還是被占用了 ,如果此時PC3也有數(shù)據(jù)包要發(fā)送那么就會產(chǎn)生沖突(還記得以太網(wǎng)的原理嗎?共享介質(zhì)中會有“碰撞”),而這種沖突對于PC3來說是非常“無辜”的(PC1和PC2通訊和PC3根本沒有任何關(guān)系)。
交換機(jī)有些交換機(jī)的樣子和集線器長的很像,但是二者有本質(zhì)的區(qū)別。 交換機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)的時候有一定的策略,它是依據(jù)mac地址表執(zhí)行的轉(zhuǎn)發(fā) 。
打開SwTIch和PC3之間開啟抓包,在SwTIch和PC2之間開啟抓包,然后從PC1 ping PC2(Wireshark會抓到交換機(jī)上的STP數(shù)據(jù)包,這是交換機(jī)產(chǎn)生的數(shù)據(jù)包,可以忽略)。
SW1《-》PC3 SW1《-》PC2
交換機(jī)非常“智能”,它“知道”PC1和PC2通訊不涉及到PC3所以只有廣播包轉(zhuǎn)發(fā)到PC3,而后續(xù)的單播數(shù)據(jù)包是直接發(fā)送到PC2所處的端口的。 區(qū)別于集線器,分割了沖突域,把一個大沖突域分割成了3個小沖突域(分別是SwTIch和PC1、SwTIch和PC2、Swtich和PC3),每個沖突域通訊的時候都不會影響另一個沖突域的終端(Swtich和PC1之間的數(shù)據(jù)包在PC2、PC3上都接收不到);而廣播域沒有變化三個終端還是屬于同一個廣播域。 通過描述PC1和PC2的通訊過程來揭示交換機(jī)的工作原理:
PC1根據(jù)PC2的IP地址查詢?nèi)ケ镜氐腁RP表中查詢對應(yīng)的MAC地址;
PC1沒有找到MAC地址,則發(fā)送一條廣播包;
廣播包達(dá)到交換機(jī),交換機(jī)把PC1的Mac地址和對應(yīng)端口放入到MAC地址表;
交換機(jī)判斷是廣播包,則發(fā)起一次泛洪(從所有和PC1相同VLAN的端口發(fā)送出去);
廣播數(shù)據(jù)包分別送到PC2和PC3。PC3發(fā)現(xiàn)和自己沒關(guān)系直接丟棄;PC2發(fā)現(xiàn)是發(fā)送給自己的數(shù)據(jù)包則接收數(shù)據(jù)包,進(jìn)一步判斷是ARP數(shù)據(jù)包則返回一個ARP回復(fù)。PC2的ARP回復(fù)是一個單播數(shù)據(jù)包,目標(biāo)地址是PC1的MAC地址,源地址是PC2的MAC地址。
PC2的ARP回復(fù)數(shù)據(jù)包達(dá)到交換機(jī),交換機(jī)把PC2的MAC地址放入到MAC地址表;
交換機(jī)發(fā)現(xiàn)是單播包,目標(biāo)地址是“00:50:79:66:68:01”,查詢得到對應(yīng)端口是E0/1。則從E0/1把數(shù)據(jù)包發(fā)送出去;
PC1收到PC2的ARP回復(fù)數(shù)據(jù)包,把PC2的MAC地址寫入到**本地的ARP表**;
PC1發(fā)送ICMP數(shù)據(jù)包,根據(jù)IP地址查詢MAC地址;找到PC2的MAC地址是“00:50:79:66:68:02”。發(fā)送單播包,目標(biāo)地址是“00:50:79:66:68:02”;
單播數(shù)據(jù)包達(dá)到交換機(jī),交換機(jī)判斷“00:50:79:66:68:02”在端口E0/2,則從E0/2端口發(fā)送出去;
PC2收到ICMP數(shù)據(jù)包,產(chǎn)生一條ICMP的回復(fù)數(shù)據(jù)包發(fā)送出去;
ICMP回復(fù)數(shù)據(jù)包達(dá)到交換機(jī),交換機(jī)判斷目標(biāo)地址是“00:50:79:66:68:01”(PC1)則從E0/1發(fā)送出去;
PC1收到ICMP的回復(fù)數(shù)據(jù)包,顯示一條 “84 bytes from 192.168.10.12 icmp_seq=1 ttl=64 time=0.649 ms”提示;
通過分析我們看出交換機(jī)中最重要的內(nèi)容就是MAC地址表,它是交換機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)包的依據(jù)。有了這張表交換機(jī)就可以知道數(shù)據(jù)包應(yīng)該從哪個端口出去,而不是像Hub一樣從所有端口發(fā)送出去。 通過分析不難看出和Hub比較交換機(jī)中最重要的內(nèi)容就是 MAC地址表,它是交換機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)包的依據(jù) 。有了這張表交換機(jī)就可以知道數(shù)據(jù)包應(yīng)該從哪個端口出去,而不是像Hub一樣從所有端口發(fā)送出去。 通過在交換機(jī)的CLI界面中輸入 show mac address-table 查看本臺交換機(jī)的MAC地址表
交換機(jī)中為了讀取速度會把MAC地址表保存在一種專用的存儲硬件上叫:CAM (Content Addressable Memory) ,這種存儲器區(qū)別于常見的內(nèi)存,它的尋址方式是基于“內(nèi)容”(內(nèi)存是基于地址)。所以制作工藝上要復(fù)雜很多,價格也要貴很多,一般交換機(jī)配置的容量都不是特別大。交換機(jī)的這個“弱點(diǎn)”導(dǎo)致了一種“無解”的攻擊方法——通過向交換機(jī)發(fā)送大量的ARP信息塞滿CAM,讓交換機(jī)無法正常工作。
虛擬局域網(wǎng)交換機(jī)把以太網(wǎng)的沖突域切分成多個沖突域,提高了線路的利用率,但是所有人還是在同一個廣播域,這種網(wǎng)絡(luò)結(jié)構(gòu)是早期的網(wǎng)絡(luò)結(jié)構(gòu),它只有一個廣播域,當(dāng)網(wǎng)絡(luò)中任何一個終端發(fā)送廣播數(shù)據(jù)包其他節(jié)點(diǎn)都可以收到,因此而得名平面型網(wǎng)絡(luò)。這種網(wǎng)絡(luò)結(jié)構(gòu)會產(chǎn)生如下問題: 1. 安全問題,大家都在同一個廣播域任何一個人中了病毒都會影響所有人;更要命的是如果有人非法接入到網(wǎng)絡(luò)中可以輕而易舉的監(jiān)聽到網(wǎng)絡(luò)中所有的數(shù)據(jù)包; 2. 帶寬利用問題,網(wǎng)絡(luò)中任何人都可能消耗大量帶寬,其他人可能會因此而受到影響——甚至無法正常使用網(wǎng)絡(luò); 3. 廣播風(fēng)暴,試想一個上百臺終端接入到網(wǎng)絡(luò)中,各種廣播數(shù)據(jù)包(ARP、DHCP等)會充斥在整個網(wǎng)絡(luò)中; 把一個大的LAN(廣播域)拆分成多個小的LAN不但安全、便于管理而且可以均衡資源利用、提高線路利用率。那么如何拆分呢?劃分方法還是體現(xiàn)在交換機(jī)上,我們?yōu)槊總€交換機(jī)端口設(shè)置一個數(shù)字標(biāo)識,相同數(shù)字標(biāo)識的端口屬于同一個廣播域。比如下圖中交換機(jī)E0/1、E0/2、E0/4、E0/7有相同的標(biāo)識100;E0/3、E0/6相同的標(biāo)識300(下圖是交換機(jī)的示意圖)
這種技術(shù)就叫——虛擬局域網(wǎng)(Virtual Local Area Network,VLAN),一個VLAN就代表一個廣播域(Broadcast Domain,BD),每個交換機(jī)端口都可以設(shè)置一個VLAN ID標(biāo)識廣播域,交換機(jī)在相同VLAN ID內(nèi)執(zhí)行廣播數(shù)據(jù)包叫 泛洪 。
通過在交換機(jī)的CLI界面中輸入 show vlan 查看本臺交換機(jī)的所有VLAN(或者叫廣播域、BD、在OpenStack之類的系統(tǒng)中叫網(wǎng)絡(luò))
第一列VLAN表示VLAN ID,它是一個數(shù)字,name是一個備注名,ports表示當(dāng)前有哪些端口屬于這個VLAN
我們做個試驗(yàn),把PC1和PC2放到VLAN 100,把PC3放到VLAN 200
此時,通過PC1 ping PC2是正常,PC1 ping PC3則失敗。
通過在SW1《-》PC3之間抓包我們發(fā)現(xiàn)ARP數(shù)據(jù)包根本沒有抵達(dá)這條鏈路上,說明SW1已經(jīng)識別出它們屬于不同的VLAN(廣播域)所以不會把數(shù)據(jù)包轉(zhuǎn)發(fā)到這條鏈路上。
為了證明交換機(jī)轉(zhuǎn)發(fā)只和MAC地址有關(guān)系,我們把PC3的IP地址修改成192.168.10.10
發(fā)現(xiàn)PC1《-》PC2依舊可以正常通訊,證明交換機(jī)只查看數(shù)據(jù)包的MAC地址而完全無視IP地址。
那么如何實(shí)現(xiàn)不同的VLAN之間通訊呢?這就需要另一個網(wǎng)絡(luò)設(shè)備——路由器。這是一個非常復(fù)雜的課題,可以說它是構(gòu)建互聯(lián)網(wǎng)的基礎(chǔ),所以我們需要花費(fèi)單獨(dú)的章節(jié)講解。