目录
1、数据链路层
1.1、数据链路层的功能
1.2、以太网工作在数据链路层
1.2.1、以太网的发展
1.2.2、以太网MAC地
1.2.3、网卡、路由器和交换机厂商有哪些
1.2.4、以太网帧的格式(这个需要记下来)⭐⭐⭐
2、以太网交换机
2.1、交换机设备简介
2.2、交换机的工作原理⭐⭐⭐
2.2.1、arp广播
2.2.2、 网络的通信方式
2.3、 [工作原理总结]
2.4、练习(查看局域网中正在使用的IP地址,并调出它对应的MAC地址)
2.5、以太网接口的双工模式
2.5.1、单工
2.5.2、半双工
2.5.3、全双工
2.5.4、以太网接口速率
3、交换机的基本配置
3.1、交换机的基本命令以及配置
3.2、图形操作查看MAC地址表
3.2.1、各种设备中查看MAC地址的命令
3.3、各种设备中存在的表
3.3.1、傻瓜交换机和智能(网管)交换机
3.4、调整接口的模式
内容总览
数据链路层位于网络层与物理层之间
以太网(Ethernet):就是我们经常讲的局域网
以太坊(Ethereum):虚拟货币,类似于比特币
现在是万兆以太网了
MAC地址:只要是支持tcp/ip协议的设备硬件都会有。只在数据链路层使用。是由造网卡的厂商固定到设备的芯片里去的,一般不会去修改的。也叫做物理地址或着硬件地址
图片中是48个二进制转化为12个16进制的,因为48个二进制太长太难记了,换成16进制好看一些。
网卡:Realtek(瑞昱)、intel、qualcomm(高通)
路由器和交换机:vmare、tplink、华为、锐捷、cisco(思科)
源MAC地址和目的MAC地址
mtu:最大传输单元,一数据帧里的数据,最大只能够1500个字节(如下图linux所示,且一般都是如此)⭐⭐⭐
帧的大小范围:18+46~1500=64~1518 ⭐⭐⭐
[交换机的种类]
有2层交换机,工作在数据链路层的;有3层交换机,既可以工作在数据链路层,又可以工作在网络层。有路由功能,例子:如无线路由器。
无线路由器的功能:可以接有线也可以接无线,还有dns、dhcp、、限制速度等功能
(1)初始状态(未插电状态)
因为存储在内存中,所以每次重新开机的时候,它里边什么数据都没有。
(2)MAC地址学习
MAC地址表格式:mac地址(源) + 接口 + vlan(默认所有的接口都是vlan1,所以现在可以把这个弱化,后边会讲到)
MAC地址表作用:记录哪台电脑接交换机的哪个接口,会读取帧里的源MAC地址写到MAC地址表里。
另外,MAC地址表是存放在内存中的,停电里面的内容会丢失的
(3)广播未知数据帧
广播转发数据给每一个接口
(4)接收方回应
B电脑封装好数据帧,通过交换机,传送给A电脑
(5)交换机实现单播通信
经过学习交换机知道了所有电脑的MAC地址,然后就能进行精准的传送数据信息。这就叫单播。
[提出问题]
A电脑在封装的时候, 它是怎么知道B电脑的MAC?
数据(上层数据)都是从应用层经过一层一层的封装的,到达数据链路层之前,会经过网络层的封装,给数据加上IP头部变成包。在这个IP头部中含有源地址IP和目标地址IP。有了目标的IP地址,但是没有目标的MAC地址,所以会发送arp广播。
arp(Address Resolution Protocol),地址解析协议:将IP地址解析到对应的MAC地址
MAC地址的广播地址:FF:FF:FF:FF:FF:FF
[arp广播的原理]
使用MAC地址的广播地址。在封装成帧的时候,目的MAC地址全填FF:FF:FF:FF:FF,这样所有的机器都会收到这个数据帧,接收之后进行解封。解封之后,若是该电脑收到的IP地址与自己的IP地址一致,那么就会进行回复,那么该交换机就会得到目标的MAC地址。那么这两台机器之后的传输都是使用单播的方式传输了。
[arp缓存表]
使用"arp -a"命令可以调用这个表出来。每台电脑、手机和交换机都有这个表
第一步:学习
学习帧里的源MAC地址,然后写入到MAC地址表里
第二步:转发
第一种情况,不知道目的MAC地址,会广播。然后给每一个接口都复制一份数据,转发过去。这样可以保证其他的所有机器都可以接收到一份相同的数据
第二种情况,知道目的MAC地址,会单播。
只有两种情况会进行广播。第一种是到MAC地址为FF:FF:FF:FF:FF:FF时,会被认为是一个广播帧,进行广播;另一种是MAC地址表中没有目的的MAC地址时,会进行广播。
[广播风暴]
因为有MAC地址为FF:FF:FF:FF:FF:FF这种情况,所以会形成一种叫广播风暴情况。若出现了这种情况,会消耗交换机的cpu、内存和带宽,导致网络速度越来越慢,最后导致网络不可用。
产生的原因:交换机和交换机之间形成了环路。所以一定要避免环路的形成。
避免环路的方法:1、构建网络的时候,人为的注意不要形成。2、靠交换机里启用树协议(spanning tree),会自动阻塞一条链路,防止出现环路。即物理上是连接的是环路,但是实际上是有一条断开的。
[搞个例题]
哪个口子接的是交换机?(3号口)
⭐[地址的使用范围]⭐
MAC地址只是在局域网里使用;广域网使用IP地址
比如,我们使用"ping 114.114.114.114"成功之后,就代表我们与这个IP地址通信了,但是我们在arp缓存表中却看不到这个IP地址和MAC地址
[写代码中包含知识点]
(1)ping
-c,发包的次数
-w,deadline:多少时间内必须完成
-W,timeout:超过多少时间就停止
-i,interval:包和包之间的时间间隔
[root@fttsaxf menu]# time ping 192.168.29.128 -c 4
PING 192.168.29.128 (192.168.29.128) 56(84) bytes of data.
64 bytes from 192.168.29.128: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 192.168.29.128: icmp_seq=2 ttl=64 time=0.120 ms
64 bytes from 192.168.29.128: icmp_seq=3 ttl=64 time=0.067 ms
64 bytes from 192.168.29.128: icmp_seq=4 ttl=64 time=0.058 ms
--- 192.168.29.128 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3039ms
rtt min/avg/max/mdev = 0.040/0.071/0.120/0.030 ms
real 0m3.043s
user 0m0.001s
sys 0m0.003s
[root@fttsaxf menu]# time ping 192.168.29.128 -c 4 -i 0.1
PING 192.168.29.128 (192.168.29.128) 56(84) bytes of data.
64 bytes from 192.168.29.128: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from 192.168.29.128: icmp_seq=2 ttl=64 time=0.093 ms
64 bytes from 192.168.29.128: icmp_seq=3 ttl=64 time=0.088 ms
64 bytes from 192.168.29.128: icmp_seq=4 ttl=64 time=0.083 ms
--- 192.168.29.128 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 322ms
rtt min/avg/max/mdev = 0.063/0.081/0.093/0.015 ms
real 0m0.327s
user 0m0.000s
sys 0m0.005s
# 这个192.168.29.129这个IP地址现在ping不通
[root@fttsaxf menu]# time ping 192.168.29.129 -c 1
PING 192.168.29.129 (192.168.29.129) 56(84) bytes of data.
From 192.168.29.128 icmp_seq=1 Destination Host Unreachable
--- 192.168.29.129 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
real 0m3.033s
user 0m0.000s
sys 0m0.005s
[root@fttsaxf menu]# time ping 192.168.29.129 -c 1 -w 1
PING 192.168.29.129 (192.168.29.129) 56(84) bytes of data.
--- 192.168.29.129 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
real 0m1.018s
user 0m0.001s
sys 0m0.003s
(2)并行计算和串行计算
并行计算:同时启用多个进程在后台进行计算。格式:(命令)&,把这个命令产生子进程放在后台进行运行。
串行计算:排成一队,一个一个的执行,有先后顺序,必须前边的执行完成后,才去执行后边的
(3)arp -a
调出arp缓存表。
另外一个命令"acping + IP地址"更加好
[root@fttsaxf menu]# arping 192.168.29.2
ARPING 192.168.29.2 from 192.168.29.128 ens33
Unicast reply from 192.168.29.2 [00:50:56:EE:E5:6D] 0.700ms
Unicast reply from 192.168.29.2 [00:50:56:EE:E5:6D] 0.830ms
Unicast reply from 192.168.29.2 [00:50:56:EE:E5:6D] 2.548ms
Unicast reply from 192.168.29.2 [00:50:56:EE:E5:6D] 1.593ms
^CSent 4 probes (1 broadcast(s))
Received 4 response(s)
# 发送了4个探测包(probes),响应了4个。Unicast,单播;broadcast,广播
[代码测试]
#!/bin/bash
# 清空日志文件
>used_ip.log
>unused_ip.log
>ip_mac.log
# ip地址和mac获取工具
for i in {1..254}
do
# ping是测试网络是否畅通的工具
( if ping -c 1 -w 1 192.168.28.$i &>/dev/null;then
echo "192.168.28.$i" >>used_ip.log
else
echo "19.168.28.$i" >>unused_ip.log
fi )&
# 这个脚本是并行计算
done
wait
# 统计没有使用的ip地址的个数
num=$(cat unused_ip.log |wc -l)
echo "total ip:$num" >>unused_ip.log
# 得到所有在使用的IP对应的mac
arp -a |grep -v "incomplete"|awk '{print $2,$4}'|tr -d "()" >ip_mac.log
在这个代码中,串行计算出来得到的结果是有顺序的,但是并行计算出来得到的结果是无序的。跟cpu调度和阻塞时间(ping不通的时候会阻塞等待)有关系
io密集型:对文件或者网络上的数据。例如,读取文件或者取网上下载图片
计算密集型:i++
python的多进程: 适合计算密集型
多线程:适合io密集型;线程在进程里边;python有全局解析锁(GIL)导致并发性能不是很好。如,在网络上爬东西,在网络上耽误的时间和在cpu里排队的时间就差不多抵消了,所以使用多线程就好一些。
python进程里起了10个线程,要抢到这把锁(GIL)才能够取核心里运行,但是每一个进程和一个cpu绑定,所以线程抢到锁之后,这个进程就会在cpu中进行,但是运行的只是这个抢到这把锁的线程,其他的线程还要排队等待,等着那个线程使用完这个锁。如果没有这个锁,多线程也可以同时到别的核心中,就不需要等待了。
[注意]⭐⭐⭐
因为有全局解析锁的原因,只有python中多进程比多线程快。其他的软件都是多线程比多进程快!!所以全局解析锁导致了python的并发性能比较差
两个数据站之间只能沿着单一方向传输数据
两个数据站之间可以双向数据传输,但是不能够同时进行
两个数据站之间可以双向且同时进行数据传输;默认情况下配置的都是全双工。
[ethtool ens33]
linux里边怎么看自己的接口,使用"ethtool ens33"命令
[root@fttsaxf ~]# ethtool ens33
Settings for ens33:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full # 这是支持的链路模式
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full # 表示链路是全双工的
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
(1)接口连接时进行协商;(2)协商失败则无法正常通信
因为思科的命令和华为的命令不一样,所以我们可以学习怎么图形化操作,因为原理都是一样的的,只是不同系统的命令不一样。这个软件是"Cisco Packet Tracer"
[操作过程]
然后按上面的步骤继续操作,把三台pc端都连接交换机。这里会显示pc端连上的交换机的接口
[若是没有显示可以这样操作。点击"Options",进入界面之后,点击"Preferences",然后选择"Customize User Experience"框的"Port Labels Always Shown"模块,就能够显示端口的标签]
我们都连上之后,会发现这个灯由暗黄色变成了绿色,表示交换机和pc端协商的过程
[给pc0配上IP地址]
然后选择"IP" 进行配置IP地址,点击"Static",然后输入IP地址
然后依次对pc1和pc2进行配置;对界面进行标注(只是为了让人看的明白)
[对pc0进行网络测试]
点击pc0,会进入到这个界面,然后点击"Command Prompt"
然后执行以下命令
这说明这三个pc都能互相ping
点击交换机,到"CLI选项",在这命令框下输入"end",等运行完毕之后,再输入"show mac-address-table",然后就能看到MAC地址表
windows:ipconfig /all
linux:ip add
电脑中没有MAC地址表,有arp缓存表和路由表;交换机里有MAC地址表,若是交换机中配置了IP地址也是有arp缓存表和路由表,没有配置就没有。
交换机有两种:傻瓜交换机和智能交换机
傻瓜交换机:不能配置的,只有MAC地址表
智能交换机:可以配置的,可以配置IP地址,肯定就有arp缓存表、路由表和MAC地址表。例如,三层交换机,无线路由器和好的交换机。
点击图中的交换机,到"Config"模块,进行如下操作
由绿色变成红色