IP数据报格式

来源:互联网 发布:淘宝云购源码能买吗 编辑:程序博客网 时间:2024/05/01 11:58

                                IP数据包格式详解 - 儍苽-℡藸 - BabyUnion

                                                                          IP数据包格式详解 - 儍苽-℡藸 - BabyUnion

        TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报,这是一个与硬件无关的虚拟包。由首部和数据两部分组成。首部的前一部分是固定长度,共 20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段, 其长度是可变的。首都中的源地址和目的地址都是 IP协议地址。

首先我们了解一下IP数据报的格式:

由上图我们可以知道,数据报分为首部和数据部分,数据报又有固定部分和可变部分,

我们首先来介绍固定部分:

        1、版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。日前广泛使用的 IP协议版本号为 4 ( IPv4)IPv6目前还处于起步阶段。

        2、首部长度(报头长度):指的是首部占32bit字的数目,包括任何选项。由于它是一个4bit 字段,因此最大为1111(即15),因此首部最长为60Byte。15x32/8=60Byte。首部长度始终是32bit的整数倍。IP数据报的首部的最小长度为20个字(不含填充字段和IP选项字段的IP报头是最常见的IP报头,为20个字节)

        3、服务:占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998IETF把这个字段改名为区分服务 DS (DifferentiatedServices)。只有在使用区分服务时,这个字段才起作用。

        4、总长度:总长度指首部及数据之和的长度,单位为字节。因为总长度字段为 16位,所以数据报的最大长度为 216-1=65 535字节。在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

        5、标识:占 16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。但这个“标识”并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的 MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

        6、标志:占3 位,但目前只有2位有意义标志段中的最低位记为 MF (More Fragment)MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片

中的最后一个。标志字段中间的一位记为 DF(Don't Fragment),意思是“不能分片”。只有当 DF=0时才允许分片。

        7、片偏移:占 13位。较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以 8个字节为偏移单位。这就是说,每个分片的长度一定是 8字节 (64)的整数倍。

        8、生存时间:占 8位,生存时间字段常用的英文缩写是TTL (Time To Live),其表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜围子,因而白白消耗网络资源。最初的设计是以秒作为 TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于 1秒,就把TTL值减 1。当 TTL值为 0时,就丢弃这个数据报。

        9、协议:占 8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

        10、首部检验和:占 16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首部检验和 (一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

        11、源地址:占32位。

        12、目的地址:占32位。

现在我们分析一下它的可变部分:

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

再让我们来看一下数据报是怎么用的,我看到一个蛮喜欢的例子,貌似我觉得这个例子可以让我很清晰的知道数据报的使用:

       网络层主要遵循的是分组交换协议。它可以采用数据报(datagram)和建立虚电路(virtual circuit)两种方式。
       那么,“数据报” 是什么?它又有什么特点呢?数据报也是分组交换的一种形式,就是把所传送的数据分段打成 “包”,再传送出去。看上去就好象运货装“集装箱”似的。但是,与传统的“连接型”分组交换不同,它属于“无连接型”,是把打成的每个“包”(分组)都作为一个“独立的报文”传送出去,所以叫做“数据报”。这样,在开始通信之前就不需要先连接好一条电路,各个数据报不一定都通过同一条路径传输,所以叫做“无连接型”。就好象运载集装箱的货车可选择多条路到达目的地。这一特点非常重要,它大大提高了网络的坚固性和安全性。
  每个数据报都有报头和报文这两个部分,报头中有目的地址等必要内容,使每个数据报不经过同样的路径都能准确地到达目的地,就好象运货也需要货物的清单。在目的地重新组合还原成原来发送的数据。这就要IP具有分组打包和集合组装的功能。

  在实际传送过程中,数据报还要能根据所经过网络规定的分组大小来改变数据报的长度,IP数据报的最大长度可达 65535个字节。

  对很长的数据来讲,由于数据报是通过不同路径最后到达终点,其次序容易混乱,这给目的节点对数据的排序和整理工作造成很大困难。这时可采用“虚电路”的方式。虚电路就好象一组按顺序排好的车队,出发前先通知各交叉路口的交警,让其建立一条通道(链路),此刻其他车辆都不准驶入这条通道(建立虚电路),待车队全部快速通过之后,才能恢复其他车辆驶入这条通道(拆除虚电路)。

本文改自  http://blog.163.com/hlz_2599/blog/static/1423784742011112195857956/

                http://www.doc88.com/p-892244650296.html

               http://www.kepu.net.cn/gb/technology/telecom/network/net310.html

0 0
原创粉丝点击