Ican协议建立连接我的感悟
有一个情形我突然之间想明白了。
注意下面情形:














假设节点A与节点B已经 正常的建立了连接,并且进行了通讯。
假设 节点B收到了 节点A 的 "建立连接"命令
节点B上的连接定时器启动,假设定时为10秒, 同时 节点B置位他的已连接标志
LinkedHard_Flag=1 ; 同时,节点B给节点A上传正常的响应帧, 告知节点A ,节点A与节点B 已经握手成功。
在接下来的10秒内,节点A可以向节点B发送 写数据命令的数据帧,节点B正常的接收的节点A的命令帧以后,就返回给节点A响应帧。
注意两点:(1)在接下来的10秒内,节点B若收到了节点A的命令帧以后,又会将自己(节点B)的定时器的初值重新装载,即重新开始10秒计时。
(2)节点B处于连接中状态(即LinkedHard_Flag=1),在这个前提下,节点B才能接收 写数据 或者 读数据,或者 删除连接的命令帧。
下面就是问题的表现形式了:
LinkedHard_Flag=1标志 对于节点B来讲,仅仅表示了他和网络上的某一节点正在连接,但是具体和哪个网络节点连接是不清楚的,(我目前写的软件,是区分不了B和网络上哪个节点连接的。如果在软件中要体现连接关系,软件会变复杂)。
假设某一时刻,在该时刻B节点处于连接中状态(LinkedHard_Flag=1 ),假设此时C节点 要发送写数据命令帧,给B节点,B节点知道自己在连接状态,固可以接受来自C节点的命令,(目前我软件中是可以接受来自C节点发送的写数据 或者 读数据命令的,我没有区分,这个现象也在试验中验证了,但此时 我如果规定让节点C先发送连接命令,则我软件是可以简单处理的,并告知C节点不能正常连接),
所以:如果节点B处于和节点A的连接中的时候, 节点C突然不按照规则的发送了一个连续 写 或者 连续 读命令帧, (我目前的软件 B可以接收C) , 那么 我现在该怎么办呢。
实际上: 你还是没有理解这个具体的过程,
硬规定:主机在和网络上某一节点通讯的时候,必须先向从机发送建立连接, 然后从机空闲的情况下,接收到主机的命令,并发送了应答帧。 主机在接收到应答帧以后, 然后置位自己的状态,连接 成功, 主机在这个连接成功的前提下, 才会发送后面的命令帧。。
主机在不建立连接的情况下,命令帧根本就发不出去。
综上,以前的困惑迎刃而解。 你也就理解了握手帧的意义。 这样的规定也使软件的设计简化。
把上面的东西 最后用图画表示。
该部门没有视频与程序
Ican协议建立连接我的感悟的更多相关文章
- HTTP协议建立连接、通讯与关闭连接全过程
为解决服务器TimeWait多的问题,了解了一下TCP/IP协议的连接过程.以访问一静态页面为例,从建立连接到访问拿到数据,然后关闭的整个过程.使用EtherPeek截图如下: 图首为一次交互过程 ...
- 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的. 首先我们来看看 TCP 协议的三次握手过程 如上图所示: 解释一下里面的英文: 里面起到作用的一些标志位就是TCP报文首部里的 ...
- 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?
看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...
- TCP建立连接的三次握手过程
TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程. 上图画出了TCP建立连接的过程.假定主机A运行的是TCP客户程序,B运行的是TCP服务器程序.最初两端的TCP进 ...
- TCP 建立连接:三次握手
转自:http://www.cnblogs.com/winner-0715/p/5032661.html 感谢! TCP 建立连接过程 TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是T ...
- 详解TCP建立连接全过程
TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程. 上图画出了TCP建立连接的过程.假定主机A是TCP客户端,B是服务端.最初两端的TCP进程都处于CLOSED状态 ...
- Oracle建立连接的过程分析
Oracle建立连接的过程 如果我们想登陆数据库并在数据库中真正做事情,就必须先建立连接,首先我会介绍如何建立连接,再介绍建立连接的两种方式的原理,以及建立连接的过程中在客户端和服务端都做了些什么. ...
- TCP/IP协议的建立连接与关闭连接过程
一.建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence ...
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...
随机推荐
- CDC学习
最近在建立CDC环境,在网上看到一些不错的学习链接,粘贴如下: 1.https://blog.csdn.net/u011729865/article/details/52931366 属于https: ...
- spring mvc绑定参数之 类型转换 有三种方式:
spring mvc绑定参数之类型转换有三种方式: 1.实体类中加日期格式化注解(上次做项目使用的这种.简单,但有缺点,是一种局部的处理方式,只能在本实体类中使用.方法三是全局的.) @DateTim ...
- SpringMVC 自定义类型转换
类型转换可以将请求参数转换为指定的类型.指定的格式(数据的格式化),然后传给业务方法的参数. Spring MVC内置了常用的类型转换器.如果内置的类型转换器满足不了需求,可以使用自定义的类型转换. ...
- python对文件中光标的操作迭代器
seek() 默认从文件开头开始.seek(10) seek(10,1) 需要以b的模式读取文件,从相对位置进行移动光标 seek(-3,2) 倒着移动光标的模式 例如: f= open( ...
- Melodic 使用URDF创建简单的机器人模型
本人Linux版本:Ubuntu 18.04LTS ROS版本:Melodic URDF代码 <?xml version="1.0" ?> <robot name ...
- 多年珍藏的55w御剑字典
御剑珍藏55w目录字典,很给力,放在以前直接数据库都能给跑出来. 用法:直接把放入配置文件的目录 链接:https://pan.baidu.com/s/1MGxdd9hH006Y7AO7CpkO8g ...
- java并发:原子类之AtomicLong
原子类之AtomicLong java线程中的操作,需要满足原子性.可见性等原则,比如i++这样的操作不具备原子性, A线程读取了i,另一个线程执行i++,A线程再执行i++就会引发线程安全问题 推荐 ...
- Prometheus组件
Prometheus组件 上一小节,通过部署Node Exporter我们成功的获取到了当前主机的资源使用情况.接下来我们将从Prometheus的架构角度详细介绍Prometheus生态中的各个组件 ...
- stm32 解析sbus
转载 https://blog.csdn.net/Brendon_Tan/article/details/89854751 STM32 Futaba SBUS协议解析1. S.BUS1.1 协议介绍 ...
- 提高 Java 代码性能的各种技巧
Java 6,7,8 中的 String.intern – 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 ...