阿里云代理商-阿里云服务器-阿里云数据库-重庆典名科技

CCNA - Part10 数据包的通信过程

发布时间: 2020-07-20 16:49:26文章作者: 网站编辑阅读量: 256

     CCNA - Part10 数据包的通信过程           对于像PC等终端设备来说,通过交换机可以实现同网段的通信。但如果想要给其他网段发生数据,就不行了,因为本身没有路由的功能,不知道该发给谁。这时就提出了一个网关的概念,为这些终端设备配置上,当想要实现跨网段的通信时,就把数据发送到配置的网关地址上。一般来说,默认配置的网关地址都是路由的接口地址。

    ARP
    什么是ARP?
    ARP-AddressResolutionProtocol.在封装数据帧-链路层的数据包时,由于上层已经有了目的IP地址。而在链路层需要封装SMAC和DMAC,但目的MAC如何获取呢?就是通过ARP协议,完成IP地址到物理地址的映射。但需要注意的是,ARP不能穿越路由器,也就是跨网段传输。
    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响应报文(如下图)

发送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,报文如下:

获取网关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地址是在不断发生变化的。

联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠