多年前的文章,给接触网络的同学一点参考,如果有帮助点赞.
最近在和IP报文的优先级打交道,所以在网络上就乱搜一通,了解了一下这个东西,发现关于它的来龙去脉还有点多,像IP Precedence,TOS,DSCP,COS,QOS这几个玩意儿搞在一起,一时间会让你有点一头雾水,尤其是刚接触网络的。我在这里也刚接触一点点,所以就写下一点关于它们的概念这些东西,想了解的朋友可以看看,以后碰到的时候也好有个概念在脑海里,不至于说几次就会云里雾里的。当然我也只了解了一点点像DSCP也还没有怎么去了解,所以很多都说得不完全或甚至错误,还请谅解哟。
在TCP/IP网络中,IP协议称之为Internet Protocol英特网协议,IP协议是TCP/IP协议簇(协议簇我的理解就是“大家庭”哈)里面最重要的协议之一(之一是因为还有个TCP协议),因为正是由于有各个不同的IP网络(即不同IP网段的子网)组成了整个Internet,当然Internet也不仅仅是由IP网络构成哈,它还有一些其它类型的网络,这里不做研究。
我现在要说的就是IP这个协议上的一个“字段”,关于“字段”呢,你可以想象一下一张二维表格,如下:
如上面所示,这张表格里张三就是表格的一条记录,这条记录记载了一个学生的四个属性,而属性就可以称之为一个“字段”,所有的“字段”就组成了这张表的基本结构。同理:
应该能明白“字段”了吧,反正就是IP报文的一个属性就是了。好,切入正题,首先呢要谈IP Precedence、TOS和DSCP首先就要从IP协议的第一个标准文件RFC 791说起,好像在写小说一般?
RFC 791是IETF即Internet工程任务组(Internet Engineering Task Force)于1981年9月制定的一个关于IP协议的一个正式文件。IETF呢就是一群互联网领域的顶尖高手组成的一个专门制定互联网各种协议标准的组织。这个RFC 791里面就对IP协议的运行机制,报文格式做了详细的说明和规范,其中就包括了Type Of Service字段,简称TOS字段。
如下所示,TOS字段一共8个Bit(Bit就是一个二进制位),即8位。IETF规定了低位的0,1,2三位就用于IP Precedence即IP优先级,但是这里好像这里没做其它说明。中间的3,4,5用于Type Of Service,IETF规定这个字段用中间的三位,即3,4,5位用来表示这个IP报文期望得到的一种高质量的传输服务,也就是说中间这三位表明了这个IP包的服务类型(Type Of Service)。它用了三个参数来实现高质量服务:低延迟、高吞吐量、高可靠性。可以看到Bit 3第三位为0时代表正常延迟,为1为低延迟;第四位为0代表正常吞吐量,为1为高吞吐量;第五位为0代表正常可靠性,为1代表高可靠性。最后的Bit 6,7位保留不使用(为了将来使用而保留):
Bits 0-2: Precedence.
Bit 3: 0 = Normal Delay, 1 = Low Delay.
Bits 4: 0 = Normal Throughput, 1 = High Throughput.
Bits 5: 0 = Normal Relibility, 1 = High Relibility.
Bit 6-7: Reserved for Future Use.
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | | |
| PRECEDENCE | D | T | R | 0 | 0 |
| | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
Precedence
111 - Network Control
110 - Internetwork Control
101 - CRITIC/ECP
100 - Flash Override
011 - Flash
010 - Immediate
001 - Priority
000 – Routine
可以看到关于IP Precedence在这里只是做出了简单的规定,用三个Bit置不同位来实现不同的优先级。而关于中间的3,4,5位TOS,还做了一些其它的说明和规定。
但在1992年7月,IETF又制定了RFC 1349(好像中间关于TOS字段也有过修改说明),这个标准重新规定了有关TOS字段的意义:
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | |
| PRECEDENCE | TOS | MBZ |
| | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
英文不好,在RFC 1349里用某工具取了部分重点词汇的含义,大概知道一点,它的大致意思就是说在RFC 791里用Bit 0,1,2表示IP优先级,用Bit 3,4,5实现IP报文渴望得到的服务即TOS,最后两位保留使用,而在RFC 1122中又规定了将Bit 6,7划入了TOS部分,而这里RFC 1349将重新把Bit 7划为保留位,中间的Bit 3,4,5,6四位来表明TOS(看来IETF也有出尔反尔啊,也许是网络变化太快,要随机应变)。当然Bit 0,1,2三位仍然为IP优先级位,只是RFC 1349也不做多余说明,基本没什么用啊。在W.Richard Stevens(他是个顶尖的高手,著作有《TCP/IP三卷》,《UNIX环境高级编程》可以去搜一搜)的TCP/IP详解(协议)书里也提到了IP Precedence这三位基本没有用,不过写书时间也很久了哈。
现在用了Bit 3,4,5,6四位做TOS设置,那各Bit位的含义是什么呢?以下是RFC 1349中COPY下的:
1000 -- minimize delay
0100 -- maximize throughput
0010 -- maximize reliability
0001 -- minimize monetary cost
0000 -- normal service
如上所示,从低位到高位依次置1所代表的含义是:低延迟,高吞吐量,高可靠性,低花费(开销),正常服务。要注意的是这四个bit只能同时置1个位,不能同时置两个或多个位为1。
以上就是有关IP Precedence和TOS的我所了解的来龙去脉,总的来说呢有了这些TOS字段,那么含有这些字段信息的IP报文在送到某路由器上时,设备尊循标准就会按标准给这个IP报文一定的优先杈,给它什么优先权利就看TOS字段的设置了。另外IP Precedence好像没什么用一样,不过我接触到的设备里也有会对IP报文打上IP Precedence标签的路由器,不过会不会有什么优先可能还要看其它收到这个IP报文的设备有没有支持到这个特性。
最后说下DSCP,这个呢全称叫做差分服务代码点(Differentiated Services Code Point),它呢是IETF于1998年12月发布了Diff-Serv(Differentiated Service)标准,由RFC 2474定义。看RFC的编号就明白要比RFC 1349制定得晚,数字越大越晚嘛。这个标准完全重新定义了TOS这整个8 Bit,它使用以前的IP优先级和中间的TOS的三位,一共6位从0到63。它呢也是不同于TOS的另一个标准,不过目的也是为QOS(Quality Of Service)提供一个分类服务的标准。
简单说下QOS哈,这个概念是个很广,很宽泛的概念,以前我看到网络方面的书籍都提到了它,但就是不明白这个是干嘛用的,看一遍就蒙一遍,始终不明白它有什么用。这些前辈们老是弄些抽象的名词,让人理解起来很头疼。其实以我接触的一点点经验来说呢,QOS你就想在网络上有那么多种协议,那么多不同类型的数据它们总得有一个“等级的划分”吧,划分什么等级呢?当然就是为了区分在网络上传输时得到的“待遇”啊,不同级别的数据得到不同的待遇,这个好理解吧。像公交车上老,弱,病,残,孕就要得到优先照顾,其它人都要给这类人群让坐。这里对数据包根据一定标记划分不同等级而得到不同优先传输条件一系列活动抽象就叫QOS。我们对QOS的实现可以依据不同的标准,可根据User Priority、IP Precedence、TOS、DSCP等等。使用QOS也是为了对网络的可靠性、稳定性这些做个保障,让网络能更好的服务于大众。
好了,再拉回来到DSCP,关于这个不同于TOS标准,它对TOS那8 Bit做了许多的规定划分,我还没有仔细研究,RFC 2474也只草草看了一眼,所以DSCP暂时不做过多研究。
哦,差点忘记还有个COS(Class Of Service),等与DSCP一同研究研究吧,这次我只写IP Precedence与Type Of Service、QOS。