TCP重传即使已收到数据包确认

时间:2015-10-01 11:21:43

标签: sockets tcp rabbitmq mqtt lwip

我正面临RabbitMQ服务器的奇怪行为(在ubuntu服务器14.04.3 LTS下)。

客户端是基于lwip v1.3.2的微型MCU(Cortex-M3)上的MQTT实现。当我的客户端使用其IPv4地址连接服务器时,它可以工作,客户端 - 服务器TCP套接字具有正确的[PSH + ACK],[ACK]序列。

但是当客户端通过我的路由器连接时(端口1883上的NAT活动),我得到以下序列(在服务器端)。

server tcpdump port 1883:

7     2015-10-01 12:24:30.962080    192.168.1.1    192.168.1.97    TCP    121   55061→1883 [PSH, ACK] Seq=1 Ack=1 Win=2920 Len=67
8     2015-10-01 12:24:30.962101    192.168.1.97    192.168.1.1    TCP    54    1883→55061 [ACK] Seq=1 Ack=68 Win=29200 Len=0
11    2015-10-01 12:24:30.968867    192.168.1.97    192.168.1.1    TCP    58    1883→55061 [PSH, ACK] Seq=1 Ack=68 Win=29200 Len=4
12    2015-10-01 12:24:30.971556    192.168.1.1    192.168.1.97    TCP    60    55061→1883 [ACK] Seq=68 Ack=5 Win=2916 Len=0
13    2015-10-01 12:24:30.989599    192.168.1.1    192.168.1.97    TCP    92    55061→1883 [PSH, ACK] Seq=68 Ack=5 Win=2916 Len=38
14    2015-10-01 12:24:31.171216    192.168.1.97    192.168.1.1    TCP    58    [TCP Retransmission] 1883→55061 [PSH, ACK] Seq=1 Ack=68 Win=29200 Len=4
15    2015-10-01 12:24:31.171411    192.168.1.1    192.168.1.97    TCP    60    [TCP Dup ACK 12#1] 55061→1883 [ACK] Seq=106 Ack=5 Win=2916 Len=0

请注意,只有基于 lwip 的客户端才会发生这种情况;我已经使用node.js下的mqtt模块成功测试了。

是否有人知道发送的数据包的格式有什么问题?

谢谢,Dan。

0 个答案:

没有答案