数据包的封装
一个数据包从A机(源)经路由器B到C机(目的),假定ip都是外网ip,
这个数据包今由A机发往路由器B时,第三层数据包的封装情况是 源:IPa,目的IPc,而封装上数据链路层后为:Mac_A(源),Mac_b(目的),即它的目的硬件地址是要发往的下一个网关(路由器)的硬件地址,而不是目的ip的硬件地址,是这样吗?
然后由路由器B到C机, 源:IPa,目的IPc不变,而在路由器B处理这个包的过程中,加上的数据链路层地址是Mac_B(源),Mac_c(目的),是这样吗?
请解答,谢谢
[解决办法]
你的理解不完全正确。
我们知道,路由器工作在三层,其数据包为IP包,而交换机(二层)工作在二层,其数据包为帧。不同层次的设备最高只能对其相应层次的数据包进行处理。
当A的包发往B时,B收到的是一个数据帧(从二层上看,当然从物理层看就是一些信号),B是路由器,因此对这个帧进行解包,找到其IP地址信息,然后通过路由表查找出相应端口,然后将这个帧发往与C相连的端口,此时帧中的目的MAC已经改变为与C相连的端口的MAC。接着这个帧的目的MAC再一次改变为C的MAC然后到达C。
我们看到,在一个数据包的传递过程中,三层的IP地址信息以及源MAC地址是不改变的,而目的MAC地址是由网络设备动态改变的。
网络设备是如何知道下一跳的MAC地址是什么呢,其实还是靠三层的IP信息计算得出的。在三层上是路由计算,在二层上是通过广播然后根据应答来获取。
[解决办法]
纠正一下楼上,报文做三层转发时,源IP地址和目的IP地址是不变的,但源MAC和目的MAC都是会变化的。
每经过一次三层转发,目的MAC和源MAC都要变化一次!
具体来讲就是,网关在转发报文的时候,会用自己的MAC还替换报文中的源MAC,用下一跳的MAC来替换目的MAC;
而原始报文的源MAC是发送方的MAC地址,目的MAC是网关的MAC。
[解决办法]
LZ 你的PC A(172.16.1.2)和PC B(192.168.100.2)连接在同一个二层设备上是不可能ping的通,因为ARP包是基于某一网段的广播地址来查询的,而你的PC A的广播地址为172.168.1.255 而你的PC B的广播地址为192.168.100.255,两个广播地址根本就是不相同的,所以A和B无法实现ARP查询MAC地址,既而无法完成你的ping任务。
当你的两台PC连接在三层设备上的时候,路由器或者三层交换机是根据IP地址来进行路径选择的,从而将数据包传输只目标网段,然后在那个连接目标网段的设备上才会进行ARP来查询出目标地址对应的MAC地址