1.正点原子lwIP学习笔记——IP协议
2.嵌入式网络那些事内容简介
3.正点原子lwIP学习笔记——ICMP协议
正点原子lwIP学习笔记——IP协议
IP协议,源码作为TCP/IP协议族的源码核心,负责TCP、源码UDP、源码ICMP、源码IGMP等数据的源码影视付费源码传输(IPv4和IPv6)。它提供了无连接、源码不可靠的源码服务,这意味着数据传输不需维持对方信息,源码每次发送数据都需要明确目标IP地址,源码且不能保证数据包准确到达,源码只尽力而为,源码如发送失败会通知上层协议但不重传。源码
IP协议的源码功能包括:寻址,当主机间跨网段通信时,源码数据通过主机发送到路由器,路由器根据IP地址的兑换商城源码网络号和主机号进行转发;利用路由表决定数据包的传输路径,目标网络、下一跳地址和子网掩码是关键信息;当数据包大小超过MTU(通常字节),则需要进行分片和重组。
IP协议与ARP、ICMP和IGMP等配合工作。与MAC地址(物理地址)不同,IP地址是网络层以上的标识,分为五类。理解IP协议内容,IPv4的首部结构包含字节的固定部分,如差分服务区域、总长度、标识符、标志等,以及源和目标IP地址等信息。
IP分片原理涉及MTU限制,貔貅指标 源码当数据包超过MTU,就需要进行分片操作,比如字节的数据可能被分为多个片段,每个片段包含偏移量、标志等字段。pbuf内存分配和重组过程是关键,例如,使用pbuf结构存储和传递数据,TCP和IP头部会插入pbuf,通过ip_reassdata结构连接分片,直到所有分片接收完整后进行重组。
IP重组是根据到达顺序重新组合分片,lwIP处理分片时,ip_reassdata链表用于存储和管理未完整接收的数据包。源码中的函数如ip4_reass()和ip_reass_chain_frag_into_datagram_and_validate()处理了这些逻辑,确保数据包在到达目的中旅遨游源码地后正确组合。
总的来说,理解lwIP协议的这部分内容,关注核心原理和源码示例,把握数据传输的完整逻辑,包括IP首部字段、分片与重组,以及与MAC地址、TCP/IP协议的交互,是十分重要的。
嵌入式网络那些事内容简介
本文将深入探讨嵌入式网络领域中的关键协议栈LwIP,专为网络TCP/IP协议的初学者和嵌入式网络开发人员设计。从LwIP源代码的解析开始,我们将逐一揭示TCP/IP协议各层的机制和其实现原理,帮助读者理解其内在运作。
通过构建简易实验环境,本书详细讲解了LwIP在嵌入式设备组网中的tftp源码安装移植过程,包括实际操作和注意事项。此外,书中还提供了丰富的编程案例,让学习者能在实践中掌握LIP的运用,并实现理论知识与实践的结合。
对于TCP/IP学习者而言,本书是一本理想的入门和精通指南,配套的实验平台和实例让学习过程更为直观和高效。对于初入嵌入式领域的人员,实验平台的设计使得入门变得简单,通过实践操作,他们能更快地熟悉嵌入式开发。
最后,无论你是经验丰富的嵌入式网络开发者还是新手,本书都可作为你的实用参考手册,提供丰富的实战指导和深入理解LwIP协议的途径。
正点原子lwIP学习笔记——ICMP协议
ICMP协议是一个网络层协议。一个新搭建好的网络,通常需要先进行一个基本的测试,以验证网络是否畅通;但IP协议并不提供可靠传输。如果数据包丢失了,IP协议并不能通知传输层是否丢失以及丢失的原因。因此,我们需要ICMP协议来完成这样的功能。
总结来说,为了更有效地转发IP数据报和提高交付成功机会。
ICMP协议类型与结构:对于ICMP协议中的差错报告报文,在lwIP中实现的是目的不可达以及超时的报文;对于超时报文,又分为两种,一种是生存时间TTL(在IP首部中),另一种是分片传输中,接收到一个分片后的超时等待时间超时;ICMP协议中的询问报文,lwIP实现的则是回送请求/应答报文。
无论是差错还是询问报文,前4个字节是一样的:第一个是类型,第二个是代码,例如超时就是0/1,0代表生存时间为0、1则是超时等待时间为0;后两个是校验和;之后的4个字节则是取决于ICMP报文的类型;整个ICMP的数据部分,长度取决于类型;整个ICMP报文是在网络层,可以说IP数据包包含了IP首部以及ICMP报文。
ICMP差错报文用于检测IP数据报在传输过程中的异常信息(目的不可达、源站抑制、重定向、超时、参数错误)。
ICMP类型为3,则代表了是目的不可达;lwIP实现了代码值2、3、4的差错;ICMP类型为则代表了是超时错误;代码值0代表传输期间生存时间为0,1代表数据报组装期间生存时间为0。
ICMP查询报文用于诊断两个网络设备之间是否能够通信。
lwIP只处理ICMP类型0/8,代表了回显请求/应答;目的主机收到ICMP回送请求报文后立即回送应答报文,若源主机能收到ICMP回送应答报文,则说明到达该主机的网络正常(PING)。
ICMP报文数据结构:以上结构体位于icmp.h中;包括有ICMP的类型、代码、校验和、标志符以及序号五个变量。
差错报文中,前4个字节是类型、代码和校验后;后4个字节全为0;然后传输的数据就是因其差错的IP首部以及他的pbuf的前8个字节的数据;查询报文的前4个字节与差错报文一样;后4个字节中,2格式标识符,2个事序号;数据部分则是请求报文发送和应答报文重复(就是类型为8,就是回送请求,直接把类型改为0,变成回送应答)。
lwIP只实现目的不可达、超时差错报文,它们分别为icmp_dest_unreach和icmp_time_exceeded函数;这两种差错报文都是调用icmp_send_response发送;其源码和注释如下:
以上源码的逻辑,就是根据当前的type和code判断处理方式,判断得到是差错报文,就把被丢弃数据包的pbuf中的IP首部和前8个字节数据拷贝到差错报文中(同样也是一个pbuf)。
请求报文发送,应答报文重复。简单来讲,应答包是在请求包的基础上修改得来;查询报文的源码和注释如下:
总结来说,ICMP的回送请求,把ICMP结构体的type从8改成0,然后把pbuf的payload上移个字节,添加IP首部,就变成了回送应答包。
这一篇的源码还是比较简单易懂的,没有太多要F跳转的内容,总的原理也比较清晰。
至此,lwIP的大部分协议都学完了,还剩下TCP和UDP协议,现在的lwIP框架如下: