数据链路层讲解

news2024/9/21 19:32:37

目录

一、数据链路层解决的问题

二、以太网协议

2.1 认识以太网

2.2 以太网帧格式

2.3 MAC地址

2.3.1 认识MAC地址

2.3.2 对比MAC地址和IP地址

2.4 MTU

2.4.1 认识MTU

2.4.2 MUT对IP协议的影响

2.4.3 MTU对UDP协议的影响

2.4.4 MTU对TCP协议的影响

2.5 数据跨网络传输的过程

三、ARP协议

3.1 认识ARP协议

3.2 ARP数据格式

3.3 ARP协议的工作流程


一、数据链路层解决的问题

  • IP拥有将数据跨网络从一台主机送到另一台主机的能力,但IP并不能保证每次都能够将数据可靠的送到对端主机,因此IP需要上层TCP协议为其提供可靠性保证。如数据丢包后TCP让IP重发数据,最终在TCP提供的可靠性机制下IP就能够保证将数据可靠的发送到对端主机
  • 但数据在网络传输时需要一跳一跳的从一台主机跳到另一台主机,最终才能将数据转发到目标主机,因此要将数据发送到目标主机的前提是,需要先将数据转发给与当前主机直接相连的下一跳主机。两台主机直接相连也意味着两台主机属于同一网段,因此将数据转发到下一跳主机实际是局域网通信,这也是链路层需要解决的问题
  • 网络层IP提供的是跨网络发送数据的能力,传输层TCP是为数据发送提供可靠性保证的,而链路层解决的则是两台相连主机之间的通信问题

二、以太网协议

2.1 认识以太网

局域网技术

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

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

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

  • 数据在发送之前先进行数据封装,此时数据链路层给数据封装上对应的局域网的报头
  • 若数据要进行跨网络传输,那么就需经过路由器转发
  • 当数据在路由器数据链路层进行向上交付时,会将该数据对应的局域网报头去掉
  • 而当路由器该数据转发给下一跳之前,又会给该数据封装下一跳网络所对应的局域网报头

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

以太网通信原理

  • "以太网"不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了部分物理层的内容。如:以太网规定了网络拓扑结构,访问控制方式,传输速率等
  • 以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
  • 以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据

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

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

扩展:

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

碰撞避免算法

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

  • 对于这个问题,以太网的做法就是先不限制各个主机发送数据的能力,局域网中的每个主机想发数据的时候直接发,但是只要发送出去的数据与其他主机发送的数据产生了碰撞,就执行碰撞避免算法
  • 碰撞避免算法:当主机发送出去的数据产生碰撞时,该主机等待随机时间(避免再次碰撞)后再进行数据重发,在主机等待的时候就能够就能够尽可能让局域网中的数据消散
  • 以太网中主机发送的数据产生碰撞后该主机会执行碰撞避免算法,所以说以太网是基于碰撞区和碰撞检测的局域网通信标准

碰撞避免算法就是主机等待一段时间后重新发送数据,因此以太网底层也有重传机制,只不过以太网的重传机制只是为了保证将数据从局域网中的一台主机发送到另一台主机

令牌环网

  • 令牌环网(Token-ring network)的传输方法在物理上采用了星形拓扑结构,但逻辑上是环形拓扑结构
  • 令牌环网的通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等
  • 令牌环网中各节点间采用多站访问部件(Multistation Access Unit,MAU)连接在一起,MAU是一种专业化集线器,用来围绕工作站计算机的环路进行传输

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

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

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帧中的目的地址来判断该MAC帧是否是发给自己的,若是发送给自己的则会再对其进行CRC校验,若校验成功则会根据该MAC帧的帧协议类型,将该MAC交付给对应的上层协议进行处理

2.3 MAC地址

2.3.1 认识MAC地址

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

可以使用 ifconfig 命令来查看MAC地址

2.3.2 对比MAC地址和IP地址

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

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

数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的(其实可能会发生变化,NAT技术),而数据每进行一跳后其源MAC地址和目的MAC地址都会变化

2.4 MTU

2.4.1 认识MTU

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

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

2.4.2 MUT对IP协议的影响

因为数据链路层规定了最大传输单元MTU,所以若IP层一次要发送的数据量超过了MTU,此时IP层就需要先对该数据进行分片(前提IP层没有设置禁止分片,否则报文直接丢弃),然后才能将分片后的数据向下交付

数据的分片和组装发生在IP层,不仅源端主机可能会对数据进行分片,数据在路由过程中的路由器也可能对数据进行分片。因为不同网络的MTU是不一样的,若传输路径上的某个网络的MTU比源端网络的MTU小,那么路由器就可能对IP数据报再次进行分片

具体分片与组装过程可浏览博主另一篇文章:

(28条消息) 网络层——IP协议_GG_Bond19的博客-CSDN博客icon-default.png?t=N3I4https://blog.csdn.net/GG_Bruse/article/details/130640438

2.4.3 MTU对UDP协议的影响

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

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

2.4.4 MTU对TCP协议的影响

对于TCP来说,分片也会增加TCP报文丢包的概率,与UDP不同的是TCP丢包后会进行重传,因此TCP应该尽量减少因为分片导致的数据重传

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

2.5 数据跨网络传输的过程

以主机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,于是路由器B再将数据向下进行交付,重新封装MAC帧的帧头和帧尾,但此时封装后的MAC帧当中的源MAC地址和目的MAC地址又变了,变成了路由器B的MAC地址和路由器C的MAC地址
  • 不断重复上述过程,直到最终数据转发至主机B

因此数据在进行跨网络传输时,其对应的源IP地址和目的IP地址一般是不会变化的,而该数据的源MAC地址和目的MAC地址却是一直在变化的,根本原因就是因为该数据对应的上一跳主机和下一跳主机在不断变化

三、ARP协议

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

3.1 认识ARP协议

为什么会存在ARP这样的协议?

以刚才的例子为例,当数据从主机A经过各种路由转发到达路由器D,此时路由器D就需要将数据转发给主机B完成数据的路由

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

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

ARP协议的定位

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层

其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际数据链路层还有两种协议叫做ARP和RARP

ARP、RARP和MAC帧协议虽然都属于数据链路层的协议,但ARP协议和RARP协议属于MAC帧的上层协议

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

3.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字节的填充字段

3.3 ARP协议的工作流程

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

ARP请求的过程

首先路由器D需要先构建ARP请求

  • 首先,因为路由器D构建的是ARP请求,因此ARP请求中的op字段设置为1
  • ARP请求中的硬件类型字段设置为1,表示当前使用的是以太网通信
  • ARP请求中的协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址
  • ARP请求中的硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位
  • ARP请求中的发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址
  • ARP请求中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于路由器D不知道主机B的MAC地址,因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播

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数据包中的目的IP地址不匹配后,就会将这个ARP请求报文丢弃
  • 局域网当中其他不相干的主机在收到这个ARP请求报文后,不是在MAC帧层丢弃的,而是在ARP层发现该ARP数据包的目的IP与自己的IP不匹配后丢弃的

总结:

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

ARP应答的过程

主机B在应答时首先需要构建ARP应答

  • 因为主机B构建的是ARP应答,因此ARP应答中的op字段设置为2
  • ARP应答当中的硬件类型、协议类型、硬件地址长度、协议地址长度的值与ARP请求中设置的值相同
  • ARP应答中的发送端以太网地址和发送端IP地址,对应就是本机的MAC地址和IP地址
  • ARP应答中的目的以太网地址和目的IP地址,对应就是路由器D的MAC地址和IP地址。路由器D发来的ARP请求中告知了其MAC地址和IP地址,因此主机B是知道的

ARP应答构建完成后,为了能将ARP应答发送到以太网当中,也需将ARP数据包向下交付给MAC帧协议,封装成MAC帧

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

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

  • 此时局域网中的每台主机在底层都能收到这个MAC帧,但局域网中的不相干的主机,在发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终路由器D会将解包后MAC帧的有效载荷向上交付给自己的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地址

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

上面说的只是路由器D要将数据发送给主机B的时候,需要通过ARP获得主机B的MAC地址,但实际数据在路由过程中的每一跳可能都需要发起ARP请求,询问下一跳主机对应的MAC地址,因为在每一跳时一般都是只知道下一跳的IP地址,而并不知道其对应的MAC地址的

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

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

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

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

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

理论上可以,但并不妥

  • 对于局域网中的大多数主机来说,收到的这个报文其实早就应该被丢弃,而现在这个报文却交付到了IP层,这对网络资源和系统资源来说都是一种浪费。因此在底层MAC帧层就应该判定这个报文是不是发送给当前主机的,而不是当数据向上交付到了IP层再来判断
  • 此外,若无脑使用广播的方式来进行数据的发送,会使得广播和单播的概念变得模糊不清,明明是想发送数据给局域网中的一台主机,但却采用了广播的方式,这显然是不合理的

RARP协议

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

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

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

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

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

相关文章

什么是npu算力盒子,算力是越大越好吗?

一、什么是npu算力盒子?该怎么选? NPU(神经处理单元)算力盒子是一种专门用于进行人工智能计算的硬件设备,其中集成了高性能的NPU芯片。NPU是一种针对深度学习任务进行优化的处理器,具备高度并行计算和低功…

MySQL高级_第07章_InnoDB数据存储结构

MySQL高级_第07章_InnoDB数据存储结构 1.数据库的存储结构:页 索引结构给我们提供了高效的索引万式,不过索引信息以及数据记录都是保存在文件上的, 确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责…

文章生成器-原创文章生成器

在网络营销领域,优质文章是吸引新客户和保留老客户的重要工具。然而,生成高质量且符合SEO优化的文章并不是一件容易的事情。这就是为什么网站文章生成器如今备受欢迎的原因。而在众多的文章生成工具中,147GPT批量生成文章软件是一款非常出色的…

apache doris自定义udf函数

环境准备 下载(https://doris.apache.org/zh-CN/download) 上传文件到节点,并解压 apache-doris-fe-1.2.4.1-bin-x86_64.tar.xzapache-doris-be-1.2.4.1-bin-x86_64-noavx2.tar.xzapache-doris-dependencies-1.2.4.1-bin-x86_64.tar.xz部署 官方部署文档(本文的端口均有修…

如何将 Confluence 数据自助迁移至 ONES|软件国产化替代

近日,ONES 升级了 Confluence 自助迁移工具,对迁移数据类型、迁移范围、迁移模式等多个维度的能力进行了提升,帮助企业更高效率、更低成本地将 Confluence 中的数据完整、准确地迁移至 ONES Wiki 中。 在 Confluence 与 ONES 服务资源充足的…

win下C++通过Clion部署yolov5——libtorch+yolov5

libtorchyolov5 一、环境配置二、下载官网例子三、测试3.1、创建项目3.2、cmakelist.txt编写3.3、运行测试 一、环境配置 需要配置libtorchOpenCV,此处参考博文:clion配置libtorchOpenCV环境配置。 环境解决后即可开始下一步啦。 二、下载官网例子 下…

【debug】分立式网络切片部署

文章目录 启动代码部署全流程网络配置配置静态IP 部署核心网部署基站部署基站1部署基站2部署基站3查看amf日志 问题routing-config的问题不加routing-config与加的对比调查 nr-binder功能测试基站1基站2ifconfig路由表方向解决 路由规则 启动代码 启动OAI核心网 #开启数据转发…

WebAssembly--执行与内存模型

前言 在WebAssembly初探中,我们已经了解了WebAssembly的发展和标准演进过程,并简单地体验了一把Wasm的应用,本篇文章会通过对比WASM和JS的执行流程,WebAssembly的内存模型深入分析,带大家理解下WebAssembly部分核心原…

IOC/DI注解开发管理第三方bean

文章目录 1 环境准备2 注解开发管理第三方bean步骤1:导入对应的jar包步骤2:在配置类中添加一个方法步骤3:在方法上添加Bean注解步骤4:从IOC容器中获取对象并打印 3 引入外部配置类3.1 使用包扫描引入步骤1:在Spring的配置类上添加包扫描步骤2:在JdbcConfig上添加配置注解步骤3:…

谷歌浏览器F请求解析说明

请求 Queued at 0s:表示该请求加入到请求队列中的时刻,请求队列在打开F12后第一次发送请求的时候创建,直到关闭控制台的时候销毁。 Started at 7.14s:表示请求开始处理的时刻。 Queueing:表示请求从加入到请求队列…

LeetCode 107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II 描述 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 示例1 输入:root [3,9,20,null,null,15,7] 输出…

Alibaba(一)项目环境合理选择

在学习以及开始使微服务架构前,我们需要先选择各各模块适配的版本。以此来避免生产过程或者学习过程出现令人头疼的版本问题,避免花费大量时间去找更正这些版本错误,导致耽误学习,影响项目进度。 项目源码,及源文档地址…

XPATH 使用备忘

xpath的基础使用 一.xpath简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。 XPath 使用路径表达式在 XML 文档中进行导航XPath 包含一个标准函数库XPath 是 XSLT 中的主要元素XPath 是一个 W3C 标准 节点 在 XPath 中&…

【Linux】有名管道介绍及使用

目录 有名管道有名管道使用 橙色 有名管道 有名管道(FIFO)和匿名管道(pipe)有一些特点是相同的,不一样的地方在于: FIFO在文件系统中作为一个特殊文件存在,但文件中是没有内容的, FIFO中的内容存放在内存中。当使用FIFO的进程退出后, FIFO文…

在离散混合制造环境中应用制造运营模型

介绍 本文所描述的所有制造过程、场景、操作模式和技术应用目前都在一个成熟的离散和离散/批量混合制造企业中使用,该企业生产和维修复杂的机器。该企业生产的产品范围从从棒材加工的简单零件到复杂的机械装配;最终产品包括许多内部和第三方提供的子装配…

5.2————运算符重载

对于基本的数据类型,C提供来许多预先定义的运算符,如“,-,*,/”等,他们的运用大家应该已经很熟悉了。那么我们引入运算符重载的概念到底是为什么,比如是我们的加号可以完成基本数据类型的相加&a…

mysql 修改最大连接数max_connections

mysql 修改最大连接数max_connections 1、编辑mysql service文件2、编辑mysql 配置文件3、重启MySQL服务4、查看max_connections 1、编辑mysql service文件 查找mysql service文件 find / -name mysql*.service先备份再编辑 cp /usr/lib/systemd/system/mysqld.service /usr…

【C++ STL】 那年我双手插兜,学会了stackqueuepriority_queue基础知识及其模拟实现【对话情景版】

文章目录 📍前言C STL 之 stack&queue基础知识及其模拟实现📍容器适配器🎈什么是适配器?🎈STL标准库中stack和queue的底层结构🎈deque的简单介绍(了解)📌deque的原理介绍📌deque…

基于SSM的书画拍卖网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

软件系统外包开发流程及注意事项

当企业发展到一定规模后,市场上通用的软件系统往往就无法满足自身的业务需要,这时就需要企业开发属于自己软件系统。软件系统是一项比较复杂的系统工程,从需求分析、代码开发到最后的上线需要比较长的时间,需要有系统的管理方法才…