标签:mtu 求和 计算过程 整数 首部 内容 ip首部 网络资源 获得
IP协议具有什么功能从数据报的格式中就能够知道,一个IP数据报被分为了首部和数据两个部分,在首部中有20个字节是固定的,还有一些可选字段长度是可变的,下面是IP数据报的具体格式:
IP数据报各个字段的意义
1.版本号
版本号占4位,指使用的IP协议的版本,通信双方使用的版本要一致才能通信,目前的版本有IPv4和IPv6,
2.首部长度
指数据报的首部的长度,占4位,注意这里的首部长度的单位是4个字节,所以最大的首部长度可以达到 15 * 4 = 60 个字节,当首部长度不是4个整数倍的时候,就要使用填充字段进行填充。
3.区分服务
占8位,用来获得更好的服务,只有在使用区分服务的时候,这个字段才有用,一般情况下,都不使用这个字段
4.总长度
首部和数据部分长度之和,占16位,因此IP数据报的最大长度位2的16次方 - 1, 即65535个字节,然而这样长度的数据报是极少遇到的,我们知道在数据链层规定了MTU的大小(常用的以太网的MTU为1500字节),当数据报的大小超过MTU时,就要进行分片处理。
IP协议规定所有的主机和路由器,必须能够接受长度不超过576字节的数据报,当要发送的数据包的长度超过576个字节时,就应该先了解目的主机是否能够接受所发送的数据报的长度,否则就要进行分片处理了。
5.标识
占16位,IP软件在存储器中维持一个计数器,每产生一个数据报,就将计数器加一,并将此值赋值给标识字段,当数据报的长度,超过网络的MTU时,就必须进行分片处理,这个标识将会赋值到所有的分片中,也就是说一个数据报经过分片之后的形成的多个数据报的标识是一样的,这样做是为了将它们组成一个完整的数据报。
6.标志
占3位,但目前只有两位有意义,
? 标志字段的最低位为MF,当MF = 1 时,表示后面还有分片,MF = 0表示这是最后一个分片
? 中间位位DF,DF的意思是不能分片,当DF=0时,才允许分片
7.片位移
占13位,分片之后的每一片在原来的数据报中的位置,即相对于数据报的起点位置,该片从何处开始,片位移以8个字节位单位,
8.生存时间
占8位,英文缩写为TTL(Time To Live),这个字段指明数据报在网络中的生存时间,每当数据报经过一个路由器,TTL就减1,当TTL为0时,路由器就丢弃该数据报,而不进行转发了,这样做的目的是为了防止数据报 在网络中“兜圈子”而白白消耗网络资源,一般的操作系统都有默认的TTL:
? Linux 64
? Windows 128
? Unix 256
9.协议
占8位,协议字段指出数据包的数据部分使用的是何种协议,以便使目的主机的IP层知道应该将数据报中的数据交给哪个部分来处理,常见的协议和对应的字段值如下:
? ICMP 1
? IGMP 2
? IP 4 , IP数据报再封装到IP数据报中
? TCP 6
? IGP 9
? UDP 17
? IPv6 41
? ESP 50
? OSPF 89
10.首部检验和
占16位,只将首部检验过后的检验和填入此字段中,不检验数据报的数据部分,数据报每经过一个路由器都要重新计算检验和,检验和的计算过程如下:
? 先将检验和字段设置为全0,
? 然后将IP数据报的首部划分位以16位为一个单位的序列,将这些字段进行反码算术运算求和,
? 将得到的结果取反,并写入检验和字段,注意这个取反后的结果和原来的结果相加为全1
? 接收方收到数据报之后,也将IP数据报的首部划分位以16位为一个单位的序列,将这些字段进行反码算术运算求和,
? 若将得到的结果取反不为0,那么证明出错了,则丢弃该数据报,若取反结果为0,将数据报上交。
11.源地址和目的地址
各占32位
12.可变部分
IP首部的可变部分就是一个选项字段,选项字段可以用来支持排错、测量以及安全等措施,内容丰富,选项字段最多为40个字节,最小为0个字节,实际上这些字段都是很少用的,因为这样一来减小了开销,IPv6版本的IP数据报的首部就是固定长度的,
标签:mtu 求和 计算过程 整数 首部 内容 ip首部 网络资源 获得
原文地址:https://www.cnblogs.com/yusiming/p/9749937.html