51Openlab上Mininet快速入门
51Openlab
上Mininet
入门
文章目录
- `51Openlab`上`Mininet`入门
- 一、`Mininet`简介
- 二、安装`Mininet`
- 1. 安装完成后的测试
- 三、拓扑构建和命令使用
- 1. 一些命令:
- (1)网络构建
- (2)选项
- 2. 创建拓扑实操
- (1)单一拓扑
- (2)线性拓扑
- (3)树形拓扑
- (4)`py`脚本创建
- 3. 内部交互命令使用
- 4. `Mininet`可视化构建网络拓扑
- (1)基本操作
- (2)保存脚本
- 四、`Mininet`调用`API`扩展自定义拓扑
- 1. 函数使用
- (1)在`Mininet`交互环境中添加主机`h3`
- (2)在`Mininet`交互环境中添加`s3`与主机`h3`之间的链路。
- (3)在`Mininet`交互环境中添加接口
- (4)在`Mininet`交互环境中对主机进行配置`IP`地址
- (5)查看节点信息
- (6)测试
- 五、`Mininet`可视化构建网络拓扑
- 六、`Mininet`流表应用实战1——手动添加流表
- 1. 测试无流表状态下主机间的通信
- 2. 添加流表并测试主机间的通信
- 3. 添加协议流表使`h1/h2`通信
- 七、`Mininet`流表应用实战2——控制器下发流表协议分析
- 八、 `Mininet`多数据中心网络拓扑流量带宽实验
都是来自
51Openlab
上的资料,因为要做有关的毕设,所以需要学习一下。
大多是复制的,但是其中也有我的一些理解和实验的截图
51Openlab
一、Mininet
简介
Mininet
是一个可以在有限资源的普通电脑上快速建立大规模SDN
原型系统的网络仿真工具。该系统由虚拟的终端节点(End-Host
)、OpenFlow
交换机、控制器(也支持远程控制器)组成,这使得它可以模拟真实网络,可对各种设想或网络协议等进行开发验证。目前Mininet
已经作为官方的演示平台对各个版本的OpenFlow
协议进行演示和测试。
Mininet
是基于Linux Container
这一内核虚拟化技术开发出的虚拟化平台,其实现虚拟化主要是用到了Linux
内核的Network namespace
资源隔离机制。Linux
的Network namespace
机制可以让每个namespace
拥有独立的网络设备、网络协议栈和端口等。Mininet
正是利用了Linux
这种Network namespace
机制,才可以在一台电脑上创建多台虚拟主机。此外,Mininet
建立的网络拓扑的交换节点可以是Open vSwitch、Linux Bridge
等软件交换机,交换节点之间的链路采用Linux
的veth pair(virtual Ethernet pair)
机制实现,控制器可以部署在网络可达的任意地方。因此,Mininet
可以定制任意灵活的SDN
网络拓扑,为实验用户提供快捷可靠的实验环境。
Mininet
架构按datapath
的运行权限不同,分为kernel datapath
和userspace datapath
两种,其中kernel datapath
把分组转发的逻辑编译进入Linux
内核,效率非常高;userspace datapath
把分组转发逻辑实现为一个应用程序,叫做ofdatapath
,效率虽不及kernel datapath
,但更为灵活,更容易重新编译。
Mininet
的kernel datapath
架构如下图所示,控制器和交换机的网络接口都在root
命名空间中,每个主机都在自己独立的命名空间里,这也就表明每个主机在自己的命名空间中都会有自己独立的虚拟网卡eth0
。控制器就是一个用户进程,它会在loopback
上预留的6633
端口监听来自交换机安全信道的连接。每个交换机对应几个网络接口,比如``s0-eth0、s0-eth1以及一个
ofprotocol`进程,它负责管理和维护同一控制器之间的安全信道。
Mininet
的userspace datapath
架构如下图所示,与kernel datapath
架构不同,网络的每个节点都拥有自己独立的namespace
。因为分组转发逻辑是实现在用户空间,所以多出了一个进程叫ofdatapath
。另外,Mininet
除了支持kernel datapath
和userspace datapath
这两种架构以外,还支持OVS
交换机。OVS
充分利用内核的高效处理能力,它的性能和kernel datapath
相差无几。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxrG8qxN-1647761749137)(https://www.51openlab.com/site_media/media/course/bc49a3e27fa84c79835ad893864250cf/3/49cd355a-c740-4a42-8b3a-4ab72a163287)]
二、安装Mininet
之前我在自己的虚拟机上安装过
Mininet
,具体可以去看
- Ubuntu的安装和基础设置
- Ubuntu解决python和pip安装升级
- Ubuntu安装Mininet
按着
51Openlab
的实验指导书安装,再执行./install.sh -a
前先更新一下软件:apt-get update
1. 安装完成后的测试
mn --test pingall
三、拓扑构建和命令使用
Mininet
能实现如下功能:
- 为
OpenFlow
应用程序提供一个简单、便宜的网络测试平台- 启用复杂的拓扑测试,无需连接物理网络
- 具有拓扑感知和
OpenFlow
感知的CLI
,用于调试或运行网络范围的测试- 支持任意自定义拓扑,主机数可达
4096
,并包括一组基本的参数化拓扑- 提供用于网络创建和实验的可扩展
Python API
在基于
Mininet
的使用下,可以轻易的在自己的笔记本上测试一个软件定义网络(software-defined Networks
),对基于OpenFlow
、Open vSwitch
的各种协议等进行开发验证,或者验证自己的想法。且所有的代码几乎可以无缝迁移到真实的硬件环境中,在实验室里,一行命令就可以创建一个支持SDN
的任意拓扑的网络结构,并可以灵活的进行相关测试,验证了设计的正确后,可以轻松部署到真实的硬件环境中。
MininetEdit
可视化界面:Mininet 2.2.0+
内置miniedit
。在mininet/examples
下提供miniedit.py
脚本,执行脚本后显示可视化界面,可自定义拓扑及配置属性。
1. 一些命令:
(1)网络构建
topo
:用于指定网络拓扑,Mininet
支持创建的网络拓扑为:minimal
、single
、linear
和tree
。minimal
:创建一个交换机和两个主机相连的简单拓扑。默认无—topo
参数的情况下就是这样。其内部实现就是调用了single,2
对应的函数。single,n
:设置一个交换机和n个主机相连的拓扑。linear,n
:创建n个交换机,每个交换机只连接一个主机,并且所有交换机成线型排列。tree,depth=n,fanout=m
:创建深度为n,每层树枝为m的树型拓扑。因此形成的拓扑的交换机个数为(mn-1)/(m-1)
,主机个数为mn
。—custom
:在上述已有拓扑的基础上,Mininet
支持自定义的拓扑,使用一个简单的Python API
即可。—custom
需和—topo
一起使用,如mn —custom file.py —topo mytopo
。
(2)选项
Mininet
常用命令总结:
命令 | 作用 |
---|---|
help
|
默认列出所有命令文档,后面加命令名将介绍该命令用法 dump打印节点信息 |
gterm
|
给定节点上开启gnome-terminal 注:可能导致mn崩溃 |
xterm
|
给定节点上开启xterm |
intfs
|
列出所有的网络接口 |
iperf
|
两个节点之间进行简单的iPerf TCP测试 |
iperfudp
|
两个节点之间用制定带宽UDP进行测试 |
net
|
显示网络链接情况 |
noecho
|
运行交互式窗口,关闭回应(echoing) |
pingpair
|
在前两个主机之间互Ping测试 |
source
|
从外部文件中读入命令 |
dpctl
|
在所有交换机上用dptcl执行相关命令,本地为tcp 127.0.0.1:6634 |
link
|
禁用或启用两个节点之间的链路 |
nodes
|
列出所有的节点信息 |
pingall
|
所有主机节点之间互Ping |
py
|
执行Python表达式 |
sh
|
运行外部shell命令 |
quit/exit
|
退出 |
2. 创建拓扑实操
(1)单一拓扑
sudo mn --topo=single,3
单一(Single
)拓扑指整个网络拓扑中交换机有且只有一个,交换机可以下挂一个或多个主机,本例创建了一个交换机、3个主机,3个主机都下挂在一个交换机下。
(2)线性拓扑
sudo mn --topo=linear,3
线性(linear
)拓扑指交换机连接呈线形排列,且每个交换机所连接主机数目只有一个,本例创建了3个交换机、3个主机,3个主机分别下挂在一个交换机下。
(3)树形拓扑
sudo mn --topo=tree,depth=2,fanout=2
树形(tree
)拓扑指交换机连接成树形排列,且每个交换机所连接主机一般有多个关联使用参数depth
及fanout
,本例创建了depth
为2
,fanout
为2
的拓扑,表示交换机深度即层数为2
,每个交换机下挂2
个设备。
树形结构创建需要用到fanout
和depth
两个属性,fanout
称为扇出,depth
称为深度,扇出决定每层分支设备节点数,深度为主机到根 openflow
交换机经历的层级数,树形结构总共有台n(fanout)
的 m(depth)
次幂个主机。如2 扇出 2层树形结构包含 4台主机,
(4)py
脚本创建
使用py
脚本创建拓扑
cd /home/openlab/openlab/mininet/custom
sudo mn --custom topo-2sw-2host.py --topo mytopo
在custom
目录下存在topo-2sw-2host.py
文件,本例调用此文件构建拓扑
3. 内部交互命令使用
net
:显示链接信息
nodes
:查看节点信息
links
:查看链路健壮性信息
pingall
:验证所有主机间通信并查看结果
xterm h1 h2
开启xterm
进入设备可视化操作界面
mn -c
:清除释放Mininet
构造配置的交换机及主机
4. Mininet
可视化构建网络拓扑
在目录:/home/openlab/openlab/mininet/examples
中执行sudo ./miniedit.py
cd /home/openlab/openlab/mininet/examples
sudo ./miniedit.py
(1)基本操作
单个设备配置:在设备上长按鼠标右键,选择Properties
即可配置
Miniedit
左上角“Edit”
中可以剪切删除设备,及对整个网络进行全局配置:
点击左下角的run
,即可运行
对设备长按右键可以查看设备配置终端和设置配置
(2)保存脚本
可视化搭建后,可以保存为
py
脚本
保存的目录是在:mininet/example
目录下,通过chmod
给此脚本权限后,直接运行即可重现拓扑。
通过后台查看保存的``sdnlab.py脚本文件,并给脚本赋予权限:
chmod –R 777 sdnlab.py执行sdnlab.py脚本:
./sdnlab.py`
四、Mininet
调用API
扩展自定义拓扑
Mininet
作为一个基于Python
的网络仿真工具,可以分为两大部分:Python
库和运行文件。前者对网络中元素进行抽象和实现,例如定义主机类来表示网络中的一台主机;后者则基于这些库完成模拟过程。
addHost(“host name”)
: 添加主机addSwitch(“sw name”)
: 添加交换机addLink(node,node)
: 添加链路attach(port)
:添加端口
1. 函数使用
进入:cd /home/openlab/openlab/mininet/custom
创建拓扑:sudo mn --custom topo-2sw-2host.py --topo mytopo
(1)在Mininet
交互环境中添加主机h3
py net,addHost('h3')
(2)在Mininet
交互环境中添加s3
与主机h3
之间的链路。
py net.addLink(s3,net.get('h3'))
(3)在Mininet
交互环境中添加接口
py s3.attach('s3-eth3')
(4)在Mininet
交互环境中对主机进行配置IP
地址
py net.get('h3').cmd('ifconfig h3-eth0 10.3')
(5)查看节点信息
dump
nodes
(6)测试
h1 ping h3
pingall
五、Mininet
可视化构建网络拓扑
开启MiniEdit
cd /home/openlab/openlab/mininet/mininet/examples
sudo ./miniedit.py
和前面的差不多,写一下这一点:
- 交换机的设置:配置16位的
DPID
,勾选enable netflow、enable sFlow
- 选择链路,也可以配置信息:
Edit
中勾选配置:
六、Mininet
流表应用实战1——手动添加流表
在
SDN
环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项,且交换机未被SDN
控制器控制,交换机将此数据包丢弃。可以通过对流表操作来控制交换机的转发行为,通过手动对交换机下发流表,当交换机交换机收到一个数据包时,因已手工添加相对应的流表,交换机根据流表操作转发数据包,使主机间通信。
进入目录:cd /home/openlab/openlab/mininet/custom
编写拓扑脚本:sudo vim exper1.py
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( Topo ):"Simple topology example."def __init__( self ):"Create custom topo."# Initialize topologyTopo.__init__( self )# Add hosts and switchesHost1 = self.addHost( 'h1' )Host2 = self.addHost( 'h2' )Host3 = self.addHost( 'h3' )Switch1 = self.addSwitch( 's1' )Switch2 = self.addSwitch( 's2' )# Add linksself.addLink( Host1, Switch1 )self.addLink( Host2, Switch1 )self.addLink( Host3, Switch2 )self.addLink( Switch1, Switch2 )
topos = { 'mytopo': ( lambda: MyTopo() ) }
保存退出::wq
执行如下命令运行自定义脚本,并远程指定一个不存在的控制器,使交换机不受控制器控制。
sudo mn --custom exper1.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6653
生成拓扑如下:
1. 测试无流表状态下主机间的通信
xterm h1 h2 h3
查看交换机当前的flow table
没有流表
在h2
和``h3`上开启网卡抓包:
tcpdump -n -i h2-eth0
tcpdump -n -i h3-eth0
在h1
上pingh2
和h3
ping -c 3 10.0.0.2
ping -c 3 10.0.0.3
可以看到主机h1 Ping h2
和h3
失败了,主机h2
和h3
上没有收到任何ICMP echo request packet
。原理解析:ping
操作时,由于拓扑里没有SDN
控制器,也没有用dptcl
给OpenFlow
交换机添加任何flow entry
,所以交换机不会做转发决定,并直接丢弃h1
到h2
及h1
到h3
的ping
包
2. 添加流表并测试主机间的通信
执行如下命令添加交换机端口流表使主机h1和h2通信
dpctl add-flow in_port=1,actions=output:2
dpctl add-flow in_port=2,actions=output:1
查看流表:dpctl dump-flows
进行ping
测试,
h1 ping h2和h3
ping -c 3 10.0.0.2
ping -c 3 10.0.0.3
结果:
可以看到主机h1
成功ping
通h2
,且h3
没收到任何ping
包。原理解析:用dpctl
对交换机添加flow
,让交换机从s1-eth1
这个端口接收到的所有traffic
都从s1-eth2
这个端口发出去。用dpctl
给交换机添加双向流表,因为ping
包除了echo request
还有echo reply
。所以还需要用dpctl
对交换机添加flow
,让交换机从s1-eth2
这个端口接收到的所有traffic
都从s1-eth1
这个端口发出去。添加这两条flow
后,h1
能够ping
通h2
,但是并没有为h1
和h3
之间添加对应的端口流表,所以h1
与h3
不通。
3. 添加协议流表使h1/h2
通信
删除之前添加的流表:dpctl del-flows
、dpctl dump-flows
添加两条traffic
类型为IPv4(0x0800)
协议相关的flow entry
dpctl add-flow dl_type=0x0800,nw_dst=10.0.0.2,actions=output:2
dpctl add-flow dl_type=0x0800,nw_dst=10.0.0.1,actions=output:1
dpctl dump-flows
**结果:**测试ping
,h1 ping 不通 h2和h3
分析:
原理解析:用dpctl
对交换机添加flow
,让交换机把所有EtherType
为0x0800(IPv4)
并且destiation IP
为10.0.0.2
的traffic
从s1-eth2
这个端口发出去。用dpctl
对交换机添加flow
,让交换机把所有EtherType
为0x0800(IPv4)
并且destiation IP
为10.0.0.1
的traffic
从s1-eth1
这个端口发出去。但处在同一网段下的主机,它们之间的交流是L2 forwarding
,需要靠ARP
来解析MAC
地址,之前只匹配了0x0800(IPv4)
协议,并没有匹配到0x0806(ARP)
,这样当交换机收到h1
的ARP
包后,因为没有控制器,flow table
里面也没有相应的flow
告诉它如何转发这个ARP
包,交换机只能将它丢弃,从而导致h1 ping h2
失败,所以需要添加ARP
协议的流表来使通信。
解决:
执行命令dpctl add-flow dl_type=0x0806,actions=NORMAL
添加ARP(0x0806)
协议相关的流表,让交换机以NORMAL
形式(即广播)将所有ARP
包从各个端口广播出去
ping
测试:
h1 可以ping通 h2
七、Mininet
流表应用实战2——控制器下发流表协议分析
- 理解
OpenFlow
交换机和控制器间的工作原理。- 学会使用
Wireshark
抓包分析,熟悉了解OpenFlow
协议
实验拓扑:
在
SDN
环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理。控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包。
在控制器上查看端口使用情况:
netstat -an|grep 6653
netstat -an|grep 8181
查看IP
地址
在Mininet
虚拟机上开启wireshark
进行Wireshark
抓包,监听网卡any
上的数据流量。
进入/home/openlab/openlab/mininet/custom
目录下,编写拓扑脚本:
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( Topo ):"Simple topology example."def __init__( self ):"Create custom topo."# Initialize topologyTopo.__init__( self )# Add hosts and switchesHost1 = self.addHost( 'h1' )Host2 = self.addHost( 'h2' )Host3 = self.addHost( 'h3' )Switch1 = self.addSwitch( 's1' )Switch2 = self.addSwitch( 's2' )# Add linksself.addLink( Host1, Switch1 )self.addLink( Host2, Switch1 )self.addLink( Host3, Switch2 )self.addLink( Switch1, Switch2 )
topos = { 'mytopo': ( lambda: MyTopo() ) }
执行脚本建立拓扑:
sudo mn --custom exper1.py --topo mytopo --controller=remote,ip=30.0.1.197,port=6653
这里的ip
地址填写刚才查询的控制器的IP
地址,验证连通性:
pingall
创建的拓扑如下:
查看交换机上的流表:
dpctl dump-flows
停止Wireshark
抓包并查看抓包结果,筛选openflow_v1
协议数据包
登录ODL
控制器,打开浏览器并输入URL地址:
分析协议:
首先发送HELLO
消息,建立初始化连接,协商使用的OpenFlow
协议版本。由下图可知,ODL
与Mininet
之间应用的是OpenFlow1.0
版本协议
OpenFlow
版本协商完成后,控制器发送一条features_request
消息获取交换机的特性信息,包括交换机的ID(DPID)
、缓冲区数量、端口及端口属性等等。相应的,交换机回复features_reply
消息。
ofpt_feature_reply
数据包详情如下,交换机的DPID
是数据通道独一无二的标识符。本实验中交换机缓冲区数量(n_buffers)
为256
,交换机支持的流表数量(n_tables)
为254
,交换机所支持的功能,
stats reply
消息用于回应stats request
信息,主要是交换机回应给控制器的状态信息。
当交换机收到数据包后查找流表无匹配项时,将数据包封装在packet_in
消息发给控制器,由控制器通过packet_out
消息下发决策,使发送和接收数据包的两主机间进行通信
flow mod
消息涉及流表项的下发匹配信息,下图显示的是flow mod
匹配项的类型信息。
八、 Mininet
多数据中心网络拓扑流量带宽实验
1、掌握多数据中心网络拓扑的构建。
2、熟悉网络性能测试工具Iperf
,根据实验测试SDN
网络的性能。实验原理:
使用
mininet
中的iperf
工具在网络中生成UDP
流量,iperf
客户端传送数据流到iperf
的服务端,由服务端接收并记录相关信息。网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状况。此应用主要以数据中心网络为目标场景,在mininet
仿真环境中尽可能地还原数据中心内部的真实流量情况。
Mininet
数据中心应用价值:
- 树状拓扑结构容错能力强
- 降低数据中心成本消耗
- 提供重新排列的全带宽无阻碍路径
- 提高带宽利用率
- 分析数据中心网络流量性能
- 为真实数据中心和仿真测试床提供有用信息
在mininet
中进行自定义命令iperfmulti
功能拓展主要分为4
步:
1.修改mininet/net.py
2.修改mininet/cli.py
3.修改``bin/mn4.重新安装
Mininet核心文件:
~/mininet/util/install.sh -n`
最后一个实验,不做再做过多的介绍,就是在mn
编写添加了一条测试带宽的命令。关于编写程序,暂时我还不会。
51Openlab上Mininet快速入门相关推荐
- apache thrift_Apache Thrift快速入门教程
apache thrift Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrif ...
- Apache Thrift快速入门教程
Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrift服务和客户端. (我觉得后 ...
- 【云计算】云上建站快速入门:博客、论坛、CMS、电子商务网站统统
免费网站怎么建,空间也能免费吗? 免费网站怎么建立,免费网站并非免费空间 互联网真的有免费建站这等好事? 现在制作一个网站已经越来越容易了,只要知道清晰的流程之后都是可以很快的建好一个企业或者个人网站 ...
- git 上传项目到linux仓库_「成都校区」Git使用快速入门
Git使用快速入门 1.在Linux上安装Git 输入git命令,查询是否安装了git (1)如果是Debian或Ubuntu Linux系统,使用如下命令进行安装: apt-get install ...
- matlab撤销上一步命令_CAD快速入门技巧:CAD软件中撤销操作的方法汇总
在使用浩辰CAD软件画图的过程中都难免会误操作,因此CAD与WORD.EXCEL等其他软件一样,在误操作后可以通过"放弃"来取消刚进行的操作,Windows软件的常规操作也适用于C ...
- 快速入门:OpenShift上的Spring Boot和WildfFly 8.2
与Spring Boot,WildFly和OpenShift相比,这是真正的"快速入门",与我上一篇更具描述性的文章相反. 先决条件 在开始构建应用程序之前,我们需要安装一个Ope ...
- python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)
原标题:[实战练习]Python3网络爬虫快速入门实战解析(上) 摘要 使用python3学习网络爬虫,快速入门静态网站爬取和动态网站爬取 [ 前言 ] 强烈建议:请在电脑的陪同下,阅读本文.本文以实 ...
- java撤销上一步_CAD快速入门技巧:CAD软件中撤销操作的方法汇总
在使用浩辰CAD软件画图的过程中都难免会误操作,因此CAD与WORD.EXCEL等其他软件一样,在误操作后可以通过"放弃"来取消刚进行的操作,Windows软件的常规操作也适用于C ...
- 2引擎帮助文档_ANSA快速入门指南中文帮助文档浅析(上)
作者 | 团长 仿真秀科普作者 首发 | 仿真秀公众号(ID:fangzhenxiu2018) 导读:本文是ANSA入门系列第一篇(后续将会在仿真秀官网或APP同步发布).本系列致力于提供ANSA软件 ...
最新文章
- 《概率机器人》速度运动模型gmapping中代码解析
- 伪造服务钓鱼工具Ghost Phisher
- 【Linux】tcp缓冲区大小的默认值、最大值
- 2020——网鼎杯 (青龙组)signal
- 获取小程序用户信息+java_java获取微信小程序用户信息
- 理解大型分布式网站你必须知道这些概念
- python命令行调试django代码_Django shell调试models输出的SQL语句方法
- 马斯克直聘AI人才:高中毕没毕业无所谓,但是编程能力得过
- 嵌入式linux组件,嵌入式Linux系统的几大组件!
- group by 和where 条件后面不能用刚设置的别名。
- 保存blob为本地文件
- Mr.J--JS事件监听(捕获冒泡)
- 不固定个数的子元素自适应居中
- 地下水环评(一级)实践技术及Modflow地下水数值模拟
- 实验01 使用网络协议分析仪Wireshark分析数据链路层帧结构实验报告
- 计算机考研金工,我的金工跨考经验
- struts2架构网站漏洞修复详情与利用漏洞修复方案
- android7 显示到pc,安卓手机上的画面怎么投屏到Win7电脑上?超详细投屏方法看这里!...
- 5种阿里常用代码检测推荐 | 阿里巴巴DevOps实践指南
- 宋丹丹晒年轻旧照 桃眼杏腮被赞美女
热门文章
- minio java的lifecycle
- java学习2018年_Java 20年
- 转 下一代云计算模式:Docker正掀起个性化商业革命
- postgresql 数据库巡检
- c语言程序如下,某C语言程序如下: #include stdio.h void main() { floa.._简答题试题答案...
- 鸿蒙系统照样没有谷歌服务,曝华为Mate40 Pro+升级鸿蒙2.0系统 谷歌服务照样能用...
- 在vue项目中使用gsap,实现极佳的2d动画效果
- 进制之间的快速转换法:8421码及原码反码补码之间的相互转换关系
- 感谢帮我的人们(Revit二次开发)
- 幸福温馨抑或婚姻枷锁——戴尔与EMC的蜜月期究竟进展如何?