ipv4协议规定的ip地址(报头结构)

 

IP 协议(Internet Protocol 网际协议)是 TCP/IP 协议族中的核心协议,传输层的 TCP、UDP 等协议数据都通过 IP 数据报封装并传输

IP 协议提供尽力而为无连接的数据报交付服务,其中尽力而为指的是数据不一定会送达目标地址,而无连接指的是 IP 协议不维护网络单元(路由器)中数据报相关的任何链接状态信息,这会使每个数据报独立于其它数据报来处理。

作为一个通信协议,以上两点显然会为信息的传输带来数据的完整性可靠性问题,以及数据报间因为相互独立产生的多路径乱序、重复等问题,并且数据报在传输过程中还可能被复制或者改变内容。但以上这些都不是 IP 协议要考虑的,它的主要职责是跨网络边界分组交换(简单来说就是只负责把数据从源地址传递到目标地址),而这些可靠性必须由上层(如传输层的 TCP 协议)协议提供

IPv4 报头结构

一般标准的 IP 数据报头部大小为 20 Byte,少数包含额外选项的情况下 IP 数据报头部最大可以达到 60 Byte。一个报头由多个部分组成,我们在下文来逐一了解

图 1:IP 数据报头部结构
  • • 版本号:版本号在整个报头的头部,共占 4 位,表示 IP 协议版本,IPv4 用 4 表示,IPv6 用 6 表示,IPv4 与 IPv6 的协议头只有此处一样
  • • IHL:IHL(Internet Header Length)报头长度,共占 4 位,用来标识 IP 头部中有多少份 32 bit 的数据。因为只占 4 位,所以只能表示 15 个数,所以 IP 头部中最多包含 15 个 32 bit 的数据(60 Byte),一般情况下为 5(20 Byte)
  • • DS:区分服务,共占 6 位,表示期望获取哪种类型的服务
  • • ENC:显式拥塞通知,共占 2 位,当网络出现拥塞时会在这里进行标记,标记被某些服务检查到后会通知源主机减缓发送速度
  • • 总长度:标识 IP 数据报的总长度(包含数据部分),共占 16 位,所以每个 IP 数据报包含数据部分最大长度为 216 Byte(65535 Byte、64 MB),通过总长度和 IHL 可以计算出数据部分的大小 
  • • 标识:数据报标识,共占 16 位,主机每产生一个数据报 + 1,数据报分片时,把当前标识号复制给所有分片标识
  • • 标志分片标志信息,共占 3 位,目前只使用前两位,第一位为 MF(More Fragment)值为 1 时代表当前不是最后一个分片,为 0 时表示当前是最后一个分片。第二位为 DF(Don’t Fragment)值为 1 时允许分片,为 0 时不允许分片
  • • 分片偏移分片中的数据偏移量,共占 13 位,表示当前分片在原数据中的偏移量(相对位置)

标识、标志、分片偏移都与分片息息相关,在下文我们会详细了解什么是分片

  • • TTL:标识数据报的生存周期,共占 8 位,代表数据报可经过路由器的上限,数据报每经过一个路由器 TTL 的计数就会减一(会修改报头数据,所以后面提到的校验和也会重新计算),TTL 为 0 后数据报会被丢弃,并使用 ICMP 协议消息通知发送方
  • • 协议:标识上层(传输层)数据部分的协议类型,共占 8 位,通常为 17(UDP)或 6(TCP)
  • • 头部校验和:共占 16 位,仅计算头部校验和,不检查数据报有效载荷(TCP 或 UDP 数据)的正确性,TTL 变化时校验和也必须改变,当头部校验和验证错误时,数据报会被丢弃
  • • 源 & 目标 IP 地址:标识数据报的起始地址与目标地址,每段地址占 32 位

IPv4 数据报分片

在前文我们对 IP 数据报头的各个属性有了一个初步的认识,现在我们来着重了解一下数据报的分片与头部校验和

对 IP 数据报进行分片的目的是把一份 IP 数据报拆分成体积更小的多份分别进行传输,以满足链路层的 MTU(最大传输单元) 限制。而标识标志分片偏移这三个属性的存在为分片后乱序传输的多个数据报的组合复原提供了支持

MTU 以 Byte 为单位,就像公路或隧道的限高,规定了发送端每次发送报文的最大体积。以太网的 MTU 通常为 1500 Byte,接下来我们以一个数据载荷为 4000 Byte 的 IP 数据报为例,结合图 2 来看一下数据报分片是如何进行的

图 2:IP 数据报分片

首先,既然要进行分片那么我们就要知道每份分多大,以 1500 的 MTU 为例,除去报头的 20 Byte 最多还剩 1480 Byte 的数据载荷空间。因为分片大小以 8 为单位,大小必须是 8 的整数倍,所以经过计算(图 3)最大分片大小 d = 1480 Byt,所有数据报分片按最大分片大小 d 进行拆分,最后剩余的数据大小为(总长度)L % d

知道了每个分片数据报多大我们就能知道原数据报需要分片多少份,设份数为 n, 最大分片大小 d 与分片份数 n 的计算方法如下

图 3:最大分片 d,分片个数 n

经过以上计算我们把总长度为 4020 的数据报拆分为以下三个数据报,它们每一个都符合当前 1500 Byte 的 MTU 的限制

图 4:分片

拆分完毕的三个数据报有着同样的标志位,这个值来自于原数据报,用于在接收时标识分片所属的原数据报

接下来看标识位 MF,它代表当前分片是不是原数据报的最后一个分片,所以分片 A、B 的 MF 位为 1,分片 C 的 MF 位为 0

最后是分片偏移,它以 8 位为一个单位来计算,标识当前分片中的数据载荷在原数据中的开始位置,计算方法为:当前分片顺序 i 减 1(开始位置)乘分片大小 d 然后除 8(8 位为一个偏移单位)

图 5:分片偏移

IPv4 头部校验和

头部校验和用来验证 IP 数据报头部数据,在计算时先把当前校验和置零,然后以 16 位为一个单位对其进行二进制反码求和,图 4 为计算与验证的具体过程

图 6:头部校验和

 

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/14767.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年3月21日 下午10:57
下一篇 2024年3月22日 下午1:00

相关推荐

  • 如何完全卸载诺顿杀毒软件?

    作为一名电脑用户,我们都知道安装杀毒软件是保护电脑安全的必要措施。然而,有时候我们可能会遇到一些问题,比如想要更换杀毒软件或者卸载旧版杀毒软件。今天,我将为大家介绍如何完全卸载诺顿…

    问答 2024年4月3日
    0
  • msftesql.exe是什么文件?

    你是否曾经在使用电脑的过程中遇到过这个文件?它究竟是什么文件,又有什么作用?或许你已经听说过它的名字,但是对于它的具体信息却一无所知。今天,我们就来揭开这个神秘的面纱,探索的定义和…

    问答 2024年4月15日
    0
  • 华为达芬奇计划的发展历程及其影响力

    华为达芬奇计划,这个名字在近几年的网络行业中备受关注。它究竟是什么?它的发展历程又是怎样的?更重要的是,它给网络行业带来了怎样的影响力?今天,我们就来揭开这个神秘面纱,一起探索华为…

    问答 2024年3月28日
    0
  • 如何理解c语言指针的概念与使用方法?

    当谈及c语言,指针无疑是一个非常重要的概念。它是c语言中最为复杂和难以理解的部分,也是许多初学者头疼的难题。那么,什么是指针?它有什么作用?如何声明和初始化指针?如何使用指针?在本…

    问答 2024年4月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注