凍結 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解凍後會不會不等待Server B的ACK繼續傳送資料?如果凍結和解凍之間的延遲足夠長,以至於伺服器 B 關閉 TCP 連接,則緩衝區中的資料將會遺失。

感謝有關該行為的規範和保證的連結。但也許沒有任何保證,因此依賴任何一種行為都會很脆弱?

問題的背景是,我想知道在 AWS Lambda 上透過 TCP 發送資料時必須多小心(我的假設是 AWS Lambda 在處理 Lambda 呼叫之後/之前使用 cgroup 凍結/解凍)。將應用程式緩衝區刷新到 TCP 套接字/TCP 發送緩衝區是否足夠?或者是否必須確保伺服器B已經收到應用層的數據,例如使用HTTP並等待伺服器的HTTP回應?

相關內容