IPv4分组

news/2024/11/8 15:15:37/

4.3.1 IPv4分组

IP协议定义数据传送的基本单元——IP分组及其确切的数据格式

1. IPv4分组的格式

IPv4分组由首部和数据部分(TCP、UDP段)组成,其中首部分为固定部分(20字节)和可选字段(长度可变,用于提供错误检测及安全等机制)

1)版本:指IP协议的版本

2)首部长度:占4位,可以表示最大的数为15。以32位为单位,最大值为60B(32 * 15 / 8 = 64B),最常用的首部长度是20B,最小为数字5即(0101),因此取值范围为(0101 ~ 1111)

3)总长度:占16位,指首部和数据之和长度单位为字节,因此IP数据报的最大长度为 2 16 − 1 = 65535 B 2^{16} - 1 = 65535B 2161=65535B,以太网帧的最大传送单元(MTU)为1500B(IP数据报的长度不能超过此值)

4)标识:占16位,它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。

5)标志:占3位,标志字段最低位为MF,等于1表示后面还有分片,0表示最后一个分片,标志位中间一位为DF,当其为0时才允许分片

6)片偏移:占13位,它指出较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8个字节为偏移单位。除最后一个分片外,每个分片的长度一定是8B的整数倍

7)生存时间(TTL):占8位,数据报在网络中可通过的路由器数的最大值,为了确保帧不会永远在网络中循环,路由器在转发分组前,先把TTL减1。 若TTL被减为0,则该分组必须丢弃。

8)协议:占8位,指出此分组携带的数据使用何种协议(其中TCP协议为6,UDP协议为17)

9) 首部校验和:占16位。首部校验和只校验分组的首部,而不校验数据部分

10)源地址字段:占4B,标识发送方的IP地址

11) 目的地址字段:占4B,标识接收方的IP地址

在这里插入图片描述

首部长度、总长度、片偏移,基本单位 分别为4B、1B、8B

2. IP数据报分片

一个链路层数据报能承载的最大数据量称为最大传送单元(MTU)

当IP数据报的总长度大于链路MTU时,就需要将 IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报称为

目的主机上,使用IP首部中的标识、标志、片偏移来完成对的组装

原理:

  • 在将数据报进行分片时,形成的每个数据报(片)都具有原始数据报的标识号。因此收到数据后,IP首部的标识相同就说明这些数据属于同一个原始数据报的片
  • IP首部中的标志位占3位,但只有后2位有意义,分别是MF位(More Fragment) 和DF位(Don’t Fragment),DF = 0表示该IP数据报才可以被分片MF则用来告知目的主机该IP数据报是否为原始数据报的最后一个片。当MF= 1表示相应的原始数据报还有后续的片;当MF = 0表示该数据报是相应原始数据报的最后一个片
  • 使用片位移字段来确定该片应该在原始数据报的哪个位置

进行分片时,除了最后一个片,其他所有片的有效数据载荷都是8B的倍数
计算片偏移时,第一个片的片偏移为0,其往后每个片偏移的值为其起始值除以8B


http://www.ppmy.cn/news/1031518.html

相关文章

SpringCloud Alibaba——Nacos1.x配置中心长轮询机制

目录 一、Nacos1.x配置中心长轮询机制二、Nacos1.x配置中心长轮询机制流程图解 一、Nacos1.x配置中心长轮询机制 客户端会轮询向服务端发出一个长连接请求,这个长连接最多30s就会超时,服务端收到客户端的请求会先判断当前是否有配置更新,有则…

用Python实现百度AI接口对接,让你的程序更聪明

用Python实现百度AI接口对接,让你的程序更聪明 百度AI接口提供了丰富的人工智能服务,包括图像识别、文字识别、语音识别等功能。通过对接这些接口,我们可以让我们的程序具备更加智能的能力。本文将以Python为例,介绍如何使用百度AI接口实现一些常见的功能。 首先,我们需…

基于Java+SpringBoot+Vue的网吧管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

如何切换goland之中的版本号(升级go 到1.20)

go 安装/版本切换_go 切换版本_云满笔记的博客-CSDN博客 用brew就行: echo export PATH"/opt/homebrew/opt/go1.20/bin:$PATH" >> ~/.zshrc

如何将项目挂后台运行?【nohup和tmux】

挂后台运行,防止霸屏。 线上的程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息。 一.nohup--挂后台运行的命令 //nohup--英文全称no hang up,可以后台运行指定命令 //hello.log是指将日志输出到hello.log文件 …

vue返回上一页并传递参数

需求:从A页面跳转到B页面,从B页面再返回至A页面,并传递参数。 1、使用sessionStorage或者localStorage B页面返回之前将数据放置在sessionStorage里面 sessionStorage.setItem(searchKeyword, JSON.stringify({ fundname: 易方达基金, fun…

JVM内存管理

文章目录 1、运行时数据区域1.1 程序计数器(线程私有)1.2 JAVA虚拟机栈(线程私有)1.3 本地方法栈1.4 Java堆(线程共享)1.5 方法区(线程共享)1.6 直接内存(非运行时数据区…

Airbnb开源数据可视化工具Visx

一、什么是visx visx 是用于 React 的富有表现力的底层可视化组件集合,结合了 d3 的强大功能来生成可视化,以及 React 更新 DOM 的诸多优势。 在 Airbnb 内部,visx 的目标是统一整个公司的可视化堆栈,在此过程中,创建了 visx 项目,从而有效的将 D3 的强大功能与 React …