2

这是拓扑:

      -----s0---s1-----
 h1 --|               |--h2
      -----s2---s3-----

h1 使用 UDP 以可靠的方式将文件泵送到 h2。s0 和 s1 之间的链接可能已断开。然后它应该继续使用底部路径发送数据。有没有办法检测到链接已断开?

到目前为止,我在 h1 中为每个路径创建了两个 python 套接字,在 h2 中创建了两个。使用 select.select 我可以获得准备好的套接字来读取 ack。如果发生超时,我可以重新传输。但是,当链接关闭时,我无法知道它已关闭。

4

1 回答 1

3

如果您出于某种原因必须从头开始执行此操作;

尝试 ping 否则,等待 ack;如果您在一段时间内没有收到确认,则超时;尝试另一条路径。有什么理由不使用 TCP?在 UDP 上实现可靠性基本上就是 TCP 通过 IP 实现的。

有关如何建立 TCP 握手的说明和指南,请参阅3 次握手。


您还可以考虑使用SCTP,它是多宿主、基于流的传输控制协议。相当多的平台支持它,包括 Linux、BSD、Windows 等。

还有一个Python SCTP 库

它很简单:

import socket
import sctp

sk = sctpsocket_tcp(socket.AF_INET)
sk.connect("10.0.1.1")

并实现了大部分与socket相同的接口

于 2015-05-27T10:40:42.110 回答