【Linux网络编程】IP协议格式,解包步骤

news2025/2/22 15:06:03

目录

解析步骤

1.版本字段(大小:4比特位)

2.首部长度(大小:4比特位)(单位:4字节)

🍜细节解释:

3.服务类型(大小:8比特位)

位TOS字段

4.数据报长度:总长度(大小:16比特)(单位:字节)

5.     16位标识(大小:16比特)

6.      3位标记(大小:3比特)

第1位

第2位(不分片标志位)(DF:don’t fragment)

第3位(更多分片标志位)(MF:more fragments)

7.   13位片偏移(大小:13比特)(单位:8字节)

8.   8位生存时间(TTL)

9.   8位协议

10.   16位首部校验和

11.   32位源IP,32位目的IP

12.数据区域


解析步骤

对于IP,每次先去看前二十个字节。也就是说这二十字节里面的东西是固定的,每个IP报头都是如此,不会改变。

前二十个字节就包含除了选项部分(如果存在)数据区域。选项部分的大小,数据区域的大小是可以改变的。

然后选项的有无,数据区域的大小根据首部长度,数据报长度(总大小,单位字节)推算出来。

也就是下面的推算关系。

选项首部长度
数据区域大小数据报长度减去手部长度

1.版本字段(大小:4比特位)

IP的版本现在有IPv4还有IPv6。

所以这四位要么是4(二进制为:0100),要么是6(二进制为:0110)。

所以每个IP地址前面要么填0100(表示IPv4),要么填0110(表示IPv6)。

题外话:

虽然IPv6比IPv4要好,但是目前主要还是IPv4。

IPv6在我国发展的比较好,IPv4的主导是外国的,IPv4和操作系统有关,操作系统也是外国主导的。所以IPv4不可能迅速变更到IPv6。


2.首部长度(大小:4比特位)(单位:4字节)

首部长度主要是去看选项的,看有没有选项,如果有选项,选项的大小又是多少?

首部长度------》选项有无,选项大小

🍜细节解释:

首部长度是占四个比特位的,表示的范围是0~15。但是最起码报头都有20字节,那么这是怎么表示的呢?

原来首部长度的的单位是4字节。

所以现在能表示的范围就是0~15*4=60字节所以最大就能表示60字节了。

60字节,减去固定的20字节,那么选项的最大就是占40字节。(二进制首部长度:1111)

最起码要20字节。(二进制首部长度:0101)


3.服务类型(大小:8比特位)

前3位是优先级字段,已经废用。

然后就是4位TOS字段+最后一位保留字段。最后的保留字段被设置为0.

位TOS字段

🍛第1位:最小延迟。

🍛第2位:最大吞吐量。

🍛第3位:最高可靠性。

🍛第4位:最低成本。

上面的最小延迟,最高可靠性,最低成本基本都能理解。那就解释一下最大吞吐量。

最大吞吐量是描述网络状态的。单位时间内传输的数据量。单位是比特/s,字节/s,或者每秒数据包数。


4.数据报长度:总长度(大小:16比特)(单位:字节)

这里的单位是字节,在报头长度那里的单位是4字节。

最大能表示65,535字节(16位无符号整数的最大值)。

然后减去报头的最大值(60字节),所以数据区域的最大值就是(65475字节)。

这个被设计就是来看数据区域有多大。因为会有很多个IP,有粘包问题。为了让每个IP都能被正确解包,就要看数据区域有多大。


5.     16位标识(大小:16比特)

IP协议允许数据报进行分片。

在数据链路层,IP可能会被分片。去适应链路的最大传输单位(MTU)。

然后在对方网络层的时候,要能合并,就要进行区分哪些时一起的,然后进行拼接。


6.      3位标记(大小:3比特)

第1位

目前还没有被使用,被设置为0。

第2位(不分片标志位)(DF:don’t fragment)

如果是1,就表示数据报不能进行分片。如果数据报超过了链路的最大传输单位(MTU),这时候就会给发送方反馈数据报过大的信息。

如果是0,就表示数据报能被分片。

第3位(更多分片标志位)(MF:more fragments)

如果是1,表示后面还有很多的分片。

如果是0,表示是这个数据报的最后一个分片。


7.   13位片偏移(大小:13比特)(单位:8字节)

当IP数据报进行分片以后,在对方IP进行合并的时候,就要知道这是该数据报的哪一个部分。应该拼接在哪里,从哪里开始拼接。

用偏移量也能达到这个目的。

13位偏移量的单位是8字节。所有每个都是8的整数倍。


8.   8位生存时间(TTL)

实现是一个计数器,当计数器值为0,就丢弃这个IP数据报。并向发送方回馈超时信息。

每次经过一个路由器,它的值就会减1。

这个设计避免了网络环回的问题。因为如果网络换回,数据报一直在路由器之间跳来跳去,一直没有结束,也到不了目标主机。就会影响网络。

WIndows系统一般设置为128.

Linux系统Unix一般设置为64.


9.   8位协议

它的作用就是来区分上层用的什么协议,TCP还是UDP还是ICMP。

TCP为6,UDP是17,ICMP(1)。


10.   16位首部校验和

这个是看IP数据报头在传输的过程中是否发送错误。

它是采用反码求和的方式。如果对方把接受的报头反码求和,看是不是等于这个数,如果对得上,就基本是对的。

它的具体计算方式是:

每个16位比特为一组,然后反码求和。


11.   32位源IP,32位目的IP

用来表示发生方的IP,和接受方的IP。

标识发送方和接收方。

这个也不难理解。有了源IP,目的IP,就能进行路径选择

  • A类0.0.0.0127.255.255.255):用于大型网络。

  • B类128.0.0.0191.255.255.255):用于中型网络。

  • C类192.0.0.0223.255.255.255):用于小型网络。

  • D类224.0.0.0239.255.255.255):用于多播。

  • E类240.0.0.0255.255.255.255):保留用于未来使用


12.数据区域

用来携带上层的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 位图字体

下载Bitmap Font Generator BMFont - AngelCode.com 解压后不用安装直接双击使用 提前设置 1、设置Bit depth为32 Options->Export options 2、清空所选字符 因为我们将在后边导入需要的字符。 Edit->Select all chars 先选择所有字符 Edit->Clear all chars i…

Linux 网络与常用操作(适合开发/运维/网络工程师)

目录 OSI 七层协议简介 应用层 传输层 Linux 命令!!! 1. ifconfig 命令 简介 1. 查看网络地址信息 2. 指定开启、或者关闭网卡 3. 修改、设置 IP 地址 4. 修改机器的 MAC 地址信息 5. 永久修改网络设备信息 2. route 路由命令 …

linux 安装启动zookeeper全过程及遇到的坑

1、下载安装zookeeper 参考文章:https://blog.csdn.net/weixin_48887095/article/details/132397448 2、启动失败 1、启动失败JAVA_HOME is not set and java could not be found in PATH 已安装 JAVA 配置了JAVA_HOME,还是报错解决方法:参考&#xf…

MySQL数据库——表的约束

1.空属性(null/not null) 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法…

ArcGIS Pro进行坡度与坡向分析

在地理信息系统中,坡度分析是一项至关重要的空间分析方法,旨在精确计算地表或地形的坡度,为地形特征识别、土地资源规划、环境保护、灾害预警等领域提供科学依据。本文将详细介绍如何利用ArcGIS Pro这一强大的地理信息系统软件,进…

【MySQL常见疑难杂症】MySQL数据库底层图例

● Connectors(连接者)​:指的是不同语言中与SQL的交互,从图3-1中可以看到目前流行的语言都支持MySQL客户端连接。 ● Connection Pool(连接池)​:管理缓冲用户连接、线程处理等需要缓存的需求。…

谈谈对线程的认识

面对这样的一个多核CPU时代, 实现并发编程是刚需. 多进程实现并发编程, 效果是特别理想的. 但是, 多线程编程模型有一个明显的缺点, 就是进程太重了, 效率不高. 创建一个进程, 消耗时间比较多. 销毁一个进程, 消耗时间也比较多. 调度一个进程, 消耗时间也比较多. 这里的时…

无人机遥控器接口作用详解!

USB接口: 功能:USB接口是一种通用串行总线接口,用于连接外部设备,如手机、平板、电脑或充电设备。在无人机遥控器上,USB接口通常用于数据传输和充电。 应用:用户可以通过USB接口将遥控器与电脑连接&#…

【数据分析】1 认识数据分析

一、课程核心内容结构 1. 课程定位 商业数据分析导论课:旨在为初学者奠定扎实的基础,介绍数据分析的基本概念、方法和应用场景。后续模块:包括职业发展路径、技能要求等深入内容,帮助学习者规划未来的职业道路。目标群体&#x…

ASP.NET Core 简单文件上传

使用异步 JavaScript 和 XML(AJAX)进行简单的文件上传;用 C# 编写的服务器端代码。 使用AJAX和ASP.NET Core MVC上传文件再简单不过了。这不依赖于jQuery。此代码允许上传多个文件,并与 .NET Core 3.1、.NET 6和.NET 8兼容。 如果…

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言:金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时,其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中,量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型(14B、32B)全过程与测试结果。 NPU:910B3 (65GB) * 8 (910B 有三个版本 910B1、2、3) 模型:DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

Selenium实战案例2:东方财富网股吧评论爬取

上一篇文章,我们使用Selenium完成了网页内文件的自动下载,本文我们将使用Selenium来爬取东方财富网股吧内笔记的评论数据。 网页内容分析 网页内容的分析是web自动化中的关键一步。通过分析网页结构,我们可以确定需要抓取的数据位置以及操作元素的方式。…

webmin配置终端显示样式,模仿UbuntuDesktop终端

webmin配置终端显示样式,模仿UbuntuDesktop终端 在webmin中,默认情况下是没有图形化桌面的,因此终端界面也不会像 Ubuntu Desktop 那样有预设的紫色背景和颜色主题。不过,你可以通过修改 ~/.bashrc 文件,并结合安装和…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通:成立于 2000 年…

OutOfMemoryError unable to create new native thread

现象 生产环境大量的报OutOfMemoryError: unable to create new native thread Caused by: java.lang.OutOfMemoryError: unable to create new native threadat java.lang.Thread.start0(Native Method) [na:1.8.0_291]at java.lang.Thread.start(Thread.java:717) [na:1.8.…

探索无网用Deepseek+qwen来助力Solidworks二次开发

在本教程中,我们将详细介绍如何在本地环境中使用 DeepSeek 和 Qwen 模型,结合 AnythingLLM,构建一个用于 SolidWorks 二次开发的私有化智能知识库。 目录 前言 环境准备 2.1 安装 Ollama 2.2 安装 Docker Desktop DeepSeek 本地部署 3.1…

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型(LLM)本地运行框架,旨在简化大模型的部署和管理流程,使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac

ResponseUtil.out 方法分析

文章目录 1. 问题背景2. ResponseUtil.out 方法分析a. 方法功能b. 序列化过程c. 注解 JsonInclude(JsonInclude.Include.NON_NULL) 的作用 3. Java 对象如何被序列化为 JSON4. 序列化的时机5. 谁操作序列化6. 自动序列化的条件7. 总结8. 可能的问题和注意 1. 问题背景 在 Admi…