0

我有一个关于 SCTP 多宿主心跳行为的查询。考虑下面的例子 -

Host_A (IP a(Primary), IP b(secondary)) : Local MultiHomed endpoint
Host_B (IP c(Primary), IP d(secondary)) : Remote multiHomed endpoint

主次之间是否会有心跳通信,即a<->d & c<->b?如果没有,我们可以进行这样的设置吗?

就我而言,我只在 2 个主节点和 2 个辅助节点之间看到 HB SEND/ACK 消息,但在主节点和辅助节点之间没有看到。

编辑 :-

我做了一个小测试。我在两个相互连接的系统上运行 sctp_darn。

主机A:主IP 172.29.11.43;辅助IP 172.29.11.75 主机B:主IP 172.29.11.40;辅助 IP 172.29.11.72

在主机 A 上,我运行了 --> sctp_darn -s -p 4445 -h 172.29.11.40 -P 4444 -H 172.29.11.43 -B 172.29.11.75 在主机 B 上,我运行了 --> sctp_darn -l -P 4445 -H 172.29.11.40-B 172.29.11.72

我没有从 A->B 发送任何数据来监控 HB 行为。这是我从 tcpdump 输出中得到的。

root@base0-0-0-4-0-11-1:/root> tcpdump -ni bond1 sctp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond1, link-type EN10MB (Ethernet), capture size 65535 bytes


17:09:23.856688 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [INIT] [init tag:    368944998] [rwnd: 63488] [OS: 10] [MIS: 65535] [init TSN: 2410047720]
17:09:23.856893 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [INIT ACK] [init tag: 797255774] [rwnd: 63488] [OS: 10] [MIS: 10] [init TSN: 659191795]
17:09:23.856988 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [COOKIE ECHO] , (2) [DATA] (B)(E) [TSN: 2410047720] [SID: 0] [SSEQ 0] [PPID 0x0]
17:09:23.857410 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [COOKIE ACK] , (2) [SACK] [cum ack 2410047720] [a_rwnd 63486] [#gap acks 0] [#dup tsns 0]
17:09:25.880280 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB REQ]
17:09:25.880519 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB ACK]
17:09:27.951827 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB REQ]
17:09:27.951868 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB ACK]
17:09:56.520282 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB REQ]
17:09:56.520526 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB ACK]
17:09:56.534773 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [HB REQ]
17:09:56.534797 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [HB ACK]
17:09:57.748715 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [HB REQ]
17:09:57.749006 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [HB ACK]
17:09:59.026986 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB REQ]
17:09:59.027013 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB ACK]
17:10:27.129950 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [HB REQ]
17:10:27.129982 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [HB ACK]
17:10:27.220294 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB REQ]
17:10:27.220576 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB ACK]
17:10:29.076286 IP 172.29.11.43.4444 > 172.29.11.40.4445: sctp (1) [HB REQ]
17:10:29.076582 IP 172.29.11.40.4445 > 172.29.11.43.4444: sctp (1) [HB ACK]
17:10:30.402389 IP 172.29.11.72.4445 > 172.29.11.75.4444: sctp (1) [HB REQ]
17:10:30.402430 IP 172.29.11.75.4444 > 172.29.11.72.4445: sctp (1) [HB ACK]
^C
24 packets captured
24 packets received by filter
0 packets dropped by kernel
root@base0-0-0-4-0-11-1:/root>

正如你所看到的,HBs 是从小学和中学到中学,但不是从小学到中学,反之亦然。

谢谢。

4

1 回答 1

1

引用RFC 4960

如果没有可用于更新路径 RTT 的新块(通常包括首次传输的 DATA、INIT、COOKIE ECHO、HEARTBEAT 等)并且在当前心跳内没有向其发送 HEARTBEAT,则目标传输地址被视为“空闲”该地址的期限。

换句话说,心跳不是必需的,只要有其他块可以用来确定 RTT。

因此,在您的情况下,是否活动连接是 a->d 和 c->b,它们有足够的流量使它们上的心跳冗余?

编辑以回应作者的更多细节

根据SCTP 多宿主实验研究中4 possibly independent paths的图 1,每个方向都有 2 个 NIC if the routing is configured in such a way that these IP addresses are accessible through different paths。而且我认为他们必须心跳才能确定每条路径的性能。

查看您的主要路径和心跳的配对,这总是

172.29.11.x? <-> 172.29.11.x?

即0.7?从不与 .4 配对?,这可能是路由配置和/或子网的问题(并且 SCTP 实施在其配对决策中考虑了该信息?)。只是一个猜测。

于 2014-04-22T07:39:57.933 回答