版权声明:本文为博主原创文章,欢迎转载,但请标出本文的出处,谢谢!欢迎访问本人的github主页【https://github.com/abodu/omb】 https://blog.csdn.net/liudglink/article/details/83146487
描述两台PC主机(PC1,PC2)
通过一台交换机(SW)
进行通讯的过程
首要说明与注意点:
- 这一过程涉及PC主机的ARP表(记为
ARP_TBL
) 和 交换机MAC地址表(记为MAC_TBL
) 的形成过程。 - 报文帧格式
| DA | SA | TYPE | .... |
- 交换机
学习
SA地址,向转发
DA地址
具体过程描述
一、 PC1在自己的ARP表(
ARP_TBL_PC1
)中查找是否存在PC2的记录MAC地址
的记录:
- 若存在, 则将PC2的MAC地址直接填入到报文帧的DA字段,并对PC2的单播进行数据传送
- 若不存在,则将FFFFFF填入报文帧的DA字段,对整个广播域里的其他PC主机进行广播传送
二、交换机
(SW)
收到PC1发出的报文帧,需要进行两个动作 :学习(SA)
与(向DA)转发
学习
:在MAC地址表(MAC_TBL
)中查看是否存在PC1的MAC地址的记录若是不存在,则
MAC_TBL
新增一条包含有PC1的MAC地址及PC1连接到交换机的端口Port1记录转发
:在(MAC_TBL
)中查看DA字段记录的值对应的记录是否存在- 若是此报文帧是单播帧
(DA的值不是0xFFFFFF)
:- 如果记录存在,则交换机向指定的端口
(PC2的连接到交换机上的端口)
转发报文帧的内容 - 若是记录不存在, 交换机可以直接丢弃此报文帧,也可以直接以广播帧的方式来进行处理
- 如果记录存在,则交换机向指定的端口
- 若是此报文帧是广播帧
(DA的值是0xFFFFFF)
: 则拷贝报文内容并向其他(交换机)端口逐一转发。
- 若是此报文帧是单播帧
三、PC2的动作 此报文帧的目的IP地址是主机PC2的,所以只有主机PC2才会处理此次
ARP请求
,并做出ARP响应。
- PC2在自己的ARP表(
ARP_TBL_PC2
)中查找是否存在PC1的记录MAC地址
的记录:若不存在,则取出PC1的MAC地址
(报文帧SA字段的值)
与IP地址,并记录到ARP_TBL_PC2中 - 组装ARP响应报文帧并传给交换机进行转发
此时报文帧的
DA字段
的值是PC1的MAC地址
,SA字段
的值是PC2的MAC地址
四、交换机
(SW)
收到PC2发出的响应报文帧,跟接收到PC1的请求报文帧类似,也会执行学习与转发两个动作
学习
:在MAC地址表(MAC_TBL
)中查看是否存在PC2的MAC地址的记录若是不存在,则
MAC_TBL
新增一条包含有PC2的MAC地址及PC2连接到交换机的端口Port2记录转发
:在(MAC_TBL
)中查看DA字段记录的值对应的记录是否存在因为是DA字段记录的是PC1的MAC地址,并且它已经存在于
MAC_TBL
中,所以SW
会直接查明要向Port1转发此报文帧(而不需要判断是否进行广播)。
五、PC1接收到经由SW转发的ARP响应报文,并对其内容进行解析
- 取出PC2的MAC地址
(报文帧SA字段的值)
与IP地址,并记录到ARP_TBL_PC1
经由整个 PC1请求
与PC2响应
的过程,最终得到如下结果
- PC1 与 PC2 各自的 ARP表里面都新增了一条对方的 IP+MAC地址的记录
- SW 里面新增了
PC1_MAC + Port1
和PC2_MAC + Port2
的两条记录