tcp/ip、以太网、mqtt、modbus/tcp复习

1.osi参考模型

2.

modbus是应用层报文传输协议,没有规定物理层,只规定了协议帧,但是定义了控制器能够认识和使用的消息结构,不管它们是经过何种网络进行通信的,具有很强的适应性。

 

一主多从,同一时间主机只能向一个从机发送请求, 如果主机没有像从机发送请求,从机不能主动发送数据给主机。

modbus没有忙判断,也就是说如果主机向从机发送请求,这时候从机正在处理别的任务或者没有收到,这时候不会响应主机,这是因为modbus只管传输数据,没有仲裁机制,需要通过软件方式判断是否正常接收。

modbus存储区分为四种,对应四种读取模式,输入线圈,输出线圈,输入寄存器,保持寄存器。输入线圈是只读布尔量,输出线圈是可读可写布尔量,输入寄存器是只读寄存器,保持寄存器是可读可写寄存器。

区号名称读写地址范围
0区输出线圈可读可写布尔量00001-09999
1区输入线圈只读布尔量10001-19999
3区输入寄存器只读寄存器30001-39999
4区保持寄存器可读可写寄存器40001-49999

主机向从机获取数据时,发送需要的数据起始地址,和数据长度,从机就会发送相对应的数据。 

3.modbus传输模式ascii、rtu、tcp

modbus在串行链路上可以选择rtu或者ascii传输模式进行数据传输,rtu是通过16进制表示数据,ascii通过ascii码表示数据,每个8bit分成两个ascii码位表达数据,使用rtu传输时需要进行crc循环冗余校验,ascii需要进行lrc纵向冗余校验。当使用以太网进行数据传输时,选择tcp模式进行传输,tcp模式不需要校验,因为tcp模式是面向链接的可靠协议。

4.modbus rtu

modbus规定了二十多种功能码,常用的也就是下面8种。

功能码功能说明
01H读取输出线圈
02H读取输入线圈
03H读取保持寄存器
04H读取输入寄存器
05H写入单线圈
06H写入单寄存器
0FH写入多线圈
10H写入多寄存器

数据帧包括了从站地址、功能码、数据、crc校验

从机地址占一个字节-8位,因此可以表示2的8次方也就是256个设备,0-255,但是一般从机设备只能用1-254,从机地址写255也就是全写1的话表示广播信号,就是给所有的从站发送数据帧。

功能码一般占1字节大小-8位

数据没有固定长度

crc校验位一般占2字节数据-16位。

crc校验就是当主机给从机发送数据之前,根据从机地址到数据结束,计算出一个crc校验码,把这个crc校验码放在数据真的最末尾,当从机接收到主机发送的数据之后,根据主机发送来的数据,也用相同的方法计算出对应的crc校验码。然后和接收到的crc校验码相比较,如果相同,则证明发送的数据没有问题。

5.modbus ascii

modbus ascii数据帧包括 起始符 从机地址 功能码 数据 校验 结束符

起始符占一个字节

从机地址占两个字节

功能码占一个字节

数据占n个字节

校验占两个字节

结束符两个字节

可以看到相比rtu来说,数据帧更加繁琐,因此一般我们用modbus rtu。

modbus ascii用起始符和结束符作为分隔数据帧的标志,而modbus rtu没有这样的设计,modbus rtu需要时间间隔来分隔数据帧,一般两个数据帧之间至少间隔3.5个字符周期长度,否则就会发生粘包现象 。

粘包就是从机无法分清出每个独立的数据包。

6.modbus tcp

和modbus ascii相比,modbus tcp数据帧没有从机地址和校验位,反而在功能码之前多了一个mbap报文头。

最大数据长度260个字节。这个长度是mbap报文头里的长度位控制的,2的八次方256再加上长度控制符前面的四个字节就是260个字节。

事物处理标识箱:可以理解为报文的序列号,用于区别其他报文。

协议标识符:在这里0x00 0x00代表modbus协议

长度:长度表示从现在起到数据帧结束所有数据的长度大小。

单元标识符:类似于modbus rtu 、modbus ascii的从机地址,用来指示数据帧的目标地址。

7.tcp/ip协议

tcp/ip的应用层有http、ftp等,应用层是直接给用户使用的接口,传输层有tcp和udp,udp是不可靠的链接,tcp是面向链接的可靠服务,网络层中主要有ip、icmp,主要负责网络中的数据包传送,数据链路层有arp、rarp,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与传输媒介(如电缆或其他物理设备)的物理接口细节。

传输层:tcp、udp提供流量控制、差错控制,qos-服务质量等管理服务。

总的来说,tcp传输速度较低但是可靠性强,udp传输速度快但是可靠性较弱,是一个尽力传输的不可靠协议。

网络层:ip、icmp提供拥塞控制、网际互联等服务。

链路层:链路层又称数据链路层和网络接口层。用来处理网络的硬件接口部分。传输单位bit。

MAC地址具有唯一性:48位,厂家生产产品的时候,前24位1一般是制造商,后24位是系列号,由厂家自己分配,和身份证一样,在网络世界中是唯一的。

为什么不能用mac地址作为网关转发数据的依据?

因为mac地址是各个厂家自己分配的,如果需要作为网关进行数据的转发,那么需要这个mac地址的前几位相同,这样才能作为转发的依据,但是这显然是不现实的,在现实世界中,如果想这样做,要么你规定每片网络下都是同一厂家生产的设备,要么你规定厂家生产设备时,按照你的规则来生产mac地址。这显然是不可能的。

因此:ip地址应运而生。ip地址是32位的,定义在软件层面上,可以更改,mac是硬件层面上的,出厂时烧录在eprom上。

子网掩码:当我们给不在同一子网下的设备发送数据的时候,怎么知道他是否和我们的设备是不是在一个子网下呢。这就需要用到子网概念,发送数据包的时候,我们需要知道源ip和目标ip,这两个ip分别和提前设置好的子网掩码做与操作,如果与操作结果相同,则证明在同一片子网下,则不用发送给路由器,而是直接发送给交换机进行数据传输,如果与操作结果不同,则需要先把数据发送到路由器,经过路由器的转发才能实现数据传输。

默认网关:现在要把数据发送给不同子网下的设备,要先经过路由器,但是我们怎么知道路由器的ip地址呢,这时候就要用到默认网关,默认网关是提前设置在设备中的ip,也就是路由器的ip。

路由表:现在我们要把数据发送到不同子网下,可以实现发送到路由器了,但是路由器怎么知道把数据通过哪个网口进行转发呢,这时候就要用到路由表了,路由表记录着ip的前n位和端口的一一对应关系,路由表是在路由器记录的。和mac表类似,mac表记录着设备mac地址和集线器也就是交换机中端口的一一对应关系,mac表存在集线器/交换机中。

现在我要发送数据到别的设备,只知道ip地址怎么办呢,这时候要用arp缓存表。arp缓存表存着ip和mac地址的一一对应关系。

一开始这个表是空的,为了获得别的设备的mac地址,会先广播一条arp请求,接收到arp请求的设备会相应请求,发送自己的mac到源设备,这时候两边的设备会互相记录对方的ip和mac。这样多次请求之后会把arp缓存表补充完整。

在同一子网就直接获取对方mac地址;不在同一子网就获取默认网关的mac地址。

8.

tcp/ip数据传输的时候会发现,发送端发送的应用层报文会被逐步包裹起来,接收端接受的时候会一层一层剥开,得到应用层报文。

TCP/IP协议的数据封装和分用过程,大致如下图所示:

MQTT、WebSocket、Socket、Modbus TCPModbus RTU、HTTP和RS485都是通信协议或接口,用于不同的应用场景和设备之间的数据传输。 1. MQTT是一种轻量级的发布/订阅消息传输协议,通常用于物联网设备之间的实时通信。它基于TCP/IP协议栈,并具有低带宽消耗和低功耗的特点。 2. WebSocket是一种全双工通信协议,允许浏览器和服务器之间进行实时数据传输。它通过在HTTP握手后建立持久连接来实现双向通信,适用于实时聊天、在线游戏等场景。 3. Socket是一种网络通信接口,提供了一套函数用于实现网络应用程序之间的数据传输。它可以在不同计算机之间进行通信,支持面向连接的可靠传输(如TCP)和无连接的不可靠传输(如UDP)。 4. Modbus是一种通信协议,用于在自动化系统中传输数据。Modbus TCP是基于TCP/IP协议栈的Modbus协议的变体,通过以太网进行通信。Modbus RTU是基于串行通信接口(如RS485)的Modbus协议的变体,适用于远距离传输。 5. HTTP是一种用于在客户端和服务器之间传输数据的协议。它基于请求-响应模式,使用TCP作为传输协议。HTTP通常用于浏览器与服务器之间的通信,传输网页数据和其他资源。 6. RS485是一种串行通信接口标准,用于在多个设备之间进行数据传输。它支持多主多从的拓扑结构,并具有高抗干扰性和远距离传输能力,常用于工业自动化、仪器仪表等领域。 这些协议和接口之间没有直接的继承或依赖关系,而是根据具体的应用需求和设备特性选择合适的通信方式。例如,在物联网场景中,可以使用MQTT进行设备之间的实时通信,而在工业自动化中,可以使用Modbus TCPModbus RTU通过RS485进行数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值