인터넷 대역폭을 관리하기 위해 Linux에 몇 가지 스크립트가 있지만 그 기능을 이해하지 못합니다.
다음 스크립트의 의미는 무엇입니까?
tc qdisc add dev $IF root handle 1: htb default 256
tc class add dev $IF parent 1: classid 1:1 htb rate $max
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:4001
echo 1 > /proc/sys/net/ipv4/ip_forward
그리고:
tc class add dev $IF parent 1:1 classid 1:$(($n)) htb rate "$1"kbps ceil "$2"kbps
tc filter add dev $IF protocol ip parent 1:0 prio 2 u32 match ip dst "$line"/32 flowid 1:$(($n))
#ack
tc filter add dev $IF parent 1: protocol ip prio 1 u32 match ip dst "$line"/32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:$(($n))
그리고:
tc class add dev $IF parent 1:1 classid 1:256 htb rate 60kbps
답변1
HTB는 보수적이지 않은 qdisc입니다. 출력 속도를 제한합니다. HTB가 제한에 따라 대기열에서 제거할 수 있는 것보다 더 많은 데이터가 인터페이스 대기열에 있으면 패킷이 삭제됩니다.
스크립트가 불완전하므로 어떤 역할을 하는지 명확하지 않습니다.
이 인터페이스에 대기 중인 트래픽은 클래스에 할당되어야 합니다. 1:0은 qdisc이고, 1:1, 1:2,...1:256은 이 qdisc에 속하는 클래스입니다. 각 클래스는 고유한 구성을 가질 수 있습니다.
tc filter
특정 패킷을 담당하는 클래스를 결정합니다. 찾을 수 없는 경우 qdisc 정의는 1:256을 기본 클래스로 설정하며 이는 귀하의 경우 정적으로 구성됩니다. 다른 모든 것은 "동적으로" 구성됩니다(그러나 이는 표시된 코드의 일부가 아닙니다).
모두 대역폭이 보장된 대상 호스트(개별 IP 주소) 목록이 있는 것 같습니다. 패킷이 이러한 호스트 중 하나를 대상으로 하는 경우 해당 호스트를 담당하는 클래스에 배치됩니다. 대상 IP보다 조건이 더 많은데, u8, u16 필터는 찾아보지 않고는 이해가 되지 않습니다. 이는 TCP와 UDP, 해당 포트, TCP 플래그, 패킷 크기 등을 필터링할 수 있습니다.