如何安全地判断在另一端收到了TCP/IP数据包

本文关键字:TCP 数据包 IP 何安全 安全 判断 | 更新日期: 2023-09-27 18:27:16

在这个项目中,协议是:

  • 开放式插座
  • 发送数据
  • 等待确认消息或超时
  • 如果ack在适当的时间到达,一切都很好。合上插座
  • 如果超时,请关闭插座并重新启动最多N次

我在日志中注意到,有时在超时后,我们无论如何都会收到ack。由于插座在关闭后保持打开状态以进行清理和掉队,我理解原因。

但是,有更好的方法来处理这个问题吗?在向线路运营商报告情况之前,我想确定连接是否真的断了。

现在的超时是一个与外部计时器相关的任意值(2.5秒)。它不在.Net TCP堆栈中。

如何安全地判断在另一端收到了TCP/IP数据包

TCP连接并没有真正断开,除非套接字在您一侧闭合。如果TCP在发送数据后没有收到来自网络的任何响应,它需要几分钟的时间来决定连接是否关闭并关闭套接字。

套接字抽象在TCP通道上对双向流进行分层。只有当Write(或等效函数)成功返回,并且Read()返回非零字符数时,用户才会看到堆栈已接受片段。较低级别是不透明的。为了确保服务器已经接收并确认您的数据,您需要确认Read()在允许的时间段内返回预期的数据量。

由于您必须为每个请求连接一个新会话,因此您别无选择,只能拆除该会话,为下一个会话让路。特别是,您不能留下一个会话,因为服务器可能不允许多个并发连接。

您声明超时为2.5秒。如果这比消息间隔小得多,那么如果超时时间延长到接近该间隔的时间,是否存在问题。这似乎比对同一数据进行多次快速请求更可靠。