1) 主要功能:負(fù)責(zé)點到點(point-to-point)的傳輸(這里的“點”指主機(jī)或路由器)
網(wǎng)絡(luò)層是為傳輸層提供服務(wù)的,傳送的協(xié)議數(shù)據(jù)單元稱為數(shù)據(jù)包或分組。該層的主要作用是解決如何使數(shù)據(jù)包通過各結(jié)點傳送的問題,即通過路徑選擇算法(路由)將數(shù)據(jù)包送到目的地。另外,為避免通信子網(wǎng)中出現(xiàn)過多的數(shù)據(jù)包而造成網(wǎng)絡(luò)阻塞,需要對流入的數(shù)據(jù)包數(shù)量進(jìn)行控制(擁塞控制)。當(dāng)數(shù)據(jù)包要跨越多個通信子網(wǎng)才能到達(dá)目的地時,還要解決網(wǎng)際互連的問題。
2) 網(wǎng)絡(luò)地址: 網(wǎng)絡(luò)層地址由兩部分地址組成:網(wǎng)絡(luò)地址和主機(jī)地址。網(wǎng)絡(luò)地址是全局唯一的。
3)路由尋址:
1.通過路由選擇算法為分組通過通信子網(wǎng)選擇最佳路么.
2.實現(xiàn)路由選擇,擁塞控制以及網(wǎng)絡(luò)互聯(lián)等.
網(wǎng)絡(luò)層的主要協(xié)議:IP,ARP、RARP
ARP協(xié)議用來找到目標(biāo)主機(jī)的Ethernet網(wǎng)卡Mac地址,IP則承載要發(fā)送的消息。數(shù)據(jù)鏈路層可以從ARP得到數(shù)據(jù)的傳送信息,而從IP得到要傳輸?shù)臄?shù)據(jù)信息。
IP協(xié)議是TCP/IP協(xié)議的核心,所有的TCP,UDP,IMCP,IGCP的數(shù)據(jù)都以IP數(shù)據(jù)格式傳輸。要注意的是,IP不是可靠的協(xié)議,這是說,IP協(xié)議沒有提供一種數(shù)據(jù)未傳達(dá)以后的處理機(jī)制--這被認(rèn)為是上層協(xié)議--TCP或UDP要做的事情。所以這也就出現(xiàn)了TCP是一個可靠的協(xié)議,而UDP就沒有那么可靠的區(qū)別。這是后話,暫且不提
數(shù)據(jù)格式如圖所示:
IP數(shù)據(jù)報的首部長度和數(shù)據(jù)長度都是可變長的,但總是4字節(jié)的整數(shù)倍。
4位版本字段: 對于IPv4,4位版本字段是4。
4位首部長度:該數(shù)值是以4字節(jié)為單位的,最小值為5,也就是說首部長度最小是4x5=20字節(jié),也就是不帶任何選項的IP首部,4位能表示的最大值是15,也就是說首部長度最大是60字節(jié)。
8位TOS字段:8位TOS字段有3個位用來指定IP數(shù)據(jù)報的優(yōu)先級(目前已經(jīng)廢棄不用),還有4個位表示可選的服務(wù)類型(最小延遲、最大呑吐量、最大可靠性、最小成本),還有一個位總是0??傞L度是整個數(shù)據(jù)報(包括IP首部和IP層payload)的字節(jié)數(shù)。每傳一個IP數(shù)據(jù)報,
16位的標(biāo)識加1,可用于分片和重新組裝數(shù)據(jù)報。
3位標(biāo)志和13位片偏移用于分片。
TTL(Time to live)是這樣用的:源主機(jī)為數(shù)據(jù)包設(shè)定一個生存時間,比如64,每過一個路由器就把該值減1,如果減到0就表示路由已經(jīng)太長了仍然找不到目的主機(jī)的網(wǎng)絡(luò),就丟棄該包,因此這個生存時間的單位不是秒,而是跳(hop)。這個字段的最大值也就是255,也就是說一個協(xié)議包也就在路由器里面穿行255次就會被拋棄了,根據(jù)系統(tǒng)的不同,這個數(shù)字也不一樣,一般是32或者是64,Tracerouter這個工具就是用這個原理工作的,tranceroute的-m選項要求最大值是255,也就是因為這個TTL在IP協(xié)議里面只有8bit。
協(xié)議字段指示上層協(xié)議是TCP、UDP、ICMP還是IGMP。然后是校驗和,只校驗IP首部,數(shù)據(jù)的校驗由更高層協(xié)議負(fù)責(zé)。IPv4的IP地址長度為32位。
當(dāng)一個IP數(shù)據(jù)包準(zhǔn)備好了的時候,IP數(shù)據(jù)包(或者說是路由器)是如何將數(shù)據(jù)包送到目的地的呢?它是怎么選擇一個合適的路徑來"送貨"的呢?
最特殊的情況是目的主機(jī)和主機(jī)直連,那么主機(jī)根本不用尋找路由,直接把數(shù)據(jù)傳遞過去就可以了。至于是怎么直接傳遞的,這就要靠ARP協(xié)議了,后面會講到。
稍微一般一點的情況是,主機(jī)通過若干個路由器(router)和目的主機(jī)連接。那么路由器就要通過ip包的信息來為ip包尋找到一個合適的目標(biāo)來進(jìn)行傳遞,比如合適的主機(jī),或者合適的路由。路由器或者主機(jī)將會用如下的方式來處理某一個IP數(shù)據(jù)包
這再一次證明了,ip包是不可靠的。因為它不保證送達(dá)。
IP地址的定義是網(wǎng)絡(luò)號+主機(jī)號。但是現(xiàn)在所有的主機(jī)都要求子網(wǎng)編址,也就是說,把主機(jī)號在細(xì)分成子網(wǎng)號+主機(jī)號。最終一個IP地址就成為 網(wǎng)絡(luò)號碼+子網(wǎng)號+主機(jī)號。例如一個B類地址:210.30.109.134。一般情況下,這個IP地址的紅色部分就是網(wǎng)絡(luò)號,而藍(lán)色部分就是子網(wǎng)號,綠色部分就是主機(jī)號。至于有多少位代表子網(wǎng)號這個問題上,這沒有一個硬性的規(guī)定,取而代之的則是子網(wǎng)掩碼,校園網(wǎng)相信大多數(shù)人都用過,在校園網(wǎng)的設(shè)定里面有一個255.255.255.0的東西,這就是子網(wǎng)掩碼。子網(wǎng)掩碼是由32bit的二進(jìn)制數(shù)字序列,形式為是一連串的1和一連串的0,例如:255.255.255.0(二進(jìn)制就是11111111.11111111.11111111.00000000)對于剛才的那個B類地址,因為210.30是網(wǎng)絡(luò)號,那么后面的109.134就是子網(wǎng)號和主機(jī)號的組合,又因為子網(wǎng)掩碼只有后八bit為0,所以主機(jī)號就是IP地址的后八個bit,就是134,而剩下的就是子網(wǎng)號碼--109。
還記得數(shù)據(jù)鏈路層的以太網(wǎng)的協(xié)議中,每一個數(shù)據(jù)包都有一個MAC地址頭么?我們知道每一塊以太網(wǎng)卡都有一個MAC地址,這個地址是唯一的,那么IP包是如何知道這個MAC地址的?這就是ARP協(xié)議的工作。
在網(wǎng)絡(luò)通訊時,源主機(jī)的應(yīng)用程序知道目的主機(jī)的IP地址和端口號,卻不知道目的主機(jī)的硬件地址,而數(shù)據(jù)包首先是被網(wǎng)卡接收到再去處理上層協(xié)議的,如果接收到的數(shù)據(jù)包的硬件地址與本機(jī)不符,則直接丟棄。因此在通訊前必須獲得目的主機(jī)的硬件地址。ARP協(xié)議就起到這個作用。
工作原理:
1)每臺主機(jī)都維護(hù)一個ARP緩存表,當(dāng)源主機(jī)要發(fā)送一個IP包的時候,會首先查一下自己的ARP高速緩存(就是一個IP-MAC地址對應(yīng)表緩存)。
2)如果查詢的IP-MAC值對不存在,那么源主機(jī)就向網(wǎng)絡(luò)發(fā)送一個ARP協(xié)議廣播包,這個廣播包里面就有待查詢的IP地址,比如詢問“IP地址是192.168.0.1的主機(jī)的硬件地址是多少”,并將這個請求廣播到本地網(wǎng)段(以太網(wǎng)幀首部的硬件地址填FF:FF:FF:FF:FF:FF表示廣播)。
3) 直接收到這份廣播的包的所有主機(jī)都會查詢自己的IP地址,如果收到廣播包的某一個主機(jī)發(fā)現(xiàn)IP地址與本機(jī)相符,那么就準(zhǔn)備好一個包含自己的MAC地址的ARP包傳送給發(fā)送ARP廣播的源主機(jī),而廣播源主機(jī)拿到ARP包后會更新自己的ARP緩存(就是存放IP-MAC對應(yīng)表的地方)。
4)發(fā)送廣播的主機(jī)就會用新的ARP緩存數(shù)據(jù)準(zhǔn)備好數(shù)據(jù)鏈路層的的數(shù)據(jù)包發(fā)送工作。
每臺主機(jī)都維護(hù)一個ARP緩存表,可以用arp -a命令查看。
緩存表中的表項有過期時間(一般為20分鐘),如果20分鐘內(nèi)沒有再次使用某個表項,則該表項失效,下次還要發(fā)ARP請求來獲得目的主機(jī)的硬件地址。想一想,為什么表項要有過期時間而不是一直有效?
ARP數(shù)據(jù)報的格式如下所示:
注意到源MAC地址、目的MAC地址在以太網(wǎng)首部和ARP請求中各出現(xiàn)一次,對于鏈路層為以太網(wǎng)的情況是多余的,但如果鏈路層是其它類型的網(wǎng)絡(luò)則有可能是必要的。硬件類型指鏈路層網(wǎng)絡(luò)類型,1為以太網(wǎng),協(xié)議類型指要轉(zhuǎn)換的地址類型,0x0800為IP地址,后面兩個地址長度對于以太網(wǎng)地址和IP地址分別為6和4(字節(jié)),op字段為1表示ARP請求,op字段為2表示ARP應(yīng)答。
IPv4的IP地址長度為4字節(jié),通常采用點分十進(jìn)制表示法(dotted decimal representation)例如0xc0a80002表示為192.168.0.2。Internet被各種路由器和網(wǎng)關(guān)設(shè)備分隔成很多網(wǎng)段,為了標(biāo)識不同的網(wǎng)段,需要把32位的IP地址劃分成網(wǎng)絡(luò)號和主機(jī)號兩部分,網(wǎng)絡(luò)號相同的各主機(jī)位于同一網(wǎng)段,相互間可以直接通信,網(wǎng)絡(luò)號不同的主機(jī)之間通信則需要通過路由器轉(zhuǎn)發(fā)。
過去曾經(jīng)提出一種劃分網(wǎng)絡(luò)號和主機(jī)號的方案,把所有IP地址分為五類,如下圖所示:
A類 0.0.0.0到127.255.255.255
B類 128.0.0.0到191.255.255.255
C類 192.0.0.0到223.255.255.255
D類 224.0.0.0到239.255.255.255
E類 240.0.0.0到247.255.255.255
一個A類網(wǎng)絡(luò)可容納的地址數(shù)量最大,一個B類網(wǎng)絡(luò)的地址數(shù)量是65536,一個C類網(wǎng)絡(luò)的地址數(shù)量是256。D類地址用作多播地址,E類地址保留未用。
隨著Internet的飛速發(fā)展,這種劃分方案的局限性很快顯現(xiàn)出來,大多數(shù)組織都申請B類網(wǎng)絡(luò)地址,導(dǎo)致B類地址很快就分配完了,而A類卻浪費(fèi)了大量地址。這種方式對網(wǎng)絡(luò)的劃分是flat的而不是層級結(jié)構(gòu)(hierarchical)的,Internet上的每個路由器都必須掌握所有網(wǎng)絡(luò)的信息,隨著大量C類網(wǎng)絡(luò)的出現(xiàn),路由器需要檢索的路由表越來越龐大,負(fù)擔(dān)越來越重。
針對這種情況提出了新的劃分方案,稱為CIDR(Classless Interdomain Routing)。網(wǎng)絡(luò)號和主機(jī)號的劃分需要用一個額外的子網(wǎng)掩碼(subnet mask)來表示,而不能由IP地址本身的數(shù)值決定,也就是說,網(wǎng)絡(luò)號和主機(jī)號的劃分與這個IP地址是A類、B類還是C類無關(guān),因此稱為Classless的。這樣,多個子網(wǎng)就可以匯總(summarize)成一個Internet上的網(wǎng)絡(luò),例如,有8個站點都申請了C類網(wǎng)絡(luò),本來網(wǎng)絡(luò)號是24位的,但是這8個站點通過同一個ISP(Internet service provider)連到Internet上,它們網(wǎng)絡(luò)號的高21位是相同的,只有低三位不同,這8個站點就可以匯總,在Internet上只需要一個路由表項,數(shù)據(jù)包通過Internet上的路由器到達(dá)ISP,然后在ISP這邊再通過次級的路由器選路到某個站點。
下面舉兩個例子:
劃分子網(wǎng)的例子1
IP地址 | 140.252.20.68 | 8C FC 14 44 |
子網(wǎng)掩碼 | 255.255.255.0 | FF FF FF 00 |
網(wǎng)絡(luò)號 | 140.252.20.0 | 8C FC 14 00 |
子網(wǎng)地址范圍 | 140.252.20.0~140.252.20.255 |
劃分子網(wǎng)的例子2
IP地址 | 140.252.20.68 | 8C FC 14 44 |
子網(wǎng)掩碼 | 255.255.255.240 | FF FF FF F0 |
網(wǎng)絡(luò)號 | 140.252.20.64 | 8C FC 14 40 |
子網(wǎng)地址范圍 | 140.252.20.64~140.252.20.79 |
可見,IP地址與子網(wǎng)掩碼做與運(yùn)算可以得到網(wǎng)絡(luò)號,主機(jī)號從全0到全1就是子網(wǎng)的地址范圍。IP地址和子網(wǎng)掩碼還有一種更簡潔的表示方法,例如140.252.20.68/24,表示IP地址為140.252.20.68,子網(wǎng)掩碼的高24位是1,也就是255.255.255.0。
如果一個組織內(nèi)部組建局域網(wǎng),IP地址只用于局域網(wǎng)內(nèi)的通信,而不直接連到Internet上,理論上使用任意的IP地址都可以,但是RFC 1918規(guī)定了用于組建局域網(wǎng)的私有IP地址,這些地址不會出現(xiàn)在Internet上,如下表所示。
10.*,前8位是網(wǎng)絡(luò)號,共16,777,216個地址
172.16.*到172.31.*,前12位是網(wǎng)絡(luò)號,共1,048,576個地址
192.168.*,前16位是網(wǎng)絡(luò)號,共65,536個地址
使用私有IP地址的局域網(wǎng)主機(jī)雖然沒有Internet的IP地址,但也可以通過代理服務(wù)器或NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)等技術(shù)連到Internet上。
除了私有IP地址之外,還有幾種特殊的IP地址。127.*的IP地址用于本機(jī)環(huán)回(loop back)測試,通常是127.0.0.1。loopback是系統(tǒng)中一種特殊的網(wǎng)絡(luò)設(shè)備,如果發(fā)送數(shù)據(jù)包的目的地址是環(huán)回地址,或者與本機(jī)其它網(wǎng)絡(luò)設(shè)備的IP地址相同,則數(shù)據(jù)包不會發(fā)送到網(wǎng)絡(luò)介質(zhì)上,而是通過環(huán)回設(shè)備再發(fā)回給上層協(xié)議和應(yīng)用程序,主要用于測試。如下圖所示)。
還有一些不能用作主機(jī)IP地址的特殊地址:
目的地址為255.255.255.255,表示本網(wǎng)絡(luò)內(nèi)部廣播,路由器不轉(zhuǎn)發(fā)這樣的廣播數(shù)據(jù)包。
主機(jī)號全為0的地址只表示網(wǎng)絡(luò)而不能表示某個主機(jī),如192.168.10.0(假設(shè)子網(wǎng)掩碼為255.255.255.0)。
目的地址的主機(jī)號為全1,表示廣播至某個網(wǎng)絡(luò)的所有主機(jī),例如目的地址192.168.10.255表示廣播至192.168.10.0網(wǎng)絡(luò)(假設(shè)子網(wǎng)掩碼為255.255.255.0)。
下面介紹路由的過程,首先正式定義幾個名詞:
數(shù)據(jù)包從源地址到目的地址所經(jīng)過的路徑,由一系列路由節(jié)點組成。
某個路由節(jié)點為數(shù)據(jù)報選擇投遞方向的選路過程。
一個具有路由能力的主機(jī)或路由器,它維護(hù)一張路由表,通過查詢路由表來決定向哪個接口發(fā)送數(shù)據(jù)包。
路由節(jié)點與某個網(wǎng)絡(luò)相連的網(wǎng)卡接口。
由很多路由條目組成,每個條目都指明去往某個網(wǎng)絡(luò)的數(shù)據(jù)包應(yīng)該經(jīng)由哪個接口發(fā)送,其中最后一條是缺省路由條目。
路由表中的一行,每個條目主要由目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼、下一跳地址、發(fā)送接口四部分組成,如果要發(fā)送的數(shù)據(jù)包的目的網(wǎng)絡(luò)地址匹配路由表中的某一行,就按規(guī)定的接口發(fā)送到下一跳地址。
路由表中的最后一行,主要由下一跳地址和發(fā)送接口兩部分組成,當(dāng)目的地址與路由表中其它行都不匹配時,就按缺省路由條目規(guī)定的接口發(fā)送到下一跳地址。
假設(shè)某主機(jī)上的網(wǎng)絡(luò)接口配置和路由表如下:
$ ifconfigeth0 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:7E inet addr:192.168.10.223 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:420 (420.0 b) Interrupt:10 Base address:0x10a0eth1 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:88 inet addr:192.168.56.136 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:603 errors:0 dropped:0 overruns:0 frame:0 TX packets:110 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:55551 (54.2 Kb) TX bytes:7601 (7.4 Kb) Interrupt:9 Base address:0x10c0lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:37 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3020 (2.9 Kb) TX bytes:3020 (2.9 Kb)$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.10.0 * 255.255.255.0 U 0 0 0 eth0192.168.56.0 * 255.255.255.0 U 0 0 0 eth1127.0.0.0 * 255.0.0.0 U 0 0 0 lodefault 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
這臺主機(jī)有兩個網(wǎng)絡(luò)接口,一個網(wǎng)絡(luò)接口連到192.168.10.0/24網(wǎng)絡(luò),另一個網(wǎng)絡(luò)接口連到192.168.56.0/24網(wǎng)絡(luò)。路由表的Destination是目的網(wǎng)絡(luò)地址,Genmask是子網(wǎng)掩碼,Gateway是下一跳地址,Iface是發(fā)送接口,F(xiàn)lags中的U標(biāo)志表示此條目有效(可以禁用某些條目),G標(biāo)志表示此條目的下一跳地址是某個路由器的地址,沒有G標(biāo)志的條目表示目的網(wǎng)絡(luò)地址是與本機(jī)接口直接相連的網(wǎng)絡(luò),不必經(jīng)路由器轉(zhuǎn)發(fā),因此下一跳地址處記為*號。
如果要發(fā)送的數(shù)據(jù)包的目的地址是192.168.56.3,跟第一行的子網(wǎng)掩碼做與運(yùn)算得到192.168.56.0,與第一行的目的網(wǎng)絡(luò)地址不符,再跟第二行的子網(wǎng)掩碼做與運(yùn)算得到192.168.56.0,正是第二行的目的網(wǎng)絡(luò)地址,因此從eth1接口發(fā)送出去,由于192.168.56.0/24正是與eth1接口直接相連的網(wǎng)絡(luò),因此可以直接發(fā)到目的主機(jī),不需要經(jīng)路由器轉(zhuǎn)發(fā)。
如果要發(fā)送的數(shù)據(jù)包的目的地址是202.10.1.2,跟前三行路由表條目都不匹配,那么就要按缺省路由條目,從eth0接口發(fā)出去,首先發(fā)往192.168.10.1路由器,再讓路由器根據(jù)它的路由表決定下一跳地址。
路由器在網(wǎng)絡(luò)層,所以是第三層設(shè)備。Internet上有大量路由器負(fù)責(zé)根據(jù)IP地址選擇合適的路徑轉(zhuǎn)發(fā)數(shù)據(jù)包,數(shù)據(jù)包從Internet上的源主機(jī)到目的主機(jī)往往要經(jīng)過十多個路由器。路由器是工作在第三層的網(wǎng)絡(luò)設(shè)備,同時兼有交換機(jī)的功能,可以在不同的鏈路層接口之間轉(zhuǎn)發(fā)數(shù)據(jù)包,因此路由器需要將進(jìn)來的數(shù)據(jù)包拆掉網(wǎng)絡(luò)層和鏈路層兩層首部并重新封裝。IP協(xié)議不保證傳輸?shù)目煽啃?,?shù)據(jù)包在傳輸過程中可能丟失,可靠性可以在上層協(xié)議或應(yīng)用程序中提供支持。
二層交換機(jī)和三層路由器是性能和功能的矛盾體,交換機(jī)交換速度快,但控制功能弱,路由器控制性能強(qiáng),但報文轉(zhuǎn)發(fā)速度慢。解決這個矛盾的最新技術(shù)是三層交換,既有交換機(jī)線速轉(zhuǎn)發(fā)報文能力,又有路由器良好的路由和尋址控制功能。
1)異種網(wǎng)絡(luò)的互聯(lián)
可用完全不同的數(shù)據(jù)分組和介質(zhì)訪問方法互聯(lián)各種子網(wǎng)。只接收源站或其他路由器的信息,而不關(guān)心各子網(wǎng)所用的硬件設(shè)備(但要求運(yùn)行與網(wǎng)絡(luò)層協(xié)議相一致的軟件)。
2)網(wǎng)絡(luò)地址判斷、最佳路由選擇和數(shù)據(jù)處理(加密/優(yōu)先級/過濾等)
3)支持復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
4)絡(luò)互聯(lián)和路由選擇(中間節(jié)點路由器)
5)分隔子網(wǎng)和隔離廣播(邊界路由器)
路由器主要任務(wù)是接收來自一個網(wǎng)絡(luò)接口的數(shù)據(jù)包,根據(jù)其中所含的目的地址,決定轉(zhuǎn)發(fā)到下一個目的地址。因此,路由器首先得在轉(zhuǎn)發(fā)路由表中查找它的目的地址,若找到了目的地址,就在數(shù)據(jù)包的幀格前添加下一個MAC地址,同時IP數(shù)據(jù)包頭的TTL (Time To Live)域也開始減數(shù),并重新計算校驗和。當(dāng)數(shù)據(jù)包被送到輸出端口時,它需要按順序等待,以便被傳送到輸出鏈路上。
路由器在工作時能夠按照某種路由通信協(xié)議查找設(shè)備中的路由表。如果到某一特定節(jié)點有一條以上的路徑,則基本預(yù)先確定的路由準(zhǔn)則是選擇最優(yōu)(或最經(jīng)濟(jì))的傳輸路徑。由于各種網(wǎng)絡(luò)段和其相互連接情況可能會因環(huán)境變化而變化,因此路由情況的信息一般也按所使用的路由信息協(xié)議的規(guī)定而定時更新。
網(wǎng)絡(luò)中,每個路由器的基本功能都是按照一定的規(guī)則來動態(tài)地更新它所保持的路由表,以便保持路由信息的有效性。為了便于在網(wǎng)絡(luò)間傳送報文,路由器總是先按照預(yù)定的規(guī)則把較大的數(shù)據(jù)分解成適當(dāng)大小的數(shù)據(jù)包,再將這些數(shù)據(jù)包分別通過相同或不同路徑發(fā)送出去。當(dāng)這些數(shù)據(jù)包按先后秩序到達(dá)目的地后,再把分解的數(shù)據(jù)包按照一定順序包裝成原有的報文形式。路由器的分層尋址功能是路由器的重要功能之一,該功能可以幫助具有很多節(jié)點站的網(wǎng)絡(luò)來存儲尋址信息,同時還能在網(wǎng)絡(luò)間截獲發(fā)送到遠(yuǎn)地網(wǎng)段的報文,起轉(zhuǎn)發(fā)作用;選擇最合理的路由,引導(dǎo)通信也是路由器基本功能;多協(xié)議路由器還可以連接使用不同通信協(xié)議的網(wǎng)絡(luò)段,成為不同通信協(xié)議網(wǎng)絡(luò)段之間的通信平臺。
一般來說,路由器的主要工作是對數(shù)據(jù)包進(jìn)行存儲轉(zhuǎn)發(fā),具體過程如下:
第一步:當(dāng)數(shù)據(jù)包到達(dá)路由器,根據(jù)網(wǎng)絡(luò)物理接口的類型,路由器調(diào)用相應(yīng)的鏈路層功能模塊,以解釋處理此數(shù)據(jù)包的鏈路層協(xié)議報頭。這一步處理比較簡單,主要是對數(shù)據(jù)的完整性進(jìn)行驗證,如CRC校驗、幀長度檢查等。
第二步:在鏈路層完成對數(shù)據(jù)幀的完整性驗證后,路由器開始處理此數(shù)據(jù)幀的IP層。這一過程是路由器功能的核心。根據(jù)數(shù)據(jù)幀中IP包頭的目的IP地址,路由器在路由表中查找下一跳的IP地址;同時,IP數(shù)據(jù)包頭的TTL(Time To Live)域開始減數(shù),并重新計算校驗和(Checksum)。
第三步:根據(jù)路由表中所查到的下一跳IP地址,將IP數(shù)據(jù)包送往相應(yīng)的輸出鏈路層,被封裝上相應(yīng)的鏈路層包頭,最后經(jīng)輸出網(wǎng)絡(luò)物理接口發(fā)送出去。
簡單地說,路由器的主要工作就是為經(jīng)過路由器的每個數(shù)據(jù)包尋找一條最佳傳輸路徑,并將該數(shù)據(jù)包有效地傳送到目的站點。由此可見,選擇最佳路徑策略或叫選擇最佳路由算法是路由器的關(guān)鍵所在。為了完成這項工作,在路由器中保存著各種傳輸路徑的相關(guān)數(shù)據(jù)——路由表(Routing Table),供路由選擇時使用。上述過程描述了路由器的主要而且關(guān)鍵的工作過程,但沒有說明其它附加性能,例如訪問控制、網(wǎng)絡(luò)地址轉(zhuǎn)換、排隊優(yōu)先級等。
首先來看一下路由器是怎么工作的。對于普通用戶來說,所能夠接觸到的只是局域網(wǎng)的范圍,通過在PC上設(shè)置默認(rèn)網(wǎng)關(guān)就可以是局域網(wǎng)的計算機(jī)與Internet進(jìn)行通信,
其實在計算機(jī)上所設(shè)置的默認(rèn)網(wǎng)關(guān)就是路由器以太口的IP地址,如果局域網(wǎng)的計算機(jī)要和外面的計算機(jī)進(jìn)行通信,只要把請求提交給路由器的以太口就可以了,接下來的工作就由路由器來完成了。因此可以說路由器就是互聯(lián)網(wǎng)的中轉(zhuǎn)站,網(wǎng)絡(luò)中的包就是通過一個一個的路由器轉(zhuǎn)發(fā)到目的網(wǎng)絡(luò)的。
那么路由器是如何 進(jìn)行包的轉(zhuǎn)發(fā)的呢?就像一個人如果在去某個地方,一定要在他的腦海里有一張地圖,在每個路由器的內(nèi)部也有一張地圖,這張地圖就是路由表。
在這個路由表中包含有該路由器掌握的所有目地網(wǎng)絡(luò)地址,以及通過此路由器到達(dá)這些網(wǎng)絡(luò)中最佳路徑,這個最佳路徑指的是路由器的某個接口或下一條路由器的地址。
這是由于路由表的存在,路由器才可以依據(jù)路由表進(jìn)行包的轉(zhuǎn)發(fā),如下面圖所示網(wǎng)絡(luò)為例。介紹路由器轉(zhuǎn)發(fā)數(shù)據(jù)的過程。為了方便,將網(wǎng)段192.168.1.0/24簡寫為0,其他網(wǎng)段也做類似處理。
主機(jī)1.1要發(fā)送數(shù)據(jù)包給主機(jī)4.1,因為IP地址不再同一網(wǎng)段,主機(jī)會將數(shù)據(jù)包發(fā)送給本網(wǎng)段的網(wǎng)關(guān)路由器A。
路由器A接收到數(shù)據(jù)包,查看數(shù)據(jù)包IP中的目標(biāo)IP地址,在查找自己的路由表,數(shù)據(jù)包的目標(biāo)IP地址是4.1,屬于4.0網(wǎng)段,路由器A在路由表中查到4。0網(wǎng)段轉(zhuǎn)發(fā)的接口是SO接口。于是,路由表A將數(shù)據(jù)包從SO接口轉(zhuǎn)發(fā)出去。
網(wǎng)絡(luò)中的每個路由器都是按這樣的步驟去轉(zhuǎn)發(fā)數(shù)據(jù),直到到達(dá)了路由器B,用同樣的轉(zhuǎn)發(fā)方法,從EO口轉(zhuǎn)發(fā)出去,4.1主機(jī)接收發(fā)哦這個數(shù)據(jù)包。
在轉(zhuǎn)發(fā)數(shù)據(jù)的過程中,如果在路由表中沒有找到包的目的地地址,則根據(jù)路由器的配置轉(zhuǎn)發(fā)到默認(rèn)接口或者用戶返回目標(biāo)地址不可達(dá)的信息。
選路是IP層最重要的一個功能之一。前面的部分已經(jīng)簡單的講過路由器是通過何種規(guī)則來根據(jù)IP數(shù)據(jù)包的IP地址來選擇路由。這里就不重復(fù)了。首先來看看一個簡單的系統(tǒng)路由表。
對于一個給定的路由器,可以打印出五種不同的flag。
U沒啥可說的,G說明這是一個網(wǎng)關(guān),如果你要發(fā)數(shù)據(jù)給Destination,IP頭應(yīng)該寫Destination的IP地址,而數(shù)據(jù)鏈路層的MAC地址就應(yīng)該是GateWay的Mac地址了;反之,如果沒有G標(biāo)志,那么數(shù)據(jù)鏈路層和IP層的地址應(yīng)該是對應(yīng)的。H說明了Destination的性質(zhì),如果是H的,則說明該地址是一個完整的地址,既有網(wǎng)絡(luò)號又有主機(jī)號,那么再匹配的時候就既要匹配網(wǎng)絡(luò)號,又要匹配主機(jī)號;反之,Destination就代表一個網(wǎng)絡(luò),在匹配的時候只要匹配一下網(wǎng)絡(luò)號就可以了。
這樣,IP選路的方式就可以更加具體化了。如下
順便提一下那個GenMask(還記得子網(wǎng)掩碼么),它指定了目的地址的子網(wǎng)號,例如第一條的子網(wǎng)就是11。
一般,我們在配置好一個網(wǎng)絡(luò)接口的時候,一個路由就被直接創(chuàng)建好了。當(dāng)然我們也可以手動添加路由。用route add命令就可以了。
而當(dāng)一個IP包在某一個路由器的時候發(fā)現(xiàn)沒有路由可走,那么該路由器就會給源主機(jī)發(fā)送“主機(jī)不可達(dá)”或者“網(wǎng)絡(luò)不可達(dá)”的ICMP包來報錯。
注意,一般的操作系統(tǒng)默認(rèn)是沒有路由功能的,這需要自己配置。這些歷史原因就不細(xì)說了,
當(dāng)IP包在某一個地方轉(zhuǎn)向的時候,都回給發(fā)送IP報的源主機(jī)一個ICMP重定向報文,而源主機(jī)就可以利用這個信息來更新自己的路由表,這樣,隨著網(wǎng)絡(luò)通信的逐漸增多,路由表也就越來越完備,數(shù)據(jù)轉(zhuǎn)發(fā)的速度也會越來越快。我們需要注意的是:
在主機(jī)引導(dǎo)的時候,一般會發(fā)送在網(wǎng)內(nèi)廣播一個路由請求的ICMP報文,而多個路由器則會回應(yīng)一個路由通告報文。而且,路由其本身不定期的在網(wǎng)絡(luò)內(nèi)發(fā)布路由通告報文,這樣,根據(jù)這些報文,每一個主機(jī)都會有機(jī)會建立自己的路由表而實現(xiàn)網(wǎng)絡(luò)通信。路由器在一份通告報文中可以通告多個地址,并且給出每一個地址的優(yōu)先等級,這個優(yōu)先等級是該IP作為默認(rèn)路由的等級,至于怎么算的就不深究了。
路由器一般會在450-600秒的時間間隔內(nèi)發(fā)布一次通告,而一個給定的通告報文的壽命是30分鐘。而主機(jī)在引導(dǎo)的時候會每三秒發(fā)送一次請求報文,一旦接受到一個有效的通告報文,就停止發(fā)送請求報文。
在TCP/IP詳解編寫的時候,只有Solaris2.x支持這兩種報文,大多數(shù)系統(tǒng)還不支持這兩種報文。(后面還會講到一些有用的路由報文)
前面的選路方法叫做靜態(tài)選路,簡要地說就是在配置接口的時候,以默認(rèn)的方式生成路由表項。并通過route來增加表項,或者通過ICMP報文來更新表項(通常在默認(rèn)方式出錯的情況下)。 而如果上訴三種方法都不能滿足,那么我們就使用動態(tài)選路。
動態(tài)選路協(xié)議是用于動態(tài)選路的重要組成部分,但是他們只是使用在路由器之間,相鄰路由器之間互相通信。系統(tǒng)(路有選擇程序)選擇比較合適的路有放到核心路由表中,然后系統(tǒng)就可以根據(jù)這個核心路有表找到最合適的網(wǎng)路。也就是說,動態(tài)選路是在系統(tǒng)核心網(wǎng)絡(luò)外部進(jìn)行的,它只是用一些選路的策略影響路由表,而不會影響到最后通過路由表選擇路由的那一部分。選路協(xié)議有一大類常用的叫做內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),而在IGP中,RIP就是其中最重要的協(xié)議。一種新的IGP協(xié)議叫做開放最短路經(jīng)優(yōu)先(OSPF)協(xié)議,其意在取代RIP。另一種最早用在網(wǎng)路骨干網(wǎng)上的IGP協(xié)議--HELLO,現(xiàn)在已經(jīng)不用了。
如今,任何支持動態(tài)選路的路由器都必須同時支持OSPF和RIP,還可以選擇性的支持其他的IGP協(xié)議。
Unix系統(tǒng)上面通常都有路由守護(hù)程序--routed。還有一個叫做gate。gate所支持的協(xié)議要比routed多,routed只是支持RIPv1版本。而gate則支持RIPv1、v2,BGPv1 等等。
它的定義可以在RFC1058內(nèi)找到,這種協(xié)議使用UDP作為載體(也就是UDP的上層協(xié)議)。我們最關(guān)心的就是RIP其中的一個段,叫做度量的段,這是一個以hop作為計數(shù)器(就是以走過多少路由為計數(shù)器)的段(IP協(xié)議里面也有一個TTL不是么)。這個度量段將最終影響到路由表的建立。參考圖:
一般說來routed要承擔(dān)如下的工作:
這個協(xié)議看起來會工作的很好,但是,這里面其實有很多隱藏的憂患,比如說RIP沒有子網(wǎng)的概念,比如說環(huán)路的危險。而且hop數(shù)的上限也限制了網(wǎng)絡(luò)的大小。
因此,出現(xiàn)了很多RIPv1的替代品,比如說RIPv2,比如說OSPF。他們都是通過某種策略來影響路由表,所以就不說了。
5、常用命令
1、 tracert命令
tracert/ traceroute(linux) IP地址或域名
2、router配置路由