คำตอบที่เลือกไม่ถูกต้อง / ไม่สมบูรณ์ ฉันประสบปัญหาคล้ายกันคำตอบที่เลือกให้ความช่วยเหลือ แต่ไม่เพียงพอ
ก่อนคำสั่งต่อไปนี้ไม่จำเป็นจริงๆ
tc qdisc del dev eth0 root
มันจะ 'ลบ' รูท qdisc แต่จะถูกแทนที่ด้วย pfifo_fast ในระดับกลาง (ดังนั้นคุณจะไม่สูญเสียการเชื่อมต่อ)
คำสั่งที่สอง:
tc qdisc เพิ่ม dev eth0 root handle 1: prio
จะแทนที่ pfifo_fast qdisc ด้วย prio one ตามค่าเริ่มต้นคิว prio จะมี 3 แบนด์ (0, 1, 2) แต่ละอันจัดการโดยหนึ่งคลาส (1: 1, 1: 2 และ 1: 3)
แพ็คเก็ตจะถูกส่งไปยังหนึ่งในวงดนตรีเหล่านั้นโดยใช้ฟิลด์ TOS ของแพ็คเกจ IP การกำหนดค่านี้จะปรากฏขึ้นเมื่อคุณดำเนินการ:
tc qdisc ls
ดูที่ค่า 'priomap'
จากนั้นคุณเพิ่ม netem qdisc:
tc qdisc เพิ่ม dev eth0 parent 1: 1 handle 2: netem delay 500ms
ด้วยคำสั่งนี้คุณจะชะลอการรับส่งข้อมูลทั้งหมดไปยังวงดนตรี 1: 1 (จนกว่าตัวกรองจะเข้าที่)
แต่มีสองประการ:
- ปริมาณการใช้งานของคุณอาจมีค่า TOS ที่แตกต่างกันและถูกส่งไปยังวงอื่น
- prio qdisc สามารถกำหนดค่าเพื่อให้การรับส่งข้อมูลไปยังแบนด์อื่น
ต่อไปนี้แก้ไขปัญหาของฉันที่จะไม่ได้รับผลกระทบจาก netem ในขณะที่ไม่ได้ใช้ตัวกรอง แทนที่จะทำตามขั้นตอนข้างต้นฉันก็:
tc qdisc เพิ่ม dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
การดำเนินการนี้จะส่งปริมาณการเข้าชมทั้งหมดตามค่าเริ่มต้นไปที่แบนด์ 1: 3
จากนั้นฉันเพิ่มกฎเพื่อชะลอการรับส่งข้อมูล:
tc qdisc เพิ่ม dev eth0 parent 1: 1 handle 10: netem delay 100ms 10ms
สิ่งนี้สร้าง qdisc ในวง 0 แต่เนื่องจากทราฟฟิกทั้งหมดไปที่แบนด์ 3 มันไม่ได้ส่งผลกระทบต่อฉัน
หลังจากนั้นฉันเพิ่มตัวกรอง:
tc filter เพิ่ม dev eth0 โปรโตคอล ip ผู้ปกครอง 1: 0 prio 1 การแข่งขัน ip dst 10.0.0.1/32 การแข่งขัน ip dport 80 0xffff flowid 1: 1
ขณะนี้มีตัวกรองเฉพาะ IP / พอร์ตที่เลือกเท่านั้นที่จะได้รับผลกระทบเนื่องจากเราเปลี่ยนเส้นทางปริมาณข้อมูลที่เลือกไปยังแบนด์ 0
การรับส่งข้อมูลอื่น ๆ ทั้งหมดยังคงไม่ได้รับผลกระทบเนื่องจากยังคงไหลไปยังแบนด์ 3