IP转发
當(dāng)主機(jī)通信的目的地是直接相連的主機(jī)(例如點(diǎn)到點(diǎn)鏈接)或共享網(wǎng)絡(luò)(例如以太網(wǎng)),IP數(shù)據(jù)報(bào)直接發(fā)送到目的地,不需要或者不適用路由器。否則,主機(jī)將數(shù)據(jù)報(bào)發(fā)送到一臺(tái)路由器,由該路由器將數(shù)據(jù)報(bào)交付到目的地,這個(gè)過(guò)程可能要經(jīng)過(guò)多個(gè)路由。這就是IP轉(zhuǎn)發(fā)。
大多數(shù)主機(jī)既可配置為路由器,也可配置為主機(jī)。主機(jī)與路由器的處理IP數(shù)據(jù)報(bào)的區(qū)別在于:主機(jī)不轉(zhuǎn)發(fā)那些不是由它生成的數(shù)據(jù)報(bào),路由器會(huì)這樣做。在整個(gè)IP轉(zhuǎn)發(fā)方案中,IP協(xié)議可接收一個(gè)數(shù)據(jù)報(bào),它可來(lái)自同一主機(jī)上的其他協(xié)議(TCP、UDP等),也可來(lái)自一個(gè)網(wǎng)絡(luò)接口。IP層包括一些位于內(nèi)存中的信息,通常稱為路由表或轉(zhuǎn)發(fā)表,每次轉(zhuǎn)發(fā)一個(gè)數(shù)據(jù)報(bào)時(shí)需要從中查找信息。當(dāng)一個(gè)網(wǎng)絡(luò)接口接收到一個(gè)數(shù)據(jù)報(bào)時(shí),IP模塊首先檢查目的地址是否為自己的IP地址(與自己的某個(gè)網(wǎng)絡(luò)接口相關(guān)的IP地址),或是它可以接收其流量的一些其他地址,例如IP廣播或組播地址如果是的話,數(shù)據(jù)報(bào)交付給由IPv4頭部的協(xié)議字段或IPv6頭部的下一個(gè)頭部字段中指定的協(xié)議模塊(IP頭部?jī)?nèi)容詳見(jiàn)→傳送門(mén)1: IP數(shù)據(jù)報(bào),傳送門(mén)2: IPv6擴(kuò)展頭部)。如果不是:(1) 如果IP層配置為一臺(tái)路由器,則作為輸出的數(shù)據(jù)報(bào)處理,轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào);(2) 數(shù)據(jù)報(bào)被丟棄。在某些情況下,ICMP消息可能發(fā)送回源節(jié)點(diǎn),以表明發(fā)生了一個(gè)錯(cuò)誤。
轉(zhuǎn)發(fā)表
IP協(xié)議標(biāo)準(zhǔn)并沒(méi)有規(guī)定轉(zhuǎn)發(fā)表所需的精確數(shù)據(jù),這個(gè)選擇工作留給IP協(xié)議的實(shí)現(xiàn)者。但I(xiàn)P轉(zhuǎn)發(fā)表通常需要包含幾個(gè)關(guān)鍵信息:
·目的地:一個(gè)32位IPv4地址字段或128位的IPv6字段,用于與一個(gè)掩碼操作結(jié)果相匹配。針對(duì)涵蓋所有目的地的“默認(rèn)路由”的情況,目的地可以簡(jiǎn)單地設(shè)為零;對(duì)于僅描述一個(gè)目的地的“主機(jī)路由”的情況,目的地可設(shè)為完整長(zhǎng)度的IP地址。
·掩碼:一個(gè)32位IPv4字段或128位的IPv6字段,用作數(shù)據(jù)報(bào)目的IP地址按位與操作的掩碼。掩碼結(jié)果與轉(zhuǎn)發(fā)表?xiàng)l目中的多個(gè)目的地進(jìn)行比較。
·下一跳:它是下一個(gè)IP實(shí)體(路由器或主機(jī))的32位IPv4地址或128位IPv6地址,數(shù)據(jù)報(bào)將被轉(zhuǎn)發(fā)到該地址。下一跳實(shí)體通常在一個(gè)網(wǎng)絡(luò)中由執(zhí)行轉(zhuǎn)發(fā)查找的系統(tǒng)所共享,這意味著它們共享同一網(wǎng)絡(luò)前綴。
·接口:接口包含一個(gè)由IP層使用的標(biāo)識(shí)符,以確定將數(shù)據(jù)報(bào)發(fā)送到下一跳的網(wǎng)絡(luò)接口。例如802.11無(wú)線接口、有線的以太網(wǎng)接口或一個(gè)與串行端口的PPP接口。如果轉(zhuǎn)發(fā)IP系統(tǒng)也是IP數(shù)據(jù)報(bào)的發(fā)送方,該字段用于選擇輸出數(shù)據(jù)報(bào)的源IP地址。
| 目的地 | 掩碼 | 網(wǎng)關(guān)(下一跳) | 接口 | 
| 0.0.0.0 | 0.0.0.0 | 10.0.0.1 | 10.0.0.100 | 
| 10.0.0.0 | 255.255.255.255 | 10.0.0.100 | 10.0.0.100 | 
IP轉(zhuǎn)發(fā)逐跳進(jìn)行,路由器和主機(jī)不包含到任何目的地的完整轉(zhuǎn)發(fā)路徑(除了那些直接連接主機(jī)或路由器的目的地)。IP轉(zhuǎn)發(fā)只提供數(shù)據(jù)報(bào)發(fā)送的下一跳實(shí)體的IP地址。它假設(shè)下一跳比當(dāng)前“更接近”目的地,并且自己與下一跳實(shí)體之間沒(méi)有環(huán)路。路由協(xié)議有多種,例如RIP、OSPF、BGP和IS-IS。
轉(zhuǎn)發(fā)過(guò)程
當(dāng)一臺(tái)主機(jī)或路由器中的IP層需要向下一跳的路由器或主機(jī)發(fā)送一個(gè)數(shù)據(jù)報(bào)時(shí),它首先檢查數(shù)據(jù)報(bào)中的目的IP地址,在轉(zhuǎn)發(fā)表中使用該地址來(lái)執(zhí)行最長(zhǎng)前綴匹配算法:對(duì)轉(zhuǎn)發(fā)表的每一個(gè)條目,將其中的掩碼m與目的地址D進(jìn)行按位與操作,得到的結(jié)果與條目中的目的地字段d進(jìn)行比較,若相等則滿足匹配條件。所有條目中選出最長(zhǎng)前綴(掩碼m中設(shè)置1的位數(shù)最多)作為下一跳IP地址。如果在轉(zhuǎn)發(fā)表中沒(méi)有發(fā)現(xiàn)匹配的條目,則這個(gè)數(shù)據(jù)報(bào)無(wú)法交付。
通常情況下,如果在本地出現(xiàn)無(wú)法交付的數(shù)據(jù)報(bào),則向生成數(shù)據(jù)報(bào)的應(yīng)用程序返回一個(gè)“主機(jī)不可達(dá)”錯(cuò)誤。在一臺(tái)路由器上,ICMP消息通常返回給發(fā)送數(shù)據(jù)報(bào)的主機(jī)。
在某些情況下,可能有多個(gè)條目是匹配的(即1的位數(shù)一樣)。在這種情況下,協(xié)議標(biāo)準(zhǔn)沒(méi)有規(guī)定終端系統(tǒng)的具體行為,而是由具體操作系統(tǒng)的協(xié)議實(shí)現(xiàn)來(lái)決定。通常是簡(jiǎn)單地選擇第一個(gè)匹配的結(jié)果。更復(fù)雜的系統(tǒng)可能嘗試在多個(gè)路由上平衡負(fù)載或拆分流量。
直接交付和間接交付
當(dāng)所有系統(tǒng)使用相同的網(wǎng)絡(luò)前綴(例如處于同一以太網(wǎng)中),可以采用直接交付;另一種為間接交付。
直接交付不需要路由器,IP數(shù)據(jù)報(bào)封裝在一個(gè)鏈路層幀中,它可以直接識(shí)別數(shù)據(jù)來(lái)源或目的地。間接交付涉及路由器,數(shù)據(jù)轉(zhuǎn)發(fā)到這臺(tái)路由器,并使用該路由器的鏈路層地址作為目的地址。直接交付中,路由器的IP地址沒(méi)有出現(xiàn)在IP數(shù)據(jù)報(bào)中(除非路由器自己是源主機(jī)或目的主機(jī),或者使用源路由時(shí))。
在直接交付中,匹配路由條目中的網(wǎng)關(guān)(下一跳地址)包含發(fā)送主機(jī)的網(wǎng)絡(luò)接口(沒(méi)有涉及路由器),說(shuō)明采用直接交付來(lái)發(fā)送數(shù)據(jù)報(bào)。這個(gè)數(shù)據(jù)報(bào)被封裝在一個(gè)低層幀中,并發(fā)送給目的主機(jī)。如果目的主機(jī)的低層地址未知,可能需要使用ARP協(xié)議(對(duì)于IPv4)或鄰居發(fā)現(xiàn)協(xié)議(對(duì)于IPv6)操作,以確定正確的低層地址。如果已經(jīng)知道該地址,數(shù)據(jù)報(bào)中的目的地址是目的主機(jī)的IP地址,并將其放入低層頭部的目的IP地址字段中。
在間接交付中,IP地址對(duì)應(yīng)于前面的源主機(jī)和目的主機(jī),但低層地址不對(duì)應(yīng)。實(shí)際上,低層地址決定哪臺(tái)機(jī)器在每跳的基礎(chǔ)上接收包含數(shù)據(jù)報(bào)的幀。在使用源路由的情況下,路由器對(duì)數(shù)據(jù)報(bào)進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT),以使它在Internet中可路由。對(duì)數(shù)據(jù)報(bào)進(jìn)行NAT處理,目的是生成新的源地址以便轉(zhuǎn)發(fā)。
IP單播轉(zhuǎn)發(fā)關(guān)鍵
·前面說(shuō)到過(guò)默認(rèn)路由的設(shè)置,實(shí)際上在Internet邊緣,大多數(shù)主機(jī)和路由器會(huì)使用一個(gè)對(duì)所有地址而不是而不是本地網(wǎng)絡(luò)中的目的地址的默認(rèn)路由,這是因?yàn)橹挥幸粋€(gè)借口可連接Internet的其他部分。
·在傳統(tǒng)的Internet中,數(shù)據(jù)報(bào)中的源IP地址和目的IP地址從不改變。除非是在使用源路由的情況下(間接交付中有提到),或沿著傳輸路徑遇到其他功能(例如NAT),否則情況永遠(yuǎn)如此。
·不同的低層頭部用于每種鏈路上的尋址,低層的目的地址(如果存在)總是包含下一跳的低層地址。因此,當(dāng)數(shù)據(jù)報(bào)沿著到目的地的每個(gè)跳步移動(dòng)時(shí),低層頭部經(jīng)常發(fā)生變化。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?本文部分內(nèi)容摘自《TCP/IP詳解:卷1(中文版)第2版》
總結(jié)
 
                            
                        - 上一篇: python web微信应用(三) 微信
- 下一篇: 思考的方法--张五常(1984 年 1
