详解RFC 791文档

介绍

网络层协议通过源主机地址和目的主机地址(IP地址)把数据传输到不同的主机,如有必要,它还提供分片和重组功能

所以,网络层协议有两个基本功能:寻址和分片

传输层模块(TCP模块或UDP模块)会调用Internet模块将传输层数据段(包括传输层协议首部和用户数据)作为Internet数据报的数据部分,传输层模块会将Internet标头中的目标地址(IP地址)和其他参数传给Internet模块使用

为什么是上层协议把属于网络层的目的IP地址字段传给网络模块呢?

因为是应用层要把数据传输给其他的主机,所以应用层必定知道对方的IP地址,但是这个IP地址是在下层的协议网络层填充的,所以就通过传输层把它当成参数传给网络层模块咯

这里提及到TTL(Time to Live)生存时间字段,这个字段代表着什么呢?

生存时间是IP数据报生命周期上限的指示。它由数据报的发送者设置,并在在路由的网关处减少。如果在IP数据报到达其目的地之前生存时间达到零,则IP数据报被销毁。可以将生存时间视为自毁时间限制,以防止网络包在网络中长期存在,消耗网络带宽资源

关联的其他协议

协议关系图

可以看出,网络层协议位于链路层和传输层之间,它还有一个子协议ICMP

我们知道网关属于三层设备,也就是网络层设备,所以网关到网关的GGP协议也是IP模块处理

网络层头部格式

字段长度描述
Version4 bits表示网络层头部格式版本号,IPv4就是4
IHL4 bits网络层头部长度,以4字节为单位,最小值是5
Type of Service1 byte服务质量参数化,通过特定网络时据此提供服务优先级
Total Length2 bytes数据报的长度,包括网络层头部和有效载荷
Identification2 bytes发送者分配的一个标识符,用于帮助组装分片包
Flags3 bits控制标志
Fragment Offset13 bits分片包偏移量,表示该分片包payload的第一个字节在整个数据报中的位置
Time to Live1 byte表示允许数据报在网络中保留的最长时间
Protocol1 byte下一级要处理数据的协议号
Header Checksum2 bytes网络层头部校验和
Source Address4 bytes源IP地址
Destination Address4 bytes目的IP地址
Options可变携带的可选的信息
  • IHL

这个字段表示网络层头部长度,它以4字节为单位,也就是说IHL5,网络层头部长度就是5x420

网络层头部最大长度为60,最小长度为20

  • Total Length

Total Length为2个字节,最大值65535,但是如果一条网络数据报这么大的长度,肯定不可能

只有在确定目的地能接收更大的数据报的前提下,才会建议主机发送大于576个字节的数据报,比如TCP协商一致的情况。对于UDP协议来说,一般选择576个字节通信(这里指的是网络层头部+UDP头部+有效载荷)。但是不代表UDP协议只能传输这么点数据

  • Flags

bit0,保留位
bit1,是否允许分片标志位
bit2,是否最后一个分片标志位

  • Time to Live

TTL值表示该数据报在网络中生存的最大时间,单位为秒。当报文每经过一个网关时,该字段减1,即使网关在不到1秒内处理完数据报,TTL仅被视为可能存在的时间。当TTL值为0时,网关会丢弃它。但是,如果接收端收到的报文TTL为0,还是可以接收并处理的。TTL的目的是使无法传递的数据报被丢弃,并限制最大数据报生命周期

  • Header Checksum

由于网络层头部的某些字段会改变(比如TTL、Flags),所以需要处理网络层头部的地方都会重新计算校验和

校验和采用简单算法,也就是反码求和法

  • Options

option的格式有两种:

  • 单个字节,表示选项类型
  • 一个字节表示选项类型,一个字节表示选项长度,实际的选项数据

接收方怎么知道实际的选项数据多长呢?就是根据前面的选项长度来的

这个选项长度,包含了前面的选项类型,自己的选项长度,还有后面的选项数据,切记切记

选项类型这个字节,有三个字段:

copied flag表示该选项被复制到分片时的所有分片包,0 = not copied,1 = copied

从这里看出,option字段,有的会复制到所有分片包,有的不会。不会的情况,是只复制在分片包的首片里吗?应该是的吧

option class分为:

所有的options字段有以下这些:

分片和重组

这里要重点讲一下分片和重组

网络层分片针对的是网络层的有效载荷,也就是IP payload。一段数据在传输层封装完头部后(传输层头部+用户数据),在网络层作为网络层的payload,如果需要分片,针对这个payload进行分片,分片后的数据段,每个都需要添加网络层头部,成为一个完整的分片包

而像ICMP这种,作为网络层内的一个子协议,如果需要分片,也是把ICMP头部+payload作为网络层的payload,进行分片,然后每个分片再添加网络层头部,成为一个完整的分片包

options字段在分片时会复制一些,没有复制的option仅保留在第一个分片包中

受分片影响的字段有哪些呢?

  • options字段
  • more fragments字段
  • fragment offset字段
  • IHL字段
  • total length字段
  • checksum字段

如果don’t fragment标志位被设置的话,不允许数据报在网络层被分片,包括在网关时由于MTU需要分片的情况。这种情况下报文会被丢弃

接收端对于收到的分片包又是如何重组的呢?

首先,接收端有一个缓冲区标识符,它作为source address、destination address、protocol和identification字段的关联标识符

如果收到的是一条完整的未分片的报文(即fragment offset和more fragments字段为0),则与此缓冲区标识符关联的所有重组资源被释放,数据报被转发到下一步处理

如果收到多个分片包,则用分配的重组资源进行重组。重组资源由数据缓冲区、头缓冲区、分片块位表、总数据长度字段和定时器组成。来自分片的数据根据其分片偏移量和长度放置在数据缓冲区中,并在收到的分片块对应的分片块位表中设置位。如果这是第一个分片包(即fragment offset为零),则此标头被放置在标头缓冲区中。如果这是最后一个分片包(即more fragments为零),则计算总数据长度。如果这个分片完成了数据报(通过检查分片块表中设置的位来测试),那么数据报被发送到数据报处理的下一步;如果定时器计时结束还未完成重组,则释放此缓冲区标识符的所有重组资源

所以说,重组有一个定时器,需要在这个时间内收到所有分片包并完成重组


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车通信技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值