UDP 클라이언트가 100Mbit 서버에 1Gbit로 전송하는 이유는 무엇입니까?

UDP 클라이언트가 100Mbit 서버에 1Gbit로 전송하는 이유는 무엇입니까?

방금 Linux 사용자 공간에 작성한 간단한 UDP 클라이언트/서버 애플리케이션에서 UDP 클라이언트(1Gbit 이더넷 인터페이스)가 100Mbit 이더넷 인터페이스 UDP 서버에만 1Gbit의 데이터를 보내고 있다는 것을 발견했습니다. 물론 이로 인해 서버 측에서 많은 패킷 손실이 발생합니다.

클라이언트 측에서 다음을 수행하여 NIC 설정을 조정해야 했습니다.

ethtool -s eth0 속도 100 이중 완전 자동 조정 켜기

왜 내가 이 일을 해야 합니까? 자동으로 처리하면 안되는 건가요?

답변1

UDP 프로토콜이는 "실행 후 잊어버리는" 전송 방법이므로 패킷이 전송된 후 어떤 일이 발생하든 상관하지 않습니다. 이는 대상에 대한 경로의 특성에 관계없이 소스 시스템의 송신 속도로 보낼 수 있음을 의미합니다. 소스 인터페이스가 네트워크가 처리할 수 있는 것보다 더 빠르게 패킷을 보내는 경우 분명히 패킷 손실이 발생합니다.

이를 자동으로 처리해야 하는 경우 TCP 또는 SCTP로 전환해야 합니다. 또는 UDP 위에 자체 오류 처리 프로토콜을 구축할 수도 있습니다.

특정한 경우, 목적지에 도달하기 위해 100Mbits/s를 사용할 수 있다면 모든 트래픽을 100Mbits/s 인터페이스 속도로 제한하는 것보다 클라이언트에서 트래픽 조절을 사용하는 것이 더 좋습니다.

답변2

Stephen이 이미 지적했듯이 UDP에는 원하는 수단이 부족합니다.

애플리케이션이 보기만큼 멍청하다면 ipip호스트 간에 가상 인터페이스를 설정하고( ) 트래픽 조정을 사용하여( ) 사용되는 대역폭을 제한하여 속도를 강제로 줄일 수 있습니다.ip linktc

답변3

다른 답변에서 올바르게 지적했듯이 UDP 흐름 제어는 레이어 7에서 관리되어야 합니다.

귀하가 애플리케이션의 유일한 작성자인 경우 해당 애플리케이션에 대한 옵션을 정의할 수 있습니다.

  • 초당 전송되는 메시지 수를 정의합니다.
  • 또는 향후 릴리스에 대한 트래픽을 얼마나 빨리 생성하는지;
  • 또는 멀티캐스트가 아닌 경우 더 많은 데이터를 보내려면 클라이언트로부터 일종의 승인을 기다립니다.

관련 정보