Net:IPv4:修订间差异
建立內容為「Pv4在IETF于1981年9月发布的 RFC 791 中被描述,此RFC替换了于1980年1月发布的 RFC 760。 IPv4是一种无连接的协议,操作在使用分…」的新頁面 |
|||
(未显示同一用户的6个中间版本) | |||
第4行: | 第4行: | ||
=地址空间= | =地址空间= | ||
* A类:0.0.0.0~127.255.255.255 | |||
* B类:128.0.0.0~191.255.255.255 | |||
* C类:192.0.0.0~223.255.255.255 | |||
* D类:224.0.0.0~239.255.255.255 | |||
* E类:240.0.0.0~255.255.255.255 | |||
=报文结构= | =报文结构= | ||
[[Image:IPv4-Structue.png|600px]] | |||
* 版本: IPv4即为4 | |||
* 首部长度: 首部长度说明首部有多少32位字(4字节)。由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量。这个字段的最小值是5(二进制0101),相当于5*4=20字节(RFC 791),最大十进制值是15。 | |||
* 区分服务: 只有在使用区分服务时,这个字段才起作用,在一般的情况 下都不使用这个字段。例如需要实时数据流的技术会应用这个字段,一个例子是VoIP。 | |||
* 显式拥塞通告( Explicit Congestion Notification,ECN):在RFC 3168中定义,允许在不丢弃报文的同时通知对方网络拥塞的发生。ECN是一种可选的功能,仅当两端都支持并希望使用,且底层网络支持时才被使用。 | |||
* 全长: 报文总长,包含首部和数据,单位为字节。这个字段的最小值是20(20字节首部+0字节数据) | |||
* 标识符: 主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。每产生一个数据报,计数器加1,并赋值给此字段。 | |||
* 标志 : 这个3位字段用于控制和识别分片,它们是: | |||
** 位0:保留,必须为0; | |||
** 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片; | |||
** 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。 | |||
* 分片偏移:指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。 | |||
* 存活时间: 避免报文在互联网中永远存在(例如陷入路由环路)。存活时间以秒为单位,但小于一秒的时间均向上取整到一秒。在现实中,这实际上成了一个跳数计数器:报文经过的每个路由器都将此字段减1,当此字段等于0时,报文不再向下一跳传送并被丢弃,最大值是255。常规地,一份ICMP报文被发回报文发送端说明其发送的报文已被丢弃。这也是traceroute的核心原理。 | |||
* 协议: 定义了该报文数据区使用的协议。 | |||
* 首部检验和: 只对首部查错,不包括数据部分。重新计算的必要性是因为每一跳的一些首部字段(如TTL、Flag、Offset等)都有可能发生变化,不检查数据部分是为了减少工作量。 | |||
* 源地址: 请注意,因为NAT的存在,这个地址并不总是报文的真实发送端 | |||
* 目的地址: 报文的接收端。 | |||
* 选项: 并不被经常使用 | |||
=分片和组装= | |||
互联网协议(IP)是整个互联网架构的基础,可以支持不同的物理层网络,即IP层独立于链路层传输技术。不同的链路层不仅在传输速度上有差异,还在帧结构和大小上有所不同,不同MTU参数描述了数据帧的大小。为了实现IP数据包能够使用不同的链路层技术,需要将IP数据包变成适合链路层的数据格式,IP报文的分片即是IP数据包为了满足链路层的数据大小而进行的分割。 | |||
==分片== | |||
当设备收到IP报文时,分析其目的地址并决定要在哪个链路上发送它。MTU决定了数据载荷的最大长度,如IP报文长度比MTU大,则IP数据包必须进行分片。每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改: | |||
* 总长字段被修改为此分片的长度; | |||
* 更多分片(MF)标志被设置,除了最后一片; | |||
* 分片偏移量字段被调整为合适的值; | |||
* 首部检验和被重新计算。 | |||
==组装== | |||
当一个接收者发现IP报文的下列项目之一为真时: | |||
* DF标志为0; | |||
* 分片偏移量字段不为0。 | |||
* 它便知道这个报文已被分片,并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。 | |||
当接受者收到了更多分片标志未被设置的分片时,它便知道原始数据载荷的总长。一旦它收齐了所有的分片,它便可以将所有片按照正确的顺序(通过分片偏移量)组装起来,并交给上层协议栈。 | |||
[[Category:Network]] | [[Category:Network]] |
2021年7月12日 (一) 14:49的最新版本
Pv4在IETF于1981年9月发布的 RFC 791 中被描述,此RFC替换了于1980年1月发布的 RFC 760。
IPv4是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包均能送达目的地,也不保证所有数据包均按照正确的顺序无重复地到达。这些方面是由上层的传输协议(如传输控制协议)处理的。
地址空间
- A类:0.0.0.0~127.255.255.255
- B类:128.0.0.0~191.255.255.255
- C类:192.0.0.0~223.255.255.255
- D类:224.0.0.0~239.255.255.255
- E类:240.0.0.0~255.255.255.255
报文结构
- 版本: IPv4即为4
- 首部长度: 首部长度说明首部有多少32位字(4字节)。由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量。这个字段的最小值是5(二进制0101),相当于5*4=20字节(RFC 791),最大十进制值是15。
- 区分服务: 只有在使用区分服务时,这个字段才起作用,在一般的情况 下都不使用这个字段。例如需要实时数据流的技术会应用这个字段,一个例子是VoIP。
- 显式拥塞通告( Explicit Congestion Notification,ECN):在RFC 3168中定义,允许在不丢弃报文的同时通知对方网络拥塞的发生。ECN是一种可选的功能,仅当两端都支持并希望使用,且底层网络支持时才被使用。
- 全长: 报文总长,包含首部和数据,单位为字节。这个字段的最小值是20(20字节首部+0字节数据)
- 标识符: 主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。每产生一个数据报,计数器加1,并赋值给此字段。
- 标志 : 这个3位字段用于控制和识别分片,它们是:
- 位0:保留,必须为0;
- 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;
- 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
- 分片偏移:指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。
- 存活时间: 避免报文在互联网中永远存在(例如陷入路由环路)。存活时间以秒为单位,但小于一秒的时间均向上取整到一秒。在现实中,这实际上成了一个跳数计数器:报文经过的每个路由器都将此字段减1,当此字段等于0时,报文不再向下一跳传送并被丢弃,最大值是255。常规地,一份ICMP报文被发回报文发送端说明其发送的报文已被丢弃。这也是traceroute的核心原理。
- 协议: 定义了该报文数据区使用的协议。
- 首部检验和: 只对首部查错,不包括数据部分。重新计算的必要性是因为每一跳的一些首部字段(如TTL、Flag、Offset等)都有可能发生变化,不检查数据部分是为了减少工作量。
- 源地址: 请注意,因为NAT的存在,这个地址并不总是报文的真实发送端
- 目的地址: 报文的接收端。
- 选项: 并不被经常使用
分片和组装
互联网协议(IP)是整个互联网架构的基础,可以支持不同的物理层网络,即IP层独立于链路层传输技术。不同的链路层不仅在传输速度上有差异,还在帧结构和大小上有所不同,不同MTU参数描述了数据帧的大小。为了实现IP数据包能够使用不同的链路层技术,需要将IP数据包变成适合链路层的数据格式,IP报文的分片即是IP数据包为了满足链路层的数据大小而进行的分割。
分片
当设备收到IP报文时,分析其目的地址并决定要在哪个链路上发送它。MTU决定了数据载荷的最大长度,如IP报文长度比MTU大,则IP数据包必须进行分片。每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改:
- 总长字段被修改为此分片的长度;
- 更多分片(MF)标志被设置,除了最后一片;
- 分片偏移量字段被调整为合适的值;
- 首部检验和被重新计算。
组装
当一个接收者发现IP报文的下列项目之一为真时:
- DF标志为0;
- 分片偏移量字段不为0。
- 它便知道这个报文已被分片,并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。
当接受者收到了更多分片标志未被设置的分片时,它便知道原始数据载荷的总长。一旦它收齐了所有的分片,它便可以将所有片按照正确的顺序(通过分片偏移量)组装起来,并交给上层协议栈。