python - 在开发多宿主可靠 udp 时,如何使用 mininet 检测链接是否已关闭?

标签 python networking udp mininet multihomed

这是拓扑:

      -----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 等。

还有一个Python SCTP lirbary

很简单:

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/

相关文章:

linux - 在哪里可以找到 UDP 的 Linux 实现的源代码?

Python PIL 以日期时间作为名称保存文件

python - 第一年的天数不准确

linux - 在 Linux 中安装 libnetfilter 队列时出现 libmnl 问题

Java GUI 在联网之前挂起

networking - 在游戏中使用多个端口有什么好处?

C# - 无法从 UDP 获取服务器响应 - Black Ops Rcon

python - (Python) 基于比例/权重随机选择 key 的算法

python - 在线性时间内寻找包含特定字符的最短子串

networking - 如何延长 igraph 网络图中的边 (layout=fruchterman.reingold)?