SylixOS 协议栈学习(四)ping 工作流程

SylixOS 协议栈学习(四)ping 工作流程

Ping工作流程:

1、涉及协议介绍
      运行ping程序时,会用到以下协议:
      ICMP(因特网控制报文协议):用于IP主机、路由器直接传递控制消息(一般是差错信息,如TCP/UDP传输失败,会构建ICMP报文返回)。
      IP协议:一种不可靠、无连接的传输协议(目的是为了更好的提供传输服务)。(对于TCP传输,已十分可靠,不需要在IP层再链接;UDP本身就是不可靠、无连接的协议,使用IP协议能更快传输)。
      ARP(地址解析协议):提供IP地址->物理MAC地址的映射(ARP高速缓存)。(在物理层,设备间的识别需要通过MAC地址,网络层通过IP地址识别)。
      以太网协议:信息传输到物理层之前需要以太网协议封装(添加源MAC地址,目的MAC地址)。


2、举例说明ping流程
      当运行ping 192.168.2.55时,举个通俗的例子:
      主机IP为A,ping的IP号为B。A想要与B进行通信,A写了一封ICMP信(信的大致内容为:如果你收到这封信,请给我回复)。因为要经过网络层,A将这封信用IP协议封装(其中有源IP地址,目的IP地址)。又因为要经过链路层,A又将封装后的信再用以太网协议包装成一个快递。A将这个快递递给物理层的快递员说:请把它发送给B。快递员询问:B的MAC地址是多少?A找了找自己的ARP高速缓存,回答说:我不知道。快递员很热心,说:那我帮你问问吧!快递员写了许多ARP信,给他所在区域的所有人都发了一次,信的大致内容为:B你的MAC地址是多少?A在找你。此时C收到了这封信,用以太网协议拆开,发现这是一个ARP信,信的内容大致说在找B,C一看不是找它的,就把信丢掉了。在此之前B也收到了这封信,拆开,读,发现A在找它,B就将A的地址保存到了自己的ARP高速缓存中(A,B都很健忘,保存的信息每过20分钟它们就找不到了)。并回了一封ARP信给A,大致内容为:B的MAC地址为xx:xx:xx:xx:xx:xx,用以太网协议包装成一个快递,快递单号(以太网帧头)上有A的MAC地址,B的MAC地址,交给了物理层快递员。快递员知道了A的MAC地址,直接就送到A那,A收到快递,拆开,读,把B的MAC地址写到了ARP高速缓冲。A接着把它的ICMP快递发给B,B收到后,拆开,读(IP包装),拆开,读,ICMP信。信中写到让B回复。B接着也构建了一封ICMP信,用相同方式包装,发送出去,等到A也收到了信。Ping工作结束。循环N次。统计。

    • Related Articles

    • SylixOS 协议栈学习(三)ICMP 处理

           ICMP(Internet control message protocol)是网络控制报文协议,用于在IP主机跟路由器之间传输控制信息的。 控制信息指网络不通、主机是否可达、路由是否有用等。  之前在将ip4_input时,涉及到三次ICMP的东西:         1、在转发过程中,如果TTL变为0,则要用icmp_time_exceeded函数向源主机发送一份超时ICMP信息。         2、会通过ip报头,判断是否是ICMP报文,如果是,则调用icmp_input函数。 ...
    • SylixOS 协议栈学习(二)以太网网卡接口部分初始化

              在《SylixOS_协议栈学习(一)网络接口结构》中,介绍了netif 结构体和netdev结构体。        下面举个例子来看一个以太网网卡接口结构是怎样被初始化,还有数据包是如何接收和发送的。     static struct netdev_funcs net_drv = {                         ①        .init      = __enetCoreInit,        .transmit  = __enetCoreTx,   ...
    • SylixOS使用的网络协议栈是?

      Q:SylixOS使用的网络协议栈是? SylixOS使用的网络协议栈是 lwip 版本为 v2.1.0。 /** X.x.x: Major version of the stack */ #define LWIP_VERSION_MAJOR 2 /** x.X.x: Minor version of the stack */ #define LWIP_VERSION_MINOR 1 /** x.x.X: Revision of the stack */ #define ...
    • 支持伺服电机周期最低多少?最大支持几个轴?协议栈是内置的吗?

      问:SylixOS 支持伺服电机周期最低多少? 答:伺服周期不限,一般伺服的 250 us ,125 us 我们都支持。 问:SylixOS 最大支持几个轴? 答:轴数理论上是 65535 个 ,我们现在客户最多用了 20 几个。 问:SylixOS 协议栈是内置的吗? 答:协议栈直接是主站内置 ,不需要扩展板卡。
    • SylixOS 协议栈学习(一)网络接口结构

             1) netif 的结构体来描述一个硬件网络接口的。     struct netif {                                                         struct netif *next;    // 指向下一个 netif 结构的指针         struct ip_addr ip_addr;    // IP 地址相关配置         struct ip_addr netmask;         struct ...