计算机网络——网络层(概念及IP地址划分)
目录
网络层概念
网络层向上层提供的两种服务
虚电路
网络提供数据报服务
虚电路服务与数据报服务的对比
网络层的两个层面
分组传送到路由器的运作
对网络层进行分层
网际协议IP
虚拟互联网络
IP地址
IP地址及其表示方法
IP地址的计算方式
IP地址的结构
分类的IP地址
练习
CIDR地址
斜记线法
地址块
地址掩码
练习
构造超网
子网划分
IP地址的应用规划——使用定长子网掩码划分子网
IP地址的应用规划——使用变长子网掩码划分子网
IP地址的特点
题外话:二叉树划分变长子网与定长子网
定长子网用二叉树划分
变长子网用二叉树划分
进一步解释为啥各分支不能重复堵
练习
网络层概念
网络层向上层提供的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
虚电路
一种观点:让网络负责可靠交付
- 这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式·
- 通信之前先建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源。
- 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失﹑不重复
这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确((无差错按序到达、不丢失、不重复)到达接收方。
虚电路是逻辑连接,并不等同之前所述的电路交换
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
- 请注意,电路交换的电话通信是先建立了一条真正的连接。
- 因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
网络提供数据报服务
另一种观点:网络提供数据报服务
- 互联网的先驱者提出了一种崭新的网络设计思路。
- 网络层向上只提供简单灵活的﹑无连接的﹑尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接·每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)·
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序
- 将复杂的网络处理功能置于因特网的边缘(即用户主机和其内部的运输层)
- 将相对简单的尽最大努力(即不可靠)的分组交付功能置于因特网核心
虚电路服务与数据报服务的对比
网络层的两个层面
我们已经讲过,不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成,分组查找路由器中的转发表,从指明的接口转发到下一个路由器。
但转发表是怎样得出的呢?是从路由表导出的,而路由表又是由互联网中许多的路由器,按照共同选定的路由选择协议,通过许多次的相互交换路由信息而产生的。(具体看分组传送到路由器的运作)
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。
- 分组转发:第一类是转发源主机和目的主机之间所传送的数据,把源主机所发送的分组,像接力赛跑那样从一个路由器转发到下一个路由器,最后把分组传送到目的主机。
- 路由选择:第二类则是传送路由信息,是根据路由选择协议所使用的路由算法,彼此不断地交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。
分组传送到路由器的运作
先绘制链路图如下:
路由器的运作
那么R1是如何知道应从自己的哪个接口转发该分组呢?
对网络层进行分层
可以把网络层抽象地划分为数据层面和控制层面。
在数据层面中:
● 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。
● 每个路由器独立工作。
● 采用硬件进行转发,速度快。
在控制层面中:
● 根据路由选择协议所用的路由算法计算路由器,创建出本路由器的路由表。
● 许多路由器协同动作。
● 采用软件计算,速度慢。
路由器的路由选择和分组转发分别处于上述控制层面和数据层面之中(实际上这两种的实现都是在路由器内部完成)。
这里用 ” 控制层面和数据层面 “ 这种概念进行划分,是因为最近网络界提出的:软件定义网络SDN
上面这两张图区别在于前者每个路由器既有转发表又有路由选择软件【图中可以看出】,后者所有路由器都变得更加简单了(它的路由选择软件不存在),因此路由器之间不在交换路由信息(路由表由远程控制器生成)。当然这种集中控制的网络好处有些,但传统的前者分散控制的网络也有它所不及的优点,因此相铺相成吧。
网际协议IP
网际协议 IP (Internet Protocol) 是 TCP/IP 体系结构中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:
- (1) 地址解析协议 ARP (Address Resolution Protocol)
- (2) 网际控制报文协议 ICMP (Internet Control Message Protocol)
- (3) 网际组管理协议 IGMP (Internet Group Management Protocol)
这三个协议和网际协议IP的关系。在这一层中,ARP画在最下面,因为IP经常要使用这个协议。ICMP和 IGMP画在这一层的上部,因为它们要使用协议IP。
由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常被称为网际层(internetlayer),或IP层。
因此TCP/IP 体系中的网络层常常被称为网际层(internetlayer),或IP层。使用“网际层”这个名词的好处,是强调了这是由很多网络构成的互连网络。目前比较普遍使用“网络层”这个名词。
虚拟互联网络
我们知道,如果要在全世界范围内把数以百万计的网络都互连起来,并且能够互相通信,那么这样的任务一定非常复杂。其中会遇到许多需要解决的问题,如:不同的寻址方案、不同的最大分组长度、不同的网络接入机制不同的超时控制、不同的差错恢复方法。
从上可知,没有一种单一网络能够适应所有用户的需求。
从一般概念来讲,将网络互相连接起来要使用一些中间设备,根据中间设备所在的层次,可以有以下四种不同的中间设备:
- (1)物理层使用的中间设备叫作转发器(repeater)。
- (2)数据链路层使用的中间设备叫作网桥或桥接器(bridge),以及交换机(switch)。
- (3)网络层使用的中间设备叫作路由器(router)。
- (4)在网络层以上使用的中间设备叫作网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
我们知道:当中间设备是物理层或数据链路层设备时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,在网络层看来仍然是一个网络。而网络互连是指用路由器将不同的网络连接起来。
当参加互连的计算机网络都使用相同的网际协议IP时,可以把互连以后的计算机网络看成一个虚拟互连网络——各种物理网络的差异性被屏蔽,在网络层上看起来好像是一个统一的网络。
而这种使用IP协议的虚拟互连网络又称为虚拟IP网。现在的互联网(Internet)就是这种虚拟IP网(上层使用TCP协议)。
当很多异构网络通过路由器互连起来时,如果所有的网络都使用相同的协议IP,那么在网络层讨论问题就显得很方便。现在用一个例子来说明。
分组从源主机H1发送到目的节点H2,若中间必须经过一个或几个路由器(这表示A和B不在同一个网络上),则是间接交付。但若不需要经过路由器(这表示A和B在同一个网络上),则是直接交付。
我们还可注意到,在R4和R5之间使用了卫星链路,而R5所连接的是个无线局域网(R5和主机H2都在同一个局域网中)。在R1到R4之间的三个网络则可以是任意类型的网络。总之,这里强调的是:互联网可以由多种异构网络互连组成。
有时可以把问题简化。我们可以想象IP数据报就在网络层中传送,传输路径可省略路由器之间的网络以及连接在这些网络上的许多无关主机。
在互联网的词汇中,分组在传送途中的每一次转发都称为一“跃点(hop)”。
对于本例,H1向H2发送分组需要经过6跳。我们还注意到,每一跳两端的两个节点都必定直接连接在同一个网络上。
IP地址
在TCP/IP体系中,IP地址是一个基本概念。一个连接在互联网上的设备,如果没有IP地址,就无法和网上的其他设备进行通信。
IP地址及其表示方法
整个互联网是一个单一的、抽象的网络,IP 地址就是给每个连接在互联网上的主机(或路由器)的每一个接口,分配的一个在全世界范围内唯一的 32 位的标识符。
IP 地址由互联网名字和数字分配机构 ICANN (Internet Corporation for Assigned Names and Numbers) 进行分配。
为了便于人的书写和记忆,我们常采用点分十进制记法表示:
IP地址的计算方式
二进制转化为十进制
十进制转化为二进制
IP地址的结构
IP 地址采用两级结构,由两个字段组成:
第一个字段是网络号,它标志主机(或路由器)所连接到的网络;第二个字段是主机号,它标志该主机(或路由器)。
一个主机号在所连接的网络(即前面的网络号所指明的网络)中必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。因此,IP地址可以记为:
上式子中的符号“::=”表示“定义为”。IP地址中包含网络号就表明,不连网的主机就没有IP地址。一定要记住,IP地址指明了连接到某个网络上的一个主机(或路由器)。
分类的IP地址
图4-9表示P地址中的网络号和主机号的位置。具体的规定是:IP地址中的前n位是
主机所连接的网络号,而IP地址中后面的(32 - n)位是主机号。
现在的问题是,当我们找到一个IP地址时,怎样知道它的网络号的位数n是多少?下面我们就来讨论这个问题。
32位的IP地址空间共有
(即4294967296,接近43亿)个地址。它们各自的地址数量占比如图所示。
- A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。
- 主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。
- 主机号为“全1”的地址是广播地址,不能分配给主机(或路由器)的各接口
A类地址的细节
B类地址的细节
C类地址的细节
特殊的IPV4地址
练习
下面网络应如何分配网络型号?
分配网络型号如下:
CIDR地址
无分类编址的全名是无分类域间路由选择 CIDR,它把 IP 地址划分为前后两个部分,前面部分是“网络前缀”(network-prefix),用来指明网络;后面部分是主机号,用来指明主机。
在使用 CIDR 编址时,IP 地址的定义及示意图如下:
在 CIDR 编址中,网络前缀的位数 n 不固定,可以在 0 ~ 32 之间任意选取
斜记线法
CIDR 使用“斜线记法”(slash notation),或称为 CIDR 记法,即在 IP 地址后面加上一个斜线“/”,斜线后面写上网络前缀所占的位数。
地址块
CIDR把网络前缀都相同的所有连续的IP地址组成一个“CIDR地址块”。一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数。
IP地址由网络部分和主机部分组成,而网络前缀的长度决定了地址块的大小以及所包含的IP地址数量
该图比较详细解释了地址块与地址的关系,这与后文内容划分网络相关。
使用CIDR的一个好处是,可以根据客户的需要分配适当大小的CIDR地址块,因此可以更加有效地分配IPv4的地址空间。
采用CIDR后,仅从斜线左边的IP地址已无法知道其网络地址了。
- 128.14.32.7是IP地址,但未指明网络前缀长度,因此不知道网络地址是什么。
- 128.14.32.7/20也是IP地址,但同时指明了网络前缀为20位,由此可导出网络地址。
地址掩码
CIDR使用斜线记法可以让我们知道网络前缀的数值。但是计算机看不见斜线记法,而是使用二进制来进行各种计算时就必须使用32位的地址掩码address mask)能够从IP地址迅速算出网络地址。
它的主要功能是分离出IP地址中的网络部分和主机部分,从而确定两台设备是否处于同一子网中。
地址掩码(常简称为掩码)由一连串1和接着的一连串0组成,而1的个数就是网络前缀的长度。地址掩码又称为子网掩码。在CIDR记法中,斜线后面的数字就是地址掩码中1的个数。
● 对于 /20 地址块,它的地址掩码是 20 个连续的 1 和 12 个连续的 0。这个掩码用点分十进制表示就是 255.255.240.0。
练习
构造超网
使用CIDR的另一个好处是路由聚合(也称为构造超网)。
在路由器的转发表中,如果几个连续的、小的 CIDR 地址块具有相同的下一跳路由器,则可以把这几个小的地址块合并成一个大的地址块,并用一个转发表项代替原来的多个转发表项。
这种方法称为路由聚合(也称为构造超网),可以大大压缩转发表所占的空间,减少查找转发表所需的时间
1、网络前缀越长,地址块越小,路由越具体:
- 网络前缀的长度:这个长度决定了网络的大小和可以包含的主机数量。
- 地址块的大小:网络前缀的位数越多,表示网络部分越大,而主机部分就越小。这意味着该子网内的可用IP地址范围更小,地址块自然也就越小。
- 路由的具体性:网络前缀越长,说明该子网在互联网中的划分越详细,对应的路由就能更精确地指向特定的小范围网络。这种具体的路由有助于优化网络流量和提高路由效率
2、若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目,这称为最长前缀匹配,因为这样的路由更具体:
- 路由表的查找过程:当路由器需要将数据包转发到其目的地时,会在路由表中查找与数据包目的IP地址匹配的路由条目。这个过程涉及到对多个可能匹配的路由条目的筛选。
- 最长前缀匹配原则:在有多个匹配的路由条目时,路由器会选择网络前缀最长(即子网掩码中“1”的数量最多)的那个条目,因为这表明这条路由描述的网络范围更小、更具体。
- 提高效率和精确性:通过最长前缀匹配,可以确保数据包被发送到最准确的目的地,避免错误地发送到可能是部分匹配的、范围更大的网络中。这种方法提高了网络的效率和减少了不必要的网络流量
子网划分
定长子网掩码和变长子网掩码都是基于CIDR地址块。 大致区别如下:
IP地址的应用规划——使用定长子网掩码划分子网
向主机号借用对应比特作为子网号
分配网络地址如下:
IP地址的应用规划——使用变长子网掩码划分子网
仍然使用之前相同的网络举例 ,但注意申请到的网络发生变化
IP地址的特点
(1)IP地址的结构使之管理方便,转发便捷:
每一个IP地址都由网络前缀和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。
分两个等级的好处是:第一,IP地址管理机构在分配IP地址时只分配网络前缀(第一级),而剩下的主机号(第二级)则由得到该网络前缀的单位自行分配。这样就方便了IP地址的管理;第二,路由器根据目的主机所连接的网络前缀(即地址块)来转发分组(而不考虑目的主机号),这样就可以使转发表中的项目数大幅度减少,从而减少转发表所占的存储空间,缩短查找转发表的时间
(2)主机同时连接两个网络会有两个网络地址,路由器应当也有两个IP地址:
实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络前缀必须是不同的。
这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
(3)用转发器或交换机连接起来的局域网仍为一个网络:
按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合,因此,用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连
(4)分到网络前缀的网络会被互联网平等对待:
在IP地址中,所有分配到网络前缀的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。所谓平等,是指互联网同等对待每一个IP地址。
题外话:二叉树划分变长子网与定长子网
定长子网用二叉树划分
变长子网用二叉树划分
进一步解释为啥各分支不能重复堵
练习
在堵住5个出水口的同时,保证生成树最深
相关文章:

计算机网络——网络层(概念及IP地址划分)
目录 网络层概念 网络层向上层提供的两种服务 虚电路 网络提供数据报服务 虚电路服务与数据报服务的对比 网络层的两个层面 分组传送到路由器的运作 对网络层进行分层 网际协议IP 虚拟互联网络 IP地址 IP地址及其表示方法 IP地址的计算方式 IP地址的结构 …...

【JVM实战篇】内存调优:内存泄露危害+内存监控工具介绍+内存泄露原因介绍
文章目录 内存调优内存溢出和内存泄漏内存泄露带来什么问题内存泄露案例演示内存泄漏的常见场景场景一场景二 解决内存溢出的方法常用内存监控工具Top命令优缺点 VisualVM软件、插件优缺点监控本地Java进程监控服务器的Java进程(生产环境不推荐使用) Art…...

CVE漏洞爬虫脚本
前言:前阵子公司非要把CVE漏洞信息拉倒本地,说方便安全员们查看,其实在莫慌看来,大可不必,90%的CVE漏洞其实不具备现实利用的可能性的(不代表不能被利用),但是你说它没有意义也是不对…...

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解
今天,小编将为大家讲解如何搭建一个完整的互联网医院系统源码,并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统,需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块…...

高通平台android的Framework开发遇到的一些问题总结
涉及到framwork的修改一般都在QSSI文件夹下。 1、Android设备,发现耳机插入了设备,但是设备statusbar并没有显示耳机插入的状态。 frameworks/base/packages/SystemUI/res/values/config.xml 下修改: <string-array name"config_s…...

基于modbus tcp通讯的雷赛导轨控制器调试软件
0.前言 之前工作遇到了雷赛电机驱动器设备,主要是用来控制光学导轨移动。雷赛的调试软件用的时串口通讯,还要他们定制的串口线,在现场都是485转网络的接口,调试起来也很不方便。所以我就照着他们的说明书,写了一个简易…...

阿里云产品流转
本文主要记述如何使用阿里云对数据进行流转,这里只是以topic流转(再发布)为例进行说明,可能还会有其他类型的流转,不同服务器的流转也可能会不一样,但应该大致相同。 1 创建设备 具体细节可看:…...

GO语言中的接口(interface)
go 接口 interface 1、什么是接口(interface)?2、注意事项3、interface底层实现4、侵入式与非侵入式5、接口的应用场景空接口的应用场景 6、其他使用 1、什么是接口(interface)? 在Go语言中,接口…...

模拟电路再理解系列(2)-电源滤波电路
前言 今天梳理一下电源滤波电路,在大部分电路设计中,都有滤波电路这一块儿,严格地说的话除了电源滤波还有信号滤波,经常会看到电路里面有一些电容,电感等串并联在一起的模块,大概率就是起到滤波作用&#…...

uniapp使用多列布局显示图片,一行两列
完整代码: <script setup>const src "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg" </script><template><view class"content"><view class"img-list"><image :src"src…...

近期几首小诗汇总-生活~卷
生活 为生活飘零,风雨都不阻 路见盲人艰,为她心点灯 贺中科大家长论坛成立十五周年 科学家园有喜贺 园外丑汉翘望中 曾一学子入我科 正育科二盼长大 憧憬也能入此家 与科学家论短长 园外翘首听高论 发现有隙入此坛 竟然也能注册成 入园浏览惶然立 此贴…...

超时导致SparkContext构造失败的问题探究
文章目录 1.前言2. 基于事故现场对问题进行分析2.1 日志分析2.2 单独测试Topology代码试图重现问题 3. 源码解析3.1 Client模式和Cluster模式下客户端的提交和启动过程客户端提交时在两种模式下的处理逻辑ApplicationMaster启动时在两种模式下的处理逻辑 3.2 两种模式下的下层角…...

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)
目录 一、引言 二、音频分类(audio-classification) 2.1 概述 2.2 技术原理 2.2.1 Wav2vec 2.0模型 2.2.1 HuBERT模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.4 pipeline实战 2.4.1 …...

Nginx 负载均衡详解
Nginx是一个高性能的HTTP和反向代理服务器,拥有丰富的功能和模块,负载均衡就是其中之一。负载均衡是一种技术,用于在多台服务器之间分配工作负载,以确保高可用性和可靠性。本文将详细介绍Nginx的负载均衡算法、工作原理、配置方法…...

Unity3D开发之传送带实现
/// <summary> /// 传送带 直线传送带 /// </summary> public class ConveyerBelt : MonoBehaviour {public float Speed 1;protected float mspeed;protected Vector3 direction;protected Rigidbody rd;List<GameObject> Goods new List<GameObject&…...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(二)-支持高分辨率视频直播应用
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...

python的私有属性和数据封装
1.私有属性 在 Python 中,私有属性是一种编程约定,用于表示某些属性在类的内部使用,不希望被外部直接访问或修改。 私有属性的命名通常以双下划线 __ 开头。例如,在类中定义一个私有属性可以像这样: class MyClass:de…...

一文学会鉴别“套壳”ChatGPT模型
一文学会鉴别“套壳”ChatGPT模型 随着ChatGPT等明星模型的诞生,市场上也开始出现一些“套壳”现象,即部分模型表面标榜原创或先进,实则在核心算法上与知名模型高度相似。作为技术探索者,如何拨开迷雾,识别这些“李鬼…...

Docker基本管理1
Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自…...

python-28-零基础自学python-json存数据、读数据,及程序合并
学习内容:《python编程:从入门到实践》第二版 知识点: import json引入、 try-except-else return def函数、打开文件、 练习内容: 练习10-11:喜欢的数 编写一个程序,提示用户输入喜欢的数ÿ…...

Excel第30享:基于辅助列的条件求和
1、需求描述 如下图所示,现要统计2022年YTD(Year To Date:年初至今日)各个人员的“上班工时(a2)”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1:确定逻辑。“从日期中提取出…...

Java查看RSA密钥的ASN1结构
背景:服务端使用Java开发的,接口需要客户端传一个RSA公钥,手机端使用Flutter开发的,然后就选择使用 pointycastle 生成密钥,很不巧,dart版本不像Java一样有个可以直接获取编码过的公钥信息的方法࿱…...

友思特方案 | 低延迟GigE Vision解决方案:用于红外设备、医疗和工业级探测面板
导读 维持实时视频系统软硬件的长期成本效益,是该系统在医疗、工业等领域广泛应用的前提。友思特低延迟GigE Vision解决方案创新性地突破了这一难题,提供高带宽且高可靠性的端到端网络链接,有效降低了开发成本、复杂性和时间。 引言 虽然实…...

网络安全策略:优先防护而非溯源的重要性
面对网络攻击,企业往往面临一个关键决策点:是立即投入资源进行攻击溯源,还是优先加强自身的防御体系。尽管溯源分析有助于了解攻击者的手段和动机,但在大多数情况下,优先强化防护是更为明智的选择。本文将探讨为何在遭…...

ES6 Iterator 与 for...of 循环(五)
Iterator 特性: 统一的接口:无论是数组、字符串还是自定义对象,只要它们有默认的迭代器,就可以使用 for…of 循环进行遍历。可迭代对象:具有 [Symbol.iterator] 属性的对象被认为是可迭代的。[Symbol.iterator] 是一个…...

typora删除多余图片
import os import re import shutil from bs4 import BeautifulSoupimport warningswarnings.filterwarnings(ignore) # 定义正则表达式用于匹配.md文件中的图片引用语句 pattern re.compile(r!\[.*]\((.*)\))# 获取所有.md文件中的图片引用路径 references set() md_filepat…...

【ceph】ceph-mon重新选举的情况
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

PopClip(Mac 划词增强工具)值得购买吗?
PopClip 是一款 Mac 划词操作增强工具,可选装翻译搜索、格式转换等丰富扩展,联动多种软件执行创建提醒事项、添加到笔记等快捷操作,有效提升工作效率。 在 iPhone 或 iPad 内,选词后就会弹出气泡菜单,让你选择执行各种…...

Python | Leetcode Python题解之第227题基本计算器II
题目: 题解: class Solution:def calculate(self, s: str) -> int:n len(s)stack []preSign num 0for i in range(n):if s[i] ! and s[i].isdigit():num num * 10 ord(s[i]) - ord(0)if i n - 1 or s[i] in -*/:if preSign :stack.append(…...

redis源码分析之底层数据结构(一)-动态字符串sds
1.绪论 我们知道redis是由c语言实现的,c语言中是自带字符串的,但是为什么redis还要再实现自己的动态字符串呢,这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。 2.sds的组成 struct __at…...