IP header에서 TOS(Type Of Service)필드는 packet의 우선순위를 나타낸다.
다음은 TOS필드에 대한 설명이다.
Type of Service - is how the datagram should be used, e.g. delay, precedence, reliability, minimum cost, throughput etc. This TOS field is now used by Differentiated Services and is called the Diff Serv Code Point (DSCP).
- 000 (0) - Routine
- 001 (1) - Priority
- 010 (2) - Immediate
- 011 (3) - Flash
- 100 (4) - Flash Override
- 101 (5) - Critical
- 110 (6) - Internetwork Control
- 111 (7) - Network Control
- Delay - when set to '1' the packet requests low delay.
- Throughout - when set to '1' the packet requests high throughput.
- Reliability - when set to '1' the packet requests high reliability.
- Cost - when set to '1' the packet has a low cost.
- MBZ - checking bit.
TOS 필드 값을 설정하는 방법은 여러가지가 있는 것 같은데 내가 테스트 해서 얻은 방법은 다음과 같다.
unsigned int tos = 0x80; // precedence를 4로 설정
setsockopt(sock, IPPROTO_IP, IP_TOS, (const void *)&tos, sizeof(tos));
TOS의 precedence 값은 0-7까지 지정할 수 있으며, 주의할 점은 최상위 3bit를 값으로 사용한다는 것이다.
그래서 지정하려는 precedence값과 setsockopt 함수에 넣어주는 값을 잘 매칭시켜야 한다.
이를 정리하면 다음과 같다. 여기서 tos값이 실제로 setsockopt 함수에 넣어줘야 할 값이다.
level tos binary
0 0x00 (000)0 0000
1 0x20 (001)0 0000
2 0x40 (010)0 0000
3 0x60 (011)0 0000
4 0x80 (100)0 0000
---------------------------- 아래부터 root 권한 필요, 혹은 권한 설정 필요
5 0xa0 (101)0 0000
6 0xc0 (110)0 0000
7 0xe0 (111)0 0000
[ 권한에 대하여 ]
나는 일반계정으로 Linux에 들어가서 테스트 했는데 5이상의 값을 설정하려고 하면 계속 다음과 같은 에러가 떴다.
Operation not permitted
다음은 에러에 대한 설명을 찾은 것이다.
The executing user profile must have *IOSYSCFG special authority to set options when the level parameter specifies IPPROTO_IP and the option_value parameter is IP_OPTIONS .
출처: http://publib.boulder.ibm.com/html/as400/v5r1/ic2962/index.htm?info/apis/ssocko.htm
[ 관련 링크 ]
1. socket 옵션에 대한 설명이 잘 되어있다. http://linux.die.net/man/7/socket
2. IP datagram에 대한 설명: http://www.rhyshaden.com/ipdgram.htm
3. setsockopt 함수에 대한 설명
http://publib.boulder.ibm.com/html/as400/v5r1/ic2962/index.htm?info/apis/ssocko.htm
4. IPv4/6에 설정하는 방법에 대한 설명: http://adioshun.springnote.com/pages/289965
출처 : http://blog.naver.com/57gate?Redirect=Log&logNo=60127366508