计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)
在许多情况下,我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展,然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。
在物理层扩展以太网
现在,扩展主机和集线器之间的距离的一种简单方法就是使用光纤和一对光纤调制解调器
光纤调制解调器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小,并且带宽很宽,因此使用这种方法可以很容易地使主机和几公里以外的集线器相连接。
如果使用多个集线器,就可以连接成覆盖更大范围的多级星形结构的以太网。这样做可以有以下两个好处。
- 使不同以太网上的计算机能够进行跨系的通信。
- 扩大了以太网覆盖的地理范围。
在物理层扩展以太网的缺陷
在多个以太网互连起来之前,每一个以太网是一个独立的碰撞域(collision domain,又称为冲突域),即在任一时刻,在每一个碰撞域中只能有一个站在发送数据。
若每个以太网的最大吞吐量是10Mbit/s,因此三个系总的最大吞吐量是30Mbit/s。多个以太网通过集线器互连起来后就把多个碰撞域变成一个碰撞域(范围扩大了),这时的最大吞吐量仍然是一个以太网的吞吐量10Mbit/s。
这就是说,当某个以太网的两个站在通信时所传送的数据会通过所有的集线器进行转发,使得其他系的内部在这时都不能通信(一发送数据就会碰撞)。
如果不同的以太网使用不同的以太网技术(如数据率不同),那么就不可能用集线器将它们互连起来。如果一个以太网使用10Mbit/s的适配器,而另外两个系使用10/100Mbit/s的适配器,那么用集线器连接起来后,大家都只能工作在10Mbit/s 的速率。
集线器基本上是个多端口的转发器,它并不能把帧进行缓存。
在数据链路层扩展以太网
网桥
扩展以太网更常用的方法是在数据链路层进行的。最初人们使用的是网桥(bridge)。网桥对收到的帧根据其MAC帧的目的地址进行转发和过滤。
当网桥收到一个帧时,并不是向所有的端口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是把它丢弃(即过滤)。
我们可从中得出网桥的一些特点:
网桥(bridge)工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层范畴的相关能力
- 网桥可以识别帧的结构。
- 网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧
![]()
两组共享式以太网被网桥连接起来,成为覆盖范围更大,站点数量更多的以太网网段,各自为一个独立的碰撞域
网桥的主要结构
其中转发表是网桥转发帧的依据,里面记录有网桥所知道各主机的MAC地址与各接口的对应关系,如右侧表格对应。
网桥的工作原理
主机A向D发送单播帧, 该单播帧被集线器发送给主机B、D和网桥。主机B、D根据mac帧中的目的地址知道这不是给自己的,于是丢弃。
网桥接口1接收到该单播帧后,从转发表中查找目的地址D,从查找结果可知该从接口2转发出去。
该单播帧在第二组以太网中再次被集线器发送给多个连接对象,主机D根据mac帧目的地址接受该帧,而主机E、F丢弃该单播帧。
而如果单播帧的传输对象在同一组以太网,也会被集线器传输到网桥,网桥查询该目的地址在接口1,就会被丢弃
当发送广播帧时:不用查找转发表,直接通过其他接口转发该广播帧。
以上的工作流程全部由网桥通过接口管理软件与网桥协议实体来完成的。
以太网交换机
1990年问世的交换式集线器(switching hub),很快就淘汰了网桥。交换式集线器常称为以太网交换机(switch)或第二层交换机(L2 switch),强调这种交换机工作在数据链路层。
我们将使用一个广泛接受的名词——以太网交换机
以太网交换机的特点
以太网交换机实质上就是一个多端口的网桥,通常都有十几个或更多的端口,和工作在物理层的转发器、集线器有很大的差别。
以太网交换机的每个端口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。
以太网交换机还具有并行性,即能同时连通多对端口,使多对主机能同时通信(而网桥只能一次分析和转发一个帧)。
相互通信的主机都独占传输媒体,无碰撞地传输数据。换句话说,每一个端口和连接到端口的主机构成了一个碰撞域,具有N个端口的以太网交换机的碰撞域共有N个。
采用哪种工作方式?是否采用协议?采用哪种协议?取决于以太网交换机接口所连接的对象
- 当交换机的接口与计算机或交换机连接时,可以工作在全双工方式,并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据,这样就不需要使用CSMA/CD协议了。
- 当交换机的接口连接的是集线器时,该接口就只能使用CSMACD协议并只能工作在半双工方式。
以太网交换机的端口还有存储器,能在输出端口繁忙时把到来的帧进行缓存。
因此,如果连接在以太网交换机上的两台主机,同时向另一台主机发送帧,那么当这台主机的端口繁忙时,发送帧的这两台主机的端口会把收到的帧暂存一下,以后再发送出去。
虽然许多以太网交换机对收到的帧采用存储转发方式进行转发,但也有一些交换机采用直通(cut-through)的交换方式。
直通交换不必把整个数据帧先缓存后再进行处理,而是在接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发端口,因而提高了帧的转发速度。如果在这种交换机的内部采用基于硬件的交叉矩阵,交换时延就非常小。
直通交换的一个缺点是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。在某些情况下,仍需要采用基于软件的存储转发方式进行交换,例如当需要进行线路速率匹配、协议转换或差错检测时。
以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。实际上,这种交换表就是一个内容可寻址存储器CAM(Content Addressable Memory)。
以太网交换机由于使用了专用的交换结构芯片,用硬件转发收到的帧,其转发速率要比使用软件转发的网桥快很多。
对于传统的10Mbits的共享式以太网,若共有10个用户,则每个用户占有的平均带宽只有1Mbits。若使用以太网交换机来连接这些主机,虽然在每个端口到主机的带宽还是10Mbits,但由于一个用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此对于拥有 10个端口的交换机的总容量则为100Mbits。这正是交换机的最大优点。
从共享总线以太网转到交换式以太网时,所有接入设备的软件和硬件、适配器等都不需要做任何改动。
以太网交换机一般都具有多种速率的端口,例如,可以具有10Mbits、100 Mbits和1Gbit/s的端口的各种组合 ,大部分接口支持多速率自适应
练习
以太网交换机自学习
假设现在A向B发送一帧。
如果此时B向A发送数据帧
如果与A共连一个集线器的G向A发送数据帧
每条记录都有自己的有效时间,到期自动删除,这是因为MAC地址与交换机接口的对应关系并不是永久性的。例如换主机,换网卡等。
为此,当交换表中写入一个项目时就记下当时的时间,只要超过预先设定的时间(例如 300秒),该项目就自动被删除。用这样的方法保证交换表中的数据都符合当前网络的实际状况。这就是说,交换表实际上是有三列,即 MAC地址、端口和写入时间。
练习
冗余链路及其危害
但有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路
当AB之间的链路故障时,数据帧还能通过BC、AC进行传输
但是冗杂链路也会带来一些负面效应,会形成网络环路,而网络环路会导致如下负面作用:
广播风暴:
主机收到重复的广播帧:
大量消耗主机资源。
交换机的帧交换表震荡(漂移)
生成树协议STP
从总线以太网到星型以太网
总线式以太网一问世就受到广大用户的欢迎,并获得了很快的发展。
然而随着以太网上站点数目的增多,使得总线结构以太网的可靠性下降。与此同时,大规模集成电路以及专用芯片的发展,使得星形结构的以太网交换机可以做得既便宜又可靠。
在这种情况下,采用以太网交换机的星形结构就成为以太网的首选拓扑。
总线以太网使用CSMA/CD 协议,以半双工方式工作。但以太网交换机不使用共享总线,没有碰撞问题,因此不使用CSMA/CD协议,而是以全双工方式工作。
既然连以太网的重要协议 CSMA/CD 都不使用了(相关的“争用期”也没有了),为什么还叫作以太网呢?原因就是它的帧结构未改变,仍然采用以太网的帧结构。
虚拟局域网
以太网交换机的问世,加速了以太网的普及应用。一个以太网交换机可以非常方便地连接几十台计算机,构成一个星形以太网。
当一个以太网包含的计算机太多,会有两个缺点:
- 在一个主机数量很大的以太网上传播广播帧,必然会消耗很多的网络资源。如果网络的配置出了些差错,可能会形成“广播风暴”,使整个的网络瘫痪。
- 其次,一个单位的以太网往往为好几个下属部门所共享。但有些部门的信息是需要保密的。许多部门共享一个局域网对信息安全不利。
我们可以很方便灵活地建立虚拟局域网VLAN (Virtual LAN)。这样就把一个较大的局域网,分割成为一些较小的局域网,而每一个局域网是一个较小的广播域。
虚拟局域网(Virtual LAN,VLAN)是局域网提供的一种网络服务,并不是一种新型局域网
- 管理员可以将连接在交换机上的站点按需要划分为多个与物理位置无关的逻辑组,每个逻辑组就是一个 VLAN。
- 属于同一VLAN的站点之间可以直接进行通信,而不属于同一VLAN的站点之间不能直接通信。
- 连接在同一交换机上的两个站点可以属于不同的VLAN, 而属于同一VLAN中的两个站点可以连接在不同的交换机上。
虚拟局域网的实现机制
虚拟局域网VLAN有多种实现技术,最常见的就是基于以太网交换机的接口来实现VLAN。这就需要以太网交换机能够实现以下两个功能:
- 能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧。
- 交换机的各接口可以支持不同的接口类型,不同接口类型的接口对帧的处理方式有所不同。
IEEE 802.1Q帧
IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。
VLAN标签
802.1Q帧一般不由用户主机处理,而是由以太网交换机来处理:
- 当交换机收到普通的以太网MAC帧时,会给其插入4字节的VLAN标签使之成为802.1Q帧,该处理简称为“打标签”。
- 当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标签使之成为普通的以太网MAC帧,该处理简称为“去标签”。
交换机转发802.1Q帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
不同的接口类型及其工作流程
根据接口在接收帧和发送帧时对帧的处理方式的不同,以及接口连接对象的不同,以太网交换机的接口类型一般分为Access和Trunk两种。
当以太网交换机上电启动后,若之前未对其各接口进行过VLAN的相关设置,则各接口的接口类型默认为Access,并且各接口的缺省VLAN ID为1,即各接口默认属于VLAN1。
- 对于思科交换机,接口的缺省VLAN ID称为本征VLAN (Native VLAN)。
- 对于华为交换机,接口的缺省VLAN ID称为端口VLAN ID (Port VLAN ID),简记为PVID。
交换机的每个接口有且仅有一个PVID。(接口默认值)
A发送广播帧
为了使A,B主机在vlan2,C,D主机在vlan3的需求:
这样Vlan2中的广播帧不会传送到vlan3,而vlan3中的广播帧也不会传送到Vlan2。
两个交换机通过Trunk类型的接口互连,并且在同一交换机中有着不同VLAN下的主机,Trunk接口将802.1Q帧“去标签”后进行转发的情况。
从A发送一个广播帧
两个交换机通过Trunk类型的接口互连,Trunk接口将802.1Q帧直接转发的情况。
在交换机1中,C发送的广播帧VID值为2,在接口4去标签转发;另外,因为交换机1的接口5是Trunk类型,所以该广播帧还会从交换机1的接口5转发出去。
但接口5的VID值与广播帧的不相同,所以以EEE802.1Q帧的形式转发给了交换机2
还需要知道的是:管理人员划分虚拟局域网的方法有多种。例如,按交换机的端口划分,或按MAC地址划分。每台主机并不知道自己的 VID值(但交换机必须知道这些信息)。
这些主机通过接入链路发送到交换机的帧都是标准的以太网帧。
不同类型接口的小结
高速以太网
100BASE-T以太网
- 100BASE-T是在双绞线上传送100Mb/s基带信号的星形拓扑以太网。
- 仍使用IEEE802.3的CSMA/CD协议。
- 它又称为快速以太网(Fast Ethernet)。
- 用户只需更换一张适配器,再配上一个100Mb/s的集线器,就可很方便地由10BASE-T以太网直接升级到100BASE-T,而不需要改变网络的拓扑结构。
100BASE-T以太网还有其他形式
吉比特以太网
IEEE 在1997年通过了吉比特以太网的标准802.3z,并在1998年成为正式标准。几年来,吉比特以太网迅速占领了市场,成为以太网的主流产品。
吉比特以太网的标准IEEE802.3z有以下几个特点:
- (1)允许在1Gb/s下全双工和半双工两种工作方式。
- (2)使用IEEE802.3协议规定的帧格式。
- (3)在半双工方式下使用CSMA/CD协议,而在全双工方式下不需要使用CSMA/CD协议。
- (4)与10BASE-T和100BASE-T技术向后兼容。
吉比特以太网的物理层使用以下两种成熟的技术:
- (1)来自现有的以太网。
- (2)ANSI制定的光纤通道FC
吉比特以太网工作在半双工方式时,就必须进行碰撞检测。
- 若将网段最大长度减小到10m,则网络基本失去了应用价值。
- 若将最小帧长增大到640字节,则当上层交付的待封装的协议数据单元PDU很短时,开销就会太大。
所以,干兆以太网的网段最大长度仍保持为100m,最小帧长仍保持为64字节(与10BASE-T和100BASE-T兼容)
吉比特以太网仍然保持一个网段的最大长度为100 m,但采用了“载波延伸”(carrier extension)的办法,使最短帧长仍为64字节。(这样可以保持兼容性),同时将争用期增大为512字节。
凡发送的MAC 帧长不足512字节时,就用一些特殊字符填充在帧的后面,使MAC帧的发送长度增大到512字节,这对有效载荷并无影响。
接收端在收到以太网的MAC 帧后,要把所填充的特殊字符删除后才向高层交付。当原来仅64字节长的短帧填充到512字节时,所填充的448字节就造成了很大的开销。
为此,吉比特以太网还增加了一种功能称为分组突发(packet bursting)。这就是当很多短帧要发送时,第一个短帧要采用上面所说的载波延伸的方法进行填充。但随后的一些短帧则可一个接一个地发送,它们之间只需留有必要的帧间最小间隔即可。这样就形成一串分组的突发,直到达到1500字节或稍多一些为止。
当吉比特以太网工作在全双工方式时(即通信双方可同时进行发送和接收数据),不使用载波延伸和分组突发。
千兆以太网有多种物理层标准
10吉比特以太网
2002年6月,IEEE 802.3ae委员会通过10吉比特以太网(10GE)的正式标准,10GE也称为万兆以太网。顺便指出,10吉比特就是10 × 比特.
万兆以太网并不是将干兆以太网的速率简单地提高了10倍。万兆以太网的目标是将以太网从局域网范围(校园网或企业网)扩展到城域网与广域网,成为城域网和广域网的主干网的主流技术之一。
IEEE 802.3ae万兆以太网的主要特点有:
- 速率为10Gbls
- 使用IEEE 802.3标准的帧格式(与10Mbls、100Mbls和1Gbls以太网相同)
- 保留IEEE802.3标准对以太网最小帧长和最大帧长的规定。这是为了用户升级以太网时,仍能和较低速率的以太网方便地通信。
- 只工作在全双工方式而不存在争用媒体的问题,因此不需要使用CSMA/CD协议,这样传输距离就不再受碰撞检测的限制。
- 增加了支持城域网和广域网的物理层标准
![]()
40/100吉比特以太网
需要指出的是,40GbE/100GbE 以太网只工作在全双工的传输方式(因而不使用CSMA/CD协议),并且仍然保持了以太网的帧格式以及802.3标准规定的以太网最小和最大帧长。
100GbE 在使用单模光纤传输时,仍然可以达到40km的传输距离,但这需要波分复用(使用4个波长复用一根光纤,每一个波长的有效传输速率是25Gbit/s)。
现在以太网的工作范围已经从局域网(校园网、企业网)扩大到城域网和广域网,从而实现了端到端的以太网传输。这种工作方式的好处是:
- (1)以太网是一种经过实践证明的成熟技术,无论是互联网服务提供者ISP还是端用户都很愿意使用以太网。当然对ISP来说,使用以太网还需要在更大的范围进行试验。
- (2)以太网的互操作性也很好,不同厂商生产的以太网都能可靠地进行互操作。
- (3)在广域网中使用以太网时,其价格大约只有同步光纤网SONET的五分之一。以太网还能够适应多种传输媒体,如铜缆、双绞线以及各种光缆。这就使具有不同传输媒体的用户在进行通信时不必重新布线。
- (4)端到端的以太网连接使帧的格式全都是以太网的格式,而不需要再进行帧的格式转换,这就简化了操作和管理。
以太网从10 Mbit/s到10 Gbit/s甚至到400 Gbit/s的演进,证明了以太网是:
- (1)可扩展的(速率从10 Mbit/s 到400 Gbit/s)。
- (2)灵活的(多种媒体、全/半双工、共享/交换)。
- (3)易于安装的。
- (4)稳健性好的。
使用以太网进行宽带接入
IEEE在2001年初成立了802.3EFM工作组,专门研究高速以太网的宽带接入技术问题。
以太网宽带接入具有以下的特点:
- 可以提供双向的宽带通道。
- 可以根据用户对带宽的需求灵活地进行带宽升级。
- 可以实现端到端的以太网传输,中间不需要再进行帧格式的转换。这就提高了数据的传输效率且降低了传输成本。
- 发但是不支持用户身份鉴别。
然而以太网的帧格式标准中,在地址字段部分并没有用户名字段,也没有让用户键入密码来鉴别用户身份的过程。如果网络运营商要利用以太网接入到互联网,就必须解决这个问题。
有人就想法子把数据链路层的两个成功的协议结合起来,即把 PPP协议中的PPP帧再封装到以太网中来传输。是“在以太网上运行 PPP”。
- PPPoE(PPP over Ethernet)的意思是”在以太网上运行PPP“,它把PPP协议与以太网协议结合起来 — 将PPP帧再封装到以太网中来传输。
- 现在的光纤宽带接入FTTx都要使用PPPoE的方式进行接入。在PPPoE弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网。
- 利用ADSL进行带宽上网时,从用户个人电脑到家中的ADSL调制解调器之间,也是使用RJ-45和5类线(即以太网使用的网线)进行连接的,并且也是使用PPPoE弹出的窗口进行拨号连接的。
需要注意的是,在用户家中墙上是通过电话使用的 RJ-11插口,用普通的电话线传送PPP 帧。这已经和以太网没有关系了。所以这种上网方式不能称为以太网上网,而是利用电话线宽带接入到互联网。
相关文章:

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)
在许多情况下,我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展,然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在,扩展主机和集线器之间的距离的一种简单方法就是…...

Nuxt 项目集成第三方UI组件库(九)
Nuxt.js 本身并不提供内置的 UI 组件库,它是一个用于构建服务端渲染(SSR)和静态生成(SSG)Vue.js应用的框架。Nuxt.js 的设计目的是提供基础的架构和配置,以便开发者可以根据自己的需求选择和集成第三方 UI …...

vulnhub靶场之Jarbas
1 信息收集 1.1 主机发现 arp-scan -l 发现主机IP地址为:192.168.1.16 1.2 端口发现 nmap -sS -sV -A -T5 -p- 192.168.1.16 存在端口22,80,3306,8080 1.3 目录扫描 dirsearch -u 192.168.1.16 2 端口访问 2.1 80端口 2.2…...

解决onlyoffice警告的一些思路
解决思路: 1、监听出现警告的事件:已经实现 <script setup> import {message} from "ant-design-vue";const onError (event) > {console.log("ONLYOFFICE Document Editor reports an error: code " event.data.error…...

快速上手指南:使用 Minikube 在本地运行 Kubernetes 集群
前言 Minikube 是一个开源工具,用于在本地运行 Kubernetes 集群。它提供了一种简单的方法来在本地开发和测试 Kubernetes 应用程序,而无需设置完整的 Kubernetes 集群。以下是 Minikube 的基本使用步骤: 安装 Minikube 安装依赖项 虚拟化…...

【C语言】指针(1):入门理解篇
目录 一、内存和地址 1.1内存 1.2 深入理解计算机编址 二、指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量和解应用操作符 2.2.1 指针变量 2.2.2 解引用操作符 2.3指针变量的大小 三、指针变量类型的意义 3.1 指针的解引用 3.1指针-整数…...

经典双运算放大器LM358
前言 LM358双运放有几十年的历史了吧?通用运放,很常用,搞电路的避免不了接触运放,怎么选择运放,是工程师关心的问题吧? 从本文开始,将陆续发一些常用的运放,大家选型可以参考&#…...

adb不插usb线通过wifi调试
说起做手机开发也有好多年了,说来惭愧,我最近才知道安卓手机是可以不插数据线进行开发调试的。起因是公司近期采购了一批安卓一卡通设备,需要对其进行定制开发APP,但是由于我插USB调试发现没有反应。通过询问厂家才知道可以通过WIFI进行调试。…...

vulnhub--IMF
环境 攻击机:192.168.96.4 靶机:ip未知 主机探测 确定靶机ip为32的主机 端口扫描 访问80端口 外围打点 在contact.php页面源码中找到了flag1 之后没啥突破 但查看网络后发现contact.php页面请求的三个js文件的文件名很有特点,猜测是base64编码…...

ePTFE膜(膨体聚四氟乙烯膜)应用前景广阔 本土企业技术水平不断提升
ePTFE膜(膨体聚四氟乙烯膜)应用前景广阔 本土企业技术水平不断提升 ePTFE膜全称为膨体聚四氟乙烯膜,指以膨体聚四氟乙烯(ePTFE)为原材料制成的薄膜。ePTFE膜具有耐化学腐蚀、防水透气性好、耐候性佳、耐磨、抗撕裂等优…...

C++与C#创建位图,是否需要区分RGB和BGR模式
在处理位图时,确实需要区分RGB和BGR模式,因为不同的库和API对颜色通道的排序有不同的约定。具体到C与C#,这一点也是需要注意的。 C 创建位图 使用GDI或WIC (Windows Imaging Component): 当你在C中使用这些Windows API创建或操作位图时&…...

web学习笔记(八十)
目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件,然后在绑定事件内部通过wx.login…...

深度解析 Raft 分布式一致性协议
本文参考转载至:浅谈 Raft 分布式一致性协议|图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com) 本篇文章将模拟一个KV数据读写服…...

Android10以上实现获取设备序列号功能
Android10以上实现获取设备唯一标识,目前只支持华为和荣耀设备。实现原理:通过无障碍服务读取序列号界面。 public class DeviceHelper implements Application.ActivityLifecycleCallbacks {static final String TAG "WADQ_DeviceHelper";s…...

从0到1:培训老师预约小程序开发笔记二
背景调研 培训老师预约小程序: 教师和学生可以更便捷地安排课程,并提升教学质量和学习效果,使之成为管理和提升教学效果的强大工具。培训老师可以在小程序上设置自己的可预约时间,学员可以根据老师的日程安排选择合适的时间进行预…...

【FFmpeg】av_read_frame函数
目录 1.av_read_frame1.2 从pkt buffer中读取帧(avpriv_packet_list_get)1.3 从流当中读取帧(read_frame_internal)1.3.1 读取帧(ff_read_packet)1.3.2 解析packet(parse_packet)1.3…...

女生学计算机好不好?感觉计算机分有点高……?
众所周知,在国内的高校里,计算机专业的女生是非常少的,很多小班30人左右,但是每个班女生人数只有个位数。这就给很多人一个感觉,是不是女生天生就不适合学这个东西呢?女生是不是也应该放弃呢?当…...

windows10/11 如何开启卓越性能模式
在Windows 10和Windows 11中,可以通过以下步骤启用“卓越性能”模式。请注意,卓越性能模式仅在Windows 10 Pro for Workstations和Windows 10 Enterprise版本中可用。 使用命令提示符启用卓越性能模式 打开命令提示符: 按Win X键࿰…...

JSP WEB开发(二) JavaBean
目录 JavaBean JavaBean特征 JavaBean的标签 JavaBean 的范围 标签 JavaBean JavaBean 是一种符合某些命名和设计规范的 Java 类,它是一种可重用组件技术,主要用于封装数据,执行负责的计算任务,封装事务逻辑等。JavaBean 的实…...

G2.【C语言】EasyX绘制颜色窗口
1.窗口 窗口:宽度*高度(单位都是像素) #include <stdio.h> #include <easyx.h> int main() {initgraph(640, 480);getchar();return 0; } 640是宽,480是高 2.操作窗口的三个按钮 #include <stdio.h> #incl…...

异构计算技术与DTK异构开发套件
异构计算技术与DTK异构开发套件 费林分类法:SISD SIMD MISD MIMD 指令流I和数据流D MIMD不同存储结构: UMA均匀存储访问模型NUMA非均匀存储访问模型Cluster集群 现在以Cluster为主 DTK异构开发套件 生态结构 异构并行编程模型是什么 HIPÿ…...

数据结构之“栈”(全方位认识)
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 前言 栈是一种数据结构,具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲!! …...

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)
vue打包部署后 浏览器缓存问题,导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下: 每次build打包部署到服务器上时,偶尔会出现前端资源文件不能及时更新到最新,浏览器存在缓存问题,这时在…...

解决vscode配置C++编译带有中文名称报错问题
在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…...

A61 STM32_HAL库函数 之 TIM扩展驱动 -- C -- 所有函数的介绍及使用
A61 STM32_HAL库函数 之 TIM扩展驱动 -- C -- 所有函数的介绍及使用 1 该驱动函数预览1.24 HAL_TIMEx_OnePulseN_Stop1.25 HAL_TIMEx_OnePulseN_Start_IT1.26 HAL_TIMEx_OnePulseN_Stop_IT1.27 HAL_TIMEx_ConfigCommutationEvent1.28 HAL_TIMEx_ConfigCommutationEvent_IT1.29 …...

使用瀚高数据库开发管理工具进行数据的备份与恢复---国产瀚高数据库工作笔记008
使用瀚高数据库,备份 恢复数据 然后找到对应的目录 其实就是hgdbdeveloper,瀚高的数据库开发管理工具 对应的包中有个dbclient 这个目录,选中这个目录以后,就可以了,然后 在对应的数据库,比如 data_middle 中,选中 某个模式,比如bigdata_huiju 然后右键进行,点击 恢复,然…...

css 选择器汇总
目录 所有选择器伪类选择器 所有选择器 选择器用法id选择器#myid类选择器.myclassname标签选择器div,h1,p相邻选择器h1p子选择器ul > li后代选择器li a通配符选择器*属性选择器a[rel“external”]伪类选择器a:hover, li:nth-child 伪类选择器 在CSS3中新增了一个结构伪类选…...

My Greedy Algorithm(贪心算法)之路(一)
引子:我们之前,其实也遇到过贪心算法,0,1背包就是一个典型的贪心算法问题,那今天我就来开始my-Greedy Algorithm的道路。 什么是贪心算法? 我愿称贪心算法为贪婪鼠目寸光,贪心算法(Greedy Alg…...

Win11 Python3.10 安装pytorch3d
0,背景 Python3.10、cuda 11.7、pytorch 2.0.1 阅读【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程-CSDN博客 1,解决方法 本来想尝试,结果发现CUB安装配置对照表里没有cuda 11.7对应的版本,不敢轻举妄动&#x…...

kotlin 中 string array 怎么表示
在 Kotlin 中,字符串数组可以使用 Array<String> 类型表示。你可以通过多种方式来创建和初始化字符串数组。以下是几种常见的方法: 使用 arrayOf 函数: val stringArray arrayOf("Hello", "World", "Kotli…...