这是拓扑:
-----s0---s1-----
h1 --| |--h2
-----s2---s3-----
h1 使用 UDP 以可靠的方式将文件泵送到 h2。 s0 和 s1 之间的链路可能已断开。然后它应该继续仅使用底部路径发送数据。有没有办法检测链接是否已断开?
到目前为止,我为每个路径在 h1 中创建了两个 python 套接字,在 h2 中创建了两个。使用 select.select 我可以准备好套接字来读取 ack。如果发生超时我可以重传。但是,当链接断开时,我无法知道它已断开。
最佳答案
如果您出于某种原因必须从头开始执行此操作;
Try to ping the otherwise, wait for an ack; timeout if you don't receive an ack within a time period; try the other path. Any reason you aren't using TCP? Implementing reliability atop UDP is basically what TCP is over IP.
参见The 3-way handshake有关如何建立 TCP 握手的说明和指南。
您还可以考虑使用SCTP这是多宿主、基于流的传输控制协议(protocol)。很多平台都支持它,包括 Linux、BSD、Windows 等。
很简单:
import socket
import sctp
sk = sctpsocket_tcp(socket.AF_INET)
sk.connect("10.0.1.1")
并实现了与 socket 大部分相同的接口(interface)
关于python - 在开发多宿主可靠 udp 时,如何使用 mininet 检测链接是否已关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30479853/