TCP套接字:调用接受之前,缓冲了多少传入数据?

时间:2018-10-03 17:51:33

标签: sockets networking tcp kernel tcp-ip

考虑一个正在侦听端口上传入TCP连接的服务器进程。

内核为服务器进程尚未接受的传入TCP连接保留“挂起连接队列”。 在这种未决状态下,我希望完整的TCP握手已完成(syn,syn ack,ack)吗?

但是,只有在服务器进程调用“ accept”系统调用时,挂起的连接之一才会真正建立并从队列中弹出,从而允许向服务器进程发送数据或从服务器进程接收数据。

我有两个具体问题。

  • 在服务器进程“接受”连接之前,内核是否接受传入的有效载荷数据?此传入数据必须在“套接字接收缓冲区”中缓冲,以等待服务器进程接受连接并最终读取数据。

    如果答案是否定的,内核如何在保持连接有效的同时拒绝有效负载数据?通过将TCP接收窗口大小设置为零?

    如果答案是肯定的,内核如何防止套接字接收缓冲区过大导致RAM过度使用?当然,必须配置一些合理的接收缓冲区限制。

  • 内核将尚未被服务器进程接受的未决连接保持活动状态的时间是多长时间?内核是否为未决的TCP连接发送保持活动消息?

0 个答案:

没有答案