RFC791-IP-3.1Internet Header Format

下面是网络包首部的一个内容摘要:
在这里插入图片描述

version:4位
版本(version)字段指明了数据包首部的格式,此文档描述的是版本4

IHL:4位
首部长度(Internet Header Length)字段表达网络包首部的长度,以32位(4字节)为单位,所以,也就是指向数据的开始位置。注意,有效的最小值是5

type of service(TOS):8位
服务类型字段指示了此次服务需要的抽象参数,在数据传输途径某个特定网段的时候,基于这些抽象参数去选择具体的服务参数。有些网络会有不同的服务优先级,高级别的传输会被认为比低级别的传输更重要。主要的工作是在low-delay,high-reliability, high-throughput三者直接做选择。

0-2位:优先级precedence
3位:0 = 正常延时normal delay; 1 = 低延时low dalay
4位:0 = 正常吞吐量normal throughput;1 = 高吞吐量high throughput
5位:0 = 正常可靠性normal relibility;1 = 高可靠性high relibility
6-7位:保留

    precedence
    111-网段控制network control
    110-网络控制internetwork control
    101-CRITIC/ECP
    100-flash override
    011-flash
    010-immediate
    001-priority
    000-routine

延时、吞吐量、可靠性字段的使用可能会增加服务代价。在很多网络中,某一方面性能的提升常伴随着另一方面性能的下降。除了极特殊的情况外,这三个字段至多用两个

TOS用来标识网络系统中对数据传输的处理方式。一些TOS与实际提供的网络服务的映射,比如AUTODIN II, ARPANET, SATNET, PRNET可以在“service mappings”查看shi

network control的设计目的是在网段内使用。实际上,每个网段都在用它。internetwork control设计目的是仅供网关控制使用。如果一个网段要使用这些字段,那它就有目的对这些字段做出回应

Total Length:16位
数据报文的长度,以字节为单位,包括首部和数据。这个字段最高允许65535字节。这么长的数据包对大多数主机和网段来说都是不现实的。所有主机必须可以接受最多576字节的数据包(无论是分片还是整个发送)。建议所有的主机在确定接收方能接受大于576字节的时候,发送大于576字节的数据

576字节的目的是允许一个有意义的数据块配上一个所需要的首部进行传输。比如说,这个长度允许512字节的数据块加上64字节的首部。IP首部最多60字节,一个典型的IP首部是20字节,此外留有一部分留给高层的协议。

Identification:16位
由发送方设置,目的是分片重组

Flags:3位
不同的控制位:
0位:保留,必须为0
1位:(DF)0=可以分片,1=禁止分片(don’t fragment)
2位:(MF)0=最后的分片,1=还有剩余分片(more fragments)

fragment offset:13位
指示分片在数据包中的位置。8字节位单位,第一个分片必须是0

Time to Live:8位
指示数据包在网络系统中允许的最多剩余存活时间。如果该字段值为0,则该数据包必须要被销毁。该字段的值在数据传输过程中会被调整。时间以秒为单位测量,每次传输时值必须至少减少一,即使传输过程用时不足1秒,TTL必须被认为是一个生存时间的上界。该字段的目的是丢弃不可达的数据包,并标记数据包的生存时间上界

Protocol:8位
指示数据部分所使用的协议类型

Header Checknum:16位
检验码只检验首部。因为某些首部字段在传输过程中会改变,所以这个值相应的也需要重新计算。

    检验码的算法是:  
    检验码是一个16位的补码,由首部中所有16位段的补码的和得出。在计算补码的过程中,补码字段置0

这是一个简单的计算检验码的方法,而且实验证明它已经足够了,但这只是一个临时的方案,基于将来的实验,可能会用CRC检验来代替它

Source Address:源地址32位

Destination Address:目的地址32位

Options:选项,长度可变

选项字段不一定非要在数据包中出现,所有的IP模块都要支持它(主机和网关),你可以不用,但是你必须要支持它

在一些网络环境中,安全字段(security)是必须的

选项字段的长度是可变的,可以没有选项字段,也可以有多个选项字段。以下是选项字段的两种格式:

  1. 一个字节的选项类型
  2. 一个字节的选项类型,一个字节的选项长度,再加上实际的数据

选项长度包括选项类型、选项长度和实际数据三个部分

选项类型字节包括三个部分:
第1位:复制标志位copied flag
第2位:选项类别option class
其余5位:选项编号option number

复制标志位表示是否将选项复制到每一个分片中,1复制,0不复制

选项类别是:
0. 控制control

  1. 保留reserved for future use
  2. 调试 debugging and measurement
  3. 保留reserved for future use

以下是已经定义的一些option

类别 编号 长度 描述
0 0 - 选项列表结束标识,只占1字节,且没有长度字节
0 1 - 无操作。占1字节,没有长度
0 2 11 安全。携带安全、分区、用户组以及与DOD要求匹配的操作限制码
0 3 可变 松散源路由,基于源提供的信息去选择路由
0 9 可变 严格源路由,基于源提供的信息去选择路由
0 7 可变 记录路由
0 8 4 流ID,用来携带流标识
2 4 可变 时间戳

之后是一些例子以及padding(对齐)

发布了141 篇原创文章 · 获赞 2 · 访问量 2020

猜你喜欢

转载自blog.csdn.net/weixin_40602200/article/details/104080209