【計算機網絡—概述】集線器、交換機和路由器

從計算機發送出來的網絡包會經過集線器、路由器等設備被轉發,最終到達目的地。轉發設備會根據包頭部中的控制信息,在轉發設備內部一個寫有轉發規則的表中進行查詢,以此來判斷包的目的地,而後將包朝目的地的方向進行轉發。緩存

信號在網線和集線器中傳輸

每一個包都是獨立傳輸的

郵遞員在送信的時候只看信封,不看裏面的內容,一樣地,轉發設備在進行轉發時也不看數據的內容。所以,不管包裏面裝的是應用程序的數據或者是TCP協議的控制信息,都不會對包的傳輸操做自己產生影響。換句話說,HTTP請求的方法,TCP的確認響應和序號,客戶端和服務器之間的關係,這一切都與包的傳輸無關。所以,全部的包在傳輸到目的地的過程當中都是獨立的,相互之間沒有任何關聯。服務器

記住這個概念以後,咱們來探索一下網絡包在進入互聯網以前經歷的傳輸過程。這裏咱們假設客戶端計算機鏈接的局域網結構是像下圖這樣的。也就是說,網絡包從客戶端計算機發出以後,要通過集線器、交換機和路由器最終進入互聯網。實際上,咱們家裏用的路由器已經集成了集線器和交換機的功能,像圖上這樣使用獨立設備的狀況不多見。不過,把每一個功能獨立出來更容易理解,所以咱們這裏將全部功能獨立出來,逐個來進行探索。網絡

image.png

防止網線中的信號衰減很重要

咱們的探索從信號流出網卡進入網線開始。網卡中的PHY(MAU)模塊負責將包轉換成電信號,信號經過RJ-45接口進入雙絞線,這部分的放大圖以下圖的右側部分所示。以太網信號的本質是正負變化的電壓,你們能夠認爲網卡的PHY(MAU)模塊就是一個從正負兩個信號端輸出信號的電路。架構

image.png

網卡的PHY(MAU)模塊直接鏈接圖右側中的RJ-45接口,信號從這個接口中的1號和2號針腳流入網線。而後,信號會經過網線到達集線器的接口,這個過程就是單純地傳輸電信號而已。併發

可是,信號到達集線器的時候並非跟剛發送出去的時候如出一轍。集線器收到的信號有時會出現衰減。信號在網線的傳輸過程當中,能量會逐漸損失。網線越長,信號衰減就越嚴重。spa

若是再加上噪聲的影響,失真就會更厲害。噪聲根據強度和類型會產生不一樣的影響,沒法一律而論,但若是原本就已經衰減的信號再進一步失真,就會出現對0和1的誤判,這就是產生通訊錯誤的緣由。設計

「雙絞」是爲了抑制噪聲

局域網網線使用的是雙絞線,其中「雙絞」的意思就是以兩根信號線爲一組纏繞在一塊兒,這種設計是爲了抑制噪聲的影響。對象

那麼雙絞線爲何可以抑制噪聲呢?首先,咱們來看看噪聲是如何產生的。產生噪聲的緣由是網線周圍的電磁波,當電磁波接觸到金屬等導體時,在其中就會產生電流。所以,若是網線周圍存在電磁波,就會在網線中產生和本來的信號不一樣的電流。因爲信號自己也是一種帶有電壓變化的電流,其本質和噪聲產生的電流是同樣的,因此信號和噪聲的電流就會混雜在一塊兒,致使信號的波形發生失真,這就是噪聲的影響。接口

影響網線的電磁波分爲兩種。一種是由電機、熒光燈、CRT顯示器等設備泄漏出來的電磁波,這種電磁波來自網線以外的其餘設備,咱們來看看雙絞線如何抑制這種電磁波的影響。路由

信號線是用金屬作成的,當電磁波接觸到信號線時,會沿電磁波傳播的右旋方向產生電流,這種電流會致使波形發生失真。若是咱們將信號線纏繞在一塊兒,信號線就變成了螺旋形,其中兩根信號線中產生的噪聲電流方向就會相反,從而使得噪聲電流相互抵消,噪聲就獲得了抑制。

另外一種電磁波是從網線中相鄰的信號線泄漏出來的。因爲傳輸的信號自己就是一種電流,當電流流過期就會向周圍發出電磁波,這些電磁波對於其餘信號線來講就成了噪聲。這種內部產生的噪聲稱爲串擾(crosstalk)。

要抑制這種噪聲,關鍵在於雙絞線的纏繞方式。在一根網線中,每一對信號線的扭絞間隔(節距)都有必定的差別,這使得在某些地方正信號線距離近,另外一些地方則是負信號線距離近。因爲正負信號線產生的噪聲影響是相反的,因此二者就會相互抵消。從網線總體來看,正負的分佈保持平衡,天然就會削弱噪聲的影響。

集線器將信號發往全部線路

當信號到達集線器後,會被廣播到整個網絡中。以太網的基本架構就是將包發到全部的設備,而後由設備根據接收方MAC地址來判斷應該接收哪些包,而集線器就是這一架構的忠實體現。

集線器的每一個接口的後面裝有和網卡中的PHY(MAU)功能相同的模塊,但若是它們像網卡端同樣採用直連式接線,是沒法正常接收信號的。要正常接收信號,必須將「發送線路」和「接收線路」鏈接起來才行。集線器中的PHY (MAU)模塊與接口之間採用交叉接線的緣由正是在於此。

集線器的接口中有一個MDI/MDI-X切換開關,MDI就是對RJ-45接口和信號收發模塊進行直鏈接線,而MDI-X則是交叉接線。因爲集線器的接口通常都是MDI-X模式,要將兩臺集線器相連時,就須要將其中一臺改爲MDI模式。若是集線器上沒有MDI切換開關,並且全部的接口又都是MDI-X時,能夠用交叉網線鏈接兩臺集線器

信號到達集線器的PHY(MAU)模塊後,會進入中繼電路。中繼電路的基本功能就是將輸入的信號廣播到集線器的全部端口上。接下來,信號從全部接口流出,到達鏈接在集線器上的全部設備。而後,這些設備在收到信號以後會經過MAC頭部中的接收方MAC地址判斷是否是發給本身的,若是是發給本身的就接受,不然就忽略。

因爲集線器只是原封不動地將信號廣播出去,因此即使信號受到噪聲的干擾發生了失真,也會原樣發送到目的地。這時,接收信號的設備,也就是交換機、路由器、服務器等,會在將信號轉換成數字信息後經過FCS校驗發現錯誤,並將出錯的包丟棄。

交換機的包轉發操做

交換機根據地址表進行轉發

下面來看一下包是如何經過交換機的。交換機的設計是將網絡包原樣轉發到目的地,下圖就是它的內部結構。

首先,信號到達網線接口,並由PHY(MAU)模塊進行接收,這一部分和集線器是相同的。接下來,PHY(MAU)模塊會將網線中的信號轉換爲通用格式,而後傳遞給MAC模塊。MAC模塊將信號轉換爲數字信息,而後經過包末尾的FCS校驗錯誤,若是沒有問題則存放到緩衝區中。

這部分操做和網卡基本相同,你們能夠認爲交換機的每一個網線接口後面都是一塊網卡。網線接口和後面的電路部分加在一塊兒稱爲一個端口,也就是說交換機的一個端口就至關於計算機上的一塊網卡。但交換機的工做方式和網卡有一點不一樣。網卡自己具備MAC地址,並經過覈對收到的包的接收方MAC地址判斷是否是發給本身的,若是不是發給本身的則丟棄;相對地,交換機的端口不覈對接收方MAC地址,而是直接接收全部的包並存放到緩衝區中。所以,和網卡不一樣,交換機的端口不具備MAC地址

將包存入緩衝區後,接下來須要查詢一下這個包的接收方MAC地址是否已經在MAC地址表中有記錄了。MAC地址表主要包含兩個信息,一個是設備的MAC地址,另外一個是該設備鏈接在交換機的哪一個端口上。以圖中的地址表爲例,MAC地址和端口是一一對應的,經過這張表就可以判斷出收到的包應該轉發到哪一個端口。舉個例子,若是收到的包的接收方MAC地址爲00-02-B3-1C-9C-F9,則與第3行匹配,根據端口列的信息,可知這個地址位於8號端口上,而後就能夠經過交換電路將包發送到相應的端口了。

MAC地址表的維護

交換機在轉發包的過程當中,還須要對MAC地址表的內容進行維護,維護操做分爲兩種。

第一種是收到包時,將發送方MAC地址以及其輸入端口的號碼寫入MAC地址表中。因爲收到包的那個端口就鏈接着發送這個包的設備,因此只要將這個包的發送方MAC地址寫入地址表,之後當收到發往這個地址的包時,交換機就能夠將它轉發到正確的端口了。交換機每次收到包時都會執行這個操做,所以只要某個設備發送過網絡包,它的MAC地址就會被記錄到地址表中。

另外一種是刪除地址表中某條記錄的操做,這是爲了防止設備移動時產生問題。好比,咱們在開會時會把筆記本電腦從辦公桌拿到會議室,這時設備就發生了移動。從交換機的角度來看,就是原本鏈接在某個端口上的筆記本電腦消失了。這時若是交換機收到了發往這臺已經消失的筆記本電腦的包,那麼它依然會將包轉發到原來的端口,通訊就會出錯。所以地址表中的記錄不能永久有效,而是要在一段時間不使用後就自動刪除。

過期記錄從地址表中刪除的時間通常爲幾分鐘,所以在過期記錄被刪除以前,依然可能有發給該設備的包到達交換機。這時,交換機會將包轉發到老的端口,通訊就會發生錯誤,這種狀況儘管罕見,但的確也有可能發生。遇到這樣的狀況,只要重啓一下交換機,地址表就會被清空並更新正確的信息,而後網絡就又能夠正常工做了。

特殊操做

上面介紹了交換機的基本工做方式,下面來看一些特殊狀況下的操做。好比,交換機查詢地址表以後發現記錄中的目標端口和這個包的源端口是同一個端口。當計算機用集線器和交換機鏈接在一塊兒時就會遇到這樣的狀況,此時接收端計算機就會收到兩個相同的包,會致使沒法正常通訊。所以,當交換機發現一個包要發回到原端口時,就會直接丟棄這個包

還有另一種特殊狀況,就是地址表中找不到指定的MAC地址。這多是由於具備該地址的設備尚未向交換機發送過包,或者這個設備一段時間沒有工做致使地址被從地址表中刪除了。這種狀況下,交換機沒法判斷應該把包轉發到哪一個端口,只能將包轉發到除了源端口以外的全部端口上,不管該設備鏈接在哪一個端口上都能收到這個包。

此外,若是接收方MAC地址是一個廣播地址,那麼交換機會將包發送到除源端口以外的全部端口

自動協商:肯定最優的傳輸速率

隨着全雙工模式的出現,如何在全雙工和半雙工模式之間進行切換的問題也產生了。在全雙工模式剛剛出現的時候,還須要手動進行切換,但這樣實在太麻煩,因而後來出現了自動切換工做模式的功能。這一功能能夠由相互鏈接的雙方探測對方是否支持全雙工模式,並自動切換成相應的工做模式。此外,除了能自動切換工做模式以外,還能探測對方的傳輸速率並進行自動切換。這種自動切換的功能稱爲自動協商。

在以太網中,當沒有數據在傳輸時,網絡中會填充一種被稱爲鏈接脈衝的脈衝信號。在沒有數據信號時就填充鏈接脈衝,這使得網絡中一直都有必定的信號流過,從而可以檢測對方是否在正常工做,或者說網線有沒有正常鏈接。

後來人們設計出了具備特定排列的脈衝信號,經過這種信號能夠將自身的狀態告知對方。自動協商功能就利用了這樣的脈衝信號,即經過這種信號將本身可以支持的工做模式和傳輸速率相互告知對方,並從中選擇一個最優的組合。

交換機可同時執行多個轉發操做

交換機只將包轉發到具備特定MAC地址的設備鏈接的端口,其餘端口都是空閒的。這些端口能夠傳輸其餘的包,所以交換機能夠同時轉發多個包。

相對地,集線器會將輸入的信號廣播到全部的端口,若是同時輸入多個信號就會發生碰撞,沒法同時傳輸多路信號,所以從設備總體的轉發能力來看,交換機要高於集線器。

路由器的包轉發操做

路由器的基本知識

網絡包通過集線器和交換機以後,如今到達了路由器,並在此被轉發到下一個路由器。這一步轉發的工做原理和交換機相似,也是經過查表判斷包轉發的目標。不過在具體的操做過程上,路由器和交換機是有區別的。由於路由器是基於IP設計的,而交換機是基於以太網設計的。

路由器的內部結構如圖所示。這張圖比較簡略,只須要明白路由器包括轉發模塊和端口模塊兩部分就能夠了。其中轉發模塊負責判斷包的轉發目的地,端口模塊負責包的收發操做

image.png

經過更換網卡,計算機不只能夠支持以太網,也能夠支持無線局域網,路由器也是同樣。路由器的端口模塊還支持除局域網以外的多種通訊技術,如ADSL、FTTH,以及各類寬帶專線等,只要端口模塊安裝了支持這些技術的硬件便可。

路由器在轉發包時,首先會經過端口將發過來的包接收進來。接下來,轉發模塊會根據接收到的包的IP頭部中記錄的接收方IP地址,在路由表中進行查詢,以此判斷轉發目標。而後,轉發模塊將包轉移到轉發目標對應的端口,端口再按照硬件的規則將包發送出去。這就是路由器的基本原理。

端口模塊是以實際的發送方或者接收方的身份來收發網絡包的。以以太網端口爲例,路由器的各個端口都具備MAC地址和IP地址。當轉發包時,首先路由器端口會接收發給本身的以太網包,而後查詢轉發目標,再由相應的端口做爲發送方將以太網包發送出去。這一點和交換機是不一樣的,交換機只是將進來的包轉發出去而已,它本身並不會成爲發送方或者接收方。

路由表中的信息

路由器中的表叫做路由表,其中包含的信息如圖所示。

image.png

最左側的目標地址列記錄的是接收方的信息。路由器會將接收到的網絡包的接收方IP地址與路由表中的目標地址進行比較,並找到相應的記錄。交換機在地址表中只匹配徹底一致的記錄,而路由器則會忽略主機號部分,只匹配網絡號部分

在匹配地址的過程當中,路由器須要知道網絡號的比特數,所以路由表中還有一列子網掩碼,經過子網掩碼的值就能夠判斷出網絡號的比特數。

有時地址自己的子網掩碼和路由表中的子網掩碼是不一致的,這是路由聚合的結果。通過路由聚合,多個子網會被合併成一個子網,子網掩碼會發生變化,同時,目標地址列也會改爲聚合後的地址。

咱們看一個例子。如圖所示,咱們如今有3個子網,分別爲10.10.1.0/2四、10.10.2.0/2四、10.10.3.0/24,路由器B須要將包發往這3個子網。在這種狀況下,路由器B的路由表中本來應該有對應這3個子網的3條記錄,但在這個例子中,不管發往任何一個子網,都是經過路由器A來進行轉發,所以咱們能夠在路由表中將這3個子網合併成10.10.0.0/16,這樣也能夠正確地進行轉發,但咱們減小了路由表中的記錄數量,這就是路由聚合。

image.png

路由表的子網掩碼列只表示在匹配網絡包目標地址時須要對比的比特數量。並且,目標地址中的地址和實際子網的網絡號可能並不徹底相同,但即使如此,路由器依然能夠正常工做。

在子網掩碼的右邊還有網關和接口兩列,它們表示網絡包的轉發目標。根據目標地址和子網掩碼匹配到某條記錄後,路由器就會將網絡包交給接口列中指定的網絡接口(即端口),並轉發到網關列中指定的IP地址。

最後一列是躍點計數,它表示距離目標IP地址的距離是遠仍是近。這個數字越小,表示距離目的地越近;數字越大,表示距離目的地越遠。

路由表記錄維護的方式和交換機也有所不一樣。交換機中對MAC地址表的維護是包轉發操做中的一個步驟,而路由器中對路由表的維護是與包轉發操做相互獨立的,也就是說,在轉發包的過程當中不須要對路由表的內容進行維護。

對路由表進行維護的方法有幾種,大致上可分爲如下兩類。

  1. 由人手動維護路由記錄
  2. 根據路由協議機制,經過路由器之間的信息交換由路由器自行維護路由表的記錄

路由協議有不少種,例如RIP、OSPC、BGP等都屬於路由協議。

查詢路由表肯定輸出端口

在工做過程當中,路由器首先會接收網絡包,過程與網卡幾乎沒有區別。首先,信號到達網線接口部分,其中的PHY(MAU)模塊和MAC模塊將信號轉換爲數字信息,而後經過包末尾的FCS進行錯誤校驗,若是沒問題則檢查MAC頭部中的接收方MAC地址,看看是否是發給本身的包,若是是就放到接收緩衝區中,不然就丟棄這個包。完成包接收操做以後,路由器就會丟棄包開頭的MAC頭部。

接下來,路由器會根據MAC頭部後方的IP頭部中的內容進行包的轉發操做。

轉發操做分爲幾個階段,首先是查詢路由表判斷轉發目標。關於具體的工做過程,咱們仍是來看一個實際的例子,如上一節圖中的狀況,假設地址爲10.10.1.101的計算機要向地址爲192.168.1.10的服務器發送一個包。判斷轉發目標的第一步,就是根據包的接收方IP地址查詢路由表中的目標地址欄,以找到相匹配的記錄。圖中第3行,子網掩碼列爲255.255.255.0,表示須要匹配從左起24個比特。網絡包的接收方IP地址和路由表中的目標地址左起24個比特的內容都是192.168.1,所以二者是匹配的,該行記錄就是候選轉發目標之一。

按照這樣的規則,咱們可能會匹配到多條候選記錄。在這個例子中,第三、四、5行均可以匹配。其中,路由器會優先選擇網絡號比特數最長的一條記錄。網絡號比特數越長,說明主機號比特數越短,也就意味着該子網內可分配的主機數量越少,即子網中可能存在的主機數量越少,這一規則的目的是儘可能縮小範圍,因此根據這條記錄判斷的轉發目標就會更加準確。

有時候路由表中會存在網絡號長度相同的多條記錄,例如考慮到路由器或網線的故障而設置的備用路由就屬於這種狀況。這時,須要根據躍點計數的值來進行判斷。躍點計數越小說明該路由越近,所以應選擇躍點計數較小的記錄。

若是在路由表中沒法找到匹配的記錄,路由器會丟棄這個包,並經過ICMP消息告知發送方。

找不到匹配路由時選擇默認路由

那麼是否是全部的轉發目標都須要配置在路由表中才行呢?互聯網中的轉發目標可能超過幾十萬個,若是所有要配置在路由表中不太現實。

其實,路由表中的最後一行的做用就至關於把全部目標都配置好了。這一行的子網掩碼爲0.0.0.0,它的意思是網絡包接收方IP地址和路由表目標地址的匹配中須要匹配的比特數爲0,換句話說,就是根本不須要匹配。只要將子網掩碼設置爲0.0.0.0,那麼不管任何地址都能匹配到這一條記錄。

只要在這一條記錄的網關列中填寫接入互聯網的路由器地址,當匹配不到其餘路由時,網絡包就會被轉發到互聯網接入路由器。所以這條記錄被稱爲默認路由,這一行配置的網關地址被稱爲默認網關。在計算機的TCP/IP設置窗口中也有一個填寫默認網關的框,意思是同樣的。計算機上也有一張和路由器同樣的路由表,其中默認網關的地址就是咱們在設置窗口中填寫的地址。

包的有效期

從路由表中查找到轉發目標以後,網絡包就會被轉交給輸出端口,並最終發送出去,但在此以前,路由器還有一些工做要完成。

第一個工做是更新IP頭部中的TTL(Time to Live,生存時間)字段。TTL字段表示包的有效期,包每通過一個路由器的轉發,這個值就會減1,當這個值變成0時,就表示超過了有效期,這個包就會被丟棄。

這個機制是爲了防止包在一個地方陷入死循環。若是路由表中的信息有問題,或者因爲設備故障等緣由切換到備用路由時致使暫時性的路由混亂,就會出現這樣的狀況。

發送方在發送包時會將TTL設爲64或128,也就是說包通過這麼多路由器後就會「壽終正寢」。如今的互聯網即使訪問一臺位於地球另外一側的服務器,最多也只須要通過幾十個路由器,所以只要包被正確轉發,就能夠在過時以前到達目的地。

經過分片功能拆分大網絡包

路由器的端口並不僅有以太網一種,也能夠支持其餘局域網或專線通訊技術。不一樣的線路和局域網類型各自能傳輸的最大包長度也不一樣,所以輸出端口的最大包長度可能會小於輸入端口。即使兩個端口的最大包長度相同,也可能會由於添加了一些頭部數據而致使包的實際長度發生變化,ADSL、FTTH等寬帶接入技術中使用的PPPoE協議就屬於這種狀況。

不管哪一種狀況,一旦轉發的包長度超過了輸出端口能傳輸的最大長度,就沒法直接發送這個包了。遇到這種狀況,可使用IP協議中定義的分片功能對包進行拆分,縮短每一個包的長度。

分片操做的過程如圖所示。首先,咱們須要知道輸出端口的MTU,看看這個包能不能不分片直接發送。若是輸出端口的MTU足夠大,那麼就能夠不分片直接發送;若是輸出端口的MTU過小,那麼就須要將包按照這個MTU進行分片,但在此以前還須要看一下IP頭部中的標誌字段,確認是否能夠分片。若是查詢標誌字段發現不能分片,那麼就只能丟棄這個包,並經過ICMP消息通知發送方。

image.png

數據被拆分後,每一份數據前面會加上IP頭部,其大部份內容都和本來的IP頭部如出一轍,但其中有部分字段須要更新,這些字段用於記錄分片相關的信息。

路由器的發送操做和計算機相同

到這裏,發送前的準備工做就完成了,接下來就會進入包的發送操做。咱們假設路由器位於公司等局域網的內部,即輸出端口也是以太網,看看這種狀況是如何操做的。

首先,爲了判斷MAC頭部中的MAC地址應該填寫什麼值,咱們須要根據路由表的網關列判斷對方的地址。若是網關是一個IP地址,則這個IP地址就是咱們要轉發到的目標地址;若是網關爲空,則IP頭部中的接收方IP地址就是要轉發到的目標地址。知道對方的IP地址以後,接下來須要經過ARP根據IP地址查詢MAC地址,並將查詢的結果做爲接收方MAC地址。路由器也有ARP緩存,所以首先會在ARP緩存中查詢,若是找不到則發送ARP查詢請求。

接下來是發送方MAC地址字段,這裏填寫輸出端口的MAC地址。還有一個以太類型字段,填寫0080(十六進制)。網絡包完成後,接下來會將其轉換成電信號並經過端口發送出去。這一步的工做過程和計算機也是相同的。

因爲接收方MAC地址就是下一個路由器的地址,因此交換機會根據這一地址將包傳輸到下一個路由器。接下來,下一個路由器會將包轉發給再下一個路由器,通過層層轉發以後,網絡包就到達了最終的目的地。

路由器與交換機的關係

要理解二者之間的關係,關鍵點在於計算機在發送網絡包時,或者是路由器在轉發網絡包時,都須要在前面加上MAC頭部。以前都是說在開頭加上MAC頭部,其實準確的說法應該是將IP包裝進以太網包的數據部分中。也就是說,給包加上MAC頭部併發送,從本質上說是將IP包裝進以太網包的數據部分中,委託以太網去傳輸這些數據。

IP協議自己沒有傳輸包的功能,所以包的實際傳輸要委託以太網來進行。路由器是基於IP設計的,而交換機是基於以太網設計的,所以IP與以太網的關係也就是路由器與交換機的關係。換句話說,路由器將包的傳輸工做委託給交換機來進行。不過,實際的路由器都有內置交換機功能,好比用於鏈接互聯網的家用路由器就屬於這一種,對於這種路由器,上面內容可能就不適用了。

從包的轉發目標也能夠看出路由器和交換機之間的委託關係。IP並非委託以太網將包傳輸到最終目的地,而是傳輸到下一個路由器。當包到達下一個路由器後,下一個路由器又會從新委託以太網將包傳輸到再下一個路由器。隨着這一過程反覆執行,包就會最終到達IP的目的地,也就是通訊的對象。

到這裏咱們已經梳理了路由器與交換機之間的關係。簡單來講,IP (路由器)負責將包發送給通訊對象這一總體過程,而其中將包傳輸到下一個路由器的過程則是由以太網(交換機)來負責的

固然,網絡並不是只有以太網一種,還有無線局域網,以及接入互聯網的通訊線路,它們和IP之間的關係又是什麼樣的呢?其實只要將以太網替換成無線局域網、互聯網線路等通訊規格就能夠了。

路由器的附加功能

剛纔咱們介紹了路由器的基本工做過程,如今的路由器除了這些基本功能以外,還有一些附加功能。下面來介紹兩種最重要的功能——地址轉換和包過濾。

經過地址轉換有效利用IP地址

所謂地址,就是用來識別每一臺設備的標誌,所以每臺設備都應該有一個惟一不重複的地址。原本互聯網中全部的設備都有本身的固定地址,並且最先也確實是這樣作的。20世紀90年代以後,接入互聯網的設備數量快速增加。若是還用原來的方法接入,過不了多久,可分配的地址就會用光,新的設備就沒法接入了。

解決這個問題的關鍵在於固定地址的分配方式。舉個例子,假若有A、B兩家公司,它們的內網是徹底獨立的。這種狀況下,兩家公司的內網之間不會有網絡包流動,即便A公司的某臺服務器和B公司的某臺客戶端具備相同的IP地址也不要緊,由於它們之間不會進行通訊。

解決地址不足的問題,利用的就是這樣的性質,即公司內部設備的地址不必定要和其餘公司不重複。這樣一來,公司內部設備就不須要分配固定地址了,從而大幅節省了IP地址。在內網中可用做私有地址的範圍僅限如下這些。在制定私有地址規則時,這些地址屬於公有地址中尚未分配的範圍。

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255

儘管這樣的確能節省一部分地址,但僅憑這一點還沒法徹底解決問題。公司內網並非徹底獨立的,而是須要經過互聯網和其餘不少公司相鏈接。因此當內網和互聯網之間須要傳輸包的時候,若是不少地方都出現相同的地址,包就沒法正確傳輸了。

因而,當公司內網和互聯網鏈接的時候,須要採用下圖這樣的結構,即將公司內網分紅兩個部分,一部分是對互聯網開放的服務器,另外一部分是公司內部設備。其中對互聯網開放的部分分配公有地址,能夠和互聯網直接進行通訊。相對地,內網部分則分配私有地址,內網中的設備不能和互聯網直接收發網絡包,而是經過一種特別的機制進行鏈接,這個機制就叫地址轉換。

image.png

地址轉換的基本原理

地址轉換的基本原理是在轉發網絡包時對IP頭部中的IP地址和端口號進行改寫。具體的過程咱們來看一個實際的例子,假設如今公司內部要訪問Web服務器。

首先,TCP鏈接操做的第一個包被轉發到互聯網時,會像下圖這樣,將發送方IP地址從私有地址改寫成公有地址。這裏使用的公有地址是地址轉換設備的互聯網接入端口的地址。與此同時,端口號也須要進行改寫,地址轉換設備會隨機選擇一個空閒的端口。而後,改寫前的私有地址和端口號,以及改寫後的公有地址和端口號,會做爲一組相對應的記錄保存在地址轉換設備內部的一張表中。

image.png

改寫發送方IP地址和端口號以後,包就被髮往互聯網,最終到達服務器,而後服務器會返回一個包。接下來,地址轉換設備會從地址對應表中經過公有地址和端口號找到相對應的私有地址和端口號,並改寫接收方信息,而後將包發給公司內網,這樣包就可以到達原始的發送方了。

在後面的包收發過程當中,地址轉換設備須要根據對應表查找私有地址和公有地址的對應關係,再改寫地址和端口號以後進行轉發。當數據收發結束,進入斷開階段,訪問互聯網的操做所有完成後,對應表中的記錄就會被刪除。

經過這樣的機制,具備私有地址的設備就也能夠訪問互聯網了。從互聯網一端來看,實際的通訊對象是地址轉換設備(這裏指的是路由器)。

從互聯網訪問公司內網

然而,對於從互聯網訪問公司內網的包,若是在對應表中沒有記錄就沒法正常轉發。換個角度來看,這意味着對於沒有在訪問互聯網的內網設備,是沒法從互聯網向其發送網絡包的。並且即使是正在訪問的設備,也只能向和互聯網通訊中使用的那個端口發送網絡包,沒法向其餘端口發送包。這種機制具備防止非法入侵的效果。

不過,有時候咱們但願可以從互聯網訪問公司內網,這時只須要事先手動在地址轉換表中添加這樣的記錄就能夠了。通常來講,用於外網訪問的服務器能夠放在地址轉換設備的外面併爲它分配一個公有地址,也能夠將服務器的私有地址手動添加到地址轉換設備中,這樣就能夠從互聯網訪問到這臺具備私有地址的服務器了

路由器的包過濾功能

下面來介紹一下包過濾功能。包過濾也是路由器的一個重要附加功能,機制也並不複雜。包過濾就是在對包進行轉發時,根據MAC頭部、IP頭部、TCP頭部的內容,按照事先設置好的規則決定是轉發這個包,仍是丟棄這個包。咱們一般說的防火牆設備或軟件,大多數都是利用這一機制來防止非法入侵的。

包過濾的原理很是簡單,但要想設置一套恰當的規則來區分非法訪問和正常訪問,只阻止非法入侵而不影響正常訪問,是很是不容易的。