4-ip协议首部分析一
版本
版本:占 4 bit,指IP协议的版本,目前的IP协议版本为IPv4和IPv6,通信的计算机双方使用的IP协议版本必须一致,目前使用广泛的是IPv4版本
对应到上一篇wireshark软件中IP数据包格式中的版本信息,如下图所示:
注意:如果数据在传输的时候使用IPv6协议传输,而网络设备是使用IPv4协议接收,如果发现使用的IP协议版本不对,会把整个数据报丢掉,因此在通信传输数据时,IP协议使用的版本一定要对应起来。
首部长度
图2-首部长度
…. 0101 = Header Length: 20bytes (5) 表示的就是首部长度,这里首部长度是20字节,而且首部长度固定为20字节,那么首部长度是怎么计算的呢?
是根据0101来算的,首先0101是一个二进制,转换为10进制就是5,表示5个单位,而每个单位大小是4字节,所以IP首部长度是20字节。
如果为1111的话,那么转化为十进制就是15,也就是说最大能表示15个单位,而每个单位大小是4字节,因此IP首部长度最大可以表示60字节了,最小是20字节(首部长度的固定部分),从这里看出IP首部长度为20,说明没有可选字段。当IP分组的首部长度不是4字节的整数倍时,则必须用最后的填充字段加以填充。
服务类型
Differentiated Services Field表示区分服务字段,(在早期就是表示IP协议的服务类型),比较尴尬的是这个服务类型在现在的以太网中已经被淘汰了,不再用了,但是这种思想还是存在的,这种服务类型是占8个bit,即0-7,最后一位没有用,虽然没有用到,但是最后一位被规定为必须为0,如果是0以外的值就是非法的。
服务类型也分为两部分,一部分又表示优先级部分,另一部分可以理解为QoS(Quality of Service,服务质量),顾名思义,就是为了给现有的网络提供一个更好的性能,让各种网络应用更加顺畅的运作。
优先级:占用了3个bit,最小值为000,最大值为111,表示数据在传输过程中的优先级,有的数据比较重要,要求优先传输此数据,这个时候,我们就要在此设置优先级。
比如:我们在上网的时候,有些数据确实需要优先传输的情况,比如说,一般我们在网络上传输视频,而视频在传输过程中不允许中断,这时候需要设置优先级,让视频数据的优先级高一些,那我们传输的不是很重要的文字性数据可以优先级可以设置小一些,也就是说,优先级越高的数据会先处理。
DTRC: 有些书本上也称为TOS(type of services,即服务类型),其本质上TOS和QoS是一样,都是服务类型,只是名字,叫法不一样而已,TOS和QoS都用于数据在网络传输过程中的差异化处理。
什么叫差异化处理?比如我们要传一部比较大的电影,这就要求在网络传输过程中具备最大吞吐量(每次传输的数据最大值)的特征,再比如玩游戏的时候都有延迟,这就是数据在传输过程中的一个时间差,如果我们想要数据包在发送的时候,快速传输,减少延迟,这些都是一种服务类型,在QoS里面定义的。
前面我们也说过DTRC每一个字母也占用一个bit:
D:delay的简写,即延迟,如果D代表的bit值为1的话,表示IP数据报在传输过程中减少延迟性,比如,在发送一个数据时要求实时响应。
T:throughput的简写,即吞吐量,如果T代表的bit值为1的话,表示在传输比较大的数据时,要求网络传输数据时的吞吐量比较大。
R:reliability的简写,即可靠性,如果R代表的bit值为1,表示IP数据报在传输过程中保障高可靠性,数据在传输过程中不会出现丢失。
C:cost的简写,即最小代价,如果C代表的bit值为1,表示IP数据报要求以最小代价进行传输,数据在传输过程中占用较小的网络带宽。
注意:DTRC同一时刻只能有一个bit的值为1。 比如:如果D的bit值为1,那么TRC的bit值必须为0,其他同理。
对应到IP数据报格式的服务类型信息如图3所示:
图3-服务类型
如果前6位是以0结尾:即x x x x x 0,表示由internet指定的一个区分服务类型,有的数据报要求低延迟,有的数据报可能要求高可靠性,也就是说针对不同的数据报提供不同的服务类型,所以就叫区分服务。
如果前6位是x x x x 1 1表示服务类型由本地来指派的,也就是说这个数据报是一个本地数据报,如果是x x x x 0 1 表示这是一个临时的,或者实验型的数据报,如果前6位都是1 1 1 1 1 1,我们可以知道总共指定了64种不同的服务类型,针对不同的服务来区分对待,但是这些服务类型我们不需要记,太多了,记不住。
总长度
图4-总长度
Total Length:表示IP数据报文的总长度,也就是说这个IP数据报文的数据总共有多少个字节,其中包括了IP数据报文的首部和数据部分。总长度占16位(即16-31位),指的是首部部分和数据部分的长度,单位为字节,IP数据报文的最大长度为2的16次方 - 1,也就是65535字节,所以总长度不能超过最大传输单元MTU。
其中首部部分占用20 - 60字节,如果以首部占用60字节来算,那么在传输数据时,最大能传输65535 - 60 = 65475字节的数据(MSS)了。上图中我们抓的包的总长度为为312字节,首部长度为20字节,也就是说我们抓的这个数据报传递的实际数据为292字节大小。
另外,要注意MTU和MSS之间的一些小区别:MTU包括了数据报文的首部和数据部分,而MSS只包括数据部分。
标识
图5-标识
标识(Identification)占16位(0 - 15),它是一个计数器,用来对产生的数据报进行标识,每传输一个数据报都要计数一次。但这个“标识”并不是序号,因为ip协议是无连接,数据报不存在按序接收。
也就是说,如果要传输一个很大的数据的话,由于发送的数据大小超过了网络MTU,需要把这个数据分成多个片传输,所以对于每一个分片都要进行标识,表示这些分片具有唯一性,是相同的,这些分片的标识是一样的,然后发送到目的地后对这些分片进行重新组合成原来的数据,如果不对分片进行标识的话,那么在对分片进行重组时,计算机会认为该分片标识不一样,和其他分片不相同,然后丢弃该分片。
比如:现在有15吨苹果要运往北京,但是每一辆火车只能运输1吨的苹果,也就是说这些苹果不能一次性运输过去,于是分别装了15辆火车分批运输,在每一辆火车运输时打上一个苹果的标识,标识运输的是苹果。这就是标识字段的作用。
为什么要说标识字段呢?
这是为了帮助理解数据在发送时为什么要分片,理解分片的目的和作用,而目的地在接收到所有的分片数据进行重组,而重组就需要根据偏移量来计算的,同时还需要参考标识字段。
标志
图6-标志
标志(flags)占用3位(即16 - 18),这三位分别是:R,D,M三位,第一位是保留位,没有被使用,目前只有后两个比特有意义。
R:标志字段中的第一位是一个保留位,现在还没有使用,可能将来会用到这位
D:标志字段中间的一位是 DF (Don’t fragment),表示传输的数据不允许分片。一般DF = 1的话,表示数据一次性传输过去,不允许分片。
M:标志字段的最低位是 MF (More fragment)。代表数据是否分片,如果MF位值为1,表示后面还有数据,还没有传输完毕,相当于数据分片,分批次传输,如果MF = 0表示最后一个分片或者只有一个分片。
注意:这三位同一时刻也是只能有一个位的值能设置为1。这里我们抓的数据包标志位值为1,表示数据一次性传输过去,不分片。