ขอให้เป็นวันที่ดี,
ฉันมีสถานการณ์ต่อไปนี้: 4 TCP สตรีมข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง แต่ละสตรีมมีพอร์ต TCP ปลายทางของตัวเอง 4 สตรีมมีลำดับความสำคัญต่างกัน: สูง กลาง ต่ำ เป็นกลุ่ม สูง กลาง ต่ำสร้าง 1.67Mbit/s และจำนวนมากสร้าง 10Mbit/s (iperf3 ใช้เพื่อสร้างทราฟฟิก) แพ็กเก็ตของแต่ละสตรีมถูกทำเครื่องหมายด้วยเครื่องหมาย DiffServ (DSCP) ที่เหมาะสม และเครื่องหมายนี้ใช้สำหรับจำแนกประเภทของการรับส่งข้อมูลใน HTB qdisc
เป้าหมาย: ควรกำหนดค่า HTB qdisc ในลักษณะที่เมื่อใดก็ตามที่สตรีม prio สูงได้รับ 1.67Mbit/s ที่จำเป็น พรีโอปานกลางยังรับประกัน 1.67Mbit/s แต่ด้วย prio ที่ต่ำกว่าเล็กน้อย และทราฟฟิกที่เหลือควรรับประกัน 50kbit/ ส. แต่ละสตรีมต้องสามารถใช้ลิงก์ทั้งหมดได้หากไม่ได้ใช้งาน และสตรีมสร้างแบนด์วิธมากกว่าที่กำหนดไว้ในตอนแรก
การสร้างทราฟฟิก:
ลำดับความสำคัญสูง:
iperf3 -c 192.168.88.254 -p 5150 -t 62 -b 1.67M -l 128 -S 224
ลำดับความสำคัญปานกลาง:
iperf3 -c 192.168.88.254 -p 5160 -t 62 -b 1.67M -l 4K -S 160
ลำดับความสำคัญต่ำ:
iperf3 -c 192.168.88.254 -p 5170 -t 62 -b 1.67M -l 4K -S 96
จำนวนมาก:
iperf3 -c 192.168.88.254 -p 5180 -t 62 -b 10M -l 4K -S 0
การกำหนดค่า HTB qdisc
NI = "เอท 2"
AC="sudo /sbin/tc คลาสเพิ่ม dev "
# ลบ qdiscs ก่อนหน้า
sudo /sbin/tc qdisc del dev $NI รูท
# เพิ่ม HTB เป็นรูทด้วยคลาสเริ่มต้น 40 สำหรับการเข้าชมที่ไม่มีหมวดหมู่
sudo /sbin/tc qdisc เพิ่ม dev $NI root handle 1: htb default 40
คลาส sudo /sbin/tc เพิ่ม dev $NI parent 1: classid 1:1 อัตรา htb 3.5mbit ceil 1,000mbit
# สตรีมที่มีลำดับความสำคัญสูง DSCP 224 - 1110 0000 - 0xE0
$AC $NI parent 1:1 classid 1:10 อัตรา htb 1.7mbit ceil 1,000mbit prio 1
# สตรีมที่มีลำดับความสำคัญปานกลาง
$AC $NI parent 1:1 classid 1:20 อัตรา htb 1.7mbit ceil 1,000mbit prio 2
# สตรีมลำดับความสำคัญต่ำ
$AC $NI ผู้ปกครอง 1:1 classid 1:30 อัตรา htb 50kbit ceil 1,000mbit prio 3
#สตรีมจำนวนมาก
$AC $NI พาเรนต์ 1:1 classid 1:40 อัตรา htb 50kbit ceil 1,000mbit prio 4
# เพิ่มตัวกรองเพื่อจำแนกแพ็คเก็ตตามเครื่องหมาย dscp
# ลำดับความสำคัญสูง DSCP 224 - 1110 0000 - 0xE0
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 1 u32 จับคู่ ip tos 0xE0 0xff flowid 1:10
# ลำดับความสำคัญปานกลาง DSCP 160 - 1010 0000 - 0xA0
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 2 u32 จับคู่ ip tos 0xA0 0xff flowid 1:20
# ลำดับความสำคัญต่ำ DSCP 96 - 1100 0000 - 0x60
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 3 u32 จับคู่ ip tos 0x60 0xff flowid 1:30
# DSCP จำนวนมาก 0 - 0000 0000 - 0x00
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 4 u32 จับคู่ ip tos 0x00 0xff flowid 1:40
จำแนกการจราจรได้อย่างถูกต้อง ฉันสามารถเห็นตัวนับที่เกี่ยวข้องในสถิติคลาส tc ที่เพิ่มขึ้น ฉันตรวจสอบซ้ำหลายครั้ง
ปัญหา:
การกำหนดค่านี้จัดสรรแบนด์วิธให้กับสตรีมพรีโอสูงและปานกลางได้อย่างถูกต้อง prio ต่ำและจำนวนมากยังได้รับ 50kbit อย่างไรก็ตาม, ฉันไม่สามารถผลักดันผ่านลิงค์มากกว่าค่าที่ระบุในรูท คลาส 1:1 เช่น ประเมิน เช่น 3.5mbit
ในทุกบทความและคู่มือเกี่ยวกับ HTB ที่ฉันอ่านมีการระบุไว้ว่า พารามิเตอร์ "rate" คืออัตรารับประกันขั้นต่ำสำหรับคลาส และ "ceil" คือจำนวนสูงสุดที่รับได้ ในกรณีของฉันดูเหมือนว่า "อัตรา" จะจำกัดลิงก์ตามค่าที่ระบุ นี่ไม่ใช่พฤติกรรมที่ต้องการและคาดหวังอย่างแน่นอน
หากฉันตั้งค่าพารามิเตอร์ "อัตรา" ของคลาสรูทเป็นค่าเดียวกับ "ceil" เช่น 1,000mbit จะไม่มีการจัดลำดับความสำคัญและแบนด์วิธที่มีอยู่จะถูกแบ่งเท่าๆ กันระหว่างโฟลว์ทั้งหมด นี่ไม่ใช่ลักษณะการทำงานที่ต้องการ เนื่องจากในกรณีที่มีความผันผวนของแบนด์วิธที่มีอยู่ การรับส่งข้อมูลก่อนหน้าจะได้รับน้อยกว่า 1.67Mbit/s
ฉันเข้าใจความหมายของพารามิเตอร์ "อัตรา" ในคลาสรูทผิดหรือไม่ ปัญหานี้เกี่ยวข้องกับพารามิเตอร์ HTB เช่น "ควอนตัม" หรือไม่ ฉันยังสังเกตเห็นว่าทุกคลาสมีจำนวนโทเค็นติดลบระหว่างการส่งข้อมูล มันไม่ดีเหรอ? ถ้าเป็นเช่นนั้น ฉันควรปรับพารามิเตอร์ใดและอย่างไร
ขอบคุณล่วงหน้า!