冻结 cgroup 是否会等待 TCP 发送缓冲区被刷新?

冻结 cgroup 是否会等待 TCP 发送缓冲区被刷新?

当发生以下情况时,有什么保证可以刷新 TCP 发送缓冲区(如果有的话)?冷冻机子系统冻结 cgroup?

考虑以下场景:在 cgroup 中运行的服务器 A 通过 TCP 向服务器 B 发送数据。TCP 套接字配置为使用 Naggle 算法(TCP_NODELAY未设置该选项)。因此,send通过套接字发送数据不会因服务器 B 的 ACK 而阻塞,而是在要发送的数据复制到 TCP 发送缓冲区后返回。此后,但在数据发送到服务器 B 之前,cgroup 被冻结。

TCP 发送缓冲区中的数据会发生什么情况?

  • 冻结操作是否会等到缓冲区中的所有数据都已被服务器 B 确认?如果服务器 B 的接收缓冲区已满怎么办?冻结是否会无限期地等待服务器 B 的确认?
  • 在 cgroup 解冻后,freeze 是否会不等待 Server B 的 ACK 而继续发送数据?如果 freeze 和 thaw 之间的延迟足够长,导致 Server B 关闭 TCP 连接,则缓冲区中的数据将会丢失。

希望能提供与该行为相关的规范和保证的链接。但也许没有任何保证,因此依赖任何一种行为都会很脆弱?

这个问题的背景是,我想知道在 AWS Lambda 上通过 TCP 发送数据时需要多小心(我的假设是 AWS Lambda 使用 cgroups 在处理 Lambda 调用之后/之前冻结/解冻)。将应用程序缓冲区刷新到 TCP 套接字/TCP 发送缓冲区是否足够?还是必须确保服务器 B 已在应用程序层接收到数据,例如通过使用 HTTP 并等待服务器的 HTTP 响应?

相关内容