ip數據包經由路由轉發的時候源ip,目的ip是否改變


http://www.voidcn.com/blog/gao1440156051/article/p-5787916.html

 

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。

 

 

數據包經由路由轉發時源、目的IP地址及MAC地址變化情況

 
IP數據包經由路由轉發的時候源ip,目的ip,源MAC,目的mac是否發生改變,如何改變?
 
A—–(B1-B2)—–(C1-C2)——-E
 
如上為例, B1和B2是路由器B上的兩個接口,C1和C2是路由器C上的兩個接口,A和E是PC,由主機A向主機E發送數據包,那么在主機A形成的數據包的目的IP就是E的IP,源IP就是主機A的IP地址,目標MAC地址就是B1的MAC地址,源MAC地址就是A的MAC地址
 
由A發給路由器B,B經過重封裝后,源IP和目標IP是不變的,源MAC地址變成B2的MAC地址,目標MAC地址變成C1的MAC地址,封裝完成發送給路由器C,路由器C接收到數據包后和B做的操作是一樣的,源IP和目標IP的不變的,源MAC地址變成C2的MAC地址,目標MAC地址變成主機E的MAC地址,然后發送給主機E,這樣E就收到了這個數據包,當回復數據包的時候就是把收到的數據包的源IP地址(主機A的IP地址)和源MAC地址(接口C2的MAC地址)作為他的目標IP和目標MAC地址
 
http://nanjingfm.blog.51cto.com/2121842/1179368
 

關於MAC地址和IP地址在傳輸過程中變與不變的問題:

結論:mac地址在同一個廣播域的傳輸過程中是不變的,在跨越廣播域的時候會發生改變的;而IP地址在傳輸過程中是不會改變的(除NAT的時候)。

我們知道的幾個概念:

    首先我們要知道,MAC地址是用於同一物理或邏輯第2層網絡上的設備間進行通信的;

    而第三層地址(IP地址)是可以在多個網絡設備之間通信的。

下面我們來分析一下:

    MAC地址是在同一個廣播域有效的,那么去了另外一個廣播域(網段)MAC地址肯定要改變的

    在同一個廣播域中數據幀的mac地址是不會變的,因為所有交換機應該都知道該廣播域中的所有主機的MAC地址(如果不知道會通過被動廣播的方式來學習到)。既然知道所有的MAC地址,那么當我交換機收到數據幀的時候就看一下目標MAC地址,然后對照一下MAC地址表,從對應的接口仍出去就好了。

    IP地址是在整個網絡中有效的,整個Internet網絡就相當於是一個大的地圖,同樣知道所有的IP地址如何到達,那么在傳輸過程中源ip和目的ip也是不會改變的。當路由器收到數據包的時候,檢查數據包的目的IP地址,然后查找路由表(路由轉發表),選擇合適的接口發出去。

練習一下:

   

圖中A-R4-R2-B
假設有數據幀X,傳輸過程中:
A到R4:MAC地址(存在的話)源地址是A,目的地址是R4;
R4到R2:MAC地址(存在的話)源地址是R4,目的地址是R2;
R2到B:MAC地址(存在的話)源地址是R2,目的地址是B;

在沒有經過NAT情況下,源IP地址和目的IP地址在整個傳輸過程是不能改變的。
A到R4:IP地址 源地址是A,目的地址是R4 B;
R4到R2:IP地址 源地址是A,目的地址是R4 B;
R2到B:IP地址 源地址是A,目的地址是R4 B;

 
 
============
http://zhengqiqi17.iteye.com/blog/2065029
 

當交換機收到一個數據包時;
交換機會將這個數據包包頭的目的MAC信息提取出來,與自身的MAC地址表比較;
情況一:如果找到對應項,則按MAC表進行轉發;
情況二:如果沒找到對應項,則在除了接收到數據包以外的所有端口進行轉發(廣播);

解釋:MAC地址表 是MAC地址與端口對應的關系表;即某個MAC地址連接在某個端口;


問題:當情況二發生時,需要在其他所有端口進行廣播(這樣做其實很不好),這個廣播會到什么地方結束呢?答:——路由器

 

為什么到路由器就會結束了呢?
路由器接收到一個數據包時,工作過程如下:
首先提取數據包頭的目的MAC信息,與自身MAC表比較:
情況一:如果找到對應項,則按MAC表進行轉發(與交換機一樣);
情況二(亮點來了):如果沒找到則提取數據包頭的目的IP信息,則與自身的路由表進行比較(又分兩種情況)
      情況二。1找到了對應的路由表,則按着路由表轉發(與查到MAC表很像啊)。
      情況二。2沒找到對應路由表,則按着缺省路由轉發(發現了嗎自始自終沒有出現過廣播)

解釋:路由表和MAC的區別在於,路由表存放的是目的IP下一步要去的地方的IP。

廣播在路由器能夠結束,原因就是路由器會在查找不到對應MAC表時,根據目的IP進行路由。路由過程的兩種情況都不存在廣播

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM