路由器轉(zhuǎn)發(fā)IP包的過程(路由器是如何實現(xiàn)路由轉(zhuǎn)發(fā)的)
IP數(shù)據(jù)包到路由器之后,它首先要讀去IP包頭的目標(biāo)IP地址,然后查看路由表,根據(jù)路由協(xié)議算法,確定一條最佳的路徑,為什么要這樣做呢,那是因為要確定這個數(shù)據(jù)包應(yīng)該從路由器上的那個接口上轉(zhuǎn)發(fā)出去,很明顯路由的每一條可用的路由都和路由囂上的接口是對應(yīng)的,就這樣一個數(shù)據(jù)包就離開了這個路由器。事情就是這樣。看見樓上有一個不太正確的說法,IP數(shù)據(jù)包頭里的源IP和目標(biāo)IP都不會被改變,如果改變數(shù)據(jù)包不可能到達(dá)或者回來,但只有一種情況,源和目標(biāo)IP是被改變的,那就是NAT.
路由器轉(zhuǎn)發(fā)數(shù)據(jù)包不會對它的IP源地址和目標(biāo)地址做修改,只會修改MAC.
具體路由器轉(zhuǎn)發(fā)規(guī)則如下:
當(dāng)主機A發(fā)向主機B的數(shù)據(jù)流在網(wǎng)絡(luò)層封裝成IP數(shù)據(jù)包,IP數(shù)據(jù)包的首部包含了源地址和目標(biāo)地址。主機A會用本機配置的24位IP網(wǎng)絡(luò)掩碼255.255.255.0與目標(biāo)地址進(jìn)行與運算,得出目標(biāo)網(wǎng)絡(luò)地址與本機的網(wǎng)絡(luò)地址是不是在同一個網(wǎng)段中。如果不是將IP數(shù)據(jù)包轉(zhuǎn)發(fā)到網(wǎng)關(guān)。
在發(fā)往網(wǎng)關(guān)前主機A還會通過ARP的請求獲得默認(rèn)網(wǎng)關(guān)的MAC地址。在主機A數(shù)據(jù)鏈路層IP數(shù)據(jù)包封裝成以太網(wǎng)數(shù)據(jù)幀,然后才發(fā)住到網(wǎng)關(guān)……也就是路由器上的一個端口。
當(dāng)網(wǎng)關(guān)路由器接收到以太網(wǎng)數(shù)據(jù)幀時,發(fā)現(xiàn)數(shù)據(jù)幀中的目標(biāo)MAC地址是自己的某一個端口的物理地址,這時路由器會把以太網(wǎng)數(shù)據(jù)幀的封裝去掉。路由器認(rèn)為這個IP數(shù)據(jù)包是要通過自己進(jìn)行轉(zhuǎn)發(fā),接著它就在匹配路由表。匹配到路由項后,它就將包發(fā)往下一條地址。
路由器轉(zhuǎn)發(fā)數(shù)據(jù)包就是這樣,所以它始終是不會改IP地址的。只會改MAC.
當(dāng)有數(shù)據(jù)包傳到路由器時,路由器首先將其的目的地址與路由表進(jìn)行對比,如果是本地網(wǎng)絡(luò),將不會進(jìn)行轉(zhuǎn)發(fā)到外網(wǎng)絡(luò),而是直接轉(zhuǎn)發(fā)給本地網(wǎng)內(nèi)的目的主機,改變的只是數(shù)據(jù)包的源地址,(原源地址MAC變?yōu)榱寺酚善鞯腗AC);當(dāng)然其中的過程關(guān)系到相關(guān)的協(xié)議的使用,像什么ARP,IP等。但是如果目的地址經(jīng)路由表對比,發(fā)現(xiàn)不是在本網(wǎng)中,將改變源地址的IP(原源地址的Ip地址改為了路由器的IP地址),路由器將熟數(shù)據(jù)包轉(zhuǎn)發(fā)到相應(yīng)的端口,進(jìn)行通信。