本篇結構:
- 前言
- IP路由選擇
- 補充幾個概念
- 總結
一、前言
接著上一篇TCP/IP--網際協議IP,這篇繼續網際協議IP的內容,在了解了IP協議的基礎上,繼續學習IP路由選擇。
先看張圖,主機甲與主機乙分別在兩個不同的網段上,中間通過路由器進行連接。現在假設主機甲要跟主機乙進行通信,那么主機甲如何才能夠找到主機乙的位置呢?
二、IP路由選擇
假設現在主機甲的用戶利用Ping命令,來確認主機乙的連通性問題。這個網絡架構雖然比較簡單,但是其路由選擇過程的步驟則是一步不缺的。主要通過如下步驟:
第一步:當用戶在主機甲上輸入PING 172.168.80.8之后,主機甲中有一個網際控制報文協議ICMP(下面會介紹)。這個協議將創建一個回應請求數據包,在它的數據域中只包含有字母。
第二步:網際控制報文協議會將這個有效負荷(即剛創建的數據包)交給網際協議IP。然后這個網際協議也會創建一個數據包。在這個網際協議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地址的對應表。
第五步:生成幀。當這個數據包和目的方的硬件地址被傳遞給數據鏈路層之后,局域網驅動器將用來提供媒體訪問服務,以通過以太網進行數據傳輸。一個數據幀即將產生,使用一些控制信息來封裝這個數據包。在這個數據幀中會包含有目的方和源方的硬件地址。以及以太網類型字段。這個以太網類型字段主要用來描述的是交付這個數據包到數據鏈路層的網絡層協議。在這個幀的結尾,是一種被稱作為幀校驗序列的字段,它是裝載循環冗余校驗計算值的區域。也就是說,在這個幀中,主要包括目的MAC地址(對應路由器接口的MAC地址)、源MAC地址(主機甲的MAC地址)、以太網類型字段、數據包、幀校驗序列五部分內容。注意,這里指的目的地址并不是主機乙的地址,而是里主機甲最近的默認網關地址。在第一次通信時,主機甲并不知道主機乙的MAC地址。一旦完成幀的封裝,則這個幀將會被交付到物理層。
上面五個步驟主要都是在主機甲上完成。這五個步驟執行完畢之后,IP路由選擇過過程的前期工作就算完成了。下面才是網際協議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地址、數據包、以太網字段類型、幀校驗序列字段等內容發送到下一層。然后再一位位的傳送到物理媒體。
第十二步:路由器再重復第六步到第十步的過程,把數據包從一個接口交換傳遞到另一個接口中。然后主機甲就收到一個回應信息,表示到主機乙的道路是通的。
三、補充幾個概念
3.1、靜態路由
是指由網絡管理員手工配置的路由信息。當網絡的拓撲結構或鏈路的狀態發生變化時,網絡管理員需要手工去修改路由表中相關的靜態路由信息。靜態路由信息在缺省情況下是私有的,不會傳遞給其他的路由器。當然,網管員也可以通過對路由器進行設置使之成為共享的。靜態路由一般適用于比較簡單的網絡環境,在這樣的環境中,網絡管理員易于清楚地了解網絡的拓撲結構,便于設置正確的路由信息。
3.2、動態路由
是指路由器能夠自動地建立自己的路由表,并且能夠根據實際實際情況的變化適時地進行調整。動態路由機制的運作依賴路由器的兩個基本功能:對路由表的維護;路由器之間適時的路由信息交換。
3.3、特定主機路由
雖然因特網所有的分組轉發都是基于目的主機所在的網絡,但在大多數情況下都允許有這樣的特例,即對特定的目的主機指明的一個路由。這種路由叫做特定主機路由。
采用特定主機路由的好處:
(1)可使網絡管理人員能夠更方便地控制網絡和測試網絡,同時也可在需要考慮某種安全問題時采用這種特定主機路由。
(2)在對網絡的連接或路由表進行排錯時,指明到某一主機的特定路由就十分有用。
注:特定主機路由是要到某一臺機器的路由。特定網絡路由是你到某一個子網的路由。特定主機路由也可視為特定網絡路由的一個特例,即Mask為255.255.255.255的特定網絡路由。
3.4、默認路由
默認路由是一種特殊的靜態路由,指的是當路由表中與包的目的地址之間沒有匹配的表項時路由器能夠做出的選擇。
如果沒有默認路由,那么目的地址在路由表中沒有匹配表項的包將被丟棄。
默認路由在某些時候非常有效,當存在末梢網絡時,默認路由會大大簡化路由器的配置,減輕管理員的工作負擔,提高網絡性能。
主機里的默認路由通常被稱作默認網關,默認網關通常會是一個有過濾功能的設備,如防火墻和代理服務器。
默認路由和靜態路由的命令格式一樣,只是把目的地ip和子網掩碼改成0.0.0.0和0.0.0.0,默認路由只能存在末梢網絡中。
四、總結
根據上述案例,簡單總結一下IP路由分組轉發算法:
- (1)從數據報的首部提取目的主機的IP地址D,得出目的網絡地址為N。
- (2)若N就是與此路由器直接相連的某個網絡地址,則進行直接交付,不需要再經過其他的路由器,直接把數據報交付給目的主機(這里包括把目的主機地址D轉換為具體的硬件地址,把數據報封裝為MAC幀,再發送此幀);否則就要執行(3)進行間接交付。
- (3)若路由表中有目的地址為D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器,否則執行(4)。
- (4)若路由表中有到達網絡N的路由,則把數據報傳送給路由表中所指明的下一跳路由器,否則執行(5)。
- (5)若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的下一跳路由器,否則執行(6)。
- (6)報告轉發分組出錯。