Linux网络 | 网络层IP报文解析、认识网段划分与IP地址
前言:本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外, 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说, 开始我们的学习吧!!
ps:本节正式进入网络层喽, 友友们传输层理解了吗?
目录
认识IP协议
IP协议的报头
报头和有效载荷如何分离
四位版本
八位服务类型
十六位总长度
32位源IP和32位目的IP
网段划分
网络号主机号
子网掩码
特殊的IP地址
分析IP地址不足问题
私有IP和公有IP
ifconfig查看IP地址
认识IP协议
之前已经能做到,将数据从上层拷贝到tcp缓冲区当中,这个是应用层要做的事情。然后我们也能在传输层进行传输控制,比如提供可靠性策。但是真正进行传输,真正进行办事的其实是网络层,也就是IP协议。所以,IP协议的本职工作:提供一种能力,将数据跨网络从A主机送到B主机。
同时,用户也需要这种能力:将数据可靠的跨网络从A主机送到B主机。
看下面一张图,利用学生学习的例子来理解一下IP的工作:

我们的信息从一台主机发送到另一台主机,要经过很多路由器,所以就要对这些主机进行标识。对源IP地址和目的IP来标识源主机和目的主机。
IP地址就类似于唐僧西天取经,有目标城市,有目标地址,还有目标人物。

实际上任何一个主机都是在一个子网当中的,假如下面的圆圈就是子网,下面的放框框就是一个一个的路由器。菱形就是子网中一个一个的主机。假如说有一个主机A想要将数据发送到B主机。

既然要发送,那么就一定要跨越很多的路由器子网。这就是路由器转发。转发的过程中,一定是先到达目标网络(IP地址的构成 = 目标网络 + 目标主机),即目标主机所在的局域网。然后再交给目标主机。
其实,这个IP地址就类似于学号。我们的学号是不是被精心涉及过的,是不是有类似于:学员编号 + 专业编号 + 班级编号 + 学生序号?这个学号我们可以简化一下:学号 = 学院 + 序号
如下图是学院编号:

然后每个学院都有自己的编号,比如001, 002等。 所以组合起来,就比如计算机学院的001号学生。所以学号就是111001。
假如我是计算机的,假如我今天找到了一个钱包, 这个钱包不知道是谁的,只有一个学号,比如说115008。那么我们就去食堂一个一个的问,看看是谁的。这个问的过程,就是查找。 而查找的本质是排除。这个一个一个问本质是线性遍历,效率太低。
所以我就想到了学生会主席,学生会主席就是管理这个的,所以,我今天就将这个钱包拍了照片,让学生会主席去办事。所以,学生会主席就将钱包拿到一看,是115开头。说明是电气的,所以学生会主席就将钱包拿到了电器那边。让电气的学生会主席将钱包给他们学院的学生。
这个故事里面,钱包就是数据。 我就是主机A,那个丢钱包的就是主机B。 然后学生会主席就是路由器。主机A将钱包发给计算机的路由器,计算机的路由器将钱包发给电气的路由器。 电气的路由器再把钱包发给主机B。
为什么这个过程找到目标主机变快了呢。一这是因为主机A把数据给计算机路由器,是把计算机学院里面的所有主机全部淘汰了,一下子就淘汰了一群人。然后计算机路由器是把所有的路由器中的其他路由器淘汰了。直接找到电气路由器。电气路由器又是把电气学院的所有主机都淘汰了一下子找到了主机B。查找的本质是排除,所以这个方法,是淘汰的速度变快了。
所以,IP = 目标网络 +目标主机。 本质上是为了让定位更加快速。
IP协议的报头
报头和有效载荷如何分离
IP协议报头和有效载荷分离的方法就是:固定长度+自描述字段
这个固定长度就是四位首部长度。 假设四位首部长度的大小是x,那么x*4 = 真实报头。所以如果标准报头是20个字节,那么这个四位首部长度最少就是5。最多是二进制全1,即15。上面的自描述字段其实就是十六位总长度字段(后面讲解)。
到时候就是IP协议的报头(除去选项)的长度固定20字节。 只拿四位首部长度的部分和十六位总长度的部分。就能将报头和有效载荷进行分离。
四位版本
对于IPv4来说,就是4位版本。
随着入网设备的增多,IPv4已经不足了。所以解决方案就有:NAT技术、IPv6。但是从根本上解决问题还是lpv6。只不过IPv6和IPv4是完全不兼容的。所以上面这是IPv4的报文。IPv6是128个比特位。
八位服务类型
3位优先级,四位TOS字段。和1位保留字段。四位TOS字段就表示:最小延时、最大吞吐量、最高可靠性、最小成本。
十六位总长度
报文的总长度。这个十六位总长度 + 4位首部长度就叫做自描述字段。UDP和TCP最终都要把数据交给IP层。无论是字节流还是数据报,所有的报文在IP层其实都是一个一个的数据报。所以,所谓的面向字节流的概念,只是TCP层以上的概念,不是IP层的概念。
32位源IP和32位目的IP
我们以前连接服务器,我们要使用IP地址和port。 本质上其实就是socket套接字要用到port和IP地址。为什么?
为什么需要这两个数字,因为这两个数字就能定位我们的目标主机。其中TCP报头里面填充的是port,IP报头里面填充的是IP地址。——这就是为什么要将点分十进制ip转化为四字节。因为IP报头的源IP和目的IP是四个字节。所以当一个IP报文扔到网络里面的时候,真正要支持路由的其实是根据我们的32位目的IP地址来进行路径选择的。
在我们真正的通信过程之中,中间的路由器是没有TCP层的,只有双方主机是有TCP层的。(可以有,但是不需要,因为路由器只工作在网络层。)
网段划分
网段划分我们要分成两个部分进行理解。 这里先认识一下网段划分。
网络号主机号
其实IP地址分为两部分,网络号和主机号。
网络号:保证相互连接的两个网段具有不同的标识;
主机号:同一个网段内,主机之间具有相同的网络号,但是必须有不同的主机号 。
这两个号是什么意思,就类似于学号 = 学院号 + 学生序号。网络号就是当前的局域网的编号,主机号就是代表这台主机在局域网当中的序号。 所以,IP地址由两部分组成,以后拿到IP地址,就将IP作为两部分来看待,网络号 + 主机号。这里我们就要认识下面这几点:
1、路由器本质也是特定一个子网的主机,也要配置IP地址。
2、路由器一定至少要连接2个子网,所以路由器也就相当于同时在两个子网。路由器那么就可以配置多个IP,并且一定会有多个IP。至少两个。——这里我们认为路由器有多张网卡就可以了。
3、路由器一般是一个子网中的第一台设备,一般他的IP地址都是:网络号 + 1。 (大部分都是,但是有特殊情况)
4、路由器的功能是IP报文的转发,但是并不仅仅如此。一个路由器还有很多功能,其中一个就是:构建子网(局域网)。
其实不同的子网就是把网络号相同的主机放到一起。
如果子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。
子网掩码
IPv4是32位,其实就是2^32 = 42亿+。 ——》所以IP地址就是一种有限的资源。
因为是有限的资源,那么IP地址就要很好的管理起来。所以IP地址就被分为了网络地址和主机地址。 其实以前有一种分类方法是五类划分法。就是有ABCDE类。

但是这种划分方式的缺点很快就显现出来了。大部分组织都申请B类网络地址,导致B类地址很快就分配完了。 并且其中这16位主机号根本就用不完,所以就造成了大量的浪费。
针对这种浪费的情况,就提出了一种新的方案:子网掩码。叫做CIDR。
子网掩码也是一个32位正整数,通常用一串“0"来结尾。左侧以"1"开始。将IP地址和子网掩码进行“按位与“操作,得到的结果就是网络号。网络号和主机好的划分与这个IP地址是A类、B类还是C类无关。
怎么用呢,就比如此时IP地址是140.252.20.68,子网掩码是255.255.255.0。
那么得到的网络号就是两个进行按位与。 得到140.252.20.0,所以子网的范围就能知道了是140.252.20.0~140.252.20.255。
其中有两个IP地址不用,.0和.255。意思就是开区间。 140.252.20.0我们叫做网络号,140.252.20.255我们称为广播。
如果子网掩码是255.255.255240,那么得到的网络号就是140.252.20.64。这个就是网络号,即:140.252.20(十进制).0100 0000(二进制)。那么IP地址的范围就是:140.252.20.11110000~140.25220.0100 1111。所以,子网掩码,可以对IP32位,进行任意的划分。
特殊的IP地址
主机号全零是局域网;全1是广播。 127.0.0.1为本地环回。
分析IP地址不足问题
CIDR一定程度上缓解了IP地址的不足。 但是并没有增加IP地址的上限。上面谈到的策略是分类+子网掩码。
所以就有了两种解决IP地址不足的方法:
- 动态IP地址分配:就是我们的电脑不想上网的时候,电脑是没有IP地址的。 当想要入网的时候,就要先连接家里的路由器,然后路由器就动态分配了一个IP地址(这个是NAT技术, 后面讲解)。
- IPv6:真正的提高了上限。但是与IPv4严重不兼容。其实IPv6现在已经做的很好了,但是现在世界上为什么还是很少使用IPV6呢?因为TCP、IP协议栈是在操作系统内部的,意味着如果要将IPV4改编成IPV6,那么就要把世界上所有的终端设备全部切换成IPv6。给全世界上所有的操作系统换成IPV6,这个是不现实的。但是,如果使用IPV6的用户多于使用IPv4的用户时,那么就能改变lpv6的使用格局。我国是IPV6使用的最好的,当年零八年奥运会长内网就是使用的IPV6,要知道,我国的物联网也是非常发达的,一个地区的网络发达程度取决于什么?取决于用户,用户,说到底就是入网设备。以后智能设备一旦发展起来,那么入网设备将会大幅度增加。谁掌握的入网设备范围广,多,谁在网络领域就有话语权。所以,我国一旦将物联网的设备发展起来,什么只能电气,智能家居啥啥,那么哪个国家的入网备能比过中国?没有,而且我们平时是不是看到时那些大型的互联网公司,有些网站下面是不是都写着一个某某某支持IPV6技术,其实就是我国规定的,要让我们国家的所有入网设备全部支持IPV6技术,到时候物联网起来,就能快速更换成IPV6。就迅速拥有了天数的网民。
私有IP和公有IP
如果一个组织内部组件局域网,只用于局域网内的通信,而不是直接连接到Internet上面,使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址。
- 前八位是10的,全部都只能用来组建私网。172.16 到172.31,全部都只能用来组建私网。192.168开头,全部都只能用来组建私网。
- 其余的用来构建公网。
ifconfig查看IP地址



——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!
相关文章:
Linux网络 | 网络层IP报文解析、认识网段划分与IP地址
前言:本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外, 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说, 开始我们的学习吧!! ps:本节正式进入网络层喽, 友友们…...
服务器虚拟化实战:架构、技术与最佳实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分,通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…...
(leetcode 213 打家劫舍ii)
代码随想录: 将一个线性数组换成两个线性数组(去掉头,去掉尾) 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...
[C语言日寄] <stdio.h> 头文件功能介绍
在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...
一文读懂 Faiss:开启高维向量高效检索的大门
一、引言 在大数据与人工智能蓬勃发展的当下,高维向量数据如潮水般涌现。无论是图像、音频、文本,还是生物信息领域,都离不开高维向量来精准刻画数据特征。然而,在海量的高维向量数据中进行快速、准确的相似性搜索,却…...
【二叉搜索树】
二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它具有以下特征: 若它的左子树不为空,则…...
R语言统计分析——ggplot2绘图5——拟合光滑曲线
参考资料:R语言实战【第2版】 ggplot2包可以通过计算统计函数并添加到图形中。例如:分级数据、计算密度、轮廓和分位数等。这里我们重点将添加平滑曲线(线性、非线性和非参数)到散点图中。 我们可以使用geom_smooth()函数来添加一…...
疯狂拆单词01
疯狂拆单词01 有些单词是可以拆的,不,是可以反复拆的,拆着拆着,你的词汇量,就能快速飙升: 【】disappointment disappointment n.失望,沮丧,扫兴 (ment-名缀࿰…...
高效学习方法分享
高效学习方法分享 引言 在信息高速发展的今天,学习已经成为每个人不可或缺的一部分。你是否曾感到学习的疲惫,信息的爆炸让你无从下手?今天,我们将探讨几种高效的学习方法,帮助你从中找到适合自己的学习之道。关于学…...
01.双Android容器解决方案
目录 写在前面 一,容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups(Control Groups) 1.1.3 联合文件系统(Union File System) 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署(CI/…...
一文大白话讲清楚webpack进阶——9——ModuleFederation实战
文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...
Mysql意向锁
这里写目录标题 前置问题概念作用兼容互斥性总结 前置问题 首先我们需要问自己什么是意向锁? 为什么要有意向锁? 意向锁如何使用? 概念 mysql官网上对于意向锁的解释中有这么一句话 The main purpose of IX and IS locks is to show that …...
输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
input_strinput("请输入一行字符: ") letter0 #表示英文字母的个数 space0 #表示空格的个数 digit0 # 表示数字的个数 others0 #表示其它字符的个数for char in input_str:if char.isalpha(): #判断字符char是否字母letter1elif char.isspace(): # 判断是否空格space…...
AD电路仿真
目录 0 前言 仿真类型 仿真步骤 仿真功能及参数设置 仿真模型 应用优势 1 新建原理图 2 放置元器件及布线 3 放置探头 4 实验结果 Operating Point 分析的作用 DC Sweep 的主要功能 Transient Analysis 的主要功能 AC Analysis 的功能 5 总结 1. 直流工作点分析…...
vim 中粘贴内容时提示: -- (insert) VISUAL --
目录 问题现象:解决方法:问题原因: 问题现象: 使用 vim 打开一个文本文件,切换到编辑模式后,复制内容进行粘贴时有以下提示: 解决方法: 在命令行模式下禁用鼠标支持 :set mouse …...
Redis_Redission的入门案例、多主案例搭建、分布式锁进行加锁、解锁底层源码解析
目录 ①. Redis为什么选择单线程? ②. 既然单线程这么好,为什么逐渐又加入了多线程特性? ③. redis6的多线程和IO多路复用入门篇 ④. Redis6.0默认是否开启了多线程? ⑤. REDIS多线程引入总结 ①. Redis为什么选择单线程? ①…...
ZZNUOJ(C/C++)基础练习1021——1030(详解版)
目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 (C语言版,三目运算)C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...
力扣116. 填充每个节点的下一个右侧节点指针
Problem: 116. 填充每个节点的下一个右侧节点指针 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 本题目的难点在于对于不同父节点的邻接问题因此我们可以抽象将两两节点为一组(不同父节点的两个孩子节点也抽象为一组)…...
寒武纪MLU370部署deepseek r1
文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能,在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术,仅需少量标注数据即可显著提升模型性能,为大模…...
Python NumPy(10):NumPy 统计函数
1 NumPy 统计函数 NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 1.1 numpy.amin() 和 numpy.amax() numpy.amin() 用于计算数组中的元素沿指定轴的最小值。 numpy.amin(a, axisNone, outNone, keep…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
