工业以太网协议 以太网协议
经过上一篇的手把手教你手撸通讯协议(一) S7协议解析 中,大家有没有发现缺了很大一部分篇幅,而且也只讲到了UDP的包头;由于UDP是让大家简单的看到以太网的工作方式,接下去我们通过开源的LwIP协议栈来好好了解以太网的真实工作方式,我将会在这一期结束的时候,给大家实现一个基于STM32的modbusTCP 主站的小demo 。
第一节:协议层简介
首先我们还是根据标准的TCP/IP协议栈来分析传输层和链路层的网络是怎样打包的;
首先我们先了解几个基础协议及网络分层:
网络接口层:定义数据帧(对电信号0/1进行的特定分组)、确认主机的物理地址(MAC地址),通过传输介质在网络上传输数据帧 。网络接口有不同的实现方式,比如可以通过有线或无线的方式收发数据帧,不同的实现方式意味着不同的帧结构、传输速率等 。
网络层:定义网络地址(IP地址)、区分网段、对于子网内的数据包进行MAC寻址、对于不同子网的数据包进行路由,实现网络中主机到主机的通信 。主要有PPP协议、SLIP协议、ARP、ipv4等基础协议 。
传输层:定义端口(Port)、标识应用程序身份、实现端口到端口的通信,TCP协议可以保证数据传输的可靠性 。
应用层:定义数据格式并按照对应的格式解读数据(下层传送过来的是字节流,不能很好的被程序识别) 。应用层定义了各种各样的协议来规范数据格式,常见的有 HTTP、FTP、SMTP 等 。
第二节:数据包及内存存储结构
由上面的基础知识、我们根据理论知识,我们根据LwIP来进行学习 。其实其实网络层级来说:TCP和UDP类似,但TCP需要实现可靠连接,网卡接收的数据包,有可能是成千上万字节,也有可能是几个字节,所以我们需要对其数据进行打包处理 。
由于内存分配问题可以谈的很深、涉及到编译原理、字节对齐这些,篇幅有限,不展开 。反正主要是两种方式、一种是链表、一种是内存池方式,各种系统中也都会讲到,我们主要从数据包开始说明:
struct pbuf {struct pbuf *next;void *payload;u16_t tot_len;u16_t len;u8_ttype;u8_t flags;u16_t ref;};typedef enum {PBUF_RAM, /* pbuf data is stored in RAM */PBUF_ROM, /* pbuf data is stored in ROM */PBUF_REF, /* pbuf comes from the pbuf pool */PBUF_POOL /* pbuf payload refers to RAM */} pbuf_type;这两个看上去是不是很熟悉,就是一个链表节点 。分配完成后就是这样:












对这一期就先到这边,TCP的内容留在下一期 。
结尾
总结一下
Summary
1、LwIP协议栈主要用于嵌入式系统的以太网协开发 。该协议栈为很轻量级的以太网协议栈,通过该协议栈的学习,可以很好的理解以太网是怎么工作的,采用该协议栈,我在很多项目中实现了MQTT、S7协议、ModbusTCP协议等工业协议的开发,还有一些私有协议的开发,很好的用于网络中间件的开发 。
2、讲解了物理接口层、链路层、网络层、传输层的部分协议实现和打包方式 。讲的比较简单,也是给大家一个可以参考的方向 。
留两个问题
问题1:IP数据包失序后怎么处理?
问题2:TCP发生粘包问题如何处理(或者说S7协议、CIP协议等是怎么处理粘包问题)?
【工业以太网协议 以太网协议】2022年2月
推荐阅读
- 食用明胶的危害
- 河北工业大学车辆工程专业怎么样
- 工业化生产特征是什么
- 工业4.0是哪个国家提出的
- 河北工业大学的宿舍情况怎么样
- 河北工业大学的优势学科
- pd协议什么意思
- 河北工业大学继续教育学院怎么样
- 协议书上只盖章不签字有效吗
- 河北工业大学啥专业厉害
