TCP Dup ACK Linux 内核 3.2

TCP Dup ACK Linux 内核 3.2

当我在 Debian 8.1 内核 3.16.0-4-amd64 Apache 2.4.10-10 上使用 HTTPS 时,我们托管的某些服务器上的下载速度非常慢

架构如下:客户端 XXXX => 防火墙上的 NAT:YYYY => HTTP(S) WEB 服务器 LAN IP:10.254.248.101

使用 HTTPS 测试:

wget --no-check-certificate https://Y.Y.Y.Y/test/debian-8.5.0-amd64-netinst.iso
debian-8.5.0-amd64-netinst.iso.5            0%[      ] 632.00K  15.5KB/s   eta 4h 30m

在服务器上运行 tcpdump 跟踪时(跟踪如下),客户端 XXXX 多次要求 10.254.248.101 重新发送数据包。服务器等待近 4 秒钟才重新发送客户端要求的数据包。这就是我在服务器上下载速度如此缓慢的原因。我不明白的是为什么服务器需要这么长时间才能重新发送数据包。Linux Kernel 3 中是否有针对 TCP 的新功能?Apache 2.4 中是否有新功能?防火墙无法管理的某些东西?

请注意,在以下情况下我们不会遇到此问题:

  • 当使用 HTTP(不带 TLS)时(如下测试)。
  • 当客户端来自 ISP 时,到我们的数据中心的延迟较长(200 到 250 毫秒)。
  • 具有相同的架构、相同的 SSL 证书,但使用较旧的 Linux 内核 2.6 和较旧的 apache 2.2.16-6。
  • 当我们将 WEB SERVER 放在防火墙前面并设置公共 IP 时:CLIENT XXXX => YYYY

使用 HTTP 测试:

wget http://Y.Y.Y.Y//test/debian-8.5.0-amd64-netinst.iso
debian-8.5.0-amd64-netinst.iso.6           35%[=============================>   ]  86.53M  1.34MB/s   eta 2m 2s

服务员的踪迹:

366 7.930488    X.X.X.X 10.254.248.101  66  TCP 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668402 TSecr=44657604
369 7.931293    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#1] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668402 TSecr=44657604 SLE=3546403322 SRE=3546404710
370 7.933094    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#2] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668402 TSecr=44657604 SLE=3546403322 SRE=3546406098
371 7.933984    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#3] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668402 TSecr=44657604 SLE=3546403322 SRE=3546407486
372 7.934031    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#4] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668402 TSecr=44657604 SLE=3546403322 SRE=3546408874
373 7.935729    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#5] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546403322 SRE=3546410262
374 7.936154    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#6] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546403322 SRE=3546411650
375 7.937320    X.X.X.X 10.254.248.101  78  TCP [TCP Dup ACK 366#7] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546403322 SRE=3546413038
376 7.938613    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#8] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546415814 SLE=3546403322 SRE=3546413038
377 7.940425    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#9] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546417202 SLE=3546403322 SRE=3546413038
378 7.941661    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#10] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546418590 SLE=3546403322 SRE=3546413038
379 7.942561    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#11] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546419978 SLE=3546403322 SRE=3546413038
380 7.943155    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#12] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546421366 SLE=3546403322 SRE=3546413038
381 7.945145    X.X.X.X 10.254.248.101  86  TCP [TCP Dup ACK 366#13] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
382 7.945992    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#14] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546424142 SRE=3546425530 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
383 7.946974    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#15] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668403 TSecr=44657604 SLE=3546424142 SRE=3546426918 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
384 7.948476    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#16] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546428306 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
385 7.949704    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#17] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546429694 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
386 7.950628    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#18] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546431082 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
387 7.951890    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#19] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546432470 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
388 7.953365    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#20] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546433858 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
389 7.954028    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#21] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546435246 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
390 7.955327    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#22] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546436634 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
391 7.956139    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#23] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546438022 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
392 7.957504    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#24] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546439410 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
393 7.958271    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#25] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546440798 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
394 7.963017    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#26] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668404 TSecr=44657604 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754 SLE=3546403322 SRE=3546413038
395 7.963080    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#27] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546444962 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
396 7.963091    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#28] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546446350 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
397 7.963127    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#29] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546447738 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
398 7.963912    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#30] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546449126 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
399 7.965634    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#31] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546450514 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
400 7.966653    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#32] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546451902 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
401 7.967402    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#33] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546453290 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
402 7.968499    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#34] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546454678 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
403 7.969984    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#35] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546456066 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
404 7.971168    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#36] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668405 TSecr=44657604 SLE=3546443574 SRE=3546457454 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
405 7.972479    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#37] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546443574 SRE=3546458842 SLE=3546424142 SRE=3546442186 SLE=3546414426 SRE=3546422754
406 7.973633    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#38] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546460230 SRE=3546461618 SLE=3546443574 SRE=3546458842 SLE=3546424142 SRE=3546442186
407 7.974609    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#39] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546460230 SRE=3546463006 SLE=3546443574 SRE=3546458842 SLE=3546424142 SRE=3546442186
408 7.975828    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#40] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842 SLE=3546424142 SRE=3546442186
409 7.976604    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#41] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546467170 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
410 7.977806    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#42] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546468558 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
411 7.979200    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#43] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546469946 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
412 7.982792    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#44] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546471334 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
413 7.982817    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#45] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546472722 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
414 7.983331    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#46] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546474110 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
415 7.983631    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#47] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668406 TSecr=44657604 SLE=3546465782 SRE=3546475498 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
416 7.984371    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#48] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668407 TSecr=44657604 SLE=3546465782 SRE=3546476886 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
417 7.986238    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#49] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668407 TSecr=44657604 SLE=3546465782 SRE=3546478274 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
418 7.987165    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#50] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668407 TSecr=44657604 SLE=3546465782 SRE=3546479662 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
419 7.988157    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#51] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668407 TSecr=44657604 SLE=3546465782 SRE=3546481050 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
421 8.113745    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#52] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668420 TSecr=44657604 SLE=3546465782 SRE=3546482438 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
424 8.150664    X.X.X.X 10.254.248.101  60  TCP 65259  >  443 [ACK] Seq=1251 Ack=2197 Win=65700 Len=0
428 8.373938    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#54] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668446 TSecr=44657604 SLE=3546465782 SRE=3546485214 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
434 8.504768    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#55] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668459 TSecr=44657604 SLE=3546465782 SRE=3546486602 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
436 8.630589    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#56] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668472 TSecr=44657604 SLE=3546465782 SRE=3546487990 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
439 8.759603    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#57] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668485 TSecr=44657604 SLE=3546465782 SRE=3546489378 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
441 8.886688    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#58] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668498 TSecr=44657604 SLE=3546465782 SRE=3546490766 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
443 9.015359    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#59] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668510 TSecr=44657604 SLE=3546465782 SRE=3546492154 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
445 9.141981    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#60] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668523 TSecr=44657604 SLE=3546465782 SRE=3546493542 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
447 9.271283    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#61] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668536 TSecr=44657604 SLE=3546465782 SRE=3546494930 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
449 9.398242    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#62] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668549 TSecr=44657604 SLE=3546465782 SRE=3546496318 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
451 9.525714    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#63] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668562 TSecr=44657604 SLE=3546465782 SRE=3546497706 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
453 9.653846    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#64] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668574 TSecr=44657604 SLE=3546465782 SRE=3546499094 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
455 9.782376    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#65] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668587 TSecr=44657604 SLE=3546465782 SRE=3546500482 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
457 9.909855    X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#66] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668600 TSecr=44657604 SLE=3546465782 SRE=3546501870 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
459 10.038509   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#67] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668613 TSecr=44657604 SLE=3546465782 SRE=3546503258 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
461 10.166752   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#68] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668626 TSecr=44657604 SLE=3546465782 SRE=3546504646 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
467 10.303645   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#69] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668639 TSecr=44657604 SLE=3546465782 SRE=3546506034 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
474 10.430023   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#70] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668652 TSecr=44657604 SLE=3546465782 SRE=3546507422 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
476 10.557951   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#71] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668665 TSecr=44657604 SLE=3546465782 SRE=3546508810 SLE=3546460230 SRE=3546464394 SLE=3546443574 SRE=3546458842
478 10.689920   X.X.X.X 10.254.248.101  94  TCP [TCP Dup ACK 366#72] 33426  >  443 [ACK] Seq=831 Ack=223341 Win=248576 Len=0 TSval=94668678 TSecr=44657604 SLE=3546507422 SRE=3546508810 SLE=3546465782 SRE=3546508810 SLE=3546460230 SRE=3546464394
482 11.045636   X.X.X.X 62.61.231.82    1454    TCP [TCP Retransmission] 443  >  33426 [ACK] Seq=223341 Ack=831 Win=31104 Len=1388 TSval=44658396 TSecr=94668678

答案1

感谢您发送这些截图。

问题

您的吞吐量问题似乎是由 TCP 序列号随机化实施错误引起的。我以前在 Cisco ASA 上见过这种情况。

提供一些背景信息,过去观察到一些 TCP 实现在选择初始序列号 (ISN) 时没有使用足够的随机性,这使得攻击者可以更轻松地通过对序列号进行有根据的猜测来操纵 TCP 连接。

为了尝试解决此问题,一些防火墙提供商实施了一项名为 TCP 序列号随机化的功能,当它看到 TCP 数据包流经防火墙时,它会将序列号 (SEQ) 重写为更随机的值。不幸的是,此功能的一些实现存在一些问题,并且没有考虑到 TCP 的选择性确认 (SACK) 功能。

您可以在跟踪中看到序列号随机化的作用。查看来自服务器的 SYN/ACK 数据包(数据包 #51 服务器捕获),您可以看到所选的 ISN 是2847541373。然而,当客户端收到相同的 SYN/ACK 数据包时(数据包 #8 客户端捕获),ISN 已更改为2098751282

在网络出现数据包丢失之前,这种行为都是正常的。

在客户端,查看数据包 259 处的第一个重复确认 (Dup ACK)。您可以看到已设置 SACK 块,覆盖字节 2098977399-2098978787。此数据包有效地告诉服务器,我正在等待 SEQ 为 2098974623 的数据包,但是我已收到 2098977399-2098978787,因此您不需要再次发送它们。

现在,如果你查看服务器端收到的相同的 Dup ACK(#369),你会看到 ACK 编号已经被防火墙正确转换(2098974623 > 2847764714​​),但是 SACK 块还没有转换,仍然显示 2098977399-2098978787!

当收到带有无效 SACK 块的 Dup ACK 时,将忽略 Dup ACK。

因此,您将无法使用快速重传(收到 3 个重复 ACK 后重传),只能依靠重传超时。这对性能非常非常不利,并且会大大降低您的吞吐量。

所以,你可以做什么?

您可以调查 TCP 序列号随机化是否仍符合您的目的,如果不需要,请考虑禁用它进行测试。也许这个问题已在较新的固件中得到解决?

你也可以关闭服务器上的 TCP SACK 选项,以防止客户端首先使用 SACK /proc/sys/net/ipv4/tcp_sack,但请注意,SACK意味着用于提高 TCP 性能,实际问题在于防火墙(有缺陷的)对序列号随机化的实现。关闭 SACK 意味着来自客户端的 Dup ACK 将不再被忽略,连接将能够更快地从丢失中恢复。吞吐量应该会上升。

相关内容