1、路由及路由方式 web
路由這個術語用來講明將數據包從一臺設各經過網絡發往另外一臺處在不一樣網絡上的設備。路由器並不關心這些主機,它們只關心網絡和通向每一個網絡的最佳路徑。路由器能夠從相鄰的路由器或從管理員那裏認識遠程網絡。以後,路由器須要創建一個描述如何尋找遠程網絡的路由表(一張網絡地圖)。若是網絡是直接與路由器相連的,那麼路由器天然就知道如何達到這個網絡。若是網絡沒有直接與它相連,路由器必須經過學習來了解如何到達這個遠程網絡。所採用的方法只有兩種:靜態路由方式,即必須由人來手動輸入全部網絡位置到路由表中;和動態路由的方式。在動態路由中,在一臺路由器上運行的協議將與相鄰路由器上運行的相同協議之間進行通訊。而後,這些路由器會更新各自對整個網絡的認識並將這些信息加入到路由表中去。若是在網絡中有一個改變出現,動態路由協議將自動將這個改變通知給全部的路由器。若是使用的是靜態路由,則管理員將負責經過手工方式在全部的路由器上更新全部的改變。動態路由與靜態路由沒有絕對的優劣之分,在一個大型網絡中,同時使用動態和靜態路由是很典型的方式。算法
2、IP路由選擇過程windows
IP的路由處理是一個至關簡單並無多少變化的過程,它與網絡的大小無關。這個過程很是重要,以終端A經過一個路由器訪問外網的終端B爲例,描述一下IP路由選擇過程:緩存
因特網控制報文協議(lCMP)建立一個迴應請求數據包網絡
——>> ICMP將此包轉交給IP 架構
——>>IP協議判斷目的IP地址是處在本地網絡中,仍是處在一個遠程網絡上學習
——>> 這是一個遠程請求,這個數據包須要被發送到默認網關(這也就是爲何要在終端上配置網關)spa
——>>根據ARP緩存中的網關MAC地址,將數據進行幀(Frame)的封裝(此時數據已經從網絡層到數據鏈路層).net
——>> 幀到物理層以位(Bit)的形式傳輸orm
——>>傳輸完成,校驗數據,並向上解包,直到網絡層
——>> 在路由表中檢查其IP目的地址
——>> 此路由表中必須包含有目的地址網絡,不然將丟棄數據,並返回"destination network unavailable"的ICMP信息,並被髮送回原設備
——>> 數據包被交換到輸出接口的緩存區
——>>檢查ARP緩存是否有目的地址,若是沒有,則向目的主機發出ARP請求,取得地址
——>>根據網關MAC地址,將數據進行幀(Frame)的封裝
——>> 幀到物理層以位(Bit)的形式傳輸
——>> 傳輸完成,校驗數據,並向上解包,直到網絡層
——>> 覈對IP,正確後交付給ICMP,ICMP會丟棄這個數據包,產生一個新負荷來做爲迴應應答
——>>建立應答,添加源方和目的方的地址、協議字段和有效負荷,此時目的方設備爲主機A。而後就是經歷一個相反的過程,將應答返回終端A。
有一點須要提示一下,當數據包在返回源主機的途中被丟棄時,因爲這是一個未知的錯誤,一般你將會看到「request timed out」 的信息。若是出現的錯誤是一個已知的錯誤,如假設在去往目的設各的路途中路由表內沒有可用的路曲,你將會獲得「destination unreachable」 的信息。根據這些信息,你能夠判斷問題是發生在去往目的的路上,仍是在返回的途中。在這裏要理解的關鍵問題是,即便對於一個很是大的網絡,這個處理過程也將是一樣的。在一個較大的互聯網絡中,數據包在找到目的主機以前,須要經過更多的路由器。
另外,硬件地址老是保存在本地的,它們決不會跨過路由器的接口。理解這個過程是相當重要的,因此要將它刻在你的記憶中! 例如:主機A將向主機B發送出一個ARP請求,路由器將如何響應這個請求?因爲MAC地址必須限定於本地網絡內,路由器將用鏈接主機A接口的MAC地址響應這個請求,因而當主機A要發送數據包時,會將全部的數據幀發往路由接口的MAC地址。
1、實例一
在TCP/IP詳解這本書中講解IP路由選擇的時候,過程講解的比較粗略,這裏詳細介紹下其中的總體過程。在這篇文章中,將經過一個案例,來幫助你們深刻了解IP路由的選擇過程。但願這篇文章可以幫助你們掃清IP路由選擇上的一些誤區。
以下圖,如今這麼一個網絡。主機甲與主機乙分別在兩個不一樣的網段上,中間經過路由器進行鏈接。如今假設主機甲要跟主機乙進行通訊,那麼主機甲如何纔可以找到主機乙的位置呢?筆者如今就經過這個例子,跟你們詳細解釋IP路由選擇的整個過程。在這裏,筆者以Cisco的路由器爲例進行介紹。
主機甲<-------------------------->路由器<-------------------------->主機乙
172.16.60.6 172.16.80.8
以上這個十二個步驟就完成了IP路由選擇的所有過程。再複雜的網絡,也只是中間多了幾個節點,多重複了幾個步驟而已。網絡管理員瞭解了這個IP路由選擇的過程,那麼在往後網絡故障的排查中,會更加的駕輕就熟。
須要牢記的一個重要的問題是,當主機A發送數據包到主機B時,所使用的目的方硬件地址是默認網關的以太網接口。這裏由於數據幀是不能夠直接發往遠程網絡的,它只有首先發送到本地網絡上,並且去往遠程網絡的數據包必需要經過默認網關轉發。
實例二
如上圖,主機A上某用戶ping主機B的IP地址,其中的過程涉及如下步驟:
1. 因特網報文控制協議(ICMP)將建立一個數據包(在它的數據域裏只包含字母)
2. ICMP將把這個有效負荷交給因特網協議(IP),而後IP協議會建立一個數據包。這個數據包將包含源IP地址、目的IP地址和值爲01h的協議字段。在本例中,當數據包到達目的地時,全部這些內容會告訴接收方主機,它應該將這個有效負荷交給ICMP處理。
3. 一旦數據包被建立,IP協議將判斷目的IP地址實在本地網絡中,仍是在一個遠程網絡上。
4. 因爲IP協議判定這是一個遠程請求,這個數據包須要被髮送到默認網關,這樣數據包纔會被路由到遠程網絡。在windows中的註冊表將被用於查找被配置的默認關。
5. 主機A(172.16.10.2)的默認網關爲172.16.10.1,可以發送這個數據包到默認網關,必須知道路由器LAB_A的E0接口(其IP地址被配置爲172.16.10.1,即網關地址)的硬件地址,即MAC地址。只有知道了E0的硬件地址數據包才能被下傳到數據鏈路層,併成幀,而後發送給路由器與172.16.10.1網絡的鏈接端口E0。在本地局域網中,主機只能夠經過硬件地址進行通訊。
6. 檢查ARP緩存,查看默認網關的IP地址是否已經被解析爲硬件地址 若是被解析,數據包將被釋放,傳送到數據鏈路層併成幀(目的方硬件地址也同數據包一同下傳至數據鏈路層) 若是這個硬件地址在主機ARP中緩存中還沒有被解析,一個ARP廣播將被髮送到本地網絡,以搜索172.16.10.1的MAC地址,路由器會響應這個請求並提供Ethernet0的硬件地址,接着主機A將緩存這個地址,同時路由器也將緩存主機A的硬件地址到ARP緩存中。
7. 一旦這個數據包和目的方硬件地址被交付給數據鏈路層,局域網驅動器將被用來提供 媒體訪問以經過所用類型的局域網(在本例中即以太網)。一個數據幀將被產生,使用控制信息封裝此數據包,在此幀中包含目的方和源方的硬件地址及以太網類型字段(這個字段裏描述的是交付次數據包到數據鏈路層的網絡層協議,在本例中,這個協議爲IP協議)。這個幀的結尾處是被稱爲幀校驗序列(FCS)的字段,它是裝載循環冗餘校驗(CRC)計算值的區域。
8. 一旦幀的封裝被完成,這個幀將被交付到物理層,以一位一位的方式發往物理媒體(在本例中,是雙絞線對)。
9.在此衝突域中的每一個設備將接受這些位並重組成幀。它們都將運行CRC並覈對保存在FCS字段中的內容,若是這兩個值不匹配,此幀被丟棄。 若是這個CRC值吻合(在此例中指的是路由器的E0接口),而後目的方的硬件地址也將被檢查,檢查它們是否匹配。 若是它們是匹配的,路由器將查看以太網類型字段,瞭解在網絡層上使用的協議。
10.數據包將從幀中抽出,而後這個幀剩下的部分將被丟棄。數據包被傳送給以太網類型字段中中列出的上層協議,在這裏是傳遞給IP協議。(注意這個過程是在路由器上進行的,如今也明白了爲何路由器是屬於網絡層設備的緣由了)
11.IP會接收這個數據包,並檢查其目的IP地址。因爲數據包的目的地址與接收路由器所配置的任一地址不相匹配,路由器將在路由表中查看目的IP的網絡地址。
12.此路由表中必須包含有網絡172.16.20.0的表項,不然此數據包當即被丟棄,而後一個攜帶有「destination network unavailable」信息的ICMP包將會被髮送回源方設備。
13.若是路由器的確在它的路由表中查到了目的方的網絡,數據包將被交換到輸出接口,在本例中是Ethernet1接口。
14.路由器將交換此數據包到Ethernet1的緩衝區內。
15.Ethernet1 的緩衝區須要瞭解目的方主機的硬件地址,它首先檢查ARP緩存。 若是主機B的硬件地址已經被解析,則這個數據包和這個硬件地址將被傳遞到數據鏈路層以便造成幀。若是硬件地址沒有解析,路由器將從E1發送一個ARP請求,期待172.16.20.2的硬件地址。主機B會用它的硬件地址來響應,而後這個包和硬件地址都會被髮送到數據鏈路層以組成幀。
16.數據鏈路層將使用這個目的方和源方的硬件地址,以及以太網的類型字段和處於幀尾部的FCS字段來建立一個幀,這個幀將被傳送到物理層,以一位一位的方式發送到物理媒體上。
17.主機B接收到此幀並當即運行CRC,若是運算結果與FCS字段中的內容相匹配,這個目的方的硬件地址將被檢查。若是主機發現是匹配的,隨後將檢查以太網類型字段中的值,以判斷應該將數據包上傳給網絡層的什麼位置(在本例中爲IP協議)
18.在網絡層中,IP會接收這個數據包並檢查其目的方的IP地址。因爲終歸它們是匹配的,數據包的協議字段將被檢查以瞭解此有效負荷應該交付給誰。
19.此有效負荷會交付給ICMP,它將知道這是一個迴應請求。ICMP會應答這個請求,經過即刻丟棄這個數據包並隨後產生一個新的有效負荷來做爲迴應應答。
20.隨後建立的數據包將包含源方和目的方的IP地址、協議字段,如今目的方設備爲主機A。
21.而後,IP檢查以瞭解這個目的方的IP地址是否屬於本地局域網上的設備,或者是一個存在於遠程網絡的設備。因爲目的方的設備位於遠程網絡,此數據包將須要被髮送到默認網關上。
22.在此WINDOWS設備的註冊表上,能夠找到默認網關的IP地址,以後將查看ARP緩存,以瞭解是否已經完成了從IP地址到硬件地址的解析。 23.一旦默認網關的地址被找到,此數據包和目的方的硬件地址都被送往數據鏈路層以完成幀的封裝。 24.數據鏈路層會封裝數據包的內容,並在幀報頭包含如下內容:目的方和源方的硬件地址、以太網類型字段0X0800(IP)、將CRC結果填入FCS字段
25.幀將被下傳給物理層,以一位一位的方式發送到網絡媒體上。
26.路由器的E1接口會收到這些位並重建爲一個幀。CRC校驗被運行,幀的FCS字段被校驗以確認兩個結果是相符的。
27.一旦CRC校驗經過,硬件目的地址將被檢查。因爲路由器的接口同這個硬件地址是匹配的,數據包將從這個幀中取出,而後以太網類型字段將被檢查以瞭解次數據包應該投遞給網路層上的哪一個協議
28.因爲協議被判斷爲IP,因而IP將獲得這個數據包。首先IP對IP報頭進行CRC校驗,而後檢查目的方的IP地址。因爲IP目的地址與路由器的各個接口的IP地址並不相匹配,路由器將查看路由表,以瞭解是否存在一個通往172.16.10.0的路由。若是不存在一個路由能夠到達目的網絡,該數據包當即被丟棄,這時在主機A上一般會看到request time out的信息。
29.這裏路由器確實知道到達網絡172.16.10.0的方式,這一輸出接口是Ethernet 0,因而數據包將被交換到接口Ethernet 0上。
30.路由器檢查ARP緩存,肯定172.16.10.2的硬件地址是否已經被解析
31.因爲在將數據包傳到主機B的過程當中,172.16.10.2的硬件地址已經被緩存起來了,所以,這一硬件地址和數據包將被傳遞到數據鏈路層。
32.數據鏈路層會使用這個目的方和源方的硬件地址,而後將IP放入以太網類型字段中,並對這個幀進行CRC運算,將結果放入FCS字段中。
33.而後這個幀被傳送到物理層,以一位一位的方式發送到本地網絡。
34.目的方主機A將接收這個幀,並運行CRC算法,驗證目的方硬件地址,並查看以太網類型字段中的內容以判斷誰來處理這個幀。
35.因爲IP是被指定的接收者,隨後這個數據包將被傳遞給網路層的IP協議,他將檢查包的協議字段以肯定進一步的操做。IP發現要將次有效負荷交給ICMP的指示,接着ICMP將肯定次數據包是一個ICMP的應答回覆包 36.ICMP將經過發送一個驚歎號(!)到用戶接口來代表它已經收到一個回覆,這以後ICMP會嘗試繼續發送四個應答請求到目的方主機。
3、總結
上述連個例子比較詳細的介紹了路由選擇的過程,雖然說經過ping命令發送數據包的方式來查看,可是數據的傳送過程當中的總體流程是正確的,總而言之,對於一個IP數據包來講,一個數據的流向大致以下:
1.主機A的傳輸層將數據交給網絡層,網絡層加上雙方IP地址,TTL等IP報頭信息,成爲IP數據包,網絡層將IP數據報交給數據鏈路層。
2.數據鏈路層根據IP地址,經過ARP獲得MAC,封裝爲物理幀,經過網卡發出。
3.主機B接收物理幀,根據MAC地址判斷:若是目的MAC地址不是本網卡MAC地址,則丟棄;若是是發給本身的,則交給網絡層處理。
4.網絡層經過IP地址判斷:若是是發給本身的,則交給上層協議處理;若是不是發給本身的,則在路由表中查找此IP合理的下一跳地址(即經過哪一個網卡發送到下一個網段),並將數據經過內存,從接收數據網卡的IP程序拷貝到須要發送數據網卡的IP程序。在發送網卡中,IP程序將數據包交給鏈路層,鏈路層發送ARP請求,獲得下一跳的目的MAC地址,封裝爲幀,發送。
如此反覆,直到IP數據包到達最終正確的接收主機。
本文主要給你們講述了IP路由選擇的過程 ,這是一個基本的知識,本文從一個具體的案例詳細說明了具體的注意事項,但願此文能對你之後選擇路由有所幫助。
以下圖,如今這麼一個網絡。主機甲與主機乙分別在兩個不一樣的網段上,中間經過路由器進行鏈接。如今假設主機甲要跟主機乙進行通訊,那麼主機甲如何纔可以找到主機乙的位置呢?筆者如今就經過這個例子,跟你們詳細解釋IP路由選擇的整個過程。在這裏,筆者以Cisco的路由器爲例進行介紹。
假設如今主機甲的用戶利用Ping命令,來確認主機乙的連通性問題。這個網絡架構雖然比較簡單,可是其路由選擇過程的步驟則是一步不缺的。主要經過以下步驟:
第一步:當用戶在主機甲上輸入PING 172.168.80.8以後,主機甲中有一個因特網控制報文協議,英文簡稱爲ICMP。這個協議將建立一個迴應請求數據包,在它的數據域中只包含有字母。
第二步:英特網控制報文協議會將這個有效負荷(即剛建立的數據包)交給因特網協議(英文簡稱IP)。而後這個因特網協議也會建立一個數據包。在這個英特網協議建立的數據包中,所包含的內容要比因特網控制報文協議所建立的數據包豐富的多。在這個包中包括主機甲的IP地址、目的地主機已的IP地址以及值爲01h的協議字段。當數據包到達主機乙時,這些內容就是告訴對方,應該將這個有效負荷交給因特網控制報文協議來處理。
第三步:IP協議會判斷目的IP地址是屬於遠程網絡,仍是在本地網絡。因爲根據IP地址規劃規則,主機甲與主機已經是屬於不一樣的網絡。此時,剛纔英特網協議(IP)所建立的數據包將會被髮送到默認的網關中去。在主機甲的網絡屬性配置中,除了有自身的邏輯IP地址,還有默認的網關地址。網關地址就是用來不一樣網絡之間的主機進行通訊的一扇門。只有經過網關,主機甲的數據包纔可以被髮送到不一樣網絡的主機乙中。
第四步:確認路由器相應接口的MAC地址。假設主機甲(IP地址爲172.168.60.6)的默認網關被配置爲172.168.60.1。若主機甲的數據包要發送到這個默認網關上,則就必須知道其對應的路由器接口的物理地址,即MAC地址。由於只有如此,數據包纔可以被傳遞到更下一層的數據鏈路層並根據必定的規則生成幀。而後主機甲纔可以把數據包發送給172.168.60.0網絡鏈接的路由器接口。在本地局域網上,主機只能夠經過硬件地址來相互之間進行通訊。因此當主機甲要把數據包發送給特定的網關時,必需要知道這個網關所對應的MAC地址。這一個過程是不可避免的。爲了達到這個目的,主機甲首先會檢查本身的ARP緩存,查看一個默認網關的IP地址是否已經解析爲對應接口的硬件地址。若是在ARP緩存表中已經有對應的記錄,表示已經被成功解析。此時,數據包將會被釋放並傳遞到數據鏈路層並生成幀。其中目的方的硬件地址也將同數據包一塊兒下傳到數據鏈路層。一般狀況下,在主機甲上,能夠經過ARP命令來查看主機當前的IP地址與MAC地址的對應表。以下圖。筆者如今電腦所設置的默認網關爲192.168.0.254,後面的16位字符就是默認網關所對應的硬件地址。
第五步:生成幀。當這個數據包和目的方的硬件地址被傳遞給數據鏈路層以後,局域網驅動器將用來提供媒體訪問服務,以經過以太網進行數據傳輸。一個數據幀即將產生,使用一些控制信息來封裝這個數據包。在這個數據幀中會包含有目的方和源方的硬件地址。以及以太網類型字段。這個以太網類型字段主要用來描述的是交付這個數據包島數據鏈路層的網絡層協議。在這個幀的結尾,是一種被稱做爲幀校驗序列的字段,它是裝載循環冗餘校驗計算值的區域。也就是說,在這個幀中,主要包括目的MAC地址(對應路由器接口的MAC地址)、源MAC地址(主機甲的MAC地址)、以太網類型字段、數據包、幀校驗序列五部份內容。注意,這裏指的目的地址並非主機乙的地址,而是裏主機甲最近的默認網關地址。在第一次通訊時,主機甲並不知道主機乙的MAC地址。一旦完成幀的封裝,則這個幀將會被交付到物理層。若是企業網絡是利用雙絞線組建的話,則將會以一次一位的方式發往物理媒體。
以上五個步驟主要都是在主機甲上完成。這五個步驟執行完畢以後,IP路由選擇過過程的前期工做就算完成了。接下來的就要看路由器的表演了。
第六步:在主機甲所在的衝突域中的每臺網絡設備都將接收這些位並從新合併成數據幀。接收完畢後,他們會運行CRC過程並覈對保存在幀校驗序列字段中的內容。若是這兩個值不匹配的話,則這個幀將會被丟棄。若是兩個值相同(主機甲的默認網關,即緊鄰主機甲的路由器接口),則網絡設備會接收這個幀,並覈查目的方的硬件地址,檢查他們是否也匹配。若是目的方的硬件地址也是匹配的,那麼路由器將會查看這個幀的以太網類型字段,以瞭解在網絡層上採用了什麼協議,而後路由器就會抽出幀中的數據包,把其他部份內容丟棄。而後把抽出來的數據包傳送給以太網類型字段中列出的上層協議,如英特網網絡協議(IP)等等。
第七步:判斷路由表項目。英特網網絡協議(IP)會接收這個數據包,並檢查目的IP地址。在這個案例中,因爲數據包中的目的地址與接收路由器所配置的任何地址都不相匹配。此時,路由器就會在本身的路由表中,查看目的IP網絡的地址。在這個案例中,因爲路由器同時鏈接着172.16.80.0的網絡。因此在這個路由器的路由表中,有相關的紀錄。若沒有記錄的話,則這個數據包會被直接丟棄。若路由器丟棄數據包的話,則會發送一個「目標地址不可達」的錯誤信息給主機甲。
第八步:路由器轉發數據包。若是路由器的確在他的路由表中找到了相應網絡的記錄,則數據包就會被轉發到輸出接口。在本例中,就是主機乙所鏈接的接口。路由器會將這個數據包交換到對應接口的緩衝區內。
第九步:緩衝區中數據的處理。路由器對應接口的緩衝區須要瞭解目的方主機的硬件地址。由於這個數據包中已經有目的方的IP地址,因此,路由器會先檢查ARP緩存表。若是主機甲的硬件地址已經被解析並保存在路由器的ARP緩衝中,則這個數據包和這個硬件地址將被傳遞到數據鏈路層以便從新生成幀。一般狀況下,若路由器之前跟主機乙通訊過的話,則這個IP地址與MAC地址的對應記錄將會在思科路由器ARP緩衝表中保存四個小時。連續四個小時沒有通訊的話,則這個對應的記錄將會被刪除。若是在路由器的ARP緩衝表中沒有相關記錄的話,則路由器接口會在其鏈接的網絡內部,發送一個ARP請求。這個ARP請求就像一個廣播,誰我如今須要知道IP地址爲172.12.80.8的MAC地址。此時。其餘網絡設備發現本身不是這個IP地址,就會拋棄這個包。而主機乙發現有人在問本身的MAC地址,就會進行響應。告訴路由器,個人IP地址就是這個,個人MAC地址是多少。路由器知道目的主機乙的MAC地址以後,就會把數據包連同目的方的MAC地址傳遞到下一層的數據鏈路中。
第十步:路由器會重複上面的第五步操做,生成數據幀。並傳送到物理層,以一次一位的方式再發送到物理媒體上。在網絡中進行傳輸。
在路由器上的工做也完成。經過以上的分析,咱們能夠看到,路由器的做用主要就是進行數據交換。把其收到的數據包根據必定的規則轉發到另外一個可達的接口上。路由器就好像是一個十字路口,各個數據包都根據本身所須要到達的目的地,如今合適的出口。
第十一步:主機乙會接收到這個數據幀並運行CRC過程。若是運算結果與幀校驗序列中字段的內容相同,則這個幀中目的方的MAC地址將會被讀取。主機乙會判斷這個MAC地址是否跟本身的MAC地址相同。若相同的話,則會抽取其中的數據包,並根據以太網字段類型中指定的協議,把數據包傳遞給相應的協議處理。因爲這個案例中,數據包中是一個迴應請求。主機乙就會把這個數據包交給ICMP協議處理。ICMP協議會應答這個請求,同時把這個數據包丟棄並迅速生成一個新的有效負荷來做爲迴應應答。而後主機乙會利用一樣的過程把數據包以及目的MAC地址(路由器對應接口的物理地址)傳遞到下一層,讓其生成幀。在數據幀上,會帶有目的MAC地址、源MAC地址、數據包、以太網字段類型、幀校驗序列字段等內容發送到下一層。而後再一位位的傳送到物理媒體。
第十二步:路由器再重複第六步到第十步的過程,把數據包從一個接口交換傳遞到另外一個接口中。而後主機甲就收到一個迴應信息,表示到主機乙的道路是通的。
以上這個十二個步驟就完成了IP路由選擇的所有過程。再複雜的網絡,也只是中間多了幾個節點,多重複了幾個步驟而已。網絡管理員瞭解了這個IP路由選擇的過程,那麼在往後網絡故障的排查中,會更加的駕輕就熟。