패킷을 대기열에 추가하여 전송 방법을 제어할 수 있습니다. 이러한 종류의 제어를 데이터 형성이라고 하며, 데이터에 대해 다음 작업을 수행합니다.
qdisc-class-filter
구조에서 흐름을 제어하려면 세 단계가 필요합니다.
Linux는 패킷을 대기열에 넣어 트래픽을 제어하므로 먼저 대기열이 필요합니다.
클래스는 실제로 교통 정책을 분류하는 데 사용됩니다. 예를 들어 트래픽 속도 제한 수준을 10MBps와 20MBps의 두 가지로 나눌 수 있습니다.
클래스 분류가 생성되었으나 클래스에 바인딩된 IP나 포트가 없으므로 현재로서는 제어 효과가 없습니다. 또한 흐름 제어 클래스가 리소스에 적용될 수 있도록 지정된 IP 및 포트를 클래스에 바인딩하는 필터를 만들어야 합니다.
TC는 Linux에서 제공하는 트래픽 제어 도구이며 Cilium/eBPF와 같은 네트워크 구성 요소의 핵심 인프라 중 하나입니다.
qdisc-class-filter
여기서 단위는 6 MBps
,也就是 48 Mbps
입니다.
여러 하위 카테고리를 생성하여 리소스 트래픽을 세련된 방식으로 관리할 수 있습니다.
으아악여기서 ceil은 상한을 설정합니다. 일반적인 상황에서는 속도 제한이 6MBps이지만 네트워크가 유휴 상태일 때는 10MBps에 도달할 수 있습니다.
여기에 1.2.3.4
进行限制带宽为 1:10
,也就是 6MBps。当然,你也可以直接给网段 1.2.0.0/16
에 수업 전략을 추가하세요.
tc class show dev eth0 class htb 1:10 parent 1:1 leaf 10: prio 0 rate 48Mbit ceil 80Mbit burst 15Kb cburst 1600b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 15Kb cburst 1590b
tc filter show dev eth0 filter parent 1: protocol ip pref 1 u32 chain 0 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 f lowid 1:10 not_in_hw match 01020303/ffffffff at 16
tc qdisc del dev eth0 root
由于排队规则主要是基于出口方向,不能对入口方向的流量(Ingress)进行限制。因此,我们需要将流量重定向到 ifb 设备上,再对 ifb 的出口流量(Egress)进行限制,以最终达到控制的目的。
modprobe ifb numifbs=1
ip link set dev ifb0 up
qdisc-class-filter
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress re direct dev ifb0
tc qdisc add dev ifb0 root handle 1: htb default 10 tc class add dev ifb0 parent 1:0 classid 1:1 htb rate 6Mbps tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 6Mbps tc filter add dev ifb0 parent 1:0 protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1: 10
进入的流量被限制在 6 MBps 以下,而出去的流量不被限制。
tc class show dev ifb0 class htb 1:10 parent 1:1 prio 0 rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b class htb 1:1 root rate 48Mbit ceil 48Mbit burst 1590b cburst 1590b
tc filter show dev ifb0 filter parent 1: protocol ip pref 16 u32 chain 0 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 16 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 not_in_hw match 01020304/ffffffff at 16
tc qdisc del dev eth0 ingress tc qdisc del dev ifb0 root modprobe -r ifb
위 내용은 TC를 사용하여 Linux에서 네트워크 전류 제한을 우아하게 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!