|
From: | Mark Dowdy |
Subject: | [lwip-users] Slow ACK for TCP data |
Date: | Wed, 29 Jan 2014 17:02:14 -0800 |
We’re using lwIP in raw mode on a MicroBlaze and are seeing instances of very slow ACK’s. Other than disabling UDP, our configuration parameters were unchanged from the ‘standard’ installation. Grasping at straws we tried setting TCP_WND to 8192 and TCP_MSS to 1450 but it didn’t help. Any idea what could be going on or how we could tune the stack to speed things up? A WireShark trace is shown below. 192.168.81.1 is our client, 192.168.86.1 is the MicroBlaze device running lwIP. Data is sent from the client to the server in frame 10 and the corresponding ACK arrives over a second later in frame 12. No. Time Source Destination Protocol Info 7 5.557890 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [SYN] Seq=0 Win=32768 Len=0 MSS=1460 WS=0 SACK_PERM=1 TSV=0 TSER=0 8 5.560238 192.168.86.1 192.168.81.1 TCP 11002 > 65463 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1450 9 5.560241 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [ACK] Seq=1 Ack=1 Win=33580 Len=0 10 5.560244 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [PSH, ACK] Seq=1 Ack=1 Win=33580 Len=1 11 6.579581 192.168.81.1 192.168.86.1 TCP [TCP Keep-Alive] 65463 > 11002 [PSH, ACK] Seq=1 Ack=1 12 6.581536 192.168.86.1 192.168.81.1 TCP 11002 > 65463 [ACK] Seq=1 Ack=2 Win=8192 Len=0 13 6.636343 192.168.86.1 192.168.81.1 TCP 11002 > 65463 [PSH, ACK] Seq=1 Ack=2 Win=8192 Len=2 14 6.638403 192.168.86.1 192.168.81.1 TCP [TCP Keep-Alive ACK] 11002 > 65463 [ACK] Seq=3 Ack=2 Win=8192 Len=0 15 6.829526 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [ACK] Seq=2 Ack=3 Win=33580 Len=0 16 7.637363 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [FIN, ACK] Seq=2 Ack=3 Win=33580 Len=0 17 7.639507 192.168.86.1 192.168.81.1 TCP 11002 > 65463 [FIN, ACK] Seq=3 Ack=3 Win=8191 Len=0 18 7.639511 192.168.81.1 192.168.86.1 TCP 65463 > 11002 [ACK] Seq=3 Ack=4 Win=33580 Len=0 Interestingly, at least for us, if we do back-to-back server accesses without closing the connection, the slow ACK is only there for the first exchange. Here’s the WireShark trace for that scenario. Slow ACK for frame 304, ‘fast’ ACK for frame 310. No. Time Source Destination Protocol Info 301 1237.342429 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [SYN] Seq=0 Win=32768 Len=0 MSS=1460 WS=0 SACK_PERM=1 TSV=0 TSER=0 302 1237.344687 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1450 303 1237.344691 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [ACK] Seq=1 Ack=1 Win=33580 Len=0 304 1237.344694 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [PSH, ACK] Seq=1 Ack=1 Win=33580 Len=1 305 1238.361179 192.168.81.1 192.168.86.1 TCP [TCP Keep-Alive] 65451 > 11002 [PSH, ACK] Seq=1 Ack=1 Win=33580 Len=1 306 1238.363151 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [ACK] Seq=1 Ack=2 Win=8192 Len=0 307 1238.417927 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [PSH, ACK] Seq=1 Ack=2 Win=8192 Len=2 308 1238.419985 192.168.86.1 192.168.81.1 TCP [TCP Keep-Alive ACK] 11002 > 65451 [ACK] Seq=3 Ack=2 Win=8192 Len=0 309 1238.611125 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [ACK] Seq=2 Ack=3 Win=33580 Len=0 310 1239.418975 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [PSH, ACK] Seq=2 Ack=3 Win=33580 Len=1 311 1239.420951 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [ACK] Seq=3 Ack=3 Win=8192 Len=0 312 1239.475760 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [PSH, ACK] Seq=3 Ack=3 Win=8192 Len=2 313 1239.710900 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [ACK] Seq=3 Ack=5 Win=33580 Len=0 314 1240.476744 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [FIN, ACK] Seq=3 Ack=5 Win=33580 Len=0 315 1240.478900 192.168.86.1 192.168.81.1 TCP 11002 > 65451 [FIN, ACK] Seq=5 Ack=4 Win=8191 Len=0 316 1240.478904 192.168.81.1 192.168.86.1 TCP 65451 > 11002 [ACK] Seq=4 Ack=6 Win=33580 Len=0 Any insights would be greatly appreciated. Thanks. |
[Prev in Thread] | Current Thread | [Next in Thread] |