【考前预习】3.计算机网络—数据链路层

news2024/12/15 0:34:36

往期推荐

【考前预习】2.计算机网络—物理层-CSDN博客

【考前预习】1.计算机网络概述-CSDN博客

浅谈云原生--微服务、CICD、Serverless、服务网格_云原生cicd-CSDN博客

子网掩码、网络地址、广播地址、子网划分及计算_子网广播地址-CSDN博客

浅学React和JSX-CSDN博客

目录

1.数据链路层概述

1.1 数据链路和帧

2.数据链路层三个基本问题

2.1封装成帧

2.1.1帧定界

2.2透明传输

2.2.1 实现透明传输—字节填充

2.3差错检测

2.3.1循环冗余检验CRC

2.3.2生成多项式

2.4可靠传输

3.点对点信道—点对点协议PPP

3.1PPP协议组成

3.2PPP协议帧格式

3.3透明传输实现—字节填充

3.4透明传输实现—零比特填充 

 4.广播信道

4.1共享信道

4.2适配器的作用

4.3总线型网络拓扑—CSMA/CD协议

4.4.1 截断二进制指数退避算法

4.4星形网络拓扑—集线器

4.5以太网信道利用率

4.6以太网MAC层

4.6.1MAC的硬件地址

4.6.2MAC帧格式 

4.7以太网扩展

5.虚拟局域网VLAN


1.数据链路层概述

数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型:

  • 点对点信道:使用一对一的点对点通信方式。
  • 广播信道:使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

局域网虽然是个网络,但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的问题是多个网络互连的问题,是讨论分组怎样从一个网络通过路由器转发到另一个网络

数据链路层研究的是在同一个局域网中,分组怎样从一台主机不用路由器传送到另一台主机。

1.1 数据链路和帧

  • 链路:从一个节点到相邻节点的一段物理线路。
  • 数据链路:在链路的基础上增加必要的通信协议控制数据传输。
  • 链路层协议数据单元:帧,链路层接收到网络层的IP数据报添加首部尾部信息封装成帧作为链路层传输单元。

点对点信道的数据链路通信步骤:
(1)节点A的数据链路层把网络层交下来的P数据报添加首部和尾部封装成帧。
(2)节点A把封装好的帧发送给节点B的数据链路层。
(3)若节点B的数据链路层收到的帧无差错,则从收到的帧中提取出P数据报交给上面的网络层:否则丢弃这个帧。

2.数据链路层三个基本问题

2.1封装成帧

在IP数据报头部尾部添加一些控制信息,使得接收端的数据链路层接收到物理层的比特流后能根据首部尾部标记识别到帧的开始和结束,因此帧的作用之一就是帧定界

最大传送单元MTU是数据部分长度上限。

2.1.1帧定界

  • 当数据是由可打印的ASCⅡ码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCⅡ码是7位编码,一共可组合成128个不同的ASCIⅡ码,其中可打印的有95个,而不可打印的控制字符有33个。控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。SOH和EOT都是控制字符的名称。它们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。SOH(或EOT)并不是S,O,H(或E,O,T)三个字符。
  • 如果数据传送时中断,那么接收端接收到的数据就只有SOH,没有EOT,那么说明帧是不完整的,接后端链路层就会丢弃该帧,因此帧定界有一定的检错作用。

2.2透明传输

  • 由于帧的开始和结束的标记使用专门指明的控制字符,因此传输数据中的任何8 bit的组合不能和帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
  • 当传送的帧是用文本文件组成的帧时(从键盘上输入),其数据部分一定不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,这样的传输就是透明传输
  • 当数据部分是非ASCⅡ码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃,这样就不是透明传输。

2.2.1 实现透明传输—字节填充

设法使数据中出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B,二进制是00011011)。而在接收端数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充。如果转义字符也出现在数据
当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续
的两个转义字符时,就删除其中前面的一个。

2.3差错检测

比特流在传输过程中可能出现比特差错,一段时间内,传输错误的比特占传输总比特的比率叫误码率BER,这和信噪比有一定关系。

2.3.1循环冗余检验CRC

  • 在发送端,先把数据划分为组,假定每组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,却可以进行差错检测。
  • 冗余码可用以下方法得出:用二进制的模2运算进行2^{^{n}}乘M的运算,相当于在M后面添加n个0。得到的(k+)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位)。M=101001(即k=6)。假定除数P=1101(即n=3)。经模2除法运算后的结果是:商Q=110101(商没有用处),而余数R=001这个余数R就作为冗余码拼接在数据M的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS。因此加上FCS后发送的帧是101001001(即2^{^{n}}M+FCS),共(k+n)位。
  • 在接收端对收到的每一帧经过CRC检验后,有以下两种情况:
    • 若得出的余数R=0,则判定这个帧没有差错,就接受。
    • 若余数R≠0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差
      错),就丢弃。

CRC是一种检错方法,而FCS是添加在数据后面的冗余码。

2.3.2生成多项式

2.4可靠传输

由上面知,凡是数据链路层接收到的帧,都概率接近1的认为帧没有差错,因为差错的帧都被丢弃了。但是我们并不要求链路层向网络层提供可靠传输的服务。

传输差错可分为两类:一类是前面的比特差错,另一类是帧丢失、重复、失序。所以,CRC检验实现的无比特差错传输还不是可靠传输。

3.点对点信道—点对点协议PPP

除了能实现可靠传输的高级数据链路控制HDLC,还有更为简单好用的PPP协议。

PPP协议制定于1992年,是用户计算机和ISP进行通信所使用的数据链路层协议。

3.1PPP协议组成

PPP协议有三个组成部分:

  • 一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8 bit数据),也支持同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
  • 一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。
  • 一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议。

3.2PPP协议帧格式

PPP帧的首部和尾部分别为四个字段和两个字段。

  • 首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E(符号“0x”,表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110)。标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。
  • 首部中的地址字段A规定为0xFF(即11111111),控制字段C规定为0x03(即00000011)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带PPP帧的信息。
  • PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息
    字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,
    0x8021表示这是网络层的控制数据。
  • 信息字段的长度是可变的,不超过1500字节。
    尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS。

3.3透明传输实现—字节填充

PPP使用异步传输时,采用字节填充来实现透明传输:

  • 把信息字段中和标志字段一样的比特组合(0x7E)转义为0x7D并使用字节填充。
  • 把信息字段中比特组合为0x7D的变为2字节序列(0x7D,0x5D)。
  • 把信息字段中的ASCⅡ码控制字符前加0x7D。

3.4透明传输实现—零比特填充 

PPP在SONET/SDH使用同步传输时,采用零比特填充来实现透明传输:

  • 发送端先扫描整个信息字段,只要发现有5个连续1,则立即填入一个0。保证在信息字段中不会出现6个连续1。
  • 接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。
  • 这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

 4.广播信道

局域网最主要的特点:网络为一个单位所拥有,且地理范围和站点数目均有限。

局域网可按网络拓扑进行分类:

  • 星形网,由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网以及多级星形结构的以太网获得了非常广泛的应用。
  • 环形网
  • 总线网,各站直接连在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免总线产生有害电磁波反射。
    总线网以传统以太网最为著名,但以太网后来又演变成了星形网

现在以太网已成为了局域网的同义词,因此本章从本节开始都是讨论以太网技术。

4.1共享信道

共享信道要着重考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体
资源。这在技术上有两种方法:

  • 静态划分信道,用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方法代价较高,不适合于局域网使用。
  • 动态媒体接入控制,又称为多点接入,特点是信道并非在用户通信时固定分配给用户。这里又分为以下两类:
    • 随机接入随机接入的特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。
    • 受控接入,受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询。

4.2适配器的作用

  • 早期的适配器是计算机主箱的网络接口板,称为网卡,用于连接外界局域网,现在的计算机主板镶嵌了这种适配器,不再单独使用网卡。
  • 通信适配器上面装有处理器和存储器(包括RAM、ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。
  • 由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。
  • 同时适配器还要实现以太网协议。
  • 计算机的硬件地址在适配器ROM中,软件地址(IP地址)在存储器中

4.3总线型网络拓扑—CSMA/CD协议

 为了通信简便,以太网有如下两种措施:

  • 采用无连接,不建立连接直接发数据、不需要ACK确认,提供不可靠交付,接收端CRC检测到错误帧,对于错误帧是否重传由高层决定,比如TCP协议,TCP协议检测到数据缺失,会让以太网重传。
    然而,总线型拓扑网络中只要有一台计算机发送数据,那么总线传输资源就会被占用,所以在同一时间只能允许一台计算机发送数据,否则会发生冲突。
    为了避免发生冲突,就有了CSMA/CD协议,意为载波监听多点接入/碰撞检测
  • 以太网使用曼彻斯特编码

“多点接入”就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总
线上。协议的实质是“载波监听”和“碰撞检测”。
“载波监听”也就是“边发送边监听”。载波监听就是在发送数据前后,每个站都必须不停地检测信道。如果检测出已经有其他站在发送,则本站就暂时不要发送数据。在发送中检测信道,是为了及时发现如果有其他站也在发送,就立即中断本站的发送。这就称为碰撞检测。

然而也会出现两个计算机同时发送消息的情况。

在使用CSMA/CD协议时,一个站不可能同时进行发送和接收。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)

4.4.1 截断二进制指数退避算法

以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。这种算法让发生碰撞而停止发送数据的站退避一个随机的时间再发送数据,而不是等待信道变为空闲后就立即再发送数据,因为几个发生碰撞的站将会同时检测到信道变成了空闲。如果大家都同时重传,必然接
连发生碰撞。如果采用退避算法,生成了最小退避时间的站将最先获发送权。以后其余的站
的退避时间到了,但发送数据之前监听到信道忙,就不会马上发送数据了。

4.4星形网络拓扑—集线器

  • 传统以太网使用粗同轴线缆后来演变成便宜灵活的双绞线,这种以太网采用星形拓扑,星形中心增加了一种可靠性非常高的设备,叫做集线器
  • 双绞线能够传送高速数据的主要措施是把双绞线的绞合度做得非常精确。这样不仅可使特性阻抗均匀以减少失真,而且大大减少了电磁波辐射和无线电频率的干扰。
  • 使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。
  • 一个集线器有许多端口,每个端口通过RJ-45插头用两对双绞线与一台计算机上的适配器相连。一个集线器很像一个多端口的转发器。
  • 集线器工作在物理层,每个端口仅转发比特,不进行碰撞检测

4.5以太网信道利用率

4.6以太网MAC层

4.6.1MAC的硬件地址

硬件地址又称为物理地址、MAC地址,它固化在适配器的ROM中,全球唯一,48比特位。如果计算机更换了适配器,那么其局域网位置就发生改变,因此严格的讲,MAC地址是每台计算机的唯一名字,而不能确定其位置。

IEEE规定地址字段的第一字节的最低有效位为I/G位。当I/G位为0时,地址字段表示一个单个站地址。当I/G位为1时表示组地址,用来进行多播(组播)。

在地址记法中有两种标准:第一种记法是把每一字节的最低位(即最低有效位)写在最左边(第一位)。IEEE802.3标准就采用这种记法。例如,十进制数11的二进制表示是1011,最高位写在最左边。但若使用IEEE802.3标准的记法,就应当记为1101,把最低位写在最左边。

适配器有过滤功能。当适配器从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则将此帧丢弃,

这里“发往本站的帧”包括以下三种帧:

  • 单播(unicast)帧(一对一),即收到的帧的MAC地址与本站的MAC地址相同。
  • 广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)
  • 多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。

以太网适配器还有一种混杂工作方式,可以窃听传输的帧。嗅探器就使用了这种适配器。

4.6.2MAC帧格式 

常用的以太网MAC帧格式有两种标准:DIX Ethernet V2标准(以太网V2标准)和IEEE的802.3标准。这里只介绍使用得最多的以太网V2的MAC帧格式,图中假定网络层使用的是IP协议。实际上使用其他的协议也是可以的。

4.7以太网扩展

扩展以太网更常用的方法是在数据链路层进行的。最初人们使用的是网桥(bridge)。网桥对收到的帧根据其MAC帧的目的地址进行转发和过滤。当网桥收到一个帧时,并不是向所有的端口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是把它丢弃(即过滤)。
1990年问世的交换式集线器(switching hub)代替了网桥。交换式集线器常称为以太网交换机(switch)或第二层交换机(L2 switch),强调这种交换机工作在数据链路层。

以太网交换机特点

  • 交换机实质是多端口网桥,采用全双工方式,可以并行。换句话说,每一个端口和连接到端口的主机构成了一个碰撞域,具有N个端口的以太网交换机的碰撞域共有N个。
  • 以太网交换机的端口还有存储器,能在输出端口繁忙时把到来的帧进行缓存
  • 以太网交换机即插即用,内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。实际上,这种交换表就是一个内容可寻址存储器CAM。以太网交换机由于使用了专用的交换结构芯片,用硬件转发收到的帧,其转发速率要比使用软件转发的网桥快很多。

以太网交换机自学习 

图示中以太网交换机有四个端口,各连一台计算机,计算机MAC地址分别是ABCD

考虑到主机更换适配器改变了MAC地址,那么就需要更改交换表的信息,因此交换表还有第三列用来记录时间,只要超过预设时间信息就会删除,以保证交换表数据符合当前网络的实际状况。
兜圈子问题

总线以太网使用CSMA/CD协议,以半双工方式工作。

以太网交换机不使用共享总线,没有碰撞问题,不使用CSMA/CD协议,以全双工方式工作。

既然连以太网的重要协议CSMA/CD都不使用了(相关的“争用期”也没有了),为什么还叫作以太网呢?原因就是它的帧结构未改变,仍然采用以太网的帧结构。

5.虚拟局域网VLAN

虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。

  • VLAN标签字段的长度是4字节,插入在以太网MAC帧的源地址字段和类型字段之间。
  • VLAN标签的前两个字节总是设置为0x8100(即二进制的1000000100000000),称为IEEE802.1Q标签类型。
  • VLAN标签的后两个字节中,前面4位实际上并没有什么作用。
  • 后面的12位是该虚拟局域网VLAN标识符VID(VLAN ID),它唯一地标志了802.1Q帧属于哪一个VLAN。12位的VID可识别4096个不同的VLAN。插入VLAN标签后,802.1Q帧最后的帧检验序列FCS必须重新计算。
  • 当数据链路层检测到MAC帧的源地址字段后面的两个字节的值是0x8100时,就知道现在插入了4字节的VLAN标签。由于用于VLAN的以太网帧的首部增加了4个字节,因此以太网的最大帧长从原来的1518字节(1500字节的数据加上18字节的首部和尾部)变为1522字节。

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

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

相关文章

【Kafka】Kafka-Eagle 和 Kafka-UI 的安装使用

前言 Kafka Eagle 提供了完善的管理页面,可以监控 Kafka 集群的整体运行情况,很方便的去管理和可视化 Kafka 集群的一些信息,例如 Broker 详情、性能指标趋势、Topic 集合、消费者信息等,在生产环境中经常使用。 一、MySQL 环境…

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层,它用于标识一台网络设备,其中IP地址分为两个部分,网络地址和主机地址,通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言,它细分为五类,A,B,C,D,E,…

TÜLU 3: Pushing Frontiers inOpen Language Model Post-Training

模型:https://huggingface.co/allenai 技术报告:https://allenai.org/papers/tulu-3-report.pdf 数据集:https://huggingface.co/collections/allenai/tulu-3-datasets-673b8df14442393f7213f372 GitHub:https://github.com/al…

【卷积神经网络】LeNet实践

模型建立 数据初始化根据模型搭建前向传播打印模型结构 前向传播数据初始化 def __init__(self):super(LeNet, self).__init__()# 第一层卷积层:# 输入:灰度图像 (1通道,大小 28x28)# 输出:6个特征图 (大小 28x28, 通过padding2保…

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录,例如 /opt/opencv-3.2:出错: 使用多线程编译错误1: stdlib.h: 没有那个文件或目录错误2:er…

python学习笔记—7—变量拼接

1. 字符串的拼接 print(var_1 var_2) print("supercarry" "doinb") name "doinb" sex "man" score "100" print("sex:" sex " name:" name " score:" score) 注意: …

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型:一种分布式系统中的消息传递方案,由消息队列、生产者和消费者组成消息队列:负责存储和管理消息的中间件,也称为消息代理(Message Broker)生产者:负责 产…

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …

聊聊Oracle自适应查询优化

成也AQO败也AQO 因为工作的原因,我们接触到的客户大部分是金融和运营商行业,这些客户有个最大的特点是追求稳定,对于使用数据库新特性持保守的态度,不会轻易尝试某些可能会导致生产系统不稳定的新特性。上线前通常都会将一些新特…

【数据库】选择题+填空+简答

1.关于冗余数据的叙述中,不正确的是() A.冗余的存在容易破坏数据库的完整新 B.冗余的存在给数据库的维护增加困难 C.不应该在数据库中存储任何冗余数据 D.冗余数据是指由基本数据导出的数据 C 2.最终用户使用的数据视图称为(&…

Comparator.comparing 排序注意

1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 &#xff08;正确的排序方法&#xff09;//倒…

R语言的数据结构-矩阵

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言医学数据分析实践-R语言的数据结构-CSDN博客 矩阵是一个二维数组&#xff0c;矩阵中的元素都具有相…

动态分区存储管理

一、实验目的 目的&#xff1a;熟悉并掌握动态分区分配的各种算法&#xff0c;熟悉并掌握动态分区中分区回收的各种情况&#xff0c;并能够实现分区合并。 任务&#xff1a;用高级语言模拟实现动态分区存储管理。 二、实验内容 1、实验内容 分区分配算法至少实现首次适应算法、…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF&#xff1a;免费好用的在线图片转 PDF 工具 在日常工作和生活中&#xff0c;我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料&#xff0c;还是整理照片集&#xff0c;将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

10、C++继承2

本章介绍菱形继承、虚继承和类型适应。 1、菱形继承与虚继承 在多继承中&#xff0c;可能会发生多个父类共基类的问题&#xff0c;即菱形继承。 例如&#xff1a; 解决办法&#xff1a; 父类继承基类时使用虚继承&#xff0c;在继承前加virtual&#xff0c;即&#xff1a;虚…

探索Telnet:实现Windows远程登录Ubuntu的实践指南

前言 在互联网技术日新月异的今天&#xff0c;远程登录已经成为许多开发者和系统管理员日常工作中不可或缺的一部分。虽然SSH已经成为远程登录的首选协议&#xff0c;但了解并掌握Telnet这一经典协议仍然具有重要意义。本文将带您一起探索如何使用Telnet实现Windows远程登录Ub…

字符串的常见操作【C语言】

一、案例内容 字符串的常见操作主要有创建&#xff0c;输出&#xff0c;查找指定字符或查找指定位置的字符、删除指定字符或删除指定位置的字符&#xff0c;在指定位置插入指定字符等。 二、案例代码 #include <stdio.h> #include <stdlib.h> #include <stri…

axios的引入和基本使用

一、axios的引入 使用 pnpm add axios 二、使用axios 三、axios的使用方法补充 axios除了直接使用它实例上的方法&#xff0c;还可以通过配置的方式进行使用axios({})&#xff0c;传入一个对象&#xff0c;这个对象可以有如下属性&#xff1a; url&#xff08;字符串&#…

Dart 3.6 发布,workspace 和 Digit separators

workspace 之前我们就聊过 Flutter 正在切换成 Monorepo 和支持 workspaces &#xff0c;Dart 3.6 开始&#xff0c;Pub 现在正式支持 monorepo 或 workspace 中 package 之间的共享解析。 pub workspaces 功能可确保 monorepo 中的 package 共享一组一致的依赖项&#xff0c…

三、nginx实现lnmp+discuz论坛

lnmp l&#xff1a;linux操作系统 n&#xff1a;nginx前端页面 m&#xff1a;mysql数据库&#xff0c;账号密码&#xff0c;数据库等等都保存在这个数据库里面 p&#xff1a;php——nginx擅长处理的是静态页面&#xff0c;页面登录账户&#xff0c;需要请求到数据库&#…