首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟保活信号

模拟保活信号
EN

Stack Overflow用户
提问于 2013-09-19 08:13:00
回答 1查看 1.3K关注 0票数 3

我正在通过TCP连接一个嵌入式电路板到PC。

该板包含一个晶片,遗憾的是,它不会在接收数据时产生任何中断。但它确实会在接收到“保持生命”信号时产生中断。

目前,我不得不调查数据。相反,我认为,我会从PC发送数据,然后发送一个KeepAlive信号。每当收到KeepAlive时,我也会读取数据。我确实理解这可能会产生错误的警报,但它比持续轮询更好。

我在Wireshark上观察到一个保持生命的数据包,它有一个字节的数据,是"00“。

然后,我尝试发送数据为“00”的TCP数据包:

我可以看到,只有Flag部分不同。

我有两个问题:

  1. (广义地)如何手动发送保持存活的信号?
  2. 如何更改该标志设置?( 发送斯本托中的标志不同)

更新:我尝试过RawSockets,但这对我没有帮助,或者我错过了什么。我只是将原始套接字头中的标志更改为ACK。

EN

回答 1

Stack Overflow用户

发布于 2013-10-01 11:28:49

RFC 1122节4.2.3.6可能值得一读。

它指出,保持活动是TCP实现的一个可选特性。它还规定,保持生命的信号最多应限制在每两小时一次。因此,通常从应用程序中手动发出一个并不是一个理想的特性。

此外,它还描述了实现的细节,特别是指出了所涉及的序列号。这是屏幕截图中明显没有注意到的一个不同之处:真正的保活数据包有一个非常高的相对序列号,这就是-1的无符号表示。要用原始套接字来再现这一点,我认为您必须以某种方式获得现有连接的当前TCP序列号。在RawSockets中还没有足够的工作来了解如何做到这一点的细节。

支持让系统定期发送保持生命的方法是使用SO_KEEPALIVE选项。但我认为,在特定时刻发出这样的信号是没有多大用处的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18889437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档