【小菜学网络】观察集线器与交换机

集线器和交换机是两种典型的网络设备,集线器 位于 物理层,而 交换机 位于于 数据链路层 ,行为明显不同。本节准备了两个简单实验,旨在通过实践加深对理论知识的理解,逐步掌握 Linux 主机网络操作。

实验一:观察以太网集线器

本实验将 3 台 Linux 主机连到一个集线器上,以此观察集线器的工作行为,网络拓扑图如下:

实验环境以 docker 容器的形式提供,执行这个 docker 命令即可一键打开:

docker run --name hub-lab --rm -it --privileged --cap-add=NET_ADMIN --cap-add=SYS_ADMIN -v /data -h hub-lab fasionchan/netbox:0.5 bash /script/hub-lab.sh

实验环境打开后,可以看到 3 个窗口,各自代表一台主机:

这是用 tmux 命令实现的窗口划分,按下_ Ctrl-B_ 后再按方向键,即可在不同主机窗口间切换。

请特别注意,按下 Ctrl-B 后要松手,然后再按方向键,才能切到想要操作的主机窗口。

还有一种更快捷的切换方法,先按下 Ctrl-B ,松手后再按 Q 。这时,每个窗口都会显示一个数字。接着,按下对应的数字即可切到想要的窗口:

我们先切到主机 ant ,观察它的网卡信息,ifconfig 或 ip 命令均可:

root@ant [ ~ ] ➜ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 32:90:b9:9f:35:56 txqueuelen 1000 (Ethernet) RX packets 6 bytes 540 (540.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3 bytes 270 (270.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@ant [ ~ ] ➜ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/tunnel6 :: brd :: 6: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 32:90:b9:9f:35:56 brd ff:ff:ff:ff:ff:ff link-netnsid 0

接着,切到主机 bee 和 cicada ,继续观察它们的网卡信息:

root@bee [ ~ ] ➜ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/tunnel6 :: brd :: 8: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether a2:17:41:bb:cd:98 brd ff:ff:ff:ff:ff:ff link-netnsid 0 root@cicada [ ~ ] ➜ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/tunnel6 :: brd :: 10: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ee:76:f2:37:5e:69 brd ff:ff:ff:ff:ff:ff link-netnsid 0

经过观察,3 台主机网卡及 MAC 地址信息整理如下:

主机 网卡 MAC地址
ant   eth0   32:90:b9:9f:35:56  
bee   eth0   a2:17:41:bb:cd:98  
cicada   eth0   ee:76:f2:37:5e:69  

现在,我们从主机 ant 向主机 bee 发送一句话,看主机 bee 是否可以收到这个信息,于此同时观察主机 cicada 是否也可以收到。开始发送之前,我们先在 bee 和 cicada 执行抓包工具 tcpdump 命令,嗅探网络流量:

root@bee [ ~ ] ➜ tcpdump -ni eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes root@cicada [ ~ ] ➜ tcpdump -ni eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

tcpdump 命令 -i 选项指定嗅探网卡,这里我们嗅探每台主机 eth0 网卡上的流量。

一切准备就绪,我们在主机 ant 上执行自制工具 sendether 给 bee 发一段文本:

root@ant [ ~ ] ➜ sendether -i eth0 -t a2:17:41:bb:cd:98 -T 0x0900 -d 'hello, world!'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjdz.html