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