문제를 더 명확하게 설명할 수는 없으므로 다음은 예시 시나리오입니다.
대역폭이 10Mbps인 물리적 인터페이스(또는 속도를 10Mbps로 제한하는 tc 토큰 버킷 필터가 있는 고속 인터페이스)를 통해 IP 네트워크에 연결된 Linux 시스템이 있다고 가정합니다.
원격 시스템에서 iperf UDP 서버를 시작합니다(동일한 속도 또는 더 빠른 링크 사용).
iperf -s -u -i 1
로컬 컴퓨터에서 bw=20Mbps로 iperf 클라이언트를 시작합니다.
iperf -c <server ip> -u -i 1 -b 20M
관찰하다: 발신자는 10Mbps 속도(tc qdisc의 하드웨어 또는 링크 계층에 정의됨)를 절대 초과하지 않습니다.
발신자가 초당 20Mbit의 패킷을 푸시하여 인터페이스의 로컬 tx 대기열이 쌓이고 패킷 손실이 발생하기 시작할 것으로 예상합니다. 그러나 이것은 사실이 아니다. 왜?
Linux 커널의 net/sched 폴더를 살펴보았지만 이 동작의 원인을 찾을 수 없는 것 같습니다.
당신의 도움을 주셔서 감사합니다. 또한 제목의 관련성을 높이기 위해 자유롭게 제목 변경을 제안해 보세요.
답변1
이는 이라는 기능 때문입니다.자동 협상, 이것은 다음에서 발생합니다물리층. 커널에 관한 한 링크(연결)는 10Mbps의 대역폭만 처리할 수 있으며 iperf는 아마도 이 최대 연결 속도를 준수합니다.
좋은 사람들이 여기 있어요https://networkengineering.stackexchange.com/이 상호 작용에 대해 더 궁금한 점이 있으면 더 자세히 알아볼 수 있습니다.
답변2
로컬 시스템은 스택 위로 전달되는 NIC의 대역폭에 의해 제한됩니다. 이 값을 기준으로 트래픽을 제한합니다.
병렬 스트림(-P) 옵션을 사용하여 각각 NIC 속도로 제한되지만 모두 10mb/s를 푸시하려고 하는 여러 스트림을 생성할 수 있습니다.
답변3
대략적으로 말하자면, 일반적으로 패킷은 저장 후 전달과 같은 방식으로 "버킷"이라고 부르는 것에 저장되고 미리 정의된 대역폭을 보장하기 위해 시간이 지남에 따라 네트워크를 통해 전송됩니다. 항상 폐기되는 것은 아닙니다. 그렇기 때문에 사용하는 QoS 방법, 모니터링하는 클라이언트 수 및 일반 구성에 따라 CPU 및 메모리 비용이 빠르게 증가할 수 있습니다.
여러 OSI 수준에서 QoS(서비스 품질)를 구현할 수 있습니다. Squid 프록시 서버, RouterOS 인터페이스에서 또는 특정 네트워크 프로토콜의 각 포트를 통해 권한을 부여하여 이 작업을 수행할 수 있습니다.
감사합니다.