当前位置: 首页 > news >正文

网络编程(modbus,3握4挥)

目录

一、modbus协议

1、什么是modbus协议

2、modbus协议包的内容

1)modbus协议 协议包

2)modbus协议的数据位(具体操作内容)

二、三次握手,四次挥手

1、什么是三次握手,四次挥手

2、名词解释

3、发送数据

4、申请连接(三次握手)

5、断开连接(四次挥手)


一、modbus协议

1、什么是modbus协议

modbus协议是在工控领域非常好用的通讯协议
modbus协议本质上是一个基于TCP协议二次封装的协议

modbus协议是一种 "主从问答式" 的协议
主机:向从机发送查询或修改指令(发送数据)
从机:接收到指令之后回答问题 或 做出对应的应答修改

2、modbus协议包的内容

1)modbus协议 协议包

第 0~1 字节:存放当前协议包的序号,从0开始,modbus协议会对协议包的序号做自增操作

第 2~3 字节:存放 modbus 协议的标识符 modbus 的标识符就是 0 。(固定是0)

第 4~5 字节:存放接下来所有数据的字节数

第   6   字节:放从机的序列号,一台主机连多台从机,该数据明确,向第几台从机发数据

第   7   字节:存放 "操作码" ,也就是modbus 协议的操作方式,主机要从机做什么

后面的所有字节都是数据位。根据操作码的不同,数据位的格式也不同

2)modbus协议的数据位(具体操作内容)

用来告诉接收端,这个协议包发过去之后,接收端该干什么

 试验写入一个线圈

二、三次握手,四次挥手

1、什么是三次握手,四次挥手

三次握手:TCP协议产生连接的时候,做了3次收发数据包的行为

四次挥手:TCP协议断开连接的时候,做了4次收发数据包的行为

2、名词解释

SYN: 连接申请包,也称为握手包

ACK: "应答包",专门用来回复连接请求 或 回复接收到的数据。表达我收到了你的指令或数据

FIN: 断开连接请求的包,也称为 "挥手包"

Len: 等待发送的数据的长度

Seq:用来记录当前数据,从第几个字节开始发送

例如:现在有数据 "123abcdefg" ,如果Seq==0,则从1开始发送,如果Seq==5,则从c开始发送

Ack: 应答号,一般出现ACK应答包中,告诉数据发送端我接收到了数据,        
        并且告诉发送端,下次从第几位开始发           

3、发送数据

数据发送端 :"123abcdefg"Seq = 0 ,Len = 3所以 "123" 被发走了数据接收端:由于接收到了 "123" 3 个字节,所以下次应该接受 'a',所以就要求发送端从 'a' 开始发送数据so,Ack = 3数据发送端接受到了 数据接收端的 ACK应答包,里面包含了一个 Ack = 3 的应答号所以,本次数据发送端, Seq = Ack = 3上面的流程是针对数据收发的流程
3次握手的流程稍微有点不一样

4、申请连接(三次握手)

 第一次握手:客户端向服务器发送了一个 SYN 握手包

此时 Seq = 0,Len = 0;

说明客户端向服务器发送数据的时候,从第 0 个字节开始发送,数据长度为 0 
本次握手并未验证任何事情

第二次握手:服务器向客户端发送了一个SYN握手包 和 一个 ACK应答包

SYN握手包:Seq=0,Len=0,
                      说明服务器也要向客户端发送数据,从第0个字节开始发送,数据长度为0

ACK应答包:Ack=1
                      说明服务器接收到客户端发送的第0个字节的数据,
                      并要求客户端下次从第一个字节开始发送

本次握手验证了客户端的发送数据功能正常,服务器的接收数据功能正常

第三次握手:客户端向服务器发送了一个应答包

ACK应答包:Seq=1,Len=0,Ack=1;
                      说明客户端接收到了服务器发送的Ack=1,于是Seq=1,从第1字节开始发送
                      并且客户端也要求服务器下次发送数据从第1个字节开始发送
本次握手验证了,客户端接收数据功能正常,服务器发送数据功能正常

 结论:经过三次握手,通过Seq和Ack的关系,以及Seq和Ack的值,确定双方的功能正常,允许建立连接。只要有一点不正常,就不允许建立连接

5、断开连接(四次挥手)

第一次挥手:主动断开方,向被动断开方发送一个FIN挥手包,向被动方申请断开连接

第二次挥手:被动方接收到FIN挥手包后,回复了ACK应答包,并没有回复FIN挥手包

第三次挥手:被动方在确认数据发送完毕后,向主动方发送了FIN挥手包和ACK应答包

第四次挥手:主动方收到FIN挥手包,确认可以断开连接,发送ACK应答包确认断开连接

http://www.dtcms.com/a/286596.html

相关文章:

  • 【C#】引用(Reference)句柄(Handle)
  • 库的制作与原理
  • 退信、延迟、遇攻击?CACTER 邮件安全海外中继:让跨境通邮 “零障碍”
  • 【前后端】沙箱机制
  • gcc 源码分析:从IR-RTL 到汇编输出
  • C++ 程序 AddressSanitizer:DEADLYSIGNAL
  • 自动化面试题
  • spring-cloud微服务部署转单体部署-feign直连调用
  • 磁悬浮轴承系统中由不平衡力引发的恶性循环机制深度解析
  • 初探:C语言FILE结构之文件描述符与缓冲区的实现原理
  • 前端 SSE 实战应用:用最简单的方式实现实时推送
  • Python基础④-装饰器、迭代器及常用函数篇
  • 在断网情况下,网线直接连接 Windows 笔记本和 Ubuntu 服务器进行数据传输
  • 高性能数据库-Redis详解
  • verilog tb文件 美化terminal输出
  • Webpack 项目构建优化详解
  • 雪豹大模型驱动效率革命 华鼎冷链科技重构餐饮供应链神经网络
  • 进程 线程 并发 并行
  • 安达发|从救火到未雨绸缪:APS生产计划排产软件重塑制造业“危机免疫力“
  • 2025年6月电子学会全国青少年软件编程等级考试(Python一级)真题及答案
  • 添加DNS解析记录时,提醒记录冲突是怎么回事?
  • Python练习2-格式化输出基本数据类型及变量的详细使用
  • Aqara 携手西门子西碳迹SiTANJI,发布亚马逊 CPF 绿标解决方案标杆案例
  • 根据用户id自动切换表查询
  • c语言笔记---结构体
  • 浏览器元素定位工具-项目源码免费领取
  • 萤石摄像头C++SDK应用实例
  • 前端笔记之 async/await 异步编程详解
  • 面试高频题 力扣 695.岛屿的最大面积 洪水灌溉(FloodFill) 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • Python网络爬虫之selenium库