wireshark以太网报文格式(计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析)
wireshark以太网报文格式(计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析)由于在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU (Maximum Transfer Unit),当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的IP数据报长度超过数据链路层的MTU值时,就必须把过长的数据报进行分片处理。在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。(4) 总长度:占16位,指首部和数据部分之和的长度,单位为字节。因此数据报的最大长度为2^16-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。(2) 首部长度:占4位,可表示最大十进制数值是15。请注意,一个位对应的是4个字节。因为IP首部的固定长度是20字节,
我们说因为有了IP协议(Internet Protocol,互联网协议),因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。IP协议就是为计算机网络相互连接进行通信而设计的协议,在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。本文通过分析IP协议报文的格式,能够使大家明白为何IP协议能够在复杂的网络环境中将数据包发送到最终目的主机,从而实现主机与主机之间的通信。
IP报文格式IP数据报的格式能够说明IP协议都具有什么功能,如下图所示,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的,但对于首部的长度来说,最长是60个字节,所以可选字段最长为40个字节。
IP数据报首部的固定部分中的各字段说明如下:
(1) 版本:占4位,指IP协议的版本。不同版本的协议格式或语义可能不同,但是双方通信使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4,即IPv4,其字段值就为0100。
(2) 首部长度:占4位,可表示最大十进制数值是15。请注意,一个位对应的是4个字节。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当这四个位都为1最大值为15的时候就表示此时达到了首部的最大长度,即60字节。需要注意的是当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便,通过首部长度可以知道数据部分是什么时候开始的。
(3) 服务类型:占8位,指定特殊的报文处理方式,用来获得更好的服务。在一般的情况下不使用这个字段,只有在有QoS差分服务要求时这个字段才起作用,实现网络流量优化。
QoS(Quality of Service 服务质量)是一种控制机制 它提供了针对不同用户或者不同数据流采用相应不同的优先级,或者是根据应用程序的要求 保证数据流的性能达到一定的水准。
(4) 总长度:占16位,指首部和数据部分之和的长度,单位为字节。因此数据报的最大长度为2^16-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。
由于在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU (Maximum Transfer Unit),当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的IP数据报长度超过数据链路层的MTU值时,就必须把过长的数据报进行分片处理。在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
(5) 标识:占16位,通过标识来给已经分片的IP数据报进行分组,保证最后分片之后的各数据报片能正确地重装成为原来的数据报。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6) 标志:占3位。目前只有两位有意义,第一位一般是0;中间的一位记为DF(Don't Fragment),意思是不能分片,只有DF值为0的时候才允许分片;最后的一位记为MF(More Fragment),表示后面还有无分片,当MF=1表示后面还有分片的数据报,当MF=0表示后面已无分片,这已是若干数据报片中的最后一个。
(7) 片偏移:占13位,标识某个分片在分组中的位置。片偏移指出较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,这就是说,每个分片的长度一定是8字节的整数倍。
数据分片举例:
一数据报的总长度为3820字节,数据部分为3800字节(IP首部为固定20字节),需要分片传输。假设每片IP报文长度不超过1420字节。去掉固定首部长度20字节,每片报文数据部分长度不超过1400。于是分成3个数据报片,其数据部分长度分别为1400、1400、1000字节。原始数据报首部被复制为各数据报片的首部,只需要改变有关字段的值。下图给出分片后得出的结果。
下图表是本例中数据报首部与分片有关的字段中的数值,其中标识字段的值是任意给定的(12345)。具有相同标识的数据报片在目的站就可无误地重装成原来的数据报。
(8) 生存时间:占8位,生存时间字段常用的英文缩写是TTL(Time To Live),表明数据报在网络中的寿命。TTL的意义是指明数据报在互联网中至多可经过多少个路由器,因此其单位不是时间而是跳数。由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。路由器在每次转发数据报之前就把TTL值减1,由于只有八个位,所以能够在网络中经过的路由器的最大数值是255,若TTL值减小到零,就丢弃这个数据报,不再转发。
(9) 协议:占8位。协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。例如协议字段为6表示上交给上层TCP协议进行处理。
常见的协议号:
(10) 首部检验和:占16位。这个字段只检验数据报的首部,不包括数据部分。在数据报传输过程中IP头中的某些字段可能发生改变(如生存时间、标志、片偏移等都可能发生变化),所以检验和要在每一个经过的路由器中进行校验和重新计算。利用二进制反码求和来进行校验,以此来决定是否丢弃数据报。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
(11) 源地址:占32位,源IP地址。标识IP数据报的源端地址。
(12) 目的地址:占32位,目的IP地址。标识IP数据报的目的地址。
IP数据报首部的可变部分
IP数据报首部的可变部分就是一个选项字段,一般很少使用。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。而有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。很多路由器都不考虑IP首部的可选字段,因此新的IP版本IPV6就把IP数据报的首部长度做成固定的。
Wireshark分析IP数据报头之前我们已经通过Wireshark分析了以太网帧,详见该文《以太网数据帧结构详解并结合Wireshark工具深入分析》。现在我们进一步来分析一下通信过程中IP数据报头情况。如下图,可以看到该数据报是由主机192.168.1.107发往61.149.23.83的,点击展开Internet Protocol Version 4。
结合上面IP报文格式的介绍,那么现在我们对该IP数据报头各字段情况可以看得一目了然。
1.Vesion:版本。其值为0100=4。
2.Header Length:首部长度。其值为0101=5,表示该IP首部为固定长度20 bytes。
3.Differentiated Services Field:区分服务字段。其值为0x00=0,表示没有用到差分服务。
4.Total Length:总长度。可以看到该数据报的长度为83字节。
5.Identification:标识。其值为0x7be6=31718。
6.Flags:标志。其3位值都为0。
7.Fragment Offset:片偏移。其值为0。
8.Time to live:生存时间。其值为64。
9.Protocol:协议。其值为17,表示将数据部分交由上层UDP协议进行处理。
10.Header Checksum:首部检验和。
这里显示“validation disabled”(即禁止校验),这是因为有时校验和会由网卡计算,因此Wireshark抓到的本机发送的数据包的校验和都是错误的,这样检验校验和根本没有意义,所以Wireshark不自动做校验和的校验。
11.Source Address:源地址。这里可以看到源IP地址为192.168.1.107。
12.Destination Address:目的地址。这里可以看到目的IP地址为:61.149.23.83。
以上就是网络传输中IP数据报文的相关内容并结合Wireshark工具加以分析,关于更多网络知识可以加个关注,另外对Wireshark数据包分析感兴趣的同学可以订阅专栏内容~