在linux TCP系统调用的上下文中,什么是“不完整的连接请求”?

时间:2016-09-26 15:32:04

标签: linux sockets tcp posix

listen()的linux手册页说:

  

使用Linux 2.2改变了TCP套接字上的backlog参数的行为。现在它特别          为完全建立的套接字等待接受的队列长度而烦恼          不完整连接请求的数量。队列的最大长度          可以使用/ proc / sys / net / ipv4 / tcp_max_syn_backlog设置不完整的套接字。当syncook-          启用时没有逻辑最大长度,此设置将被忽略。看到          tcp(7)了解更多信息。

在这种情况下,“完全建立的套接字”与“不完整的连接请求”的含义是什么?

2 个答案:

答案 0 :(得分:1)

当主机A发起与主机B的连接时,TCP协议与所谓的三次握手建立连接:

  • A到B:SYN
  • B到A:SYN + ACK
  • A到B:确认

不完整的连接请求是已发送SYN的连接,但主机尚未收到SYN-ACK(因为第一条或第二条消息或其重试已丢失)。

这与listen()的参数的当前语义不同,"完全建立的套接字",它指定TCP协议已接受但未由应用程序处理的连接数(带有accept()),可以在TCP忽略进一步的连接请求之前排队。

答案 1 :(得分:1)

处于低水平。

有一点是打开连接,即A侧或A点。 并且有一个监听点或服务器点,即B点。

A send to B a SYN packet
B response to A a SYN ACK packet
Then A response is a ACK packet.

现在已建立连接。

如果存在未执行的步骤,或者响应不是ACK,则表示未建立连接。

在建立连接之前,"连接"列在"待定连接"。

如果响应不是ACK,则取消连接并从挂起连接列表中删除。显然有错误。

但是假设最后一个ACK没有发送,但还有另一个新连接。 此挂起的连接正在等待响应,并且新的连接将添加到列表中。 它会保留在列表中,直到响应到达或达到超时。

列表中的连接数是"未完成的连接请求"成功建立连接的数量是"完全建立的套接字"