首页 > 常见问题 > ip数据报的格式是什么

ip数据报的格式是什么

醉折花枝作酒筹
发布: 2023-03-01 16:48:52
原创
20050 人浏览过

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

ip数据报的格式是什么

本教程操作环境:windows7系统、Dell G3电脑。

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

IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。

IP数据报的格式如下:

5573582_1279195143KN73.png

注意,上图表示的数据,最高位在左边,记为0位;最低位在右边,记为31位。在网络中传输数据时,先传输0~7位,其次是8~15位,然后传输16~23位,最后传输24~31位。由于TCP/IP协议头部中所有的二进制数在网络中传输时都要求以这种顺序进行,因此把它称为网络字节顺序。在实际编程中,以其他形式存储的二进制数必须在传输数据前使用网络编程API相应的函数把头部转换成网络字节顺序。

IP数据报各字段功能如下:

1)版本号:占用4位二进制数,表示该IP数据报使用的IP协议版本。目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议。

2)头长度:占用4位二进制位,此域指出整个报头的长度(包括选项),该长度是以32位二进制数为一个计数单位的,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)。

3)服务类型(TOS、type of service):占用8位二进制位,用于规定本数据报的处理方式。服务类型字段的8位分成了5个子域:

5573582_1279195143SDCz.png

(1)—优先权(0-7)数越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍。

(2)—短延迟位D(Delay):该位置1时,数据报请求以短延迟信道传输,0表示正常延时。

(3)—高吞吐量位T(Throughput):该位置1时,数据报请求以高吞吐量信道传输,0表示普通。

(4)—高可靠位R(Reliability):该位置1时,数据报请求以高可靠性信道传输,0表示普通。

(5)—保留位。

目前在Internet中使用的TCP/IP协议大多数情况下网络并未对TOS进行处理,但在实际编程时,有专门的函数来设置该字段的各域。一些重要的网际应用协议中都设置了建议使用的TOS值:

5573582_12791951440JPr.png

从上表可以看出,对于与用户直接交互的应用,一般使用短延时;对于有大量数据需要进行传输的应用,一般选用高吞吐量;对于数据报要传输控制信息的应用,一般选用高可靠性。在数据报的生存期内不支持TOS的,TOS字段就设置为0x00。

4)总长度:占用16位二进制位,总长度字段是指整个IP数据报的长度(报头区+数据区),以字节为单位。利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多)。

5)生存时间(TTL,time to live):占用8位二进制位,它指定了数据报可以在网络中传输的最长时间。实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或256),一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就丢弃,并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去。

6)上层协议标识:占用8位二进制位,IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了。

常用网际协议编号:

5573582_1279195145NPrA.png

7)校验和:占用16位二进制数,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算。

原理:发送端首先将检验和字段置0,然后对头部中每16位二进制数进行反码求和的运算,并将结果存在校验和字段中。 由于接收方在计算过程中包含了发送方放在头部的校验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该是全1。

8)源地址:占用32位二进制数,表示发送端IP地址。

9)目的地址:占用32位二进制数,表述目的端IP地址。

======================IP数据报分片和重组======================

最大传输单元:

IP数据报在互联网上传输时,可能要经过多个物理网络才能从源端传输到目的端。不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制,这个限制值即最大传输单元MTU(Maximum Transmission Unit).

同一个网络上的两台主机之间通信时,该网络的MTU值是确定的,不存在分片问题。分片问题一般只存在于具有不同MTU值的互联网中。由于现在互联网主要使用路由器进行网络连接,因此分片工作通常由路由器负责。

当两台主机之间的通信要通过多个具有不同MTU值的网络时,MTU的瓶颈是通信路径上最小的MTU值,它被称为路径MTU。由于路由选择不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此,路径MTU在两个方向上不一定是一致的,下表是几种常用网络的MTU值:

5573582_12791951440JPr.png

分片:

把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机。

一个IP数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的IP数据报和原来没有分片的IP数据报结构是相同的,即也是由IP头部和IP数据区两个部分组成:

5573582_127924946840lL.png

分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移:

(1)—标志:在IP数据报头部有一个叫“标志”的字段,用3位二进制数表示:

5573582_1279249468x0XZ.png

不分片DF(Do not Fragment)标志如果被置1,则数据报在传输过程中不能被分片,如网络连通性测试命令ping就可以用-F参数设置为在数据传输时不分片,但这样当数据不能通过MTU较小的网络时,将产生数据不可达的错误。

片未完MF(More Fragment)标志如果被置1,说明该数据报不是分片后的最后一个数据报,最后一个数据报的该位被置0。

(2)—片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。

重组:

当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组。

在IP数据报头部中,标识用16位二进制数表示,它唯一地标识主机发送的每一份数据报。在一个数据报被分片时,每个分片仅把数据报“标识”字段的值原样复制一份,所以一个数据报的所有分片具有相同的标识。

目标端主机重组数据报的原理是:

(1)—根据“标识”字段可以确定收到的分片属于原来哪个IP数据报;

(2)—根据“标志”字段的“片未完MF”子字段可以确定分片是不是最后一个分片;

(3)—根据“偏移量”字段可以确定分片在原数据报中的位置。

更多计算机相关知识,请访问常见问题栏目!

以上是ip数据报的格式是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板