【问题标题】:MQTT Artemis broker, frequent reconnections when the device is on IPV6MQTT Artemis 代理,设备使用 IPV6 时频繁重新连接
【发布时间】:2021-05-02 18:20:47
【问题描述】:

我正在使用 ActiveMQ Artemis Broker 并通过客户端应用程序发布到它。

观察到的行为:

  • 当我的客户端是 IPV4 时,会建立 TLS 握手并按预期发布数据,没有问题。
  • 当我的客户端是 IPV6 时,我看到客户端和服务器(代理)之间经常重新建立连接,并且没有发布任何数据。

详情:

  • 使用 IPV6 时,客户端会进行 3 次握手并尝试发送数据。它还接收 Server Hello 并发送应用程序数据。
  • 但连接终止并再次重新连接。这个循环不断发生。
  • 使用 IPv4 和 IPv6 时,客户端库、网络基础设施和代理都完全相同。

客户端日志说:

Idle network reply timeout.

代理日志显示传入的连接请求以及来自代理的 CONNACK,例如:

MQTT(): IN << CONNECT protocol=(MQTT, 4), hasPassword=false, isCleanSession=false, keepAliveTimeSeconds=60, clientIdentifier=b_001, hasUserName=false, isWillFlag=false
MQTT(): OUT >> CONNACK connectReturnCode=0, sessionPresent=true

wire-shark (tcpdump) 告诉我们什么:

  • 在每次重新连接之前(完成 3 次握手)我看到了这个:

    Id  Src                                   Dest
    1  Broker(App Data)                      Client
    2  Broker(App Data)                      Client
    3  Client(ACK)                           Broker
    4  Client(ACK)                           Broker
    5  Broker(FIN,ACK)                       Client
    6  Client(FIN,ACK)                       Broker
    7  Broker (ACK)                          Client
    8  Client (SYN)                          Broker
    9  Broker (SYN/ACK)                      Client
    10  Client (ACK)                          Broker
    

然后 3 次握手(Client hello, Change Cipher Spec, Server Hello)和上面的再次重复。

根据数据包 5、6 和 7,我得出结论,连接正在被代理(服务器)终止。客户端确认终止,然后再次尝试重新连接,因为这是一个尝试重新连接和发布的无限循环。

我第一次看网络级分析,甚至是wireshark。我不确定我的分析是否正确。

也碰壁了,不知道为什么只有当设备是 IPV6 时才会发生重新连接。我也没有看到任何RST 表示连接终止。

代理也在发送CONNACK(来自代理日志),但仍然没有发送数据,只是尝试重新连接不知道为什么。

另外,我看到了一些我看到了一些:

  • 无序 TCP(当 src 是代理时)
  • 虚假重传
  • DUP ACK(src 是客户端)

不确定这是否重要。

关于发生了什么的任何标题?

【问题讨论】:

  • @JustinBertram MQTT(): IN &lt;&lt; CONNECT protocol=(MQTT, 4), hasPassword=false, isCleanSession=false, keepAliveTimeSeconds=60, clientIdentifier=b_001, hasUserName=false, isWillFlag=false MQTT(): OUT &gt;&gt; CONNACK connectReturnCode=0, sessionPresent=true 这是所有代理日志显示,频繁的连接 IN 和 CONNACK,仅此而已。
  • 是的,是一样的
  • 抱歉,是的,在 CONNACK 发布后发生 IPV4 时会发生这种情况。当 CONNACK 后 IPV6 再次发生重新连接时。即我们看到 IN
  • @JustinBertram 进行了更广泛的研究。问题出在网络中的 LB 设置上。 LB 的默认连接超时时间小于客户端设置的保持活动时间。

标签: ssl tcp mqtt tls1.2 activemq-artemis


【解决方案1】:

问题是由于 LB 设置的默认连接超时时间为 30 秒,小于客户端设置的连接超时时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多