Linux网络 | 网络层IP报文解析、认识网段划分与IP地址

news2025/2/2 2:00:57

        前言:本节内容为网络层。 主要讲解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地址

——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!     

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

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

相关文章

2025年大年初一篇,C#调用GPU并行计算推荐

C#调用GPU库的主要目的是利用GPU的并行计算能力,加速计算密集型任务,提高程序性能,支持大规模数据处理,优化资源利用,满足特定应用场景的需求,并提升用户体验。在需要处理大量并行数据或进行复杂计算的场景…

python算法和数据结构刷题[2]:链表、队列、栈

链表 链表的节点定义: class Node():def __init__(self,item,nextNone):self.itemitemself.nextNone 删除节点: 删除节点前的节点的next指针指向删除节点的后一个节点 添加节点: 单链表 class Node():"""单链表的结点&quo…

Baklib解析内容中台与人工智能技术带来的价值与机遇

内容概要 在数字化转型的浪潮中,内容中台与人工智能技术的结合为企业提供了前所未有的发展机遇。内容中台作为一种新的内容管理和生产模式,通过统一管理和协调各种内容资源,帮助企业更高效地整合内外部数据。而人工智能技术则以其强大的数据…

Flask框架基础入门教程_ezflaskapp

pip install flaskFlask 快速入门小应用 学东西,得先知道我们用这个东西,能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子: from flask import Flask app Flask(__name__)app.route(/) def hello_world():ret…

黑马点评 - 商铺类型缓存练习题(Redis List实现)

首先明确返回值是一个 List<ShopType> 类型那么我们修改此函数并在 TypeService 中声明 queryTypeList 方法&#xff0c;并在其实现类中实现此方法 GetMapping("list")public Result queryTypeList() {return typeService.queryTypeList();}实现此方法首先需要…

洛谷P4057 [Code+#1] 晨跑

题目链接&#xff1a;P4057 [Code#1] 晨跑 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及一 题目分析&#xff1a;这道题很明显是求最大公倍数&#xff0c;写题解是为了帮助自己复习。 下面用两种方法介绍如何求最大公倍数&#xff1a; 暴力破解 #include<bits…

讯飞绘镜(ai生成视频)技术浅析(四):图像生成

1. 技术架构概述 讯飞绘镜的图像生成技术可以分为以下几个核心模块: 文本理解与视觉元素提取:解析脚本中的场景描述,提取关键视觉元素(如人物、场景、物体等)。 视觉元素生成:根据文本描述生成具体的视觉元素(如人物、场景、物体等)。 分镜画面生成:将视觉元素组合成…

FreeRTOS从入门到精通 第十五章(事件标志组)

参考教程&#xff1a;【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 &#xff08;1&#xff09;事件标志位是一个“位”&#xff0c;用来表示事件是否发生。 &#xff08;2&#xff09;事件标志组是一组事件标志位的集合&#x…

使用Pygame制作“俄罗斯方块”游戏

1. 前言 俄罗斯方块&#xff08;Tetris&#xff09; 是一款由方块下落、行消除等核心规则构成的经典益智游戏&#xff1a; 每次从屏幕顶部出现一个随机的方块&#xff08;由若干小方格组成&#xff09;&#xff0c;玩家可以左右移动或旋转该方块&#xff0c;让它合适地堆叠在…

deepseek大模型本机部署

2024年1月20日晚&#xff0c;中国DeepSeek发布了最新推理模型DeepSeek-R1&#xff0c;引发广泛关注。这款模型不仅在性能上与OpenAI的GPT-4相媲美&#xff0c;更以开源和创新训练方法&#xff0c;为AI发展带来了新的可能性。 本文讲解如何在本地部署deepseek r1模型。deepseek官…

常见“栈“相关题目

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 目录 1047.删除字符串中的所有相邻重复项 844.比较含退格的字符串 227.基本计算器 II 394.字符串解码 946.验证栈序列 104…

QT实现有限元软件操作界面

本系列文章致力于实现“手搓有限元&#xff0c;干翻Ansys的目标”&#xff0c;基本框架为前端显示使用QT实现交互&#xff0c;后端计算采用Visual Studio C。 本篇将二维矩形截面梁单元&#xff08;Rect_Beam2D2Node&#xff09;组成的钢结构桥作为案例来展示软件功能。 也可以…

软件工程经济学-日常作业+大作业

目录 一、作业1 作业内容 解答 二、作业2 作业内容 解答 三、作业3 作业内容 解答 四、大作业 作业内容 解答 1.建立层次结构模型 (1)目标层 (2)准则层 (3)方案层 2.构造判断矩阵 (1)准则层判断矩阵 (2)方案层判断矩阵 3.层次单排序及其一致性检验 代码 …

Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别

Go语言中的流程控制语句逻辑结构与其他编程语言类似&#xff0c;格式有些不同。Go语言的流程控制中&#xff0c;包括if、switch、for、range、goto等语句&#xff0c;没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句&#xff08;不常用…

14-8C++STL的queue容器

一、queue容器 (1)queue容器的简介 queue为队列容器&#xff0c;“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…

【B站保姆级视频教程:Jetson配置YOLOv11环境(四)cuda cudnn tensorrt配置】

Jetson配置YOLOv11环境&#xff08;4&#xff09;cuda cudnn tensorrt配置 文章目录 0. 简介1. cuda配置&#xff1a;添加cuda环境变量2. cudnn配置3. TensorRT Python环境配置3.1 系统自带Python环境中的TensorRT配置3.2 Conda 虚拟Python环境中的TensorRT配置 0. 简介 官方镜…

信号模块--simulink操作

位置simulink/sourses 常用的模块 功能&#xff1a;常数模块&#xff0c;提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置&#xff08;例三维数据设置&#xff09; 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度&#xff0c;0到…

强化学习笔记(3)——基于值函数的方法和策略梯度方法

分为两大类方法&#xff1a; 基于值函数的方法&#xff08;Temporal Difference Methods, TD Methods&#xff09; 策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。 二者不同之处&#xff1a; 通过值函数来间接表达隐式的策略&#xff0c;一个是直接迭代优化策…

新年新挑战:如何用LabVIEW开发跨平台应用

新的一年往往伴随着各种新的项目需求&#xff0c;而跨平台应用开发无疑是当前备受瞩目的发展趋势。在众多开发工具中&#xff0c;LabVIEW 以其独特的图形化编程方式和强大的功能&#xff0c;为开发跨平台应用提供了有效的途径。本文将深入探讨如何运用 LabVIEW 开发能够在不同操…

事务04之死锁,锁底层和隔离机制原理

死锁和事务底层原理 文章目录 死锁和事务底层原理一&#xff1a;MySQL中的死锁现象1&#xff1a;何为死锁1.1&#xff1a;死锁的概念1.2&#xff1a;死锁产生的四个必要条件&#xff1a; 2&#xff1a;MySQL的死锁2.1&#xff1a;死锁的触发2.2&#xff1a;MySQL的死锁如何解决…