Bài 4: IPv6 QoS
Tiếp tục sử dụng hạ tầng kết nối router từ các bài thực hành trước. Trong bài này, 3 dòng dữ liệu truyền từ trạm C0 đến C4, C1 đến C3 và C2 đến C3 được thiết lập thông số QoS khác nhau để dòng C0 => C4 luôn được đảm bảo chất lượng cho dù các dòng kia đòi hỏi băng thông vượt quá năng lực của hạ tầng mạng. Giải pháp là sử dụng trường Traffic Class để thiết lập ưu tiên cho dòng C0=>C4 và sử dụng Traffic Control trong các Linux router để cài đặt xử lý các gói tin theo mức ưu tiên khác nhau. Các bước thực hiện:
- Bước 1: Kiểm tra băng thông các dòng dữ liệu cạnh tranh.
- Bước 2: Cấu hình Traffic Control cho các router để xử lý ưu tiên các dòng.
- Bước 3: Kiểm tra tính chất QoS của hệ thống.
- Bước 4: Áp dụng trường Traffic Class.
- Bước 5: Áp dụng trường Flow Label.
Kiểm tra băng thông dòng dữ liệu toàn mạng từ C0 đến C4 với iperf3. C4 chạy iperf3 chế độ server, C0 chạy iperf3 chế độ client. Thông số hiển thị cho biết hệ thống kết nối từ C0, đi qua tất cả các router, đến C4 với băng thông khoảng 110Mbps:
[root@C4 ~]#
iperf3 -s -p 5001
-----------------------------------------------------------
Server listening on 5001
-----------------------------------------------------------
Accepted connection from fec0::7, port 55694
[ 5] local 2000::7 port 5001 connected to fec0::7 port 55695
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 8.58 MBytes 71.9 Mbits/sec
[ 5] 1.00-2.00 sec 7.65 MBytes 64.1 Mbits/sec
[ 5] 2.00-3.00 sec 12.0 MBytes 101 Mbits/sec
[ 5] 3.00-4.00 sec 16.4 MBytes 138 Mbits/sec
[ 5] 4.00-5.00 sec 13.4 MBytes 112 Mbits/sec
[ 5] 5.00-6.00 sec 17.9 MBytes 150 Mbits/sec
[ 5] 6.00-7.00 sec 14.7 MBytes 123 Mbits/sec
[ 5] 7.00-8.00 sec 7.52 MBytes 63.2 Mbits/sec
[ 5] 8.00-9.00 sec 16.4 MBytes 138 Mbits/sec
[ 5] 9.00-10.00 sec 15.8 MBytes 132 Mbits/sec
[ 5] 10.00-10.03 sec 471 KBytes 115 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.03 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-10.03 sec 131 MBytes 109 Mbits/sec receiver
[root@C0 ~]# iperf3 -6 -c 2000::7 -p 5001
Connecting to host 2000::7, port 5001
[ 4] local fec0::7 port 55695 connected to 2000::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 9.68 MBytes 81.1 Mbits/sec 0 361 KBytes
[ 4] 1.00-2.00 sec 8.18 MBytes 68.7 Mbits/sec 0 582 KBytes
[ 4] 2.00-3.00 sec 12.4 MBytes 104 Mbits/sec 79 565 KBytes
[ 4] 3.00-4.00 sec 16.2 MBytes 136 Mbits/sec 73 449 KBytes
[ 4] 4.00-5.00 sec 13.7 MBytes 115 Mbits/sec 0 491 KBytes
[ 4] 5.00-6.00 sec 18.0 MBytes 151 Mbits/sec 0 517 KBytes
[ 4] 6.00-7.00 sec 13.5 MBytes 113 Mbits/sec 0 531 KBytes
[ 4] 7.00-8.00 sec 8.15 MBytes 68.4 Mbits/sec 30 385 KBytes
[ 4] 8.00-9.00 sec 16.9 MBytes 142 Mbits/sec 0 421 KBytes
[ 4] 9.00-10.00 sec 15.5 MBytes 130 Mbits/sec 0 442 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 132 MBytes 111 Mbits/sec 182 sender
[ 4] 0.00-10.00 sec 131 MBytes 110 Mbits/sec receiver
iperf Done.
Tạo thêm một dòng dữ liệu từ C1 đến C3, sau đó tạo dòng dữ liệu C0 đến C4 trong khi dòng C1=>C3 chưa kết thúc. Có thể thấy băng thông dòng C0=>C4 đã giảm đáng kể, xuống còn khoảng 25Mbps:
[root@C1 ~]#
iperf3 -6 -t 10 -c fec3::7 -p 5001
Connecting to host fec3::7, port 5001
[ 4] local fec1::7 port 41055 connected to fec3::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 6.64 MBytes 55.7 Mbits/sec 0 289 KBytes
[ 4] 1.00-2.00 sec 8.16 MBytes 68.4 Mbits/sec 0 559 KBytes
[ 4] 2.00-3.00 sec 11.1 MBytes 93.0 Mbits/sec 42 336 KBytes
[ 4] 3.00-4.00 sec 8.38 MBytes 70.6 Mbits/sec 0 367 KBytes
[ 4] 4.00-5.00 sec 6.20 MBytes 52.0 Mbits/sec 0 388 KBytes
[ 4] 5.00-6.00 sec 6.01 MBytes 50.4 Mbits/sec 14 284 KBytes
[ 4] 6.00-7.00 sec 5.45 MBytes 45.7 Mbits/sec 0 311 KBytes
[ 4] 7.00-8.00 sec 9.60 MBytes 80.5 Mbits/sec 0 328 KBytes
[ 4] 8.00-9.00 sec 6.78 MBytes 56.9 Mbits/sec 0 333 KBytes
[ 4] 9.00-10.00 sec 7.27 MBytes 61.0 Mbits/sec 0 335 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 75.6 MBytes 63.4 Mbits/sec 56 sender
[ 4] 0.00-10.00 sec 74.5 MBytes 62.5 Mbits/sec receiver
[root@C0 ~]# iperf3 -6 -t 4 -c 2000::7 -p 5001
Connecting to host 2000::7, port 5001
[ 4] local fec0::7 port 55705 connected to 2000::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 1.44 MBytes 12.0 Mbits/sec 0 109 KBytes
[ 4] 1.00-2.00 sec 2.97 MBytes 25.0 Mbits/sec 0 227 KBytes
[ 4] 2.00-3.00 sec 3.96 MBytes 33.2 Mbits/sec 2 245 KBytes
[ 4] 3.00-4.00 sec 3.55 MBytes 29.8 Mbits/sec 0 283 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 11.9 MBytes 25.0 Mbits/sec 2 sender
[ 4] 0.00-4.00 sec 11.6 MBytes 24.4 Mbits/sec receiver
iperf Done.
Tiếp tục tạo thêm dòng dữ liệu C2=>C3 và chạy song song cả 3 dòng dữ liệu, băng thông C0=>C4 giảm tiếp xuống còn khoảng 5.8Mbps.
[root@C0 ~]#
iperf3 -6 -c 2000::7 -p 5001
Connecting to host 2000::7, port 5001
[ 4] local fec0::7 port 55755 connected to 2000::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 123 KBytes 1.00 Mbits/sec 0 32.1 KBytes
[ 4] 1.00-2.00 sec 234 KBytes 1.92 Mbits/sec 0 54.4 KBytes
[ 4] 2.00-3.00 sec 240 KBytes 1.97 Mbits/sec 0 65.5 KBytes
[ 4] 3.00-4.00 sec 445 KBytes 3.64 Mbits/sec 0 86.5 KBytes
[ 4] 4.00-5.00 sec 597 KBytes 4.88 Mbits/sec 0 114 KBytes
[ 4] 5.00-6.00 sec 731 KBytes 5.99 Mbits/sec 0 145 KBytes
[ 4] 6.00-7.00 sec 845 KBytes 6.92 Mbits/sec 0 183 KBytes
[ 4] 7.00-8.00 sec 1.57 MBytes 13.2 Mbits/sec 0 250 KBytes
[ 4] 8.00-9.00 sec 1.41 MBytes 11.9 Mbits/sec 0 312 KBytes
[ 4] 9.00-10.00 sec 1.13 MBytes 9.46 Mbits/sec 0 364 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 7.25 MBytes 6.08 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 6.91 MBytes 5.80 Mbits/sec receiver
iperf Done.
Nhìn vào sơ đồ kết nối mạng có thể thấy ngay các dòng dữ liệu C0=>C4, C1=>C3, C2=>C3 sử dụng chung kênh truyền giữa R3 và R4. Khi xuất hiện dòng C1=>C3 và C2=>C3, băng thông dòng C0=>C4 bị giảm đi tốc độ truyền dữ liệu của kênh vật lý giữa R3 và R4 không đủ lớn (bằng tổng 3 băng thông dòng dữ liệu cộng lại). Điều này có thể thấy rõ hơn khi hạn chế băng thông vật lý của các card mạng R3 xuống còn 10Mbps:
VBoxManage bandwidthctl "R3" add Limit10m --type network --limit 10m
VBoxManage modifyvm "R3" --nicbandwidthgroup3 Limit10m
VBoxManage modifyvm "R3" --nicbandwidthgroup4 Limit10m
Khi đó, nếu chỉ có riêng dòng C0=>C4, băng thông là khoảng 10Mbps.
[root@C0 ~]#
iperf3 -6 -c 2000::7 -p 5001
Connecting to host 2000::7, port 5001
[ 4] local fec0::7 port 55769 connected to 2000::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 1.37 MBytes 11.4 Mbits/sec 0 83.7 KBytes
[ 4] 1.00-2.00 sec 1.24 MBytes 10.4 Mbits/sec 0 138 KBytes
[ 4] 2.00-3.00 sec 1.11 MBytes 9.29 Mbits/sec 0 185 KBytes
[ 4] 3.00-4.00 sec 1.18 MBytes 9.90 Mbits/sec 0 233 KBytes
[ 4] 4.00-5.00 sec 1.19 MBytes 10.0 Mbits/sec 0 278 KBytes
[ 4] 5.00-6.00 sec 1.21 MBytes 10.2 Mbits/sec 0 311 KBytes
[ 4] 6.00-7.00 sec 1.10 MBytes 9.25 Mbits/sec 0 344 KBytes
[ 4] 7.00-8.00 sec 1.29 MBytes 10.8 Mbits/sec 0 357 KBytes
[ 4] 8.00-9.00 sec 1.01 MBytes 8.49 Mbits/sec 0 386 KBytes
[ 4] 9.00-10.00 sec 1.42 MBytes 11.9 Mbits/sec 0 421 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 12.1 MBytes 10.2 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 11.6 MBytes 9.72 Mbits/sec receiver
iperf Done.
Và nếu có 2 dòng C1=>C3, C2=>C3 xuất hiện thì băng thông C0=>C4 giảm xuống còn trên 700Kbps.
[root@C0 ~]#
iperf3 -6 -c 2000::7 -p 5001
Connecting to host 2000::7, port 5001
[ 4] local fec0::7 port 55771 connected to 2000::7 port 5001
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 16.7 KBytes 137 Kbits/sec 0 13.9 KBytes
[ 4] 1.00-2.00 sec 62.8 KBytes 514 Kbits/sec 0 20.9 KBytes
[ 4] 2.00-3.00 sec 94.8 KBytes 775 Kbits/sec 0 37.7 KBytes
[ 4] 3.00-4.00 sec 83.7 KBytes 688 Kbits/sec 0 57.2 KBytes
[ 4] 4.00-5.00 sec 123 KBytes 1.01 Mbits/sec 0 61.4 KBytes
[ 4] 5.00-6.00 sec 64.1 KBytes 524 Kbits/sec 0 65.5 KBytes
[ 4] 6.00-7.00 sec 142 KBytes 1.17 Mbits/sec 0 69.7 KBytes
[ 4] 7.00-8.00 sec 78.1 KBytes 640 Kbits/sec 0 75.3 KBytes
[ 4] 8.00-9.00 sec 145 KBytes 1.19 Mbits/sec 0 83.7 KBytes
[ 4] 9.00-10.00 sec 148 KBytes 1.21 Mbits/sec 0 94.8 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 958 KBytes 785 Kbits/sec 0 sender
[ 4] 0.00-10.00 sec 858 KBytes 702 Kbits/sec receiver
iperf Done.
Ta sẽ điều khiển các luồng giao thông C0=>C4, C1=>C3, C2=>C3 bằng cách sử dụng tính năng Traffic Control trên router R3. Lưu ý rằng, tính năng Traffic Control chỉ tác động lên các gói tin gửi đi nên việc triển khai trên R3 phải được thực hiện tại kết nối mạng eth4 (fec3::1), là nơi các dòng dữ liệu đi từ router R3 ra mạng.
Tạo qdisc root là prio để các gói tin được xử lý độc lập theo 3 luồng. Khi đó, các lớp được tự động tạo ra cho 3 luồng này có classid là 1:1, 1:2 và 1:3.
[root@R3 ~]#
tc qdisc add dev eth4 root handle 1: prio
[root@R3 ~]#
tc qdisc show dev eth4
qdisc prio 1: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
[root@R3 ~]# tc class show dev eth4
class prio 1:1 parent 1:
class prio 1:2 parent 1:
class prio 1:3 parent 1:
Hạn chế băng thông các luồng 1:2 và 1:3 tương ứng là 500kbps và 1mbps để ưu tiên luồng 1:1 bằng cách trên luồng 1:2 và 1:3 gán qdisc tbf với các thông số giới hạn băng thông.
[root@R3 ~]# tc qdisc add dev eth4 parent 1:2 handle 20: tbf rate 500kbit burst 3000 limit 5000
[root@R3 ~]# tc qdisc add dev eth4 parent 1:3 handle 30: tbf rate 1mbit burst 3000 limit 9000
[root@R3 ~]# tc qdisc show dev eth4
qdisc prio 1: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc tbf 20: parent 1:2 rate 100000bit burst 1000b lat 80.0ms
qdisc tbf 30: parent 1:3 rate 1000Kbit burst 3000b lat 16.0ms
Cuối cùng, thiết lập các filter để lọc các gói tin và đưa vào các hàng đợi tương ứng. Có thể lọc gói tin theo nhiều tiêu chí, ví dụ như địa chỉ IP nguồn. Luồng từ C0 (fec0::7) được ưu tiên vào flow 1:1, hai luồng còn lại từ C1 (fec1::7) và C2 (fec2::7) được đưa vào flow 1:2 và 1:3 để hạn chế băng thông:
[root@R3 ~]#
tc filter add dev eth4 parent 1: protocol ipv6 u32 match ip6 src fec0::7 flowid 1:1
[root@R3 ~]#
tc filter add dev eth4 parent 1: protocol ipv6 u32 match ip6 src fec1::7 flowid 1:2
[root@R3 ~]#
tc filter add dev eth4 parent 1: protocol ipv6 u32 match ip6 src fec2::7 flowid 1:3
[root@R3 ~]# tc filter show dev eth4
filter parent 1: protocol ipv6 pref 49150 u32
filter parent 1: protocol ipv6 pref 49150 u32 fh 802: ht divisor 1
filter parent 1: protocol ipv6 pref 49150 u32 fh 802::800 order 2048 key ht 802 bkt 0 flowid 1:3
match fec20000/ffffffff at 8
match 00000000/ffffffff at 12
match 00000000/ffffffff at 16
match 00000007/ffffffff at 20
filter parent 1: protocol ipv6 pref 49151 u32
filter parent 1: protocol ipv6 pref 49151 u32 fh 801: ht divisor 1
filter parent 1: protocol ipv6 pref 49151 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:2
match fec10000/ffffffff at 8
match 00000000/ffffffff at 12
match 00000000/ffffffff at 16
match 00000007/ffffffff at 20
filter parent 1: protocol ipv6 pref 49152 u32
filter parent 1: protocol ipv6 pref 49152 u32 fh 800: ht divisor 1
filter parent 1: protocol ipv6 pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1
match fec00000/ffffffff at 8
match 00000000/ffffffff at 12
match 00000000/ffffffff at 16
match 00000007/ffffffff at 20
Chạy iperf3 trên C2 để kết nối đến C3 (luồng số 3 - flow id 1:3) sẽ thấy băng thông đo được là 964Kbps, không vượt quá ngưỡng đã thiết lập (1Mbps):
[root@C2 ~]# iperf3 -6 -t 10 -c fec3::7 -p 5003
Connecting to host fec3::7, port 5003
[ 4] local fec2::7 port 37118 connected to fec3::7 port 5003
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 156 KBytes 1.28 Mbits/sec 32 5.58 KBytes
[ 4] 1.00-2.00 sec 100 KBytes 821 Kbits/sec 7 4.18 KBytes
[ 4] 2.00-3.00 sec 117 KBytes 961 Kbits/sec 7 2.79 KBytes
[ 4] 3.00-4.00 sec 117 KBytes 960 Kbits/sec 7 4.18 KBytes
[ 4] 4.00-5.00 sec 117 KBytes 960 Kbits/sec 6 5.58 KBytes
[ 4] 5.00-6.00 sec 117 KBytes 959 Kbits/sec 7 5.58 KBytes
[ 4] 6.00-7.00 sec 117 KBytes 961 Kbits/sec 7 4.18 KBytes
[ 4] 7.00-8.00 sec 117 KBytes 959 Kbits/sec 7 2.79 KBytes
[ 4] 8.00-9.00 sec 100 KBytes 822 Kbits/sec 7 2.79 KBytes
[ 4] 9.00-10.00 sec 117 KBytes 961 Kbits/sec 7 4.18 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.15 MBytes 964 Kbits/sec 94 sender
[ 4] 0.00-10.00 sec 1.13 MBytes 945 Kbits/sec receiver
Chạy iperf3 trên C1 để kết nối đến C3 (luồng số 2 - flow id 1:2), cũng thu được kết quả tương tự. Băng thông luồng này đo được là 493Kbps.
[root@C1 ~]# iperf3 -6 -c fec3::7 -p 5002
Connecting to host fec3::7, port 5002
[ 4] local fec1::7 port 49804 connected to fec3::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 94.8 KBytes 777 Kbits/sec 26 5.58 KBytes
[ 4] 1.00-2.00 sec 55.8 KBytes 457 Kbits/sec 5 4.18 KBytes
[ 4] 2.00-3.00 sec 66.9 KBytes 548 Kbits/sec 3 5.58 KBytes
[ 4] 3.00-4.00 sec 50.2 KBytes 411 Kbits/sec 4 2.79 KBytes
[ 4] 4.00-5.00 sec 50.2 KBytes 411 Kbits/sec 3 5.58 KBytes
[ 4] 5.00-6.00 sec 66.9 KBytes 549 Kbits/sec 4 4.18 KBytes
[ 4] 6.00-7.00 sec 50.2 KBytes 411 Kbits/sec 3 4.18 KBytes
[ 4] 7.00-8.00 sec 66.9 KBytes 549 Kbits/sec 3 5.58 KBytes
[ 4] 8.00-9.00 sec 50.2 KBytes 411 Kbits/sec 4 2.79 KBytes
[ 4] 9.00-10.00 sec 50.2 KBytes 412 Kbits/sec 3 5.58 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 602 KBytes 493 Kbits/sec 58 sender
[ 4] 0.00-10.00 sec 576 KBytes 472 Kbits/sec receiver
Cuối cùng, cho cả 3 luồng cùng chạy và đo băng thông luồng C0=>C4 (flow id 1:1), thu được giá trị 107Mbps.
[root@C0 ~]# iperf3 -6 -c 2000::7 -p 5002
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33677 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 14.0 MBytes 118 Mbits/sec 0 464 KBytes
[ 4] 1.00-2.00 sec 11.5 MBytes 96.1 Mbits/sec 0 728 KBytes
[ 4] 2.00-3.00 sec 14.7 MBytes 123 Mbits/sec 107 665 KBytes
[ 4] 3.00-4.00 sec 15.0 MBytes 126 Mbits/sec 37 519 KBytes
[ 4] 4.00-5.00 sec 14.3 MBytes 120 Mbits/sec 0 556 KBytes
[ 4] 5.00-6.00 sec 14.4 MBytes 121 Mbits/sec 0 582 KBytes
[ 4] 6.00-7.00 sec 11.5 MBytes 96.8 Mbits/sec 2 414 KBytes
[ 4] 7.00-8.00 sec 12.7 MBytes 106 Mbits/sec 0 453 KBytes
[ 4] 8.00-9.00 sec 9.37 MBytes 78.7 Mbits/sec 0 478 KBytes
[ 4] 9.00-10.00 sec 10.2 MBytes 85.1 Mbits/sec 0 495 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 128 MBytes 107 Mbits/sec 146 sender
[ 4] 0.00-10.00 sec 126 MBytes 105 Mbits/sec receiver
Trong các bước trên, địa chỉ nguồn của gói tin IPv6 được sử dụng để xác định lớp dịch vụ (flow id) cho nó và thực hiện ưu tiên. Để đảm bảo các router có thể thực hiện chức năng QoS dựa vào trường Traffic Class, cần sửa lại các filter đã thiết lập. Linux tc u32 filter hỗ trợ option dsfiled để lọc trường Traffic Class nhưng rất tiếc nó chỉ hỗ trợ IPv4, chưa hỗ trợ IPv6. Ví dụ, filter sau đây được thiết lập để lọc các gói tin IP thuộc lớp Traffic Class 0x12 (lớp AF21: Drop probability: Low, Equivalent IP precedence value: Immediate):
[root@R3 ~]# tc filter add dev eth4 parent 1: protocol ip \
u32 match ip dsfield 0x12 0x1e flowid 1:1
Đối với IPv6, ta sử dụng kiểu lọc u32 theo vị trí bit (gọi là general selector). Traffic Class có độ dài byte bắt đầu từ bit thứ 4 (byte số 0) trong IPv6 header. Thiết lập Traffic Class của 3 flow 1:1, 1:2 và 1:3 tương ứng là 0x2e (ưu tiên cao nhất), 0x0a (ưu tiên vừa) và 0x00 ưu tiên thấp:
[root@R3 ~]# tc filter add dev eth4 parent 1: protocol ipv6 \
u32 match u16 0x02e0 0x0ff0 at 0 flowid 1:1
[root@R3 ~]# tc filter add dev eth4 parent 1: protocol ipv6 \
u32 match u16 0x0000 0x0ff0 at 0 flowid 1:2
[root@R3 ~]# tc filter add dev eth4 parent 1: protocol ipv6 \
u32 match u16 0x00a0 0x0ff0 at 0 flowid 1:3
Sử dụng iperf3 trên C0 với tham số -S để thiết lập Traffic Class, có thể thấy cùng gửi đến C4 tại địa chỉ 2000::7, khi đặt các Traffic Class khác nhau thì băng thông cũng khác nhau tương ứng:
[root@C0 ~]#
iperf3 -6 -t 4 -c 2000::7 -p 5002 -S 0x2e
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33697 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 7.43 MBytes 62.4 Mbits/sec 0 298 KBytes
[ 4] 1.00-2.00 sec 9.86 MBytes 82.6 Mbits/sec 0 549 KBytes
[ 4] 2.00-3.00 sec 10.6 MBytes 89.3 Mbits/sec 40 541 KBytes
[ 4] 3.00-4.00 sec 9.54 MBytes 79.7 Mbits/sec 0 618 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 37.5 MBytes 78.5 Mbits/sec 40 sender
[ 4] 0.00-4.00 sec 36.0 MBytes 75.4 Mbits/sec receiver
iperf Done.
[root@C0 ~]# iperf3 -6 -t 4 -c 2000::7 -p 5002 -S 0x0a
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33699 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 128 KBytes 1.05 Mbits/sec 21 2.79 KBytes
[ 4] 1.00-2.00 sec 109 KBytes 890 Kbits/sec 7 2.79 KBytes
[ 4] 2.00-3.00 sec 117 KBytes 961 Kbits/sec 6 5.58 KBytes
[ 4] 3.00-4.00 sec 117 KBytes 960 Kbits/sec 7 4.18 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 471 KBytes 965 Kbits/sec 41 sender
[ 4] 0.00-4.00 sec 439 KBytes 900 Kbits/sec receiver
iperf Done.
[root@C0 ~]# iperf3 -6 -t 4 -c 2000::7 -p 5002 -S 0x00
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33701 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 90.6 KBytes 741 Kbits/sec 27 5.58 KBytes
[ 4] 1.00-2.00 sec 55.8 KBytes 457 Kbits/sec 3 5.58 KBytes
[ 4] 2.00-3.00 sec 66.9 KBytes 549 Kbits/sec 4 4.18 KBytes
[ 4] 3.00-4.00 sec 50.2 KBytes 411 Kbits/sec 3 4.18 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 264 KBytes 540 Kbits/sec 37 sender
[ 4] 0.00-4.00 sec 236 KBytes 482 Kbits/sec receiver
iperf Done.
Do Flow Label là trường được thiết kế riêng cho IPv6, filter u32 hỗ trợ option lọc tường minh (specific) flowlabel cho riêng ip6. Thiết lập filter để các flow label 1234, 1235 và 1236 được xử lý trong các flow id 1:1, 1:2 và 1:3.
[root@C0 ~]# tc filter add dev $IF parent 1: protocol ipv6 u32 \
match ip6 flowlabel 1234 0x3ffff flowid 1:1
[root@C0 ~]# tc filter add dev $IF parent 1: protocol ipv6 \
u32 match ip6 flowlabel 1235 0x3ffff flowid 1:2
[root@C0 ~]# tc filter add dev $IF parent 1: protocol ipv6 \
u32 match ip6 flowlabel 1236 0x3ffff flowid 1:3
Sử dụng iperf3 trên C0 với tham số -L để thiết lập Flow Label, có thể thấy cùng gửi đến C4 tại địa chỉ 2000::7, khi đặt các Flow Label khác nhau thì băng thông cũng khác nhau tương ứng:
[root@C0 ~]#
iperf3 -6 -t 4 -c 2000::7 -p 5002 -L 1234
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33705 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 6.05 MBytes 50.7 Mbits/sec 0 243 KBytes
[ 4] 1.00-2.00 sec 13.5 MBytes 113 Mbits/sec 0 607 KBytes
[ 4] 2.00-3.00 sec 13.1 MBytes 109 Mbits/sec 14 566 KBytes
[ 4] 3.00-4.00 sec 12.0 MBytes 100 Mbits/sec 0 639 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 44.6 MBytes 93.4 Mbits/sec 14 sender
[ 4] 0.00-4.00 sec 43.1 MBytes 90.4 Mbits/sec receiver
iperf Done.
[root@C0 ~]# iperf3 -6 -t 4 -c 2000::7 -p 5002 -L 1235
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33707 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 92.0 KBytes 754 Kbits/sec 29 8.37 KBytes
[ 4] 1.00-2.00 sec 47.4 KBytes 388 Kbits/sec 8 4.18 KBytes
[ 4] 2.00-3.00 sec 58.6 KBytes 480 Kbits/sec 6 4.18 KBytes
[ 4] 3.00-4.00 sec 58.6 KBytes 479 Kbits/sec 6 4.18 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 257 KBytes 525 Kbits/sec 49 sender
[ 4] 0.00-4.00 sec 230 KBytes 471 Kbits/sec receiver
iperf Done.
[root@C0 ~]# iperf3 -6 -t 4 -c 2000::7 -p 5002 -L 1236
Connecting to host 2000::7, port 5002
[ 4] local fec0::7 port 33709 connected to 2000::7 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 148 KBytes 1.21 Mbits/sec 32 5.58 KBytes
[ 4] 1.00-2.00 sec 114 KBytes 936 Kbits/sec 11 6.97 KBytes
[ 4] 2.00-3.00 sec 117 KBytes 960 Kbits/sec 12 5.58 KBytes
[ 4] 3.00-4.00 sec 106 KBytes 868 Kbits/sec 12 5.58 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.00 sec 485 KBytes 994 Kbits/sec 67 sender
[ 4] 0.00-4.00 sec 455 KBytes 931 Kbits/sec receiver
iperf Done.