原文中文,约600字,阅读约需2分钟。
📝
内容提要
TCP 连接建立过程包括两个等待:等待 ACK 和等待应用 accept()。Linux 通过未完成队列和完成队列管理这两个等待。收到 SYN 后,连接进入未完成队列,等待 ACK;收到 ACK 后,连接移至完成队列,状态变为 ESTABLISHED。
🎯
关键要点
-
TCP 连接建立过程包括两个等待:等待 ACK 和等待应用 accept()。
-
Linux 通过未完成队列和完成队列管理这两个等待。
-
收到 SYN 后,连接进入未完成队列,等待 ACK。
-
收到 ACK 后,连接移至完成队列,状态变为 ESTABLISHED。
-
未完成队列(SYN queue)保存 struct inet_request_sock 结构,等待 ACK。
-
等待 ACK 超时会重传 net.ipv4.tcp_synack_retries 次。
-
完成队列(Accept queue)在收到 ACK 后保存连接,等待应用调用 accept()。
-
如果完成队列满了,会发送 RST。
🏷️