1. 程式人生 > >ip資料包經由路由轉發的時候源ip MAC,目的ip 目的MAC是否改變

ip資料包經由路由轉發的時候源ip MAC,目的ip 目的MAC是否改變

轉載自https://blog.csdn.net/yiluyangguang1234/article/details/56666109

ip資料包經由路由轉發的時候源ip,目的ip是否改變?

最近面試網路方面的經常問到這個問題,答案是不能改變的,*除非做了nat轉換才能改變。

不過mac地址是變化的,因為傳送端開始不知道目的主機的mac地址,所以每經過一個路由器mac地址是變化的。

目的mac地址是如何得到的?

TCP/IP裡面是用的ARP協議。比如新建了一個內網,如果一臺機器A找機器B,封裝FRAME時(OSI的第二層用的資料格式),要封裝對方的MAC,開始時A不知道B的MAC,只知道IP,它就發一個ARP包,源IP是自己的,目的IP是B的,源MAC是自己的,目的MAC是廣播的。然後這個請求包在內網內被廣播,當其他機器接到這個包時,用目的IP和自己的IP比較,不是的話就丟棄。B接到時,發現IP與自己的一樣,就答應這個包的請求,把自己的MAC送給A。如果B是其他子網的機器,那麼路由器會判斷出B是其他子網,然後路由器把自己的MAC返回給A,A以後再給B發包時,目的MAC封裝的是路由器的。

路由轉發過程:

當主機A發向主機B的資料流在網路層封裝成IP資料包,IP資料包的首部包含了源地址和目標地址。主機A會用本機配置的24位IP網路掩碼255.255.255.0與目標地址進行與運算,得出目標網路地址與本機的網路地址是不是在同一個網段中。如果不是將IP資料包轉發到閘道器。

在發往閘道器前主機A還會通過ARP的請求獲得預設閘道器的MAC地址。在主機A資料鏈路層IP資料包封裝成乙太網資料幀,然後才發住到閘道器……也就是路由器上的一個埠。

當閘道器路由器接收到乙太網資料幀時,發現數據幀中的目標MAC地址是自己的某一個埠的實體地址,這時路由器會把乙太網資料幀的封裝去掉。路由器認為這個IP資料包是要通過自己進行轉發,接著它就在匹配路由表。匹配到路由項後,它就將包發往下一條地址。

路由器轉發資料包就是這樣,所以它始終是不會改IP地址的。只會改MAC.

當有資料包傳到路由器時,路由器首先將其的目的地址與路由表進行對比,如果是本地網路,將不會進行轉發到外網路,而是直接轉發給本地網內的目的主機;但是如果目的地址經路由表對比,發現不是在本網中,有nat就將改變源地址的IP(原源地址的Ip地址改為了路由器的IP地址),路由器將資料包轉發到相應的埠,進行通訊。

比如: 
如:A訪問B, 
首先對比是否同一子網,如果是,檢查ARP表,有B的MAC就直接傳送,沒有就傳送ARP請求.如果否,傳送到預設閘道器C,源IP為A,源MAC為A,目的IP為B,目的MAC地址為C, 
C接收到這個包,檢查路由表,傳送到下一跳D,源IP為A,源MAC為C,目的IP為B,目的MAC為D….. 
如此迴圈,直到傳送到B.

NAT為特殊應用,會修改源IP為閘道器自己外網IP。