IP协议

网络层协议主要包含:IP协议、ARP(地址解析协议)、RARP(反向地址解析协议)和 ICMP(互联网控制消息协议)。今天将会讲解 IP 协议的功能,IP 数据报的解析以及 IP 分片。

IP 协议

IP协议功能

  • 寻址和路由
  • 传递服务
    • 不可靠,可靠性由上层协议提供
    • 无连接
  • 数据报分段和重组

寻址和路由:比如要从北京往南京发一封邮件,找到南京这个地方就叫寻址;北京到南京有好多条路线,选择走哪条路就叫路由。

传递服务:IP 协议是不可靠的,其可靠性由上层协议来保证,比如用 TCP 协议来保证。IP 协议就是尽最大努力来做事,不保证一定能做到。

数据报的分段是充足:从北京往南京发货物,货物比较大,一车装不下。那就要拆成好几个部分发送。到达目的地再把各个部件组合起来。

IP协议

IP 数据报由首部和数据部分组成。

字段比特作用
版本4 bitIP协议的版本,一般为 4,即 IPv4
首部长度4 bit1111 可表示的最大值为 15 单位, 1个单位4个字节,所以首部长度的最大值是60字节
服务类型8 bit用来获得更好的服务,以前一直没有被人们使用
总长度16 bit首部长度 + 数据长度,单位为字节,
因此数据报的最大长度为 2^16-1=65535 字节。
总长度 <= 最大传送单元 MTU
标识16 bit一个计数器,用来产生数据报的标识,同一段数据即使分片其标识任然是相同的
标志3 bit第1位,无意义
当 DF = 0 时,表示允许分片
当 MF = 1 时,表示后面“还有分片”。MF = 0 表示最后一个分片。
片偏移13 bit较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
生存时间8 bitTTL (Time To Live)表示数据报在网络中的生存时间,一般以以「跳数」为单位
协议8 bit字段指出此数据报携带的数据使用何种协议。以便目的主机的 IP 层将数据部分上交给哪个处理过程。
首部检验和16 bit字段只检验数据报的首部不包括数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
源地址4 bit发送数据的机器的 IP 地址
目的地址4 bit接收数据的机器的 IP 地址

注:其中标识、标志和片偏移和 IP分片相关。

设置 TTL 可以避免发生环路,避免网络资源的浪费。最开始 TTL 的计时单位是秒,现在一般使用跳数来表示,每经过一个路由器,这个值就会减少1,减到0的时候就会将这个报文丢弃。

IP 数据报首部的可变部分

  • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全 等措施,内容很丰富
  • 选项字段的长度可变,从 1 个比特到 32个比特不等,取决于所选择 的项目
  • 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销
  • 实际上这些选项很少被使用

IP 分片

IP分片

IP 数据报由首部和数据部分组成。数据部分存储我们要传输的数据,数据体积如果太大,就需要将其拆分开来,分成多次传输。这就是 IP 分片

在 TCP/IP 分层中,数据链路层用 MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节。

当发送的 IP 数据报的大小超过了 MTU 时,IP 层就需要对数据进行分片,否则数据将无法发送成功。

比如说我们用火车从北京向南京送一批苹果,这批苹果就相当于是 IP 数据报中的数据部分。

但是火车的承载容量有限,火车最多能装多少就相当于 MTU。

一车装不下,我们把这一批苹果分装到不同的火车上,这就相当于 IP 分片。

比如说上图中的数据大小为 3800 字节,将其分成三个数据包片:0~1399、1400~2799、2800~3799。

我们分片之后,我们还需要将其按照序号组装起来,如何组装就要通过 IP 数据报的首部来进行标记了。

IP协议

在 IP 首部中有 4 个字节是和 IP 分片相关的:

  1. 标识(identification) : 占 16 bit,其本质是一个计数器,用来产生数据报的标识,同一个数据报的各个分片的标识是一样的。
  2. 标志(flag):占 3 bit,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1
    1. R:目前只有后两个比特有意义。
    2. DF:Don’t Fragment,“不分片”位,DF=1表示不分片;
    3. MF:More Fragment,“更多的片”,除了最后一片外,其它每个组成数据报的片都要把比特置1
  3. 片偏移:占13 bit,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位,所以要除以8

参考:

IP分片浅析

TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值