우리는 클라이언트/서버 애플리케이션을 개발 중입니다. 서버 앱에는 세 가지 유형의 네트워크 데이터가 있습니다. 비디오/오디오와 같은 실시간 데이터, 데이터베이스 데이터와 같은 중요 데이터, 일반 파일 전송과 같은 BestEfforts 데이터입니다.
우리는 각 IP 패킷의 QOS 필드를 설정하여 IP 패킷이 위의 세 가지 데이터 유형 중 어떤 데이터 유형에 속하는지 나타내고, TC를 사용하여 이 세 가지 유형의 데이터에 대해 서로 다른 최대 속도를 설정할 계획입니다.
내가 아는 한 qos 필드 설정은 가능하지만 qos 값(IP 헤더의 QOS 필드 값)을 지정하여 IP 패킷의 속도를 제한할 수 있는지 궁금합니다.
답변1
TOS
IPv4 패킷 헤더의 8비트 필드를 의미하는 것 같습니다 . 이미 읽어 보셨나요?LARTC 하우투? 반드시 읽어야 할 가이드입니다. 간단히 말해서, 당신은
1) 정의 QDISCs
하고CLASSes
트래픽을 분류하고, 우선순위를 정하고 형성합니다(송신 트래픽만 형성할 수 있습니다!!!). 일반적으로 전송해야 하는 모든 패킷은 QDISC
네트워크 인터페이스의 대기열에 추가됩니다.
CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10
필드 가 낮은 클래스가 prio
먼저 시도됩니다. 따라서 클래스 1:10은 예를 들어 최소 지연이 필요한 패킷 전용으로 사용될 수 있습니다. 1:11 및 1:12 클래스에는 SFQ
보다 공정한 대역폭 공유를 보장하기 위해 대기열 규칙이 첨부되어 있습니다.
2) 필터 정의오른쪽에 패킷을 대기열에 넣습니다 CLASS
.
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12
이는 단순히 마크 10이 있는 패킷이 클래스 10으로 이동한다는 것을 알려줍니다.
3) iptables 규칙 정의패킷을 오른쪽에 대기열에 넣도록 표시하려면CLASS
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12
나는 필드의 특정 값을 일치시키고 그에 따라 표시하는 tos
방법을 보여주기 위해 의도적으로 iptables 모듈을 사용합니다 . TOS
이 모듈에 대한 자세한 내용을 보려면 다음을 실행하세요.
iptables -m tos --help