【问题标题】:SCTP Multihoming Heartbeat BehaviorSCTP 多宿主心跳行为
【发布时间】:2014-04-28 08:32:57
【问题描述】:

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

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

主从之间是否会有心跳通信,即ad & cb?如果没有,我们可以进行这样的设置吗?

在我的情况下,我只看到 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 是从primary-primary 和secondary-secondary,而不是从primary 到secondary,反之亦然。

谢谢。

【问题讨论】:

    标签: sctp


    【解决方案1】:

    引用RFC 4960:

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

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

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

    根据作者提供的更多细节进行编辑

    根据Experimental studies of SCTP multi-homing 中的图 1,每个方向有 2 个 NIC,每个方向 if the routing is configured in such a way that these IP addresses are accessible through different paths 都会得到 4 possibly independent paths。而且我认为他们必须心跳才能确定每条路径的性能。

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

    172.29.11.x? 172.29.11.x?

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

    【讨论】:

    • 感谢您的回复。没有意识到这一点。我将验证是否有任何流量在 ad cb 上运行,这使得 HB 对他们来说是多余的..
    • 我已经编辑了我的问题以包含在 sctp_darn 工具的帮助下完成的小测试的输出。你能检查一下并给我你的意见吗?谢谢。
    • 您的 tcpdump 输出没有给出完整的画面。它仅显示HB REQs 和HB ACKs 的摘录。因此,例如,我很难判断您是否没有过滤掉DATA 块。完整会话的完整转储至少包括各种 INITCOOKIE 块,作为初始握手的一部分。
    • @tshah06(我在上一条评论中没有提到你的别名,所以 stackoverflow 没有通知你)
    • 我已经编辑了我的问题以包含 tcpdump 的完整输出。谢谢。
    猜你喜欢
    • 2011-09-14
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2013-10-12
    • 2014-08-24
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多