交换机VLAN技术和实验(eNSP)
目录
一,交换机的演变
1.1,最小网络单元
1.2,中继器(物理层)
1.3,集线器(物理层)
1.4,网桥(数据链路层)
二,交换机的工作行为
2.1,行为
2.2,总结
三,VLAN
3.1,VLAN简介
3.2,VLAN的基本概念
四,交换机的链路类型以及VLAN划分
4.1,交换机链路类型(请仔细阅读,对接下来的实验理解有极大帮助)
五,vlan-access&trunk实验
5.1,实现在一个交换机下,同vlan间通信,而不同vlan间隔离的配置。
5.2,实现在不同的交换机下,相同的vlan下的pc可以进行通信
5.3,遗留问题
六,vlan-access&trunk实验
6.1,SW4配置
七,单臂路由实验
7.1,配置细节
7.2,思考
八,三层交换机实现单臂路由效果
8.1,配置细节
最后
一,交换机的演变
1.1,最小网络单元

最小网络单元有有以下三个部分构成:
网卡:将我们的信息转化为电信号
网线:作为传输介质传输电信号
协议栈:类似于两台主机之间沟通的语言,比如说两台主机之间都要支持tcp/ip协议栈才可以进行对应的通信。
缺点:1,网线传输距离短,超过一百米就会开始丢包(丢失数据)。2,要是多台主机之间要通信,这种连接结构显然太麻烦了。
1.2,中继器(物理层)

如上图:
我们在网线之间添加一个信号放大器(中继器)用来放大信号,这样可以延长信息在网线上的传输距离。
缺点:因为中继器只有两个口,所以想要进行三台主机之间的通信是不行的。
1.3,集线器(物理层)

如上图:
集线器上有多个口,用于连接,这样就解决了中继器接口少的问题。
工作模式:当一个接口收到数据之后,集线器会复制这份数据,并且向其他接口发送(不包括收到数据的接口),这种工作模式叫做泛洪。
缺点:一个集线器上的所有接口形成了一个冲突域,假如pc1发数据,集线器上收到数据之后,会向其他接口也发送这份数据,这时上图的pc2和pc3在这个时间段都是不可以发送数据的。但是这样的话,我们传输介质的利用率就降低了。
补充:这项防止数据发送冲突的协议叫做CSMA/CD:带碰撞检测的载波侦听多路访问协议。
1.4,网桥(数据链路层)

如上图:
工作原理简介:
缓存:网桥首先会对收到的数据帧进行缓存并处理
过滤:通过查询mac地址表,判断入帧的目标节点是否位于发送这个帧的网段中(同一端口中) ,如果是,网桥就不把帧转发到网桥的其他端口。(网桥设备中存在一张mac地址表,上面记录着网桥的每个端口下所连接的主机的mac地址)
转发:查询mac地址表之后,发现帧的目标节点位于另一个网络,网桥就将帧发往正确的网段 (向另一端口转发)
缺点:一个网桥的端口只有两个,所以要先连接多个设备,还是需要添加集线器进行来连接,但是添加了集线器的话就又回到了老问题,冲突域。所以总的来说:网桥的缺点就是,这冲区域他虽然分离了,但是又好像和没分一样。
1.5,交换机

交换机在网桥的基础上添加了更多的端口,以至于不需要集线器就可以连接多台主机,转发的速度更快。
二,交换机的工作行为
2.1,行为
1,学习:记录数据帧的源MAC以及入接口信息
2,转发
       如果是单播的数据帧,此时根据目的MAC查看MAC地址表,查看是否存在映射关系
         >1.如果存在映射关系,“已知单播数据帧” 直接按照MAC地址表的映射关系转发
         >2.如果不存在映射关系,"未知单播数据帧" 执行泛洪的动作:xxxxx
       如果是广播的数据帧/组播的数据帧
         >1.泛洪:从除了接收端口之外的其他所有端口都复制发送一份
 3,丢弃:如果交换机的接口收到某一个数据帧,发现还要将其从接收端口进行转发,此时会将其丢弃
4,现在我们来模拟一个场景看交换机具体如何学习mac地址
主机 A 向主机 D 发送数据:A 发送数据帧,数据帧的源 MAC 地址是 11:11:11:11:11:11 ,目的 MAC 地址是 44:44:44:44:44:44 。交换机端口 1 收到数据帧,记录源 MAC 地址和端口的对应到 MAC 地址表项。交换机不知道目的 MAC 地址在哪个端口,于是将数据帧进行泛洪,即转发到除端口 1 之外的所有端口。B 和 C 发现目的 MAC 地址不是自己,将丢弃数据帧。

D 发现是发送给自己的数据帧,于是发送应答数据帧,源 MAC 地址是 44:44:44:44:44:44 ,目的 MAC 地址是 11:11:11:11:11:11 。交换机端口 4 收到数据帧,记录 D 的 MAC 地址表项。于是交换机知道了主机 A 和主机 D 的 MAC 地址信息,之后会根据 MAC 地址表进行转发。交换机通过同样的方式,可以学习到主机 B 和主机 C 的 MAC 地址。

2.2,总结
 1.学习:学习源MAC以及入接口 构建MAC地址表[CAM]
B=广播 M=组播 U=unknow 未知单播帧
 2.转发:对于BUM数据帧,执行泛洪的行为,对于已知单播数据帧,执行查表进行转发行为。
 3.丢弃:收到数据将数据从该接口还要进行发送,此时则会丢弃。
 学习:报文学习=动态MAC地址表 静态MAC地址表=人为配置的MAC地址表信息
 MAC地址表存在时间=300S 老化时间 =5M
 五分钟如果没有关于该MAC的数据信息,此时该MAC对应的MAC地址表项,会自然老化。
 意外:与MAC地址表关联的物理接口故障后,此时与该接口关联的所有动态的MAC地址信息将被全部删除。
 特点:交换机的一个接口可以同时对应多个不同的MAC地址;对于某一个相同的MAC地址,交换机只会有一个对应接口。
三,VLAN
3.1,VLAN简介
定义:
 VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内。
目的:
 以太网是一种基于CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量。
在这种情况下出现了VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。
3.2,VLAN的基本概念
VLAN标签:
 要使设备能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。
VLAN帧格式:

体现在报文上就是这样,这是在trunk口下抓的报文(在一般的口上抓不到,因为access口会剥掉tag,untagged hybrid也是抓不到的,还可以在tagged hybrid抓,因为他也是不剥tag的):

 TPID:Tag protocol ID: 802.1Q=0x8100 =公有化的802.1Q 2B
 pri:优先级 3bit 2^3=8 代表vlan数据的优先级==QOS-服务质量
 CFI:第一个1bit为 0=以太网数据帧=经典格式, 1=非以太网数据帧 不经典
默认交换机所有的接口属于VLAN-1。
 Vlan-id:VLAN号 12bit 2^12=4,096,所有的VLAN-ID号有0-4095,但是0和4095保留,所以可以使用的就是1-4094(这一点在我们的实验中会有体现)
 TCI:tag control information:tag控制信息 
 将接口划分进VLAN后,每个接口都会有所属的链路类型,此时不同的链路类型对于数据有不同的处理行为。
缺省VLAN:
 缺省VLAN又称PVID(Port Default VLAN ID)。前面提到,设备处理的数据帧都带Tag,当设备收到Untagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。
接口收发数据帧时,对Tag的添加或剥除过程。
对于Access接口,缺省VLAN就是它允许通过的VLAN,修改缺省VLAN即可更改接口允许通过的VLAN。
 对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN。接口的缺省VLAN和允许通过的VLAN需要分别配置,互不影响。
其他知识点:
PVID===port vlan-id:接口的VLAN-ID号
 对于交换机的泛洪:会向除接受端口之外其他能够转发本VLAN的端口进行泛洪。
 1.接收方向不会进行TAG的剥离。
 2.交换机内部处理的都是带TAG的数据帧。
四,交换机的链路类型以及VLAN划分
4.1,交换机链路类型(请仔细阅读,对接下来的实验理解有极大帮助)
1,Access(接入类型)特点:只能属于某一个VLAN,此时只能为1个VLAN打/剥离标签。用于:连接终端设备 PC/打印机/摄像机/路由器/
接收方向:
- 如果收到空白的数据帧,打上接口的PVID,进入交换机内部处理。
- 如果收到携带标签的数据帧,首先查看数据的VLAN-ID和接口的PVID是否一致,如果一致,则正常接收,进入交换机内部处理,如果不一致,直接丢弃。
发送方向:
- 发送时数据与PVID相同的VLAN-ID号剥离掉。
2,Trunk(干道类型)特点:同时允许多个不同的VLAN通过。列表:VLAN的允许列表 // 通过的前提条件 保证存在该VLAN,作用: 交换机与交换机互联的链路
接受方向:
第一种可能:
- 如果收到空白的数据帧,则首先打上接口的PVID,然后执行下一步。
- 查看VLAN允许列表,如果不存在,则丢弃,如果存在,则接收,数据进入交换机内部处理。
第二种可能:
- 如果收到携带标签的数据帧,直接查看VLAN允许列表,如果不存在,则丢弃,如果存在,则
 接收,数据进入交换机内部处理。
发送方向:
- 查看数据存在的VLAN是否在接口的VLAN允许列表中,如果不存在,则丢弃,如果存在,则
 进行下一步。
- 此时会将数据中VLAN-ID号与接口的PVID进行比对,根据不同的结果进行不同的处理行为。如果相同:此时会将该VLAN剥离掉发送;如果不同:此时不会对数据进行任何的修改动作。
3,Hybrid(混杂端口) 特点:同时能够为多个不同的VLAN在发送方向时 剥离标签
接受方向:
第一种可能:
- 如果收到空白的数据帧,则首先打上接口的PVID,然后执行下一步。
- 查看VLAN允许列表,如果不存在,则丢弃,如果存在,则接收,数据进入交换机内部处理。
第二种可能:
- 如果收到携带标签的数据帧,直接查看VLAN允许列表,如果不存在,则丢弃,如果存在,则
 接收,数据进入交换机内部处理。
发送方向:
- 查看数据存在的VLAN是否在接口的VLAN允许列表中,如果不存在,则丢弃,如果存在,则
 进行下一步
- Hybrid根据接口的发送方向,定义多个VLAN以带标签/不带标签的方式通过。
如果是tagged模式,则带着VLAN-标签发送。 ===Trunk/多个vlan通过
如果是untagged模式,则剥离VLAN-标签发送。 ==Access/叠加式Access ()
4,补充
4.1,当接口配置了PVID之后,此时如果Hybrid接口下没有对该VLAN 执行任何的untagged 或tagged,则此时vlan允许列表中,无该VLAN。
4.2,交换机如果修改PVID之后,且两端的PVID号不一致,可能会导致相同的VLAN之间无法通信,不同的VLAN之间可以通信,所以通常,不会修改接口的PVID。
4.3,无论Access/Trunk:最多同时可以为1个vlan剥离标签。
4.4,VLAN-ID等于PVID时,trunk接口才会剥离标签。
五,vlan-access&trunk实验
网络拓扑图如下,
拓扑图1

实验要求:
1,使用vlan技术实现在pc3可以和pc7通信但是不可以和pc4通信。
2,在不同的交换机下,相同的vlan下的pc是可以进行通信的,比如说上图的pc3可以和pc5通信。
3,具体信息已在拓扑图中标出。
5.1,实现在一个交换机下,同vlan间通信,而不同vlan间隔离的配置。
首先实现在一个交换机下,同vlan间通信,而不同vlan间隔离的配置。
对pc的配置:pc7的配置如下,这里没有配置网关,因为本实验没有涉及三层。

在SW2中做如下配置
1,进入系统视图
2,修改设备名字(以便于区别设备,我这里是改为SW2)
3,创建需要的vlan,我们这里需要vlan 10和vlan 20(命令:vlan batch 10 20)
4,进入接口,为接口配置链路类型,在这里g0/0/2和g0/0/1用到的接口类型都是access(命令:port link-type access 可简写为 p l a,如下图)
5,然后,为接口配置对应的vlan,在这里g0/0/2用的vlan是20(命令:port defualt vlan 20,简写为:p d v 20),

进行上面的操作后,我们对SW2的g0/0/2接口就操作完成了。那么对于g0/0/1和g0/0/4接口,我们如法炮制即可,只是我们要想pc3可以和pc7通信而不可以和pc4通信,那么我们需要将g0/0/4也配为vlan10,g0/0/1配为vlan20即可。
然后,我们使用pc3 ping pc4和pc7测试一下。我们发现达到了要求。

5.2,实现在不同的交换机下,相同的vlan下的pc可以进行通信
现在我们再来实现在不同的交换机下,相同的vlan下的pc可以进行通信的要求。
对于SW3的接口g0/0/1和g0/0/2接口的配置我这里就不展示了,如上都是配置access口。
现在展示,SW3的接口g0/0/3接口的配置,注意在这里我们要配置接口为trunk口。
配置如下:
1,port link-type trunk 简写为 p l t。
2,port trunk allow-pass vlan all,意思是允许所有的vlan报文通过,包括vlan10和20,这里我们也可以写port trunk allow-pass vlan 20 10也就是说只允许vlan10和20的包通过。
3,同时要注意,我们要在对端也就是SW2的g0/0/3接口也要做如下配置,也是trunk口。

做好配置之后,我们使用pc3 ping pc5 我们会发现ping通了。那么实验成功了。
补充:其实一开始默认我们交换机所有的接口都属于vlan 1,如下图:

5.3,遗留问题
5.3.1,为什么SW2下的g0/0/1,2,4是access口?
首先,我们已经知道了access口的工作原理,当交换机收到pc3访问pc7的数据时,交换机首先会检查数据是否带有vlan-id,如果带有vlan-id,他会检查vlan-id是否和本接口的pvid一致(接口的pvid我们可以使用 dispaly vlan命令查看,如下图,我们发现接口的pvid和我们的配的vlan一致,这是access接口的一个特点),如果一致,则数据进入交换机内部处理。如果不一致,那么他就会丢弃此数据,如果没有vlan-id,那么他就会打上当前接口规定的pvid,所以现在交换机位收到的pc3数据打上vlan 10的pvid,然后,发给同pvid的接口g0/0/4,然后再将打上的pvid剥离后发给pc7.

5.3.2,为什么SW2的g0/0/3和SW3的g0/0/3都是trunk口?
在我们知道了trunk口的工作原理下,我们可以来推测pc3 ping pc5的过程,首先pc3来没有写的vlan id的数据帧给交换机,此时交换机为数据帧打上接口的pvid,然后,交换机查表看此pvid是否可以通过此trunk口,因为我们配置 port trunk allow-pass vlan all,所以都可以通过,到了SW3的g0/0/3接口,由于接口的配置也是 port trunk allow-pass vlan all,所以SW3就接收了该数据,然后就是老套路,由g0/0/1接口去掉tag之后发给pc5。
我们可以看看带tag和不带tag的报文。

六,vlan-Hybrid实验
拓扑图2

实验要求:
1,vlan划分如上图所示。
2,pc8可以访问pc10,但是pc8不可以访问pc9
6.1,SW4配置
首先我们来配置SW4
1,进入系统视图
2,修改设备名字(以便于区别设备,我这里是改为SW4)
3,创建需要的vlan,我们这里需要vlan 2,3,100(命令:vlan batch 2 3 100)
4,进入接口,为接口配置链路类型,在这里g0/0/3,g0/0/2和g0/0/1用到的接口类型都是hybrid(命令:port link-type hybrid 可简写为 p l a,如下图)
5,进入接口配置接口的pvid,千万记得配(我当时就是没配,就出错了),这一步在配置access接口是是没有的,因为一个access接口只属于一个vlan,所以接口的pvid就等于vlan id

6,配置接口的vlan,以及对收到的vlan的处理方式,

g0/0/1的配置同上我就不展示了,因为只有通过的vlan要改,由于不可以通过vlan 2的数据但是要通过vlan100的数据,所以是port hybrid untagged vlan 2 100
而g0/0/3的配置如下:注意这里不用配pvid,因为我这段没有配vlan呀!(也就是SW4和SW5之间)

最后,我们再用pc8测试一下,我们发现,配置满足要求,实验成功。

七,单臂路由实验
拓扑图一

实验要求:pc11和pc12现在在不同的网段,不同的vlan,他们之间需要相互通信
7.1,配置细节
首先,我们知道,主机之间需要跨网段通信的时候,那我们就需要网关,帮助我们查表转发,在我们没有三层交换机的时候,我们实现此要求必定会用到路由器,路由器有一项技术——虚拟子接口(subinterface)应用于单臂路由。
首先我们在交换机上进行配置,配置要求如下:这里我就不展现配置细节了,配置access口和trunk口上面都已经讲过了。

这里我们主要来配置路由器,路由器的配置如下:
1,进入系统视图。
2,创建子接口。注意:在华为的设备上创建子接口的方式是 int 原有的接口.子接口序号。如下:我创建了 int g0/0/0.1
3,在子接口上配置IP作为网关IP。这里的 g0/0/0.1字接口是作为pc11的网关,所以配置IP为192.168.1.1
4,配置允许在此子接口上通信的vlan号,dot1q termination vid 10 意思是允许vlan 10的包通信 注意是 dot1q 而不是dotlq。
5,最后,我们还要在接口上开启转发arp报文的功能,这个功能在华为设备上需要手动开启,在思科设备上则是默认开启的。(之后我们来讲一下为什么要开启)
6,我们再创建int g0/0/0.2进行如上的操作,只是我们的网关要改为192.168.2.1.(在此之前我们已经在电脑上配置了网关,所以可以直接配置)

之后,我们使用pc11 ping pc12测试一下。如下:现象满足要求,实验成功!

7.2,思考
为什么路由器需要开启arp转发功能?
首先,我们在如下位置抓包看一下,使用pc11 ping pc12

我们在g0/0/0接口抓到的包如下:

由我们抓到的包,我们可以知道以下流程:
1,pc11由于没有网关的mac地址,pc11发送arp广播询问谁是192.168.1.1
2,路由器收到arp广播包之后,填上路由器int g0/0/0接口的mac地址,以单播的形式发回,如下:

3,路由器收到192.168.1.11(pc11)请求192.168.2.12(pc12)的报文时,路由器查询arp表,发现没有192.168.2.12的mac地址进行下一步
4,路由器查询路由表,看是否有去往192.168.2.0/24网段的路由,如果有,路由器则发送广播arp询问192.168.2.12的mac地址,没有则不进行操作。如下表:
我们可以知道去往192.168.2.0/24网段的路由,所以路由器发送广播arp询问192.168.2.12的mac地址

5,pc12收到询问自己mac地址的arp报文之后,发送填上自己mac地址的arp单播报文给路由器,至此路由器拥有了pc11和pc12的mac地址。

6,之后,pc11和pc12就可以开始通信了。
八,三层交换机实现单臂路由效果
拓扑图二

实验要求:
使用三层交换机实现不同vlan,不同网段下的主机通信。
pc13:192.168.1.13/24 网关:192.168.1.1
pc14:192.168.2.14/24 网关:192.168.2.1
8.1,配置细节
1,创建需要的vlan
2,创建处理对应vlan的vlanif接口如下Vlanif10
3,配置vlanif接口的ip地址

4,为交换机的接口配置接口类型,这里是access口
5,为交换机的接口配置vlan

6,查看交换机的路由表看配置是否成功,没错三层交换机有自己的路由表

做完以上配置之后,我们可以测试一下。如下,实验成功

最后
本篇博客对交换机,VLAN技术和实验的介绍和实验就到这里了,如果本篇博客对你有帮助的话请点赞收藏支持一下,谢谢!答应我!不要白嫖好吗?哈哈哈!咱们下篇博客见。
相关文章:
 
交换机VLAN技术和实验(eNSP)
目录 一,交换机的演变 1.1,最小网络单元 1.2,中继器(物理层) 1.3,集线器(物理层) 1.4,网桥(数据链路层) 二,交换机的工作行为 2.…...
 
8.Winform界面打包成DLL提供给其他的项目使用
背景 希望集成一个Winform的框架,提供权限菜单,根据权限出现各个Winform子系统的菜单界面。不希望把所有的界面都放放在同一个解决方案下面。用各个子系统建立不同的解决方案,建立代码仓库,进行管理。 实现方式 将Winform的UI界…...
 
海量数据存储组件Hbase
hdfs hbase NoSQL数据库 支持海量数据的增删改查 基于Rowkey查询效率特别高 kudu 介于hdfs和hbase之间 hbase依赖hadoopzookeeper,同时整合框架phoenix(擅长读写),hive(分析数据) k,v 储存结构 稀疏的(为空的不存…...
 
(一)基于Spring Reactor框架响应式异步编程|道法术器
在执行程序时: 通常为了提供性能,处理器和编译器常常会对指令进行重排序。 从排序分为编译器重排序和处理器重排序两种 * (1)编译器重排序: 编译器保证不改变单线程执行结构的前提下,可以调整多线程语句执行顺序; * (2)处理器重排序: 如果不存在数据依赖…...
Vue3 让localstorage变响应式
Hook使用方式: import {useLocalStore} from "../js/hooks"const aauseLocalStore("aa",1) 需求一: 通过window.localStorage.setItem可以更改本地存储是,还可以更新aa的值 window.localStorage.setItem("aa&quo…...
 
【深度学习】InST,Inversion-Based Style Transfer with Diffusion Models,论文,风格迁移,实战
代码:https://github.com/zyxElsa/InST 论文:https://arxiv.org/abs/2211.13203 文章目录 AbstractIntroductionRelated WorkImage style transferText-to-image synthesisInversion of diffusion models MethodOverview ExperimentsComparison with Sty…...
 
【CSS】3D卡片效果
效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"card"><img…...
OrderApplication
目录 1 OrderApplication 2 /// 查询订单 2.1.1 //补充商品单位 2.1.2 //补充门店名称 2.1.3 //补充门店名称 2.1.4 //订单售后 2.1.5 //订单项售后 OrderApplication...
 
如何在保健品行业运用IPD?
保健品是指能调节机体功能,不以治疗为目的,并且对人体不产生任何急性、亚急性或者慢性危害的产品。保健品是食品的一个种类,具有一般食品的共性,其含有一定量的功效成分,能调节人体的机能,具有特定的功效&a…...
Flink系列之:动态发现新增分区
Flink系列之:动态发现新增分区 一、动态发现新增分区二、Flink SQL动态发现新增分区三、Flink API动态发现新增分区 为了在不重新启动 Flink 作业的情况下处理主题扩展或主题创建等场景,可以将 Kafka 源配置为在提供的主题分区订阅模式下定期发现新分区。…...
 
eclipse版本与jdk版本对应关系
官网:Eclipse/Installation - Eclipsepedia eclipse历史版本(2007-):Older Versions Of Eclipse - Eclipsepedia Eclipse Packaging Project (EPP) Releases | Eclipse Packages...
File类的学习
java.io.File类 文件和目录路径的抽象表达形式是一个与操作系统无关的类,任何一个操作系统都可以使用这个类中的方法 File.pathSeparator 文件路径分隔符,windows是分号,linux是: File.separator 文件名分隔符,window…...
 
Linux 操作系统 Red Hat Enterprise Linux 安装教程
文章目录 笔者的操作环境: 制作环境: Win32 Disk Imager 1.0.0 Windows 10 教育版 ISO: Red Hat Enterprise Linux 9.2 x86_64 Red Hat Enterprise Linux(RHEL)是一种 Linux 操作系统。安装此操作系统的难题在于&a…...
 
关于拓扑排序
又重新学了一下拓扑排序,这次发现就十分简单了,拓扑排序的步骤 1.他必须是一个有向无环图,起点我们就是入度为0的点 2.我们首先要输出的就是入度为0的点,然后依次删除这些点连向的点,使这些点的入度-1,如果…...
 
【C++】开源:Boost库常用组件配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Boost库常用组件配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,…...
用python通过http实现文件传输,分为发送端和接收端
要使用Python通过HTTP实现文件传输,可以使用Python的 requests 库来发送和接收HTTP请求。以下是一个示例代码,其中包括发送端和接收端的实现。 发送端: import requestsdef send_file(file_path, url):with open(file_path, rb) as file:re…...
 
数据结构--图的遍历 DFS
数据结构–图的遍历 DFS 树的深度优先遍历 //树的先根遍历 void PreOrder(TreeNode *R) {if(R ! NULL){visit(R); //访问根节点while(R还有下一个子树T)PreOrder(T);//先根遍历下一棵子树} }图的深度优先遍历 bool visited [MAX_VERTEX_NUM]; //访问标记数组 void DFS(Grap…...
 
SpringBoot集成MyBatisPlus+MySQL(超详细)
前言 查看此文章前强烈建议先看这篇文章:Java江湖路 | 专栏目录 该文章纪录的是SpringBoot快速集成MyBatis Plus,每一步都有记录,争取每一位看该文章的小伙伴都能操作成功。达到自己想要的效果~ 文章目录 前言1、什么是MyBatisPlus2、Spring…...
 
一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业
在张雪峰推荐的几大专业里,计算机专业是其中之一。近几年,计算机专业报考热度不减,但就业前景却令人堪忧,互联网裁员接二连三,许多码农找不到工作。 一位网友感叹:一边是计算机就业哀鸿遍野,一…...
解决外部主机无法访问Docker容器的方法
使用Docker启动了一个tomcat容器,并做了端口映射,但是外部主机仍然无法访问。 编辑centos上的配置文件 vi /etc/sysctl.conf net.ipv4.ip_forward1 systemctl restart network保存以后即可生效,这个配置是开启linux的ip数据包转发功能&#…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
 
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
 
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
 
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
 
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
 
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
