【计算机网络】数据链路层

文章目录

  • 1. 数据链路层
    • 1.1 数据链路层简介
    • 1.2 数据链路层做了什么
  • 2. 以太网协议
    • 2.1 以太网
    • 2.2 以太网帧的格式
    • 2.3 MAC地址
    • 2.4 MTU
  • 3. 数据跨网络传输的整体过程
  • 4. ARP协议
    • 4.1 认识ARP协议
    • 4.2 ARP协议的格式
    • 4.3 ARP协议的工作流程

1. 数据链路层

1.1 数据链路层简介

数据链路层位于网络层之下,物理层之上。是我们程序员需要了解的最下层协议。该层的主要功能就是在物理网络上提供可靠的数据传输,确保从一个节点(设备)到另一个节点的数据传输是无差错、有序、可靠和高效的。

1.2 数据链路层做了什么

将数据一跳一跳地从当前主机发送到目标主机,需要将当前数据转发给与当前主机相连的下一跳主机,而两台主机直接相连也就意味着这两台主机属于同一网段,因此将数据转发给下一跳主机实际是属于局域网通信范畴的,而这实际就是数据链路层要解决的问题。

网络层IP提供的是跨网络发送数据的能力,传输层TCP是为数据发送提供可靠性的,而链路层解决的就是两台相连主机之间的通信能力。

2. 以太网协议

2.1 以太网

局域网技术

不同局域网采用的通信技术可能是不同的,常见的局域网技术有以下三种:

  • 以太网:以太网是一种计算机局域技术,一种应用最普遍的局域网技术。
  • 令牌环网:令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包。
  • 无线LAN/WAN:无线局域网是有线网络的补充和扩展,现在已经是计算机网络的一个重要组成部分。

虽然网络中各个局域网采用的通信技术可能是不同的,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术。

  • 数据在发送之前首先要进行数据封装,此时链路层会封装上对应的局域网的报头。
  • 如果数据要跨网络传输,那么就一定要经过路由器。
  • 而路由器收到数据后,会将局域网报头去掉。
  • 而当路由器将数据转发给下一跳数据时,又会将该数据封装上下一跳网络对应的局域网报头。

也就是说,网络中的路由器会不断去掉数据旧的局域网报头,并添加上新的局域网报头,因此数据在进行跨网络传输时,就算所需跨越的网络采用的是不同的局域网技术,最终也能够正确实现跨越。

以太网通信原理

  • “以太网”不是一种具体的网络,而是一种技术标准,它既包含了数据链路层的内容,也包含了一些物理层的内容。例如,以太网规定了网络拓补结构,访问结构方式,传输速率等。
  • 以太网中的网线必须双绞线,传输速率10M,100M,1000M等。

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中所有主机都能收到该数据。

  • 比如当局域网当中的主机A想要发送数据给主机B时,其实局域网当中的每一台主机都能收到主机A发出去的数据,只不过最终只有主机B会将主机A发来的数据向上进行交付。
  • 局域网当中的其他主机虽然也收到了主机A发出的数据,但经过识别之后发现这个数据不是发送个自己的,于是就会直接将数据丢弃而不会向上进行交付。

也就是说,在进行局域网通信的时候,局域网当中的所有主机都能够看到局域网中传输的任何数据,只不过每个主机都只关心发送给自己的主机罢了。

扩展:

  • 网络抓包不仅能够抓到发送给自己的报文数据,也能抓取到发给别人的报文数据,实际就是因为在进行网络抓包时,主机将从局域网中收到的所有报文数据都向上交付了而已。
  • 网卡有一种模式叫做混杂模式,被设置为混杂模式的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。

碰撞避免算法

由于以太网中的所有主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰。站在系统的角度看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。

  • 对于这个问题,以太网的做法就是先不限制各个主机发送数据的能力,局域网中每个主机想法数据的时候直接发就行了,但是只要发送出去的数据与其他主机发送的数据产生了碰撞,那就得执行碰撞避免算法。
  • 所谓的碰撞避免算法就是,当主机发送出去的数据产生碰撞时,该主机需要等待一段时间之后再重新发送数据。

其实碰撞避免算法就可以说是以太网的重传机制,只不过以太网的重传机制是保证数据从同一局域网中的一台主机发送到另一台主机。

令牌环网

令牌环网的通信传输介质可以是无屏蔽双绞线,屏蔽双绞线和光纤等。


在令牌环网中有一种专门的帧称为“令牌”,这个令牌会在环路上持续地传输,只有拿到令牌的主机才能发送数据,因此发送出去的数据不会发生碰撞。

  • 令牌环网当中的令牌就像系统当中用于保护临界资源的互斥锁一样,令牌与互斥锁一样都有忙和闲两种状态,忙表示令牌已经被占用,而闲则表示令牌没有被占用。
  • 想要发送数据的计算机必须先检测到闲令牌,并将其设置为忙状态,然后才能发生数据,这就和申请互斥锁的过程很像。
  • 此外,由于令牌在网环上是按顺序依此传递的,因此对于所有入网的计算机而言,它们获取令牌的机会都是相等的,因此不会造成某台主机发送数据的饥饿问题。

2.2 以太网帧的格式

在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
  • 帧协议类型字段有三种值,分别对应IP协议、ARP协议和RARP协议。
  • 帧末尾是CRC校验码

MAC帧如何将报头与有效载荷分离?

以太网MAC帧的帧头和帧尾都是固定长度的,因此当底层收到一个MAC帧以后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了。

MAC帧如何得知将有效载荷交给上层哪一个协议?

以太网MAC帧的上层协议不止一组,因此在将MAC帧的报头和有效载荷分离之后,还需要确定将分离出来的有效载荷交付给上层的哪一个协议。

在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷之后,根据该字段将有效载荷交付给对应的上层协议即可。

举个例子

假设局域网当中的主机A想要将IP数据报发送给同一局域网当中的主机B,那么主机A封装MAC帧当中的目的地址就是主机B的MAC地址,源地址就是主机A的MAC地址,而帧协议的类型就是0800,紧接着就是要发送的IP数据报,帧尾部分对应就是CRC校验。
在这里插入图片描述
当主机A将该MAC帧发送到局域网之后,局域网当中的所有主机都可以收到这个MAC帧,包括主机A自己。

  • 主机A收到该MAC帧之后,可以对收到的MAC帧进行CRC校验,如果校验失败则说明数据传输过程中发生了碰撞,此时主机A就会执行碰撞避免算法,后续对MAC帧进行重发。
  • 主机B收到该MAC帧之后,提取出MAC帧当中的目的地址,发现目的地址与自己的MAC地址相同,于是在CRC校验成功后会将有效载荷交付给上层IP层进行进一步处理。
  • 局域网中的其他主机收到该MAC帧之后,也会提取出MAC帧当中的目的地址,发现目的地址与自己的MAC地址不匹配之后,会将数据丢弃。

也就是说,当底层收到一个MAC帧之后,会根据MAC帧当中的目的地址来判断该MAC帧是否是发送给自己的,如果是,会进行CRC校验,校验成功后,会根据该MAC帧的帧协议类型,将该MAC帧交付给对应的上层协议进行处理。

2.3 MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • MAC地址长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示,例如:08:00:27:03:fb:19。
  • MAC地址在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)。

我们可以通过ifconfig命令查看我们的MAC地址。
MAC地址前面的ether就是以太的意思。
在这里插入图片描述

MAC地址与IP地址的对比

实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,一套是源MAC地址和目的MAC地址。

  • IP地址描述的是路途总体的起点和终点。
  • MAC地址描述的是路途上每一个区间的起点和终点。

比如我们坐公交车时,源IP地址就是我们上车的站点,目的IP地址就是我们最终要下车的站点;而源MAC地址就是公交车上一站的站点,目的MAC地址就公交车下一站的站点。

因此数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的,而数据每进行一跳后其MAC地址和目的MAC地址都会变化。

但是,实际数据在路由的过程中,如果使用NAT技术,源IP地址和目的IP地址也会发生改变。

2.4 MTU

MTU(Maximum Transmission Unit,最大传输单元)描述的是底层数据帧一次最多可以发送的数据量,这个限制是不同的数据链路层对应的物理层产生的。

  • 以太网对应MTU的值一般是1500字节,不同的网络类型有不同的MTU,如果一次要发送的数据超过了MTU,则需要在IP层对数据进行分片。
  • 此外,以太网规定MAC帧中数据的最小长度为46字节,如果发送数据小于46字节,则需要在数据后面补填充位,比如ARP数据包的长度就是不够46字节的。

MTU对IP协议的影响

因为数据链路层规定了最大传输单元MTU,所以如果IP层一次要发送的数据量超过了MTU,此时IP层就需要先对该数据进行分片,然后才能将分片的数据向下交付。

  • IP层会将较大的数据进行分片,并给每个分片数据包进行标记。
  • 当对端IP层收到这些分片报文之后,需要将这些分片数据进行组装,拼装在一起之后再交付给上层。
  • 如果分片后的报文在网络传输过程中丢包了,那么对端IP层在进行数据组装时就会失败,此时就需要传输层进行数据重传。

MTU对UDP协议的影响

IP报头当中如果不携带选项字段,那么IP报头的长度就是20字节,而UDP采用的是定长的8字节报头,因此如果UDP一次携带的数据超过了 1500 - 20 - 8 = 1472 字节,此时数据就需要在IP层进行分片。

  • 分片后得到的多个IP数据报中有任意一个在传输过程中丢失,都会引起接收端IP层重组失败。
  • 假设在网络传输时丢包的概率是万分之一,如果将数据拆分为一百份进行发送,那么此时丢包的概率就上升到了百分之一。
  • 因为只要有一个报文丢包了也就等同于整个报文丢失了,因此分片会增加UDP报文丢包的概率。

MTU对TCP协议的影响

对于TCP协议来说,分片也会增加TCP协议丢包的概率,但与UDP协议不同的是,TCP丢包还需要进行数据重传。

  • TCP发送的数据包不能无限大,应该受制于MTU,我们将TCP的单个数据报的最大报文长度,称为MSS(Max Segment Size)。
  • TCP通信双方在建立连接的过程中,会进行MSS协商,最终选取双方支持的MSS值当中较小的值作为最终MSS。
  • MSS的值实际就是在TCP首部的40字节的选项字段当中的。
  • 最理想的情况下,MSS的值正好就是数据不会在IP层进行分片的最大长度。

MSS与MTU关系如下图:
在这里插入图片描述

3. 数据跨网络传输的整体过程

在这里插入图片描述
以主机A将数据跨网络传输给主机B为例,数据路由的过程如下:

  • 主机A想要将数据跨网络传输给主机B,需要先将数据交给路由器A,因此主机A需要将封装好的MAC帧发送到局域网当中,此时MAC帧当中的源MAC地址和目的MAC地址,对应的就是主机A的MAC地址和路由器A的MAC地址。
  • 此时主机A所在局域网当中所有主机都能收到这个MAC帧,但是只有路由器A发现该MAC帧当中的目的MAC地址与自己的MAC地址相同,于是才会对该MAC地址进行解包,并将解包后剩下的IP数据报交付给IP层。
  • 路由器A的IP层拿到解包后的IP数据报之后,会提取出IP报头当中的目的IP地址,然后查询路由表中确定需要将该数据转发给路由器B,于是路由器A再将数据向下进行交付,重新封装MAC帧的帧头和帧尾,但此时封装后的MAC帧当中的源MAC地址和目的MAC地址,就变成了路由器A的MAC地址和路由器B的MAC地址。
  • 与路由器A直接相连的主机虽然可能有很多,但最终只有路由器B发现该MAC帧当中的目的MAC地址与自己的MAC地址相同,于是才会对该MAC地址进行解包,并将解包后剩下的IP数据交付给IP层。
  • 路由器B的IP层拿到解包后的IP数据报之后,同样会提取出目的IP地址,根据目的IP地址查询路由表找到路由器C,再将数据向下交付,重新封装MAC帧的帧头和帧尾,将路由器C的MAC地址填入目的MAC地址。
  • 不断重复以上过程,直到数据转发给数据B。

通俗来说,就是源IP地址和目的IP地址就是我们出行的起点和终点,然后这起点和终点是不会改变的。源MAC地址和目的MAC地址是我们路途中的上一站和下一站,它们是一直改变的。且下一站的选择,不是随意选的,我们要根据目的地来选择一个最优的。

4. ARP协议

4.1 认识ARP协议

地址解析协议(Address Resolution Protocol,ARP)协议,是根据IP地址获取MAC地址的一个TCP/IP协议。

以刚才的例子为例,当数据从主机A经过各种路由转发到达路由器D,此时路由器D就需要将数据转发给主机B完成数据的路由。
在这里插入图片描述

  • 由于路由器D和主机B是属于同一个局域网的,因此路由器D能够直接将数据交给主机B,但是要给局域网中一台主机发送数据,前提是得先知道对方的MAC地址。
  • 但路由器D此时只知道主机B的IP地址,因此路由器D必须通过某种方式获取主机B的MAC地址。

也就是说,在同一局域网中要给对方发送消息,就必须得知对方的MAC地址,而实际大部分情况下我们只知道对方的IP地址,因此需要通过ARP协议来根据IP地址获取目标主机的MAC地址。

ARP协议的位置

数据链路层最典型的协议就是MAC帧协议,但实际数据链路层还有两种协议叫做ARP和RARP。
在这里插入图片描述
ARP、RARP和MAC帧协议虽然都属于数据链路层的协议,但是ARP协议和RARP协议属于MAC帧的上层协议。

  • 也就是说,MAC帧的上层协议不一定就直接是网络层的协议,MAC帧的上层协议有可能属于数据链路层的协议,但就是位于MAC帧的上层。
  • 与之类似的,网络层当中的ICMP协议和IGMP协议,这两个协议虽然与IP协议都属于网络层,但这两个协议属于IP的上层协议。

4.2 ARP协议的格式

在这里插入图片描述

  • 硬件类型指数据链路层的网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节,因此MAC地址是48位的
  • 协议地址长度对于IP地址为4字节,因此IP地址是32位的
  • op字段为1表示ARP请求,op为2表示ARP应答

以ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成MAC帧时还需要补上18字节的填充字段。

4.3 ARP协议的工作流程

还是以刚才的例子为例,路由器D要将数据转发给同一局域网中的主机B,前提是路由器D必须知道主机B的MAC地址,而现在路由器D只知道主机B的IP地址,因此路由器需要向主机B发起ARP请求,然后等待主机B发送ARP应答得知主机B的MAC地址。

ARP请求的过程

在ARP请求之前,路由器D会构建一个ARP请求。在ARP请求构建成功之后,为了能将ARP请求发送到以太网当中,还需要将ARP数据包向下交付给MAC帧协议,封装到MAC帧。

  • 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是主机B和路由器D的MAC地址,但由于路由器D不知道主机B的MAC地址,因此MAC帧报头当中的以太网目的地址的二进制序列也只能设置为全1表示在局域网进行广播。
  • 因此这里封装的一个ARP请求数据包,因此MAC帧当中的帧类型字段设置为0806。
  • 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验即可。

MAC帧封装完毕之后,路由器D就可以将封装好的MAC帧以广播的方式发送给到局域网当中了。

  • 因为这个MAC帧是以广播的方式形式了,因此局域网当中的每台主机在收到这个MAC帧之后,都会对该MAC帧进行解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层。
  • 当ARP层收到这个数据包后,发现ARP数据包当中的op字段为1于是判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段,虽然局域网当中的所有主机都会将该数据包交给ARP层,但最终只有主机B发现ARP数据包当中的目的IP地址与自己相同,因此只有主机B会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的地址与自己不匹配之后,就会将这个ARP请求报文丢弃。

需要注意的是,局域网当中其他不相干的主机在收到这个ARP请求报文后,不是在MAC帧层丢弃的,而是在ARP层该ARP数据包的目的IP与自己的IP不匹配后丢弃的。

总结:

  1. 发起方构建ARP请求,以广播的方式发送给每一个主机。
  2. 每台主机都能识别接收,然后根据MAC帧的帧类型字段将有效载荷交付给每个主机的ARP层。
  3. 其他不相关主机立马根据目的IP,在自己的ARP协议内部丢弃ARP请求,只有目标主机会处理请求。

ARP应答的过程

主机B在进行ARP应答之前,需要先构建ARP应答。对ARP应答构建完成后,为了能将ARP应答发送到以太网当中,也需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧。

  • 封装MAC帧报头时,以太网目的地址和以太网地址,对应也是路由器D和主机B的MAC地址。
  • 因为这里封装的是一个ARP应答数据包,因此MAC帧当中的帧类型字段设置为0666。
  • 由于ARP应答数据包的长度也只有28字节,不足46字节,因此也需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验。

MAC帧封装完毕后,主机B就可以将封装好的MAC帧发送到局域网当中了。

  • 此时局域网当中的每台主机在底层MAC帧,但局域网当中的不想干的主机,在发现MAC帧对应的以太网地址与自己不同之后,就会将该MAC地址丢弃,而不会交付给上层ARP层,最终只有路由器D会将解包后的有效载荷向上交付给自己的ARP层。
  • 当路由器D的ARP层收到这个数据包,发现ARP数据包当中的op字段为2,于是判定这是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时路由器D就拿到了主机B的MAC地址。

需要注意的是,局域网当中其他不相干的主机在收到这个ARP应答报文后,直接在MAC帧就丢弃了,并没有将其交付给自己的ARP层。

ARP缓存表

实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a查看。
在这里插入图片描述
需要注意的是,缓存表中的表项有过期时间,这个时间一般为20分钟,如果20分钟内没有再次使用某个表项,那么该表项就会失效,下次使用时就需要发起ARP请求来获得目的主机的硬件地址。

MAC帧的报头当中已经涵盖了源和目的MAC地址,为什么ARP的报头当中还有这两个字段?

  • MAC帧和ARP虽然都在数据链路层,但毕竟是上下层的关系,因此它们不会互相关心彼此报头当中的数据。
  • 此外,如果底层网络采用的不是以太网,而是其他类型的网络,此时ARP层的MAC地址就是必要的了。

在进行局域网通信时,为什么不直接以广播的方式发送数据?

在进行局域网通信时,就算只知道对方的IP地址,而不知道对方的MAC地址,也可以以广播的方式将数据发送到局域网当中,此时局域网当中的主机也能够在IP层比对目的IP地址与自己是否相符,来判断这个数据是否是发给自己的。

理论上确实可以这样,但这种方式是不妥的。

  • 对于局域网当中的大多数主机说,收到的这个报文其实早就应该丢弃,而现在这个报文却交付到了IP层,我们都知道IP层是属于操作系统管控的,因此这对网络资源和系统资源来说都是一种浪费。
  • 因此在底层MAC帧层就应该判断这个报文是不是发送给当前主机的,而不是数据向上交付到了IP层再来判断。

什么时候需要发起ARP请求?

我们刚才说的只是路由器D要将数据发送给主机B的时候,需要通过ARP获得获得主机B的MAC地址,但实际数据在路由过程中的每一跳都需要发起ARP请求,因为在每一跳时我们一般都是只知道下一跳的IP地址,而并不知道第一的MAC地址的。

注意:ARP属于局域网通信的协议标准,因此一台主机不能跨网络向另一台主机发起ARP请求。

RARP协议

RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议。

也就是说,某些情况下我们可能只知道一台主机的MAC地址,此时要得知该主机的IP地址可以使用RARP协议。

理论上,RARP协议一定比ARP协议简单,因为既然我们已经知道一台的MAC地址了,那么我们就已经可以直接向主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK 企业级日志分析系统

ELK 企业级日志分析系统 一、ELK 概述1.ELK 简介2.日志分析系统 二、为什么要使用 ELK1.原因:2.完整日志系统基本特征3.ELK 的工作原理 三、部署ELK1.ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)2.部署 Elasticsearch 软件&#x…

自然语言处理学习笔记(二)————语料库与开源工具

目录 1.语料库 2.语料库建设 (1)规范制定 (2)人员培训 (3)人工标注 3.中文处理中的常见语料库 (1)中文分词语料库 (2)词性标注语料库 (3…

刷题笔记 day7

力扣 209 长度最小的子数组 解法:滑动指针(对同向双指针区间内的数据处理) 1)先初始化 两个指针 left ,right。 2)右移指针right的同时使用sum记录指针right处的值,并判断sum的值是否满足要求&…

linux下性能分析工具Perf安装与用法

目录 1、Perf介绍 2、火焰图分类 (1)CPU (2)Memory Flame Graphs (3)Off-CPU Flame Graphs (4)Hot/Cold Flame Graphs (5)Differential 3、火焰图安装命令 …

Ubuntu安装harbor(http模式)并随便上传一个

Ubuntu安装harbor(http模式) docker和harbor的介绍就免了,都不知道啥东西,还安装搞毛 先安装docker环境 不要问,软件源之类的配置,挨个梭就行 sudo apt update sudo apt install apt-transport-https ca…

uniapp 路由跳转方式

export function goBack(index, url) {if (index 1) { // 关闭当前页,返回上一页面或多级页面。uni.navigateBack({delta: url,animationType: pop-out,animationDuration: 300});} else if (index 2) { // 保留当前页,跳转到非tabbar页面,…

不规则文件转JSON

需求分析: 有时候,我们取出来的数据并不是一个规则的JSON文件,这个时候面对存库还是ES检索都是一个问题,所以我们就需要进行解析,然而用字符串分割是不现实的,我们需要一种快速的方法。 问题解决&#x…

C++ ------ 类和对象的深究

文章目录 构造函数初始化列表概念特性 explicit关键字 static成员概念特点 友元友元函数友元类概念特性 内部类概念特点 匿名对象拷贝对象时的一些编译器优化 构造函数 我们来看下面的代码&#xff1a; #include <iostream> using namespace std;class Date { public:D…

MyBatis-XML映射文件

XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致&#xff08;EmpMapper对应EmpMpper.xml&#xff09;&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09; ​​​ 在maven项目结构中所有的配置文件都在resources目录之下&…

python与深度学习(十五):CNN和宝可梦模型

目录 1. 说明2. 宝可梦模型2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存 3. 宝可梦的CNN模型可视化结果图4. 完整代码5. 宝可梦的迁移学习 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;宝可梦模型&#xff0c;是自制数据集的例子。之前…

面向视频会议场景的 H.266/VVC 码率控制算法研究

文章目录 面向视频会议场景的 H.266/VVC 码率控制算法研究个人总结摘要为什么要码率控制码率控制的关键会议类视频码率控制研究背景视频会议系统研究现状目前基于 R-λ模型的码率控制算法的问题文章主要两大优化算法优化算法1&#xff1a;基于视频内容相关特征值的码率控制算法…

C# 图表控件库 ScottPlot

推荐使用ScottPlot原因&#xff1a; 1.图形界面简洁&#xff0c;样式丰富 2.代码较少 3.官方提供多种实例源码&#xff0c;并可以直接通过图形界面查看&#xff0c;便于快速开发 Github源码链接&#xff1a;https://github.com/ScottPlot/ScottPlot 官网WindowFrom Demo实例…

安防视频监控汇聚平台EasyCVR接入Ehome告警,公网快照不显示是什么原因?

智能视频监控汇聚平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;视频监控管理平台…

小米平板6将推14英寸版!与MIX Fold 3同步推出

今天&#xff0c;知名数码博主数码闲聊站爆料消息&#xff0c;称小米平板6将推出一款Max版本&#xff0c;预计与小米MIX Fold 3同步推出。 据介绍&#xff0c;小米平板6 Max将是小米首款14英寸大屏的旗舰平板&#xff0c;平板搭载骁龙8处理器&#xff0c;在性能释放、影音表现、…

LabVIEW深度相机与三维定位实战(下)

‍‍&#x1f3e1;博客主页&#xff1a; virobotics的CSDN博客&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f37b;上期文章&#xff1a;『LabVIEW深度相机与三维定位实战&#xff08;上&#xff09;』 &#…

计算机视觉:替换万物Inpaint Anything

目录 1 Inpaint Anything介绍 1.1 为什么我们需要Inpaint Anything 1.2 Inpaint Anything工作原理 1.3 Inpaint Anything的功能是什么 1.4 Segment Anything模型&#xff08;SAM&#xff09; 1.5 Inpaint Anything 1.5.1 移除任何物体 1.5.2 填充任意内容 1.5.3 替换任…

国内GitHub加速访问工具-Fetch GitHub Hosts

一、工具介绍 Fetch GitHub Hosts是一款开源跨平台的国内GitHub加速访问工具&#xff0c;主要为解决研究及学习人员访问 Github 过慢或其他问题而提供的 Github Hosts 同步工具。 项目原理&#xff1a;是通过部署此项目本身的服务器来获取 github.com 的 hosts&#xff0c;而…

el-table点击表格某一行添加到URL参数,访问带参URL加载表格内容并滚动到选中行位置 [Vue3] [Element-plus 2.3]

写在最前 需求&#xff1a;有个表格列出了一些行数据&#xff0c;每个行数据点击后会加载出对应的详细数据&#xff0c;想要在点击了某一行后&#xff0c;能够将该点击反应到URL中&#xff0c;这样我复制这个URL发给其他人&#xff0c;他们打开时也能看到同样的行数据。 url会根…

铰接式车辆的横向动力学仿真提供车辆模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

WAF绕过-AWVS+Xray+Goby+sqlmap-绕过宝塔防火墙

WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 1、什么是WAF&#xff1f; Web Application Firewall&#xff08;web应用防火墙&#xff09;&#xff0c;一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…