博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ip数据包经由路由转发的时候源ip,目的ip是否改变

Posted on 2016-11-25 11:09  bw_0927  阅读(14647)  评论(0编辑  收藏  举报

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进行路由。路由过程的两种情况都不存在广播