当前位置: 首页 > news >正文

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

目录

解析步骤

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.数据区域

用来携带上层的数据。

相关文章:

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

目录 解析步骤 1.版本字段(大小:4比特位) 2.首部长度(大小:4比特位)(单位:4字节) 🍜细节解释: 3.服务类型(大小:8比特…...

给老系统做个安全检查——Burp SqlMap扫描注入漏洞

背景 在AI技术突飞猛进的今天,类似Cursor之类的工具已经能写出堪比大部分程序员水平的代码了。然而,在我们的代码世界里,仍然有不少"老骥伏枥"的系统在兢兢业业地发光发热。这些祖传系统的代码可能早已过时,架构可能岌…...

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…...

开源免费文档翻译工具 可支持pdf、word、excel、ppt

项目介绍 今天给大家推荐一个开源的、超实用的免费文档翻译工具(DeeplxFile),相信很多人都有需要翻译文档的时刻,这款工具就能轻松解决你的需求。 它支持多种文档格式翻译,包括 Word、PDF、PPT、Excel ,使…...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

【GORM学习笔记】GORM介绍以及增删改查相关操作

优缺点 优点:提高开发效率,防止SQL注入、对不熟悉SQL语句的人友好、代码统一缺点:牺牲执行能力、牺牲灵活性、弱化SQL能力 在一些小型项目上使用ORM可以大大提高开发效率,但是在一些对性能要求高得场景下,ORM可能没有…...

WebSocket在分布式环境中的局限性及解决方案

WebSocket 在分布式环境中存在一些局限性,特别是当系统需要扩展多个服务实例时,单个 WebSocket 连接的管理和消息推送就变得比较复杂。因此,必须采取一些额外的措施来确保 WebSocket 能在多个服务实例之间正确工作。 WebSocket 在分布式环境…...

SIM盾构建安全底座的可行性分析

一、背景 1.1安全需求现状 在数字化时代,信息安全面临着日益严峻的挑战。各类网络攻击手段层出不穷,如数据泄露、恶意软件攻击、网络诈骗等,给个人、企业和社会带来了巨大的损失。为了保障信息系统的安全性,需要构建一个可靠的安…...

【Java八股文】10-数据结构与算法面试篇

【Java八股文】10-数据结构与算法面试篇 数据结构与算法面试题数据结构红黑树说一下跳表说一下?LRU是什么?如何实现?布隆过滤器怎么设计?时间复杂度? 排序算法排序算法及空间复杂度 数据结构与算法面试题 数据结构 红…...

go 并发 gorouting chan channel select Mutex sync.One

goroutine // head&#xff1a; 前缀 index&#xff1a;是一个int的指针 func print(head string, index *int) {for i : 0; i < 5; i {// 指针对应的int *indexfmt.Println(*index, head, i)// 暂停1stime.Sleep(1 * time.Second)} }/* Go 允许使用 go 语句开启一个新的运…...

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载&#xff1a; https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上&#xff0c;你可以直接点击【model】 到达这个界面之后&#xff0c;…...

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

1、下载安装zookeeper 参考文章&#xff1a;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,还是报错解决方法&#xff1a;参考&#xf…...

策略模式Spring框架下开发实例

策略类Spring框架下开发实例 先列出策略模式下需要那些类: 策略接口 (Strategy)&#xff0c;定义所有策略类必须遵循的行为。 具体策略类&#xff08;如 ConcreteStrategyA、ConcreteStrategyB&#xff09;&#xff0c;实现不同的算法或行为。 上下文类 (Context)&#xff0c;…...

DeepSeek模型量化

技术背景 大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;&#xff0c;可以通过量化&#xff08;Quantization&#xff09;操作来节约内存/显存的使用&#xff0c;并且降低了通讯开销&#xff0c;进而达到加速模型推理的效果。常见的就是把Float16的浮…...

【练习】【回溯:组合:不同集合】力扣 17. 电话号码的字母组合

题目 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “2…...

分布式文件系统HDFS

一、HDFS简介 HDFS&#xff08; Hadoop Distributed File System &#xff09;&#xff0c;意为&#xff1a;Hadoop分布式文件系统。是Apache Hadoop核心组件之一&#xff0c;作为大数据生态圈最底层的分布式存储服务而存在。分布式文件系统解决大数据如何存储问题。分布式意味…...

从WebRTC到EasyRTC:嵌入式适配的视频通话SDK实现低延迟、高稳定性音视频通信

WebRTC最初是为浏览器之间的实时通信设计的&#xff0c;其资源需求和复杂性可能对嵌入式设备的性能提出较高要求&#xff0c;因此在嵌入式系统中应用时面临一些挑战&#xff1a; 1&#xff09;资源消耗较高 CPU和内存占用&#xff1a;WebRTC是一个功能强大的实时通信框架&…...

WordPress自定义排序插件:Simple Custom Post Order完全指南(SEO优化版)

在WordPress建站中&#xff0c;文章、分类目录或页面的默认排序方式往往无法满足个性化需求。WordPress自定义排序插件&#xff1a;Simple Custom Post Order插件&#xff0c;你可以轻松实现拖拽式自定义排序&#xff0c;无需修改代码即可优化内容展示逻辑。本文将详细介绍这款…...

docker安装ros2 并在windows中显示docker内ubuntu系统窗口并且vscode编程

这里包括docker desktop安装ros2 humble hawkshill , 安装xserver(用来在windows中显示ubuntu中窗口), vscode安装插件连接docker并配置python的一系列方法 1.安装xserver 为了能方便的在windows中显示ubuntu内的窗口,比如rqt窗口 参考文章:https://www.cnblogs.com/larva-zhh…...

【QT中的一些高级数据结构,持续更新中...】

QT中有一些很精妙、便捷的设计&#xff0c;在了解这些数据的同时&#xff0c;我们可以学到如何更好的设计代码。本贴持续更新中&#xff0c;欢迎关注和收藏 一 QScopedPointer主要特点&#xff1a;示例代码 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一种…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...