网络基础-二层通信
读懂文本需要对IP、MAC地址有基础的认识
二层通信
首先我们需要知道,流量数据的互访都是通过收发数据包的形式进行的
那么数据包是怎么知晓自己该去往何方的呢?我们先来了解几个概念
IP地址是什么
相信192.168.1.1这种类型的地址大家经常能看到,这个就称为一个IP地址,它用于标识网络上的某个终端。
MAC地址是什么
MAC地址用于标识一个设备的物理地址,一般来说,MAC地址是唯一的。在windows上,通常标识为F4-46-33-90-EC-5C这种形式
ARP表
记录IP地址与MAC地址的映射关系,arp表项一般用来指导数据包的封装
MAC表
交换机上记录MAC地址与端口的映射关系,mac表项一般用来指导交换机如何转发数据包
二层通信的过程
注:对于本文中提到的是否同网段的判定方法,在此不做详细解释,若没有这个基础,请自行百度解决
了解了IP地址与MAC地址的基础后,我们来研究一下二层的通信过程
环境介绍:
A、B为同网段的主机,仅配置了IP地址与24位掩码(主机为何没有配置网关地址,我会在之后三层的讲解中说明),二层交换机上无任何配置
主机A ping 主机B 的详细过程逐步说明如下
1、在A主机上执行ping 10.1.1.2
2、A主机查看自身的ARP表项是否存在10.1.1.2的MAC,检查后发现无对应ARP表项
3、A主机先判定目的IP 10.1.1.2是否为自己的同网段IP,使用掩码255.255.255.0去掩10.1.1.2这个地址。得出自身地址、对端地址的网络位均为10.1.1.0,因此判定为同网段互访,也就是二层互访
4、确认为二层互访后,A开始封装数据包,当前A自己的IP、MAC地址、B的IP是已知的。但A并不知道B的MAC地址,也就无法完成封装,所以A需要发送ARP广播请求去问B的MAC地址。我们不难发现,ARP实际上就是拿IP地址去解析MAC地址
在交换机的E0/0/1口抓包,我们可以看到
ARP的广播请求包:
三层信息:Sender IP(源IP)为A的IP,Target IP(目的IP)为B的IP
二层信息:源MAC为A、目的MAC为全F,也就是发送给任何同网段的设备,一般我们称为广播
为什么需要广播呢?因为A并不知道对方的MAC,只能发给所有同网段的设备,以找到10.1.1.2对应的设备,并让设备回复它的MAC地址给A
在交换机收到A发来的ARP广播请求包以后,它会查看ARP包中的MAC信息,发现源MAC是A,且该数据包是从E0/0/1接口接收到的
因此,交换机会在自己的MAC表中新增一条:A的MAC地址——E0/0/1
注:该条MAC表项的默认存活时间为300S
生成MAC表项后,交换机发现目的MAC是全F,为广播包,因此将该数据包向除接收端口(E0/0/1)的所有端口泛洪
B收到ARP请求包以后,发现该请求包目的IP是自己,便封装ARP单播回应包进行发送
ARP的单播回应包:
IP层信息:Sender IP(源IP)为B的IP,Target IP(目的IP)为A的IP
二层信息:源MAC为B、目的MAC为A
此处为什么回应的是单播呢?
因为在A发送ARP请求包时,里面就封装了A的MAC,因此B知晓了A的MAC,直接采用单播回复
交换机在收到B的回应包之后,同样的查看包中的源MAC,并生成一条MAC表项:B的MAC——E0/0/2
此处我们不难发现:交换机根据数据包中的源MAC地址学习并生成MAC表项、根据目的MAC进行转发
生成完MAC表项后,交换机会查看包的目的MAC,并在自己的MAC表项中查询该MAC对应的接口。匹配到MAC表中的:A的MAC——E0/0/1
因此,交换机将ARP回应包从E0/0/1口转发出去
A收到来自B的ARP回应
5、经过ARP解析,A已经得知了B的MAC地址,并将B的IP与MAC对应关系缓存在本地的ARP表中,为这一条目附加一个生存时间,在生存时间内再次访问B,无需发送ARP请求,直接通过表项来封装
6、A封装ICMP报文,其中包含源目IP、源目MAC,发送给交换机
7、交换机收到的报文如下:
8、交换机查看数据包中的目的MAC,并查看自身的MAC表项中是否存在对应的表项
交换机查询到目的MAC对应着E0/0/2端口,因此将数据包通过E0/0/2口转发出去
9、B收到数据包
10、B回复数据包的过程与A发送给B的类似,不做赘述