IPv6 헤더의 Traffic Class에 3개의 서로다른 값(0x01, 0x02,0x03)을 넣어 QoS구현
IPv4 헤더의 TOS필드에 3개의 서로 다른 값을 넣어 QoS구현
서버측에서 트래픽을 컨트롤 하기 위해서 TC라는 명령어를 이용한다. 아래는 tc명령어의 예제이다.
tc qdisc add dev eth1 handle 1:0 root dsmark indices 4 default_index 0
tc qdisc add dev eth1 handle 2:0 parent 1:0 prio
tc qdisc add dev eth1 handle 3:0 parent 2:1 bfifo limit 20480
tc qdisc add dev eth1 handle 4:0 parent 2:2 bfifo limit 40960
#include "fields6.tc" //IPv6의 필드정의 /usr/lib/tcng/include
dev "eth1" { //eth1 인터페이스로
egress { // 나가는 패킷중에서
class (<$vital_sig>)
if ip6_tc == 0x01; //ip6_tc(IPv6 Traffic Controll 필드에 0x01로 설정되어 있으면 vital_sig
class (<$image>)
if ip6_tc == 0x02; //ip6_tc(IPv6 Traffic Controll 필드에 0x02로 설정되어 있으면 image
class (<$video>)
if ip6_tc == 0x03; //ip6_tc(IPv6 Traffic Controll 필드에 0x03로 설정되어 있으면 video
prio {
$vital_sig = class (1) { fifo (limit 20kB); } // vitaㅣ_sig는 20kB 적용
$image = class (2) { fifo (limit 40kB); } // image는 40kB 적용
$video = class (3) { fifo (limit 60kB); } // video는 60kB 적용
} } }
설정의 관건은 tcng 언어를 습득하고 활용하는데 있을듯 하다. [메뉴얼: tcng.pdf]
#include "fields.tc"
dev "eth1"{
egress{
// DS field 로 간주하기 때문에 오른쪽 2 bits 의 값은 무시가 된다. (masking으로 인해서 모두 0으로 인식)
class(<$high>) if ip_tos == 0x80;
class(<$mid>) if ip_tos == 0x40;
class(<$low>) if 1;
htb () { /* root qdisc */
class ( rate 10240kbps, ceil 10240kbps ) { /* root class */
$high = class ( rate 5120kbps, ceil 5120kbps ) {sfq;} ;
$mid = class ( rate 1024kbps, ceil 2048kbps ) { sfq ; } ;
$low = class ( rate 512kbps, ceil 512kbps ) { sfq; } ;
} } }
IPv6 Traffic Control 부분에 특정 값을 마킹 & 트래픽 생성에 사용된 툴
iperf-2.0.2 (http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz)
[ PerfSocket.cpp ]
120 line : int rc = setsockopt( inSettings->mSock, IPPROTO_IP, IP_TOS,
121 line : (char*) &tos, len );
중희 수정