客户端(>5w)异步connect连接到server端,server端listen backlog设置为1024,发现存在部分客户端建立连接后,收到服务端的rst包。

先看下tcp监听套接字维护的两个队列(来自Unix网络编程)

tcp nonblock connection rst

测试模拟抓包如下:

解释:异步connect过快,导致server端listen已完成连接队列满了,后面接着来的connect请求放到未完成连接对列(SYN--->SYN,ACK, 等待客户端的ACK)中,当客户端的握手包ACK到来时,由于已完成连接队列已满,无法继续接受连接,因此丢弃该ACK,而未完成队列一段时间后仍为收到ACK,会重传SYN,ACK包,这就出现了下图所示的多次重传,默认重传5次(可通过sysct -a | grep synack查看和设置。)5次重传后,将该未完成连接从未完成连接队列移出。而客户端看来连接正常,接着发送速度,收到服务端的RST包。

tcp nonblock connection rst

详解介绍请看:http://blog.csdn.net/justlinux2010/article/details/8604676

 

 

 

相关文章:

  • 2021-09-17
  • 2021-11-04
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
  • 2021-11-16
  • 2022-02-21
猜你喜欢
  • 2021-11-06
  • 2021-06-14
  • 2022-01-03
  • 2022-01-21
  • 2021-11-05
  • 2021-06-26
  • 2022-01-13
相关资源
相似解决方案