才子佳人博客

我的故事我讲述

IP数据包经由路由转发的时候源IP,MAC,目的IP,MAC改变情况介绍
 
来源:xjh  编辑:xjh  2017-09-18

为了便于理解,先从同一广播域内两台主机通信开始叙述。然后再介绍跨路由传输过程,两者不同之处在于源和目标MAC地址的替换。


情景一:同一广播域内,两台主机通信过程。

根据TCP/IP协议原理,两主机要通信传送数据,就要把应用数据封装成IP包,然后再交给下一层数据链路层继续封装成帧;之后根据MAC地址才能把数据从一台主机,准确无误的传送到另一台主机。

如图所示,当N0要和N1通信时,假如N0知道N1的IP但却不知道它的MAC地址,那NO就会发送一个ARP的广播请求(里面源IP是NO 目标IP是N1  源MAC是N0  目标MAC是12个F)给同一广播域中的所有成员,当交换机SW0从自己的1接口上收到这个广播包,然后它会读取这个帧的源MAC地址和目标MAC地址,由于交换机SW0刚启动加电时,它的MAC表为空的。所以它会把NO的MAC地址与之相对应的接口1放到一张表里,这张表就是交换机的MAC地址表。然后它再从别的接口广播这个数据帧,当别的主机收到这个广播时,查看目标IP不是自己的,就会丢弃此包。

如果N1接收到这个数据帧,它检查目标IP和自己的IP是一样的,就会回应这个ARP请求,把自己的IP和MAC封装成源IP和源MAC,N0的IP和N0的MAC地址为目标IP与目标MAC,并记录NO的MAC与IP,放进N1自己的ARP缓存表中。此时,这个应答包经过交换机SWO时,SWO又会检查源MAC 、目标MAC,把N1的MAC和自己接口2放进MAC地址表中,再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应(由于刚开始有记录过N0的MAC),那它就会直接把这个应答包从接口1送出去。主机N0收到这个包后发现目标MAC是自己,就会处理这个包。并把N1的MAC与IP放进N0自己的ARP缓存表中。这时主机N0就知道N1的MAC地址了,以后要发送数据,就直接把N1的IP与MAC封装进帧中进行点对点的发送了。

情景二:跨路由的数据传输过程。

当NO要和N2通信时,此时NO会检查N2的IP地址跟自己是否处在同一网段,图上得知,两主机肯定不会是同一网段的。因为N2和自己处在不同网段,所以,N0会把数据包发给它的网关,也就是R0上的F0/0接口了。源IP和源MAC地址是N0自己的,目标IP是N2的,目标MAC是R0上接口F0/0的(如果N0不知道F0/0的MAC,就会跟情景一相似,发个ARP广播来得到F0/0的MAC地址)。当这个数据包到达R0时,路由器R0会查看目标IP的是否是自己,由于目标不是自己,所以,会查看自己的路由表,找出到达N2网段的路由;如果没有相关条目,就直接丢弃。当查看路由表后发现到达N2网段的出接口是F0/1。于是,把数据包转到F0/1接口上,再由接口F0/1传给R1。这个过程,数据包的源IP是N0,源MAC是F0/1,目标IP是N2,目标MAC是R1的F0/1接口MAC 。

当R1收到这个数据包后,同样也要检查包的目标IP是否是自己,它会主动查找自己的路由表,发现目标IP跟自己F0/0接口处在同一网段,于是就把包传到F0/0接口上去发给N2 (假如R1上的ARP缓存表中没有N2的MAC,则R1接口F0/0会发送一个ARP广播给跟它相连的广播域中;这个ARP广播包的源IP是R1接口F0/0的IP,源MAC也是F0/0的MAC,目标IP是N2,目标MAC为12个F),假如N2的MAC地址已经在R1的ARP缓存中了,那就会直接把数据包封装成:源IP为N0,源MAC为R1的F0/0,目标IP为N2,目标MAC为N2了。

到了这里,包的跨路由传输就会结束了,当包到达N2,做反向操作即可把包发给N0了。

简言之,下面用简单的图例说明源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;源、目标MAC是真实的两台主机上的IP与MAC地址。然而,跨路由传输中,包的源IP与目标IP始终不会发生变化,源和目标MAC根据所经过的路由接口不同而发生相应变化。

补充知识:

路由器实现从源网络发送数据包到目标网络,期间需要在网络层进行路由选择,而路由选择就是选择最好的路径,即路由器在一个接口接收数据包,然后把它转发到通往目的地最优路径的下一个接口,或者说在该路由器中,把数据包从另一个最合适的接口转发出去,而在这个过程中路由器需拿上该数据包的目标网络地址匹配路由器中的路由表条目,每一个条目仅仅指向它的下一跳IP地址,即指向跟它相连的下一个路由器接口。可见,路由选择就是决定把数据包根据目的地址发送到哪里去的过程。

最好的路径如何体现?通常通过比较计量值以及各计量标准所占比重来决定,常用计量值(度量值)有跳数、带宽、时延、负载、可靠性(链路误码率)。RIP协议就是简单的参考跳数来决定最优下一跳,其实是不是最优最快也不一定。

路由器一旦检查了数据包的目标地址,路由器就知道或不知道如何来转发这个数据包到下一跳,若不知道就直接丢弃,若知道,路由器就将数据包的目标物理地址更改为下一跳的物理地址,并且将该数据包传送到该物理地址。这里的下一跳可能是最终目的地,也可能不是,若不是最终节点,通常是另一个路由器,那它就像前一个路由器一样,执行数据包交换过程。

特别注意到:

当路由器收到一个待转发的数据报,从路由表中匹配数据报的目标网络地址,得出下一跳的IP地址,其实就是跳往下一个路由器的接口地址,网络接口软件负责把该路由器的IP地址使用ARP转换成硬件地址,并将硬件地址放在链路层数据帧的目标MAC中,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述这种查找路由表、计算硬件地址、写入数据帧源MAC、目标MAC等过程,不断地重复进行,这都需要时间开销。

简言之,在数据包穿越路由器的过程中,源IP和目标IP是从不改变的,但是源MAC和目标MAC根据穿越的路由器依次替换。

来源参考:
谢希仁,《计算机网络第五版》,电子工业出版社,p118
http://blog.chinaunix.net/uid-23886490-id-3038875.html
http://chtimi.blog.163.com/blog/static/20735914420129151924767/
http://blog.sina.com.cn/s/blog_6490532801010t17.html


分类:网络日志| 查看评论
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: