cgroup을 고정하면 TCP 전송 버퍼가 플러시될 때까지 기다리나요?

cgroup을 고정하면 TCP 전송 버퍼가 플러시될 때까지 기다리나요?

TCP 전송 버퍼가 있는 경우 플러시에 대해 어떤 보장이 있습니까?냉동고 하위 시스템cgroup을 정지시키나요?

다음 시나리오를 고려하십시오. cgroup에서 실행되는 서버 A는 TCP를 통해 서버 B로 데이터를 보냅니다. TCP 소켓은 Naggle 알고리즘을 사용하도록 구성됩니다( TCP_NODELAY옵션이 설정되지 않음). 따라서 send소켓을 통한 데이터 전송은 서버 B의 ACK를 차단하지 않고 전송할 데이터가 TCP 전송 버퍼에 복사된 후에 반환됩니다. 그 후 데이터가 서버 B로 전송되기 전에 cgroup이 고정됩니다.

TCP 전송 버퍼의 데이터는 어떻게 되나요?

  • 서버 B가 버퍼의 모든 데이터를 승인할 때까지 고정 작업이 대기합니까? 서버 B의 수신 버퍼가 가득 차면 어떻게 되나요? 동결은 서버 B의 승인을 무기한 기다리나요?
  • 동결은 서버 B의 ACK를 기다리지 않고 cgroup이 동결된 후에도 계속 데이터를 보내나요? 동결과 해동 사이의 지연 시간이 서버 B가 TCP 연결을 닫을 만큼 길면 버퍼의 데이터가 손실됩니다.

해당 동작에 대한 사양 및 보증 링크를 알려주시면 감사하겠습니다. 하지만 보장이 없으므로 두 가지 동작 중 하나에 의존하는 것이 취약할 수 있습니까?

질문의 배경은 AWS Lambda에서 TCP를 통해 데이터를 전송할 때 얼마나 조심해야 하는지 궁금하다는 것입니다(내 가정은 AWS Lambda가 Lambda 호출이 처리된 후/전에 cgroup을 사용하여 고정/해동하는 것입니다). 애플리케이션 버퍼를 TCP 소켓/TCP 전송 버퍼로 플러시하는 것으로 충분합니까? 아니면 예를 들어 HTTP를 사용하고 서버의 HTTP 응답을 기다리는 등 서버 B가 애플리케이션 계층에서 데이터를 수신했는지 확인해야 합니까?

관련 정보