背景介绍
The MQTT protocol requires an underlying transport that provides an ordered, lossless, stream of bytes from the Client to Server and Server to Client.
更低延迟:QUIC设计融合了 TLS,实现了 0-RTT 等特性,有更低的连接延迟。
多路复用:QUIC 基于 UDP 实现,多个 stream 之间没有 TCP 的 head-of-line-blocking 问题。
连接迁移:QUIC 使用 Connection ID 维护会话,当五元组发生变更,可以通过连接迁移恢复会话,避免业务层有状态协议会话如 MQTT Session 会话重建。
弱网支持:更优秀的丢包处理算法、拥塞算法,让QUIC 更适合弱网环境使用。
MQTT over QUIC
注意:
MQTT over QUIC 目前仅提供实验性支持,不建议使用在生产环境。
接入点
协议 | 端口 | ALPN |
QUIC | 14567 | mqtt |
示例
OpenSSL
openssl s_client -quic -connect mqtt-xxx.mqtt.tencenttdmq.com:14567 -alpn mqtt
样例输出
(base) ➜ rocketmq-mqtt git:(develop) ✗ openssl s_client -quic -connect mqtt-xxx.mqtt.tencenttdmq.com:14567 -alpn mqttConnecting to 127.0.0.1CONNECTED(00000003)depth=2 C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authorityverify return:1depth=1 C=CN, O=WoTrus CA Limited, CN=WoTrus DV Server CA [Run by the Issuer]verify return:1depth=0 CN=*.mqtt.tencenttdmq.comverify return:1---Certificate chain0 s:CN=*.mqtt.tencenttdmq.comi:C=CN, O=WoTrus CA Limited, CN=WoTrus DV Server CA [Run by the Issuer]a:PKEY: RSA, 2048 (bit); sigalg: sha256WithRSAEncryptionv:NotBefore: Apr 3 00:00:00 2025 GMT; NotAfter: May 3 23:59:59 2026 GMT1 s:C=CN, O=WoTrus CA Limited, CN=WoTrus DV Server CA [Run by the Issuer]i:C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authoritya:PKEY: RSA, 2048 (bit); sigalg: sha384WithRSAEncryptionv:NotBefore: Jan 8 00:00:00 2020 GMT; NotAfter: Jan 7 23:59:59 2030 GMT2 s:C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authorityi:C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Servicesa:PKEY: RSA, 4096 (bit); sigalg: sha384WithRSAEncryptionv:NotBefore: Mar 12 00:00:00 2019 GMT; NotAfter: Dec 31 23:59:59 2028 GMT3 s:C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Servicesi:C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Servicesa:PKEY: RSA, 2048 (bit); sigalg: sha1WithRSAEncryptionv:NotBefore: Jan 1 00:00:00 2004 GMT; NotAfter: Dec 31 23:59:59 2028 GMT---Server certificate-----BEGIN CERTIFICATE-----MIIGPDCCBSSgAwIBAgIRAOk884vcqqt0VUZvXONQjUIwDQYJKoZIhvcNAQELBQAwXDELMAkGA1UEBhMCQ04xGjAYBgNVBAoTEVdvVHJ1cyBDQSBMaW1pdGVkMTEwLwYDVQQDDChXb1RydXMgRFYgU2VydmVyIENBICBbUnVuIGJ5IHRoZSBJc3N1ZXJdMB4X...G2RXytk2VY7FtvKNEc7x5YXLmz4AbRXrSapESXD47g5/0Q6OBohZCKBE5WuieIkGAVL9lPHd3MdTLZ9do2xs/4m8EvDGv4Nlo0ORsEykU9gyvRVlN+fcVQwMhI6Y7kmsIpzYem8HiB8rfQCr7sMlLw==-----END CERTIFICATE-----subject=CN=*.mqtt.tencenttdmq.comissuer=C=CN, O=WoTrus CA Limited, CN=WoTrus DV Server CA [Run by the Issuer]---No client certificate CA names sentPeer signing digest: SHA256Peer signature type: rsa_pss_rsae_sha256Peer Temp Key: X25519, 253 bits---SSL handshake has read 0 bytes and written 0 bytesVerification: OK---New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384Protocol: QUICv1Server public key is 2048 bitSecure Renegotiation IS NOT supportedCompression: NONEExpansion: NONEALPN protocol: mqttSSL-Session:Protocol : TLSv1.3Cipher : TLS_AES_256_GCM_SHA384Session-ID:Session-ID-ctx:Resumption PSK:PSK identity: NonePSK identity hint: NoneSRP username: NoneStart Time: 1757900693Timeout : 7200 (sec)Verify return code: 0 (ok)Extended master secret: noMax Early Data: 0
使用限制
1. 仅支持 IETF RFC9000 QUIC,不支持早期 gQUIC;
2. 由于目前 MQTT over QUIC 还在实验性支持阶段,连接迁移还未完整支持。