CCNA - Part10 数据包的通信过程 对于像PC等终端设备来说,通过交换机可以实现同网段的通信。但如果想要给其他网段发生数据,就不行了,因为本身没有路由的功能,不知道该发给谁。这时就提出了一个网关的概念,为这些终端设备配置上,当想要实现跨网段的通信时,就把数据发送到配置的网关地址上。一般来说,默认配置的网关地址都是路由的接口地址。
ARP
什么是ARP?
ARP-AddressResolutionProtocol.在封装数据帧-链路层的数据包时,由于上层已经有了目的IP地址。而在链路层需要封装SMAC和DMAC,但目的MAC如何获取呢?就是通过ARP协议,完成IP地址到物理地址的映射。但需要注意的是,ARP不能穿越路由器,也就是跨网段传输。
ARP原理
假设这里出现的设备均是第一次启动。把路由器的路由功能关闭,这里的R1代表的就是PC了,否则是Ping不通.
这里R1想要给PC发送IP数据包,只有按照要求封装成2层数据帧的格式才可以,步骤如下:
发现目前有源MAC地址,却没有目的MAC地址,那么封包不成功,暂时将包缓存。
接着发送ARP广播(将ARP广播添加帧头部发送),交换机转发该广播到该网络的每一个主机,
每个主机收到后开始解封装,进而查看到ARP报文中的目的IP,如果该IP和自己的IP一致,那么做出ARP响应报文(单播),否则丢弃。
R1收到PC的响应报文后,开始解封装,并查看ARP报文中的目的IP,添加到缺少的目的MAC,最后再发送到数据到PC。
ARP分类
标准ARP:用于获取MAC的ARP协议。
代理ARP:正常来说,如果某个接口收到的网络层IP不是自己的话,就会把包丢掉。但如果在路由器的上接口配置了代理ARP,路由器在收到数据包后,会先查看自己的路由表,看能不能到达,能到达的话。就将自己接口的MAC地址回复给请求方。注意真的MAC可能是另一网段的设备。其实这里就是一种欺骗行为,欺骗发送者自己的IP和MAC.
无故(免费)ARP:用于检测IP地址是否冲突,已经被其他接口使用。目的和源IP都是自己.(在接口第一次启动时发送。)
同网段的数据通信
这里出现的设备均是第一次启动,把路由器的路由功能关闭,这里的R1代表的就是PC了,否则是Ping不通的
这里R1想要给PC发送IP数据包,只有按照要求封装成2层数据帧的格式才可以。这时发现目前有源MAC地址,却没有目的MAC地址,那么封包不成功,暂时将包搁置。接着发送ARP广播(将ARP广播添加帧头部发送,帧结构如下图)
交换机收到该数据包后发现目的MAC为ffff:ffff:ffff,根据交换机的转发规则,先将R1的源MAC和自己端口号(e0/0)存入MAC表,然后进行泛洪操作,广播到该网络的每一个主机。
每个主机收到后开始解封装,进而查看到ARP报文中的目的IP,PC发现目的IP和自己的IP一致,接着发送ARP响应报文(如下图)
交换机收到PC的ARP应答报文后,由于目的MAC地址在本身的MAC表里已经存在,进而直接转发给R1。
R1收到PC的响应报文后,开始解封装,并查看ARP报文中的目的MAC,添加到搁置的缺少目的MAC的数据包,接着将封装好的数据帧发送到PC(ping命令在传输层是ICMP协议)
不同网段之间的通信
这里注意一下,两台PC机要配置网关,否则ARP包内的内容可能不一样
不管终端的目的是哪里,首先都要将数据包发送到网关
PC1要给PC2发送ICMP包,首先要发送到网关,我们先模拟下封包过程:
封装4层ICMP头
封装3层IPV4头,源IP为12.1.1.1目的IP为23.1.1.2
封装2层头,源MAC为aabb.cc00.1000目的MAC(也就是网关的MAC)不清楚
封装暂停。
PC1开始发送ARP报文,获取网关MAC,报文如下:
PC1收到ARP应答报文,进行解封装,取出报文中缺少的MAC地址,添加到搁置的ICMP的包中,PC1顺利的将数据包发送至网关
R2收到发来的ICMP包后,进行解封装,进行到第三层时,发送目的IP是自己可达网段中的IP。因此进行转发,开始封装新的ICMP数据包
封包过程如下:
三层不变
封装二层,封装源MAC:aabb.cc00.2010,目的MAC(PC2终端MAC)不清楚
封包暂停
R2开始发送ARP报文,请求PC2的MAC地址,报文如下:
交换机收到ARP请求报文,将R2的e0/1的MAC地址和自己的端口号(e0/0)记录在MAC地址表内,然后根据规则进行泛洪.
PC2收到ARP解析包后,发送ARP包中的目的IP是自己,因此进行ARP应答,并将ARP请求中的源MAC(aa:bb:cc:00:20:10)和源IP(23.1.1.1)记录在自己的ARP缓存表中,应答报文如下:
交换机收到PC的ARP应答报文后,先将PC2的e0/0MAC地址和自己的端口号(e0/1)记录字MAC地址表内,接着发现要去数据包要去的MAC地址在自己的MAC表内,因此直接转发。
R2收到ARP应答报文,取出PC2的MAC地址,并添加到搁置的ICMP包中,封包成功。接着将ICMP包发给PC2,同时也将PC2的MAC地址和IP记录在自己的ARP缓存表中。
PC2收到ICMP包发现,三层包中目的IP是自己,接着进行ICMP应答,我们再来模拟一下封包的过程:
封装4层ICMP头
封装3层,源IP:23.1.11目的IP:12.1.1.1
封装2层,源MAC:aabb.cc00.4000目的MAC:网关MAC(aabb.cc00.2010)(在ARP缓存表中取得)
然后进行发包。
交换机收到数据包后,发送目的MAC在自己的MAC表中有,直接转发给R2,R2收到数据包后,解封2层,发现3层中要去的网段自己能到达,因此开始封装包:
3层不变
2层的源MAC为自己的MAC地址(e0/0),目的MAC为aabb.cc00.1000(从ARP缓存表中取得),
报文如下:
最后我们可以发现,数据包在跨网段传输时,网络层的IP是固定不变的,但是MAC地址是在不断发生变化的。