作者 | 主题 |
---|---|
X没有昵称X 侠客 ![]() ![]() 经验值:656 发帖数:68 精华帖:2 |
楼主
![]() 主题:TCP通讯过程中硬件连接突然断开 ![]() 最近看了赵欣大佬的通信原理探秘又结合在工作中遇到的问题,关注到了通讯中的KeepAlive定时器的设置,所以做了如下实验。 硬件: 1513PLC TCP客户端 PC TCP服务器 前提条件:禁用PLC侧KeepAlive 程序: 测试流程:
WireShack捕获如图 PC端WireShack抓包如图 上图1处为插入网线后PC端接收到的第一条数据,随后PC端TCP服务器主动断开,2秒后PLC侧主动重连。在第一次建立连接到网线断开处,可看出共收到11条数据。 疑问: 1500的StackBuffer共8192个字节,如上,网线断开后共有19-11=8条数据存入了StackBuffer中,若仅计算数据长度,则在这个期间内共有8*1000=8000字节数据存入StackBuffer中,若根据StackBuffer处于OSI参考模型的第4层,数据压入到StackBuffer中时带有TCP头部信息,则每条数据实际长度为1000+20=1020字节,则在这期间共有8*1020=8160字节数据压入到StackBuffer中。虽然两者的结果均可导致第17次发送时,ShadowBuffer中的1000字节数据无法压入StackBuffer中,导致Busy常为1。 另外为何断开网线 重新插入后,PC端接收到的第一条数据长度是1460字节?ShadowBuffer满通讯正常后,发送长度为何不按发送端发送的长度发送,而是以最大长度发送? 又为何服务器端会主动复位连接? PLC是否是固定在连接异常后2秒重连?
学习的姿态是谦卑的
|