Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解

先看拓朴图: 

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解

其中ARP报文格式如下:

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解

ARP报文格式为:

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解


当主机B收到了这个报文后,发现是主机A 的ICMP回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的ping过程。

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解

如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发,但是他也不知道网关的MAC地址情况下呢就会向之前那个步骤一样先发送一个ARP广播,学到网关的MAC地址,再发封装ICMP报文给网关路由器报文格式如下:

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解


最后,在主机C已学到路由器2端口MAC地址,路由器2端口转发给路由器1端口,路由1端口学到主机A的MAC地址的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求回复过来。报文格式大致如下: 

Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解


总结:

1、两台主机不在同一子网内,主机A要与主机C通信,主机A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在主机A系统软件中设置。这个IP地址实际上对应路由器1端口的IP地址(1.1.1.2)。所以主机A对“缺省网关”的IP地址广播出一个ARP请求时,路由器的1端口的MAC回复给主机A,此时主机A数据包的目的MAC替换为路由器1端口MAC。
2、MAC替换后,经物理层,传输到交换机物理层,再传到交换机数据链路层,再经数据数据链路层到物理层。
3、经bit流传到路由器的物理层,然后传到数据链路层,二层解封装,目的IP与路由器三层IP路由表比较,若匹配正确,交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)
4、重复进行MAC替换后, 在路由器中,找到与目的IP匹配表项,若路由器中存在主机C对应的MAC表项,则数据传输到C网络层,否则路由器发送ARP广播请求主机C的MAC。
(5)当主机C收到主机A的数据包后,再从主机C到主机A进行一次反向MAC替换过程。反向过程中,每一步省略掉ARP请求NEXT HOP的MAC,因为MAC表已经建立起来



 重要知识点:

     

      在数据包端到端的传输过程中,逻辑地址始终不会发生改变,而MAC地址则随着具体链路的不同而不同

      路由器在某一个入接口上接收到数据帧后,先检测目的地是否是自己。若是,则交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)

      ARP(Address Resolution Protocol,地址解析协议)有以下特点:
1、ARP由ARP Request(广播)ARP Reply(单播)组成。
2、只有当发送方认为目标主机与自己位于同一逻辑网络(同一网段),ARP Request才会发出。
3、属于本地的MAP(不同于FR MAP)IP地址与MAC地址均属于同一个设备(接口)。

其他概念:

1、封装
   所谓封装是指在发送方发生的自上而下的过程——在每一层为应用数据添加上特定的头部/尾部信息(PDU,Protocol Data Unit,协议数据单元)
 Application(应用程序)→segment(数据段)→packet(数据包)→frame(数据帧)→bit(比特,二进制位)

2、解封装
    所谓解封装是指在接收方发生的自下而上的过程——逐层的去掉头部以及尾部信息

文章知识点与官方知识档案匹配,可进一步学习相关知识网络技能树跨区域网络的通信学习常用协议和命令22384 人正在系统学习中

来源:zqixiao_09

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月21日
下一篇 2018年1月21日

相关推荐