为什么服务器在closures之后发送RST包到客户端?

我正在testing服务器压力testing。 服务器操作系统和客户端操作系统是CentOS6.4。

客户端尝试3000连接,一个连接发送一个HTTP请求,通过负载testing工具,weighttp。 但是,客户端得到错误。 这个错误是由对等重置的连接。 我通过wireshark捕获数据包。

0.523605 10.0.0.2 -> 10.0.0.1 TCP 74 45763 > ddi-tcp-1 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=178982970 TSecr=0 WS=128 0.533484 10.0.0.1 -> 10.0.0.2 TCP 74 ddi-tcp-1 > 45763 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=178914097 TSecr=178982970 WS=128 0.589445 10.0.0.2 -> 10.0.0.1 TCP 66 45763 > ddi-tcp-1 [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=178982993 TSecr=178914097 0.789282 10.0.0.2 -> 10.0.0.1 TCP 166 45763 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=178983235 TSecr=178914097 0.839889 10.0.0.1 -> 10.0.0.2 TCP 66 ddi-tcp-1 > 45763 [ACK] Seq=1 Ack=100 Win=14592 Len=0 TSval=178914363 TSecr=17898323 0.845196 10.0.0.1 -> 10.0.0.2 TCP 303 ddi-tcp-1 > 45763 [PSH, ACK] Seq=1 Ack=100 Win=14592 Len=237 TSval=178914374 TSecr=178983235 0.845203 10.0.0.1 -> 10.0.0.2 TCP 678 ddi-tcp-1 > 45763 [PSH, ACK] Seq=238 Ack=100 Win=14592 Len=612 TSval=178914374 TSecr=178983235 1.071341 10.0.0.1 -> 10.0.0.2 TCP 915 [TCP Retransmission] ddi-tcp-1 > 45763 [PSH, ACK] Seq=1 Ack=100 Win=14592 Len=849 TSval=178914640 TSecr=178983235 1.076500 10.0.0.2 -> 10.0.0.1 TCP 66 45763 > ddi-tcp-1 [ACK] Seq=100 Ack=850 Win=16384 Len=0 TSval=178983531 TSecr=178914640 1.076575 10.0.0.2 -> 10.0.0.1 TCP 66 45763 > ddi-tcp-1 [FIN, ACK] Seq=100 Ack=850 Win=16384 Len=0 TSval=178983531 TSecr=178914640 1.076844 10.0.0.1 -> 10.0.0.2 TCP 66 ddi-tcp-1 > 45763 [FIN, ACK] Seq=850 Ack=101 Win=14592 Len=0 TSval=178914649 TSecr=178983531 1.337245 10.0.0.2 -> 10.0.0.1 TCP 66 45763 > ddi-tcp-1 [ACK] Seq=101 Ack=851 Win=16384 Len=0 TSval=178983535 TSecr=178914649 1.463888 10.0.0.1 -> 10.0.0.2 TCP 66 [TCP Retransmission] ddi-tcp-1 > 45763 [FIN, ACK] Seq=850 Ack=101 Win=14592 Len=0 TSval=178914911 TSecr=178983531 1.471462 10.0.0.2 -> 10.0.0.1 TCP 66 [TCP Dup ACK 9057#1] 45763 > ddi-tcp-1 [ACK] Seq=101 Ack=851 Win=16384 Len=0 TSval=178983923 TSecr=178914649 1.586270 10.0.0.1 -> 10.0.0.2 TCP 54 ddi-tcp-1 > 45763 [RST] Seq=851 Win=0 Len=0 

我不明白。 为什么服务器在优雅的closures后将RST数据包发送给客户端?

我很抱歉我英语不好。


感谢您的重播。

我捕获服务器端和客户端的数据包。 服务器很拖延。

服务器包

  8.537458 10.0.0.2 -> 10.0.0.1 TCP 74 51446 > ddi-tcp-1 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=720269 TSecr=0 WS=128 8.537461 10.0.0.1 -> 10.0.0.2 TCP 74 ddi-tcp-1 > 51446 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=691010 TSecr=720269 WS=128 10.279094 10.0.0.2 -> 10.0.0.1 TCP 165 51446 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=722038 TSecr=691010 10.281834 10.0.0.1 -> 10.0.0.2 TCP 54 ddi-tcp-1 > 51446 [RST] Seq=1 Win=0 Len=0 

客户端包

  6.959709 10.0.0.2 -> 10.0.0.1 TCP 74 51446 > ddi-tcp-1 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=720269 TSecr=0 WS=128 6.964438 10.0.0.1 -> 10.0.0.2 TCP 74 ddi-tcp-1 > 51446 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=691010 TSecr=720269 WS=128 7.000836 10.0.0.2 -> 10.0.0.1 TCP 66 51446 > ddi-tcp-1 [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=720315 TSecr=691010 7.002803 10.0.0.2 -> 10.0.0.1 TCP 165 51446 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=720315 TSecr=691010 7.222562 10.0.0.2 -> 10.0.0.1 TCP 165 [TCP Retransmission] 51446 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=720562 TSecr=691010 7.514462 10.0.0.1 -> 10.0.0.2 TCP 66 ddi-tcp-1 > 49507 [FIN, ACK] Seq=850 Ack=101 Win=14592 Len=0 TSval=691534 TSecr=720767 7.703119 10.0.0.2 -> 10.0.0.1 TCP 165 [TCP Retransmission] 51446 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=721054 TSecr=691010 8.686885 10.0.0.2 -> 10.0.0.1 TCP 165 [TCP Retransmission] 51446 > ddi-tcp-1 [PSH, ACK] Seq=1 Ack=1 Win=14720 Len=99 TSval=722038 TSecr=691010 8.709193 10.0.0.1 -> 10.0.0.2 TCP 60 ddi-tcp-1 > 51446 [RST] Seq=1 Win=0 Len=0 

我检查了操作系统日志(/ var / log / messaeges),但是我找不到服务器达到的限制。

我正在解决问题。 谢谢!

由于FIN的重传,ACK @ 1.463888在服务器端看起来并不是非常优雅,就好像它没有看到ACK @ 1.337245

我最好的猜测是,初始的closuresACK @ 1.337245最终在1.463888之后得到处理,RST用于后续的ACK @ 1.471462

尝试在10.0.0.1上同时进行捕获,以比较连接的两端,并查看数据包何时/是否出现在服务器上。

此外,客户初始收盘ACK @ 1.337245似乎也有明显的延迟,这也可能是一个促成因素。 客户以前的ACK @ 1.076500也是在重发之后。 也许你正在接近客户端系统的限制? 尝试将客户端请求分成两个或多个方框,将其作为一个可能的限制因素去除。

我把syn cookie 1更改为0。

这个问题解决了!

非常感谢你!