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 协议栈学习(一)网络接口结构
1) netif 的结构体来描述一个硬件网络接口的。 struct netif { struct netif *next; // 指向下一个 netif 结构的指针 struct ip_addr ip_addr; // IP 地址相关配置 struct ip_addr netmask; struct ...
【网络攻击】阿基里斯测试仪测试导致协议栈崩溃解决办法
问:【网络攻击】阿基里斯测试仪测试导致协议栈崩溃解决办法 测试方法: 发送 ip fragment 报文,10M 流量,测试报文一直没有最后一片的标志,就是相当于无限分片。 这些报文先把协议栈 pbuf 全部占满了,一直没有释放,在等最后一片或者超时。 所以在测试过程中,协议栈资源一直是满的,无法提供服务。 分析: ( 由源码可知,协议栈针对这个的超时时间应该是 15s ),如果支持无限分片,资源迟早会消耗光 答:修改IP分片