读懂文本需要对IP、MAC地址、二层通信有基础的认识
二层通信原理可参考本人另一篇blog:
网络基础-二层通信
广播域
通常来说,一个广播域代表着一个IP网段
既然二层通信可以直接互访,那为什么需要我们需要广播域呢?
回想二层通信的原理,主机通过发送广播arp报文来请求对端的mac地址信息,在交换机层面,会将此arp泛洪发送,若没有广播域的概念,交换机便会向除接口端口的所有接口做泛洪;单次的arp可能微不足道,但网络中一般都会有大量的客户端,如果都做泛洪转发,会对交换机造成巨大的性能压力。
把这个关系类比电话号码,泛洪域就像一个个单独的家庭。记住自己家人的电话对个人来说很容易,但如果需要记住所有人的电话号码,对个人的记忆力考验就比较大了。此时,我们便需要一个接口人,当需要拨打外人的电话,我们只需要找到接口人(可参考114的转接服务),让他代替我们去查询。再回到网络知识中,这个接口人,就是网关
网关
网关便是代替我们做转接服务的"114"
查询陌生人号码时,我们只知道对方的身份(即IP地址),不知道对方的号码(即MAC地址)。此时,为了方便通话,我们只需要将需求告知114对方的身份,让他替代我们去拨号,实际用起来可以发现我们并不需要知道对方的号码,只需要有一个中介人可以提供转接服务,而这个人的号码是114。
对应关系:
电话号码:MAC地址
身份:IP地址
114转接:网关
回到网络知识中,我们访问跨网段主机的流程是:
发送一个源IP、源MAC为自身,目的IP为对端,目的MAC为网关的流量包,让网关代替我们进行转发即可。
对比电话拨号,相信你已经对三层通信的原理有了一定的了解,下面我们看下真实的交互过程
三层通信的过程
环境介绍
PC1:地址为192.168.10.100,网关配置192.168.10.1。位于交换机的vlan10泛洪域
PC2:地址为192.168.20.100,网关配置192.168.20.1。位于交换机的vlan20泛洪域
LSW1:地址为192.168.10.1、192.168.20.1;分别充当两个vlan的网关
通信过程
下文介绍PC1访问PC2时完整的通信流程
1、在PC1 ping PC2
2、PC1查询自身arp表,发现没有192.168.2.100的arp条目
3、PC1通过IP与掩码判断对端跟自己不是同网段,
PC1查询自身路由表,通过最长掩码匹配原则,得知访问192.168.20.100的下一跳需要发送给192.168.10.1
PC1已经有目的IP地址信息,当前需要知道192.168.10.1的MAC地址信息
4、PC1发送免费ARP请求网关的MAC地址信息
5、vlanif10回复PC1的arp请求,告知PC1自身的MAC地址
在交换机上,一个vlanif口会对应一个mac,所以vlanif20的mac是与vlanif10不一样的
6、PC1学习到vlanif10的mac,需要注意的是,在PC1的arp表中,只会也只需要存在192.168.10.1的表项,不需要有192.168.20.100的表项
7、PC1重新封装数据包,源IP、MAC为自身,目的IP为PC2,目的MAC为网关(192.168.10.1)的MAC
8、交换机从vlanif10(g0/0/1)接收到数据包,首先接收端口通过记录PC1的mac,生成对应的arp与mac条目,方便后续转发,再次声明:交换机通过入接口学习MAC
9、交换机解析来自PC1的icmp包,发现目的IP是192.168.20.100,对应自身的vlanif20广播域,因此从vlanif20(g0/0/2)口使用免费arp请求192.168.20.100的MAC地址
10、PC2回复交换机的arp请求,与前文类似,不做赘述,并在自身的arp表项中生成192.168.20.1的条目
11、交换机收到PC2的arp回应后,通过入接口学习MAC,生成PC2的MAC条目与arp条目
12、交换机先查询arp表,找到PC2的mac,再使用这个mac查询mac表,找到出接口,将PC1的ICMP包从g0/0/2口转发给PC2。回包过程类似,此处不做赘述。
交换机根据数据包中的源MAC地址学习并生成MAC表项、根据目的MAC进行转发
13、经过上述流程,PC1可正常与PC2进行互访
写作不易,如果觉得本篇blog有用,请帮忙点赞、收藏、关注
对本文有任何疑问,或需要纠错,欢迎评论私信
技术是用来分享的