IP网际协议分析

版权声明:<--本博客所有内容均为个人在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除--> https://blog.csdn.net/qq_42196196/article/details/83748044

简介

       IP协议(Internet Protocol)即网际协议,是用于报文交换网络的一种面向数据的协议。不提供可靠的传输服务(也叫尽最大努力传输),它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告。

封包格式及各字段分析

封包格式

各字段分析

(1)版本: 占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPV4)。关于以后要使用的IPv6(即版本6的IP协议)。
(2)首部长度: 占4位,可表示的最大十进制数值是15。请注意,首部长度字段所表示数的单位是32位字(1个32位字长是4字节)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当首部长度为最大值111时(即十进制数的15),就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务: 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务Ds(Differentiated Services) 。只有在使用区分服务时,这个字段才起作用。在一般的情况下都不使用这个字段。
(4)总长度: 占16位,总长度指首部和数据之和的长度,单位为字节。因此数据报的最大长度为2^16-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。 我们知道,在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU( Maximum Transfer Unit )。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理虽然使用尽可能长的IP数据报会使传输效率得到提高(因为每一个IP数据报中首部长度占数据报总长度的比例就会小些),但数据报短些也有好处。每一个IP数据报越短,路由器转发的速度就越快。为此,IP协议规定,在互联网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度),加上最长的首部60字节,再加上4字节的富余量,就得到576字节。当主机需要发送长度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。否则,就要进行分片。在进行分片时(见后面的“片偏移”字段),数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
(5)标识: 占16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个"标识"并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志: 占3位,但目前只有两位有意义。1.标志字段中的最低位记为MF( More Fragmento MF =1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。2.标志字段中间的一位记为DF( Dont Fragment ),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移: 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间: 占8位,生存时间字段常用的英文缩写是TTL( Time To Live ),表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报然而随着技术的进步,路由器处理数据报所需的时间不断在缩短,一般都远远小于1秒,后来就把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在每次转发数据报之前就把TL值减1。若TTL值减小到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在互联网中至多可经过多少个路由器。显然,数据报能在互联网中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在被转发之前TTL值就减小到零,因而就会被这个路由器丢弃。
(9)协议: 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。(常见协议名与协议字段值对应:ICMP-1、IGMP-2、IP-4、TCP-6、EGP-8、IGP-9、UDP-17、IPv6-41、ESP-50、OSPF-89)。
(10)首部检验和: 占16位,这个字段只检验数据报的首部,不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。为了进一步减小计算检验和的工作量,IP首部的检验和不采用复杂的CRC检验码而采用下面的简单计算方法:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
(11)源地址: 占32位,目前使用的IPv4地址。
(12)目的地址: 占32位,目前使用的IPv4地址。

数据包分析

使用科来网络分析系统抓取的三个连续的数据包:

就第三个报文进行各字段分析:

版本: 使用IPv4。
首部长度: 20字节
区分服务: 未启用
总长度: 1500字节
标识: 标识号为27564,第二个报文标识号为27563,第一个报文标识号是27562。
标志: MF=0,DF=1。代表不能分片。
片偏移: 0,因为报文并没有分片。
生存时间: 还剩45跳,也就是经过45次路由转发,该报文就会被丢弃掉。
协议: 6,代表运输层为TCP协议。
首部检验和: 0xE5FF,用于校验报文首部的字段。
源地址: 139.196.31.14。
目的地址: 10.6.65.120。

其他

首部校验和计算过程
对照上文各字段分析看图

例:

当数据报分片

 例:当一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分的长度分别为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
分片后得出的结果

       上表描述了数据报首部与分片有关的字段中的数值,其中标识字段的值是任意给定的(12345)。具有相同标识的数据报片在目的站就可无误地重装成原来的数据报。 现在假定数据报片2经过某个网络时还需要再进行分片,即划分为数据报片2-1(携带数据800字节)和数据报片2-2(携带数据600字节)。那么这两个数据报片的总长度、标识、MF、DF和片偏移分别为:820,12345,1,0,175;620,12345,1,0,275。

 IP数据报首部的可变部分
       IP数据报首部的可变部分就是一个选项字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。而有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
       增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用很多路由器都不考虑IP首部的选项字段,因此新的IP版本IPv6就把I数据报的首部长度做成固定的。

IPv6

      IP协议是互联网的核心协议。现在使用的IP(即IPv4)是在20世纪70年代末期设计的。互联网经过几十年的飞速发展,到2011年2月,IPV4的地址已经耗尽,ISP已经不能再中请到新的PP地址块了。我国在2014年至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开始商用部署IPv6。

IPv6与IPv4对比:

  • 取消了首部长度字段,因为它的首部长度是固定的(40字节)
  • 取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能。
  • 取消了总长度字段,改用有效载荷长度字段取消了标识、标志和片偏移字段,因为这些功能已包含在分片扩展首部中。
  • 把TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)取消了协议字段,改用下一个首部字段。
  • 取消了检验和字段,这样就加快了路由器处理数据报的速度。我们知道,在数据链路层对检测出有差错的帧就丢弃。在运输层,当使用UDP时,若检测出有差错的用户数据报就丢弃。当使用TCP时,对检测出有差错的报文段就重传,直到正确传送到目的进程为止。因此在网络层的差错检测可以精简掉。
  • 取消了选项字段,而用扩展首部来实现选项功能由于把首部中不必要的功能取消了,使得IPv6首部的字段数减少到只有8个。

(1)版本:占4位,指明协议版本,对IPv6版本,该字段为6.
(2)通信量类:占8位,为了区分不同的IPv6数据报的类别或优先级。
(3)流标号:占20位。IPv6的一个新的机制是支持资源预分配,并且允许路由器把每一个数据报与一个给定的资源分配相联系。PV6提出流(fow)的抽象概念。所谓“流”就是互联网络上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音频或视频传输),而在这个“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。因此,流标号对实时音频视频数据的传送特别有用。对于传统的电子邮件或非实时数据,流标号则没有用处,把它置为0即可。
(4)有效载荷长度:占16位。它指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内)。这个字段的最大值是64KB(65535字节)。
(5)下一个首部:占8位。它相当于IPv4的协议字段或可选字段。
当IPv6数据报没有扩展首部时,下一个首部字段的作用和IPv4的协议字段一样,它的值指出了基本首部后面的数据应交付IP层上面的哪一个高层协议。
当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型。
(6)跳数限制:占8位。(类比IPv4的生存时间字段)用来防止数据报在网络中无限期地存在。源点在每个数据报发出时即设定某个跳数限制(最大为255跳)。每个路由器在转发数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为零时,就要把这个数据报丢弃。
(7)源地址:占128位。是数据报的发送端的IP地址。
(8)目的地址:占128位。是数据报的接收端的IP地址。

附:IPv6报文

中国IPv6部署不力的原因五个方面

1.落入了私有地址的陷阱难以自拨,地址转换(NAT)可暂时应对IPv4公网地址的不足,但跨过多个公网地址对私有地址的管理相当复杂,NAT破坏了端到端的透明性,无法对用户溯源。
2.政府缺乏明确的市场导向和应用先行意识,发达国家一般是军方和政府先转换到IPv6,而我国家政府网站没有起到应有的带头作用。
3.对内容服务的瓶颈重视不够且缺乏有利的政策,“我国整个IPv6的端口迟迟没有开放,国际的带宽也不够,国外IPv6服务也没有在中国落地,应用和网站上IPv6的迁移严重滞后,这些严重拖了我国IPv6发展的后腿。”
4.一些误解和干扰影响了国家发展IPv6战略的执行。邬贺铨称,一些把中国公众互联网与国际互联网隔离的方案声称的“自主创新安全可靠”迷惑了一些单位,违反了中国坚持的全球一个互联网的主张。另外,以为颠覆IP的未来网络很快就实现,而处于等待观望的状态,对IPv6部署按兵不动。
5.将IPv6与网络对立,认为IPv6会影响网络安全。“实际上美国拥有很多IPv4地址,现在美国大力发展IPv6,原因是IPv6可以对用户溯源,有利于反恐。”

猜你喜欢

转载自blog.csdn.net/qq_42196196/article/details/83748044