计算机网络 第4章 网络层

news/2024/11/28 0:18:27/

计算机网络 (第八版)谢希仁

  • 第 4 章 网络层
      • 4.2.2 IP地址
        • **无分类编址CIDR**
        • IP地址的特点
      • 4.2.3 IP地址与MAC地址
      • 4.2.4 ARP 地址解析协议
      • 4.2.5 IP数据报的格式
        • 题目2:IP数据报分片与重组
        • 题目:计算IP数据报的首部校验和(不正确未改)
    • 4.3 IP层转发分组的过程
      • 4.3.2 最长前缀匹配
        • 工作原理
      • 4.3.3 使用二叉线索查找转发表

第 4 章 网络层

4.2.2 IP地址

分类的ip地址

在这里插入图片描述

范 围可用网络号可用主机号
A类地址0 - 12727 - 2 个224 - 2 个, 全0和全1不可用
B类地址128 - 191214 - 2 个216 - 2 个, 全0和全1不可用
C类地址192 - 223221 - 2 个28 - 2 个, 全0和全1不可用
D类地址224 - 239

A:全0的网络号(0.0.0.0)代表当前网络,而全1的网络号(127.0.0.0)用于本地回环测试。

B:全0的网络号(128.0.0.0)是保留的,而全1的网络号(255.255.0.0)也是保留的。全0的主机号被保留用于表示网络本身,而全1的主机号被保留用于广播地址。

C:全0的网络号(192.0.0.0)是保留的,而全1的网络号(255.255.255.0)也是保留的。主机号同上。

无分类编址CIDR

(1)网络前缀

cidr斜线记法地址块网络前缀_<a class=计算机网络笔记21 划分子网、无分类编址_昕夕草侧的博客-CSDN博客" />

🌍与上面IP分类不同的是,这里网络前缀的 n 位并不是固定的数,可以在 0~32 位之间选取任意的值。

🌍CIDR使用 “斜线记法”,例如:128.14.35.7 / 20 ,表示前20位是网络前缀,剩下的12位是主机号。

(2)地址块

地址块(Address Block)通常指的是一组连续的IP地址。
在这里插入图片描述

(3)地址掩码(子网掩码)

由0和1组成, 在CIDR记法中,1 的个数为网络前缀的位数,剩下的为 0。

🌍计算网络地址:把二进制IP地址和子网掩码进行按位与操作

​ 网络地址和IP地址的关系:

网络地址用于标识一个特定的网络,而IP地址则用于标识网络中的特定设备

在这里插入图片描述

即与1对着的不变,直接下拉,与0对着的全为0.

A类网络:子网掩码为255.0.0.0 或 255.0.0.0/8
B类网络:子网掩码为255.255.0.0 或 255.255.0.0/16
C类网络:子网掩码为255.255.255.0 或 255.255.255.0/24

CIDR中三个特殊地址块:

🌍n = 32,主机路由
🌍n = 31,主机号为0和1,用于点对点链路
🌍n = 0,默认路由

在这里插入图片描述
在这里插入图片描述

这张图片展示了一个CIDR地址块的划分过程,使用二叉树的形式来表示各个子网的分配。CIDR(无类别域间路由)是一种IP地址分配方法,它允许网络管理员根据需要将一个大的网络划分为多个小的子网。

图片中的CIDR地址块是 206.0.64.0/18,这意味着网络掩码是18位,总共可以提供 (2^{(32-18)} = 2^{14} = 16384) 个IP地址。

划分过程如下:

  1. 机构:原始的CIDR地址块 206.0.64.0/18 被划分为16个子网,其中15个子网被分配给其他用途,剩下的一个子网被分配给高校。

  2. 高校:高校的CIDR地址块是 206.0.68.0/22,这意味着它有 (2^{(32-22)} = 2^{10} = 1024) 个IP地址。

  3. 高校划分:高校的地址块进一步被划分为两个子网:

    • 子网1:CIDR地址块 206.0.68.0/23,提供 (2^{(32-23)} = 2^{9} = 512) 个IP地址。
    • 子网2:CIDR地址块 206.0.70.0/23,同样提供512个IP地址。
    • 余1:剩余的地址块 206.0.70.0/23
  4. 子网1划分:子网1被进一步划分为四个子网,每个子网的CIDR地址块是 /25,提供 (2^{(32-25)} = 2^{7} = 128) 个IP地址:

    • 206.0.68.0/25
    • 206.0.68.128/25
    • 206.0.69.0/25
    • 206.0.69.128/25
  5. 子网2划分:子网2被进一步划分为两个子网:

    • 二系:CIDR地址块 206.0.70.0/24,提供 (2^{(32-24)} = 2^{8} = 256) 个IP地址。
    • 余2:剩余的地址块 206.0.71.0/24
  6. 二系划分:二系的地址块进一步被划分为四个子网,每个子网的CIDR地址块是 /26,提供 (2^{(32-26)} = 2^{6} = 64) 个IP地址:

    • 206.0.70.0/26
    • 206.0.70.64/26
    • 206.0.70.128/26
    • 206.0.70.192/26
  7. 余2划分:余2的地址块被划分为两个子网:

    • 三系:CIDR地址块 206.0.71.0/25,提供128个IP地址。
    • 四系:CIDR地址块 206.0.71.128/25,同样提供128个IP地址。
  8. 三系划分:三系的地址块进一步被划分为两个子网,每个子网的CIDR地址块是 /26,提供64个IP地址:

    • 206.0.71.0/26
    • 206.0.71.64/26
  9. 四系划分:四系的地址块也被划分为两个子网,每个子网的CIDR地址块是 /26,提供64个IP地址:

    • 206.0.71.128/26
    • 206.0.71.192/26

通过这种方式,原始的CIDR地址块被逐步细分为更小的子网,以满足不同部门或用途的需求。每个子网的划分都是基于其所需的IP地址数量来决定的。

在这里插入图片描述

二次划分主机号用于子网的详细解释

在IP地址的划分中,我们通常会将一个较大的网络划分为多个较小的子网,以提高网络的效率和安全性。这种划分是通过借用主机号的部分位来实现的,这些位被重新定义为子网号。

  1. 子网划分的目的:
  • 提高网络管理的灵活性:通过划分子网,可以更灵活地管理网络,特别是在大型网络中。
  • 优化网络性能:较小的子网可以减少广播域的大小,提高网络效率。
  • 增强网络安全性:子网划分可以帮助隔离网络流量,提高安全性。
  1. 子网划分的过程:
  • 确定子网掩码:子网掩码定义了IP地址中哪些位是网络部分,哪些位是主机部分。在子网划分中,我们通过借用主机部分的位来创建子网号。
  • 计算子网数量:根据需要的子网数量,确定需要借用多少位作为子网号。
  • 计算子网掩码:子网掩码的计算基于原始的网络掩码和借用的位数。
  • 确定IP地址范围:每个子网都有自己的IP地址范围,包括网络地址和广播地址。

例题及解释

假设我们有一个C类网络,其IP地址范围是192.168.1.0/24,我们需要将其划分为8个子网。

  1. 计算子网位数
  • 原始的C类网络有8位用于主机号。
  • 我们需要至少3位来表示8个子网(因为(2^3 = 8))。
  • 因此,我们将借用3位主机号作为子网号。
  1. 子网掩码
  • 原始的C类网络掩码是255.255.255.0(即/24)。
  • 借用3位后,新的子网掩码变为255.255.255.224(即/27)。
  1. 子网标识
  • 第一个子网的标识是192.168.1.0/27,其中192.168.1.0是网络地址,192.168.1.31是广播地址。
  • 第二个子网的标识是192.168.1.32/27,其中192.168.1.32是网络地址,192.168.1.63是广播地址。
  1. IP地址范围
  • 第一个子网:192.168.1.0 - 192.168.1.31
  • 第二个子网:192.168.1.32 - 192.168.1.63
  • 以此类推,直到第八个子网:192.168.1.224 - 192.168.1.255

解释

  • 子网掩码:/27表示网络部分占用了27位,包括原始的24位和借用的3位。
  • 子网标识:每个子网的网络地址是该子网的第一个IP地址,广播地址是该子网的最后一个IP地址。
  • IP地址范围:每个子网包含32个IP地址(2^5 = 32),其中两个地址被用作网络地址和广播地址,剩余30个地址可用于分配给设备。

通过这种方式,我们可以有效地将一个较大的网络划分为多个较小的子网,以满足不同的网络需求。

IP地址的特点

<a class=计算机网络 五、 五层协议体系结构-----网络层(上)_ipv6中的,当路由器发现”跳数限制“字段的值为零时,就要将此数据报丢弃。-CSDN博客" width="600" />

IP地址、MAC地址、路由器、交换机以及网络号和主机号是网络通信的基础组件,它们共同工作以确保数据在网络中正确传输。

组件作用:

  1. IP地址:用于在网络层标识设备,是逻辑地址,用于路由选择。
  2. MAC地址:用于在数据链路层标识网络接口,是物理地址,用于局域网内的数据传输。
  3. 路由器:连接不同的网络,根据IP地址转发数据包到正确的目的地,根据子网掩码判断数据包是否应该在本地网络内传输,如果不是,就转发到其他网络。。
  4. 交换机:在局域网内工作,根据MAC地址转发数据帧到正确的设备。
  5. 网络号:IP地址的一部分,用于标识网络。
  6. 主机号:IP地址的一部分,用于标识网络内的特定设备。

识别与配合作用:

  • 当一台计算机需要发送数据到另一台计算机时,它会首先检查目标IP地址是否在同一网络内。
  • 如果在同一网络内,计算机会使用ARP协议(地址解析协议)将目标IP地址解析为MAC地址,然后通过交换机发送数据。
  • 如果不在同一网络内,计算机会将数据发送到默认网关(通常是路由器的接口),路由器会根据路由表将数据转发到目标网络。
  • 在目标网络内,路由器会将数据转发给交换机,交换机再根据MAC地址将数据发送到目标设备。

4.2.3 IP地址与MAC地址

IP地址与MAC地址的区别_ip地址和mac地址的区别-CSDN博客

🌍使用IP地址的IP数据报一旦交给数据链路层,就被封装成MAC帧,整个IP数据报成为MAC的数据。
🌍MAC帧在传输时使用的目的地址和源地址都写在MAC帧首部。
🌍在网络层,IP数据报的源IP地址与目的IP地址也都写在IP数据报的首部。

在这里插入图片描述

由上图可发现:

🌍IP层上的网络,IP数据报的源地址和目的地址始终是不变的,即IP1、IP2
🌍路由器只根据目的站的IP地址进行转发。
🌍在局域网的链路层,只能看见MAC帧,在不同的网络上传送时,MAC帧的目的地址和源地址要发生变化,如上图。

4.2.4 ARP 地址解析协议

(ARP)地址解析协议,它工作在OSI模型的第二层(数据链路层),负责将网络层的IP地址映射为数据链路层的MAC地址,主要解决的问题是1. 得到MAC地址, 2. 路由器中的转发表的得到

HCIA第四天——ARP的工作原理_arp代理的工作原理-CSDN博客

ARP的工作原理

  1. ARP请求:当一台主机需要向另一台主机发送数据时,它首先需要知道目标主机的MAC地址。如果目标主机与发送主机在同一局域网内,发送机会通过ARP来获取目标机的MAC地址。ARP的工作原理可以概括为以下几个步骤:
    • 发送机在本地网络上广播一个ARP请求,询问“谁拥有IP地址X,请告诉我你的MAC地址”。这个请求包含了发送机的IP和MAC地址,以及目标IP地址。
  2. ARP响应:目标机收到ARP请求后,会检查请求中的目标IP地址是否与自己的IP地址匹配。如果匹配,目标机会以单播形式发送ARP响应,包含其MAC地址。
  3. ARP缓存:发送机收到ARP响应后,会将目标IP地址与MAC地址的映射关系存储在ARP缓存中,以备将来使用。这样,当再次向同一目标IP发送数据时,可以直接使用缓存中的MAC地址,无需再次发送ARP请求。
  4. 数据传输:一旦获得目标MAC地址,发送机就可以将数据封装成帧,并将其发送到网络上。

ARP协议的底层原理是:当一台主机需要向另一台主机发送数据包时,首先检查自己的ARP缓存表,查看目标主机的IP地址是否已经存在于缓存中。如果存在,则直接将数据包发送给目标主机的MAC地址。如果不存在,则向局域网上的所有主机广播一个ARP请求数据包,请求目标主机的MAC地址。目标主机接收到请求后,会将自己的MAC地址和IP地址作为响应数据包发送给请求方。请求方收到响应后,将目标主机的IP地址和MAC地址的映射关系存储到自己的ARP缓存表中,下次再需要与该主机进行通信时就可以直接从ARP缓存表中获取目标主机的MAC地址。

除此之外,对于保存在高速缓存中的每一个映射地址项目都设置生存时间。凡是超过生存时间的项目就会从高速缓存中删掉

🤨😈如果不在同一个局域网上呢?

需要路由器的加入,共同确保数据包能够正确地从源主机传输到目标主机。以下是它们在跨局域网通信中的作用和步骤:

ARP的作用:

  1. 解析IP到MAC:ARP用于将IP地址解析为MAC地址,这在局域网内部的通信中是必要的。

路由器的作用:

  1. 路由选择:路由器根据路由表决定数据包的转发路径。
  2. 数据包转发:路由器在不同网络之间转发数据包。
  3. 网络隔离:路由器可以隔离不同的网络,提供安全性。

跨局域网通信步骤:

  1. 源主机检查目标IP:源主机(A)检查目标IP地址是否在同一局域网内。
  2. 发送ARP请求(如果需要):如果目标IP在同一局域网内,源主机A通过ARP获取目标主机(B)的MAC地址。
  3. 封装数据帧:源主机A将数据封装在数据帧中,使用目标主机B的MAC地址作为目的地址。
  4. 发送数据帧:源主机A通过局域网将数据帧发送出去。
  5. 数据帧到达网关:如果目标IP不在同一局域网内,数据帧会被发送到源主机A所在局域网的网关(路由器的接口)。
  6. 路由器接收数据包:路由器接收到数据帧后,去除以太网头部,查看IP头部,确定数据包的下一跳。
  7. 路由器转发数据包:路由器根据路由表将IP数据包转发到目标局域网。
  8. 目标局域网的ARP请求:在目标局域网内,如果路由器需要将数据包发送到特定的主机,它可能会发送ARP请求来获取目标主机B的MAC地址。
  9. 目标主机响应ARP:目标主机B响应ARP请求,提供其MAC地址。
  10. 路由器封装数据帧:路由器将数据包封装在新的数据帧中,使用目标主机B的MAC地址作为目的地址。
  11. 数据帧到达目标主机:数据帧被发送到目标局域网,并最终到达目标主机B。
  12. 目标主机处理数据包:目标主机B接收到数据帧,去除以太网头部,查看IP头部,确认数据包是给自己的,然后处理数据包。
  13. 可能的响应:如果目标主机B需要回复,它会重复上述过程,但这次是将数据包发送回路由器,然后路由器再转发给源主机A。

4.2.5 IP数据报的格式

在这里插入图片描述

IP数据报是网络层传输的数据单元,由IP协议封装而成。一个IP数据报由首部数据两部分组成,其中首部的前一部分长度固定,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。以下是IP数据报格式的详细介绍以及每部分的重要知识点:

  1. 版本(Version)占4位,指IP协议的版本。目前广泛使用的是IPv4,版本号为4。

  2. 首部长度(Header Length)占4位,表示IP数据报的首部长度,单位为32位字(4字节)。最小值为5(20字节),最大值为15(60字节)。

  3. 区分服务(Differentiated Services / Type of Service, ToS)占8位,用于指示数据报的服务质量要求,如优先级、延迟等。实际中未使用。

  4. 总长度(Total Length)占16位,表示整个IP数据报的长度,包括首部和数据部分,单位为字节。最大长度为216-1 = 65535字节。

  5. 标识(Identification)占16位,是一个唯一的标识数字,用来识别一个数据报或者被分片数据包的次序。

  6. 标志(Flags)占3位,包括MF(More Fragments)和DF(Don’t Fragment)标志。MF标志用于指示是否还有更多的分片 MF = 1 表示还有更多,MF = 0表示最后一个,DF标志用于指示数据报是否允许分片。
    DF = 0 时才允许分片

  7. 片偏移(Fragment Offset)占13位,用于分片时指示分片相对于原始数据报的偏移量,单位是8字节。

  8. 生存时间(Time to Live, TTL)占8位,指定数据报可以在网络中传输的最长时间或最大路由器数。每经过一个路由器,TTL值减1,当TTL为0时,数据报被丢弃。

  9. 协议(Protocol)占8位,表示封装在IP数据报中的上层协议,如TCP(6)、UDP(17)、ICMP(1)等。

  10. 头部校验和(Header Checksum)占16位,用于检验IP数据报头部的正确性,保证数据的完整性。

  11. 源IP地址(Source IP Address)占32位,标识数据报的源主机的IP地址。

  12. 目标IP地址(Destination IP Address)占32位,标识数据报的目标主机的IP地址。

  13. 选项(Options):可选字段,用于扩展IP协议的功能,如安全和严格源路由等。

题目2:IP数据报分片与重组

题目描述: 已知一个分组的数据部分长度为3800字节,网络规定分组的分片长度不能超过1420字节(即MTU = 1420 = 首部+数据部分),假设IP分组的首部采用固定首部20个字节。请问原始分组需要分成几个分片?每个分片的总长度、标识字段、DF标志位、MF标志位、分片偏移字段是多少?

解答

  1. 原始分组需要分成几个分片?
    • 每个分片的数据部分长度为1400字节(1420 - 20字节首部),所以3800 ÷ 1400 ≈ 2.71,即需要分成3个分片。
  2. 每个分片的总长度、标识字段、DF标志位、MF标志位、分片偏移字段是多少?
    • 分片1:总长度1420字节,标识字段666,DF=0,MF=1,分片偏移字段0。
    • 分片2:总长度1420字节,标识字段666,DF=0,MF=1,分片偏移字段175(1400字节 / 8)。
    • 分片3:总长度1440字节(1400字节数据 + 20字节首部 + 20字节尾部),标识字段666,DF=0,MF=0,分片偏移字段350(2800字节 / 8)。

首部校验和:

把首部按16位划分为多个字段,检验和字段全置为0,反码算数运算求和取反码即为接收端校验和的计算结果。

在这里插入图片描述

关于IP数据报首部校验和的题目,我们可以设计一个简单的计算题目来检验对IP首部校验和的理解。以下是题目及其解答:

题目:计算IP数据报的首部校验和(不正确未改)

题目描述
假设你有一个IP数据报,其首部如下(以十六进制表示):

  • 版本:4
  • 首部长度:5
  • 服务类型:8
  • 总长度:40
  • 标识:0x1234
  • 标志:0x2
  • 片偏移:0x1000
  • 生存时间:64
  • 协议:17
  • 首部校验和:0x0000(待计算)
  • 源IP地址:192.168.1.1(0xC0A80101)
  • 目标IP地址:192.168.1.2(0xC0A80102)

请计算这个IP数据报的首部校验和。

解答步骤

  1. 将首部转换为二进制

    • 版本:0100
    • 首部长度:0101
    • 服务类型:00001000
    • 总长度:0010 0000
    • 标识:0001 0010 0011
    • 标志:0000 0010
    • 片偏移:0001 0000 0000
    • 生存时间:0100 0000
    • 协议:0001 0001
    • 首部校验和:0000 0000 0000(待计算)
    • 源IP地址:1100 0000 1010 1000 0000 0001 0000 0001
    • 目标IP地址:1100 0000 1010 1000 0000 0001 0000 0010
  2. 将二进制数据分组为16位

    • 0100 0101 0000 1000 0010 0000 0001 0010 0011 0000 0000 0010 0000 0001 0000 0000 0100 0000 0001 0001 0000 0000 0000 0000 0000 1100 0000 1010 1000 0000 0001 0000 0001 1100 0000 1010 1000 0000 0001 0000 0010
  3. 计算校验和

    • 将所有16位的二进制数相加,得到一个32位的和。
    • 将这个和与自身进行异或操作,得到最终的校验和。
  4. 计算结果

    • 假设上述步骤得到的和为0x12345678(这是一个示例值,实际计算时需要根据实际的二进制数据进行计算)。
    • 将0x12345678与自身异或,得到0x0000ABCD(这也是一个示例值,实际计算时需要根据实际的和进行计算)。
  5. 填写首部校验和

    • 将计算得到的校验和值填入首部校验和的位置,即0xABCD。

请注意,上述步骤中的数值是示例,实际计算时需要根据实际的IP数据报首部内容进行计算。首部校验和的计算涉及到将所有16位的二进制数相加,然后对得到的和进行异或操作,直到得到一个16位的结果。这个过程可以通过编程实现,也可以手工计算,但手工计算较为繁琐。

4.3 IP层转发分组的过程

4.3.2 最长前缀匹配

最长前缀匹配(Longest Prefix Match)是IP路由选择中使用的一种基本算法。它用于确定数据包应该被发送到哪个下一跳路由器,以便到达其目的地。以下是最长前缀匹配的工作原理和步骤:

工作原理
  1. 路由表:路由器维护一个路由表,该表包含了一系列的路由条目。每个条目通常包含一个目的网络的前缀(网络地址和子网掩码),以及该前缀对应的下一跳地址或接口。

  2. 目的IP地址:当一个数据包到达路由器时,路由器会查看数据包的目的IP地址。

  3. 查找匹配:路由器在路由表中查找与目的IP地址最匹配的条目。这个过程涉及将目的IP地址与路由表中每个条目的前缀进行比较。

  4. 最长前缀:路由器选择具有最长前缀匹配的条目,即最具体的网络前缀。如果存在多个最长前缀匹配,则通常选择第一个添加到路由表中的条目(这取决于路由表的排序)。

示例:

网络前缀子网掩码下一跳地址
192.168.1.0/24255.255.255.0下一跳1
192.168.1.0/25255.255.255.128下一跳2
192.168.0.0/16255.255.0.0下一跳3
10.0.0.0/8255.0.0.0下一跳4
172.16.0.0/12255.240.0.0下一跳5
默认路由-下一跳6

解释

  1. 192.168.1.0/24:这是一个具有24位前缀的网络,覆盖了192.168.1.0到192.168.1.255的所有地址。子网掩码是255.255.255.0。

  2. 192.168.1.0/25:这是一个具有25位前缀的网络,覆盖了192.168.1.0到192.168.1.127的地址。子网掩码是255.255.255.128。

  3. 192.168.0.0/16:这是一个具有16位前缀的网络,覆盖了192.168.0.0到192.168.255.255的所有地址。子网掩码是255.255.0.0。

  4. 10.0.0.0/8:这是一个具有8位前缀的网络,覆盖了10.0.0.0到10.255.255.255的所有地址。子网掩码是255.0.0.0。

  5. 172.16.0.0/12:这是一个具有12位前缀的网络,覆盖了172.16.0.0到172.31.255.255的所有地址。子网掩码是255.240.0.0。

  6. 默认路由:这是一个默认路由,用于匹配不属于上述任何特定网络前缀的所有地址。它没有特定的子网掩码。

示例:目的IP地址为192.168.1.10

  1. 匹配过程

    • 192.168.1.10与192.168.1.0/24匹配,因为192.168.1.10在192.168.1.0到192.168.1.255的范围内。
    • 192.168.1.10也与192.168.1.0/25匹配,因为192.168.1.10在192.168.1.0到192.168.1.127的范围内。
    • 192.168.1.10还与192.168.0.0/16匹配,因为192.168.1.10在192.168.0.0到192.168.255.255的范围内。
  2. 最长前缀匹配

    • 在这些匹配中,192.168.1.0/25具有最长的前缀(25位),因此它是最长前缀匹配。
  3. 确定下一跳

    • 由于192.168.1.0/25是最长前缀匹配,数据包将被发送到下一跳2。

通过这个扩展示例,我们可以看到最长前缀匹配是如何在多个具有不同前缀长度的路由条目中选择最合适的下一跳地址的。

4.3.3 使用二叉线索查找转发表

【<a class=计算机网络 (谢希仁) 习题题解】第4章 网络层 (2)——划分子网;CIDR_cidr划分方法-CSDN博客" width="600" />


http://www.ppmy.cn/news/1550470.html

相关文章

SQL for XML

关系数据模型与SQL SQL for XML 模式名功能RAW返回的行作为元素&#xff0c;列值作为元素的属性AUTO返回表名对应节点名称的元素&#xff0c;每列的属性作为元素的属性输出输出&#xff0c;可形成简单嵌套结构EXPLICIT通过SELECT语法定义输出XML结构PATH列名或列别名作为XPAT…

C++中虚继承为什么可以解决菱形继承的数据冗余问题

在C中菱形继承会有数据冗余的问题发生&#xff0c;我们可以使用虚继承来解决&#xff0c;那虚继承的原理是什么&#xff0c;为什么它可以解决这个问题。 菱形继承的数据冗余问题 class A { public:int data; };class B : public A {};class C : public A {};class D : public…

eduSRC挖洞思路

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

重写get方法导致json序列化之后值改变的问题

重写get方法导致json序列化之后值改变的问题 问题描述 在开发中&#xff0c;我发现有一个接口某一个字段返回的值和数据库中的实际值并不一样 数据库中值: id diameter 1 10接口返回值: {"id": 1,"diameter": 5 }问题排查 发现&#xff0c;在getDiame…

10 —— Webpack打包模式

开发模式&#xff1a;development &#xff1b;场景&#xff1a;本地开发 生产模式&#xff1a;production &#xff1b; 场景&#xff1a;打包上线 这两种模式如何设置给webpack&#xff1a; 方式1.webpack.config.js 配置文件设置mode选项 module.exports { mode:produc…

tsx中使用el-dialog设置visible.sync,解决弹窗右上角叉号失效问题

在 TSX 中使用 el-dialog 设置 visible.sync 在 Vue 2 中&#xff0c;.sync 修饰符用于在父子组件之间同步属性值。然而&#xff0c;在 TSX 中并没有类似的 .sync 修饰符。如果要在 TSX 中实现类似的功能&#xff0c;需要手动实现。具体来说&#xff0c;可以通过监听 update:v…

Jackson 对象与json数据互转工具类JacksonUtil

下面是一个基于 Jackson 的工具类 JacksonUtil&#xff0c;用于在 Java 项目中实现对象与 JSON 数据之间的互相转换。该工具类具有简洁、易用、通用的特点。 package com.fy.common.util;import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core…

SQL99版外连接

外连接 看这样的场景&#xff0c;在ta和tb两表中查询没有对应年龄数据的学生姓名和年龄 SELECT tb.name,ta.age FROM tb INNER JOIN ta ON tb.ta_idta.id WHERE ta.id IS NULL; 结果没有,所以前面的查询是解决不了这种问题&#xff01;&#xff01;&#xff01; 所以外连接…