二层交换and三层交换

二层交换与三层交换的问题其实是偶然看到的,看某校夏令营经验贴看到有提问这个问题,正好我不会,记录一下。

参考链接:
https://zhuanlan.zhihu.com/p/64455461
https://blog.csdn.net/Apollon_krj/article/details/82086174
https://blog.csdn.net/lycb_gz/article/details/8780851
二层交换机工作在数据链路层,根据MAC地址对帧进行转发;
三层交换机工作在网络层,对于跨网段的通信,可以做到一次路由,多次交换。

用到的知识点

在说二三层转发之前先总结一下用到的知识点,虽然我学过一遍计算机网络,但自认为学的很菜。。有些地方都忘了。。甚至某协议首部某字段还没记住23333
1.ARP
ARP协议是由IP地址获得MAC地址,假设两台主机在同一网段,A向B发消息,A知道B的IP地址 但是不知道B的mac地址,所以在局域网内发个广播,目的MAC全为F,意思就是:“谁的IP地址为192.168.2.2?赶紧把mac地址告诉我”
局域网内其他主机看到这条消息后发现目的ip不是自己的,于是丢弃;B看到后发现是找的自己,于是把自己的mac地址发给了A,于此同时B在自己的ARP表中记录下A的IP与MAC地址的映射关系。
A收到B发的消息后也把B的IP与MAC的映射关系记录到自己的ARP表中。。这就是一次简单的ARP请求
2.跨网段通信
假设A和B不在一个网段,通信过程应该是这样:
先和子网掩码相与,发现不在一个网段,然后找自己的网关,把数据发给网关让网关代为转发;在这个过程中如果不知道网关的MAC就来一次ARP。发送给网关后,查一下路由表,看看下一跳该发到哪了,就这样一直转发,查找下一跳,转发。。无限套娃。套到最后节点,发现目的IP在自己的网段,先看看ARP表有没有记录,没有的话发一次ARP请求,有的话就直接把请求发给目的IP了。
3.ARP表 mac表
二层交换机维护MAC表,主机维护ARP表

二层交换

二层交换是数据链路层的交换,根据mac地址交换。二层交换通信不能跨网段(比如vlan)。
二层交换机维护的MAC表是端口和MAC地址的映射关系。

三层交换

三层交换又被叫做一次路由,多次交换。
这是啥意思?
先说一个简单的:
假设一台三层交换机划分了vlan1和vlan2,a在vlan1,b在vlan2,a第一次给b发数据的时候还是正常走路由表,等整个过程结束后三层交换机会记录下一条数据,包括了A和B的mac地址端口等相关信息,下次A和B通信的时候直接根据这条数据通过二层转发了,就不用再走路由了。
of course,事情没有那么简单,too simple,sometimes naive!
上面这句话就图一乐,就像面试问TCP 三次握手的时候你说“客户端发请求,服务器响应,客户端再发一个请求,建立连接。”一样,太不专业了。
好的 接下来说个复杂的。

三层交换跨网段通信

主机A和B在同一个交换机,但是在不同vlan。观察a和b的通信过程
初始化,a发现b和自己不一个网段并且不知道网关的mac,广播一个ARP,目的是找到网关的MAC。
网关收到ARP请求后把自己的mac地址发给a,并且在自己的arp表中记录a端口和mac的映射关系。
然后把A的IP地址(作为“目的IP地址”)、MAC地址(作为“下一跳MAC地址”),以及与交换机直接相连的端口号等信息下发到三层交换机ASIC芯片中的三层硬件转发表。此时在三层硬件转发表中就有了第一个转发表项,即A的转发表项。
A收到网关的应答后,把目的地址修改问网关的mac,并且把数据包发给网关
网关收到请求后,先在三层硬件转发表中查找与B有关表项,由于是第一次通信,所以没有,然后进行路由。
CPU根据目的地址在router table中查找next hop,发现了直连的主机b,然后在自己的arp表中查b的mac,没有查到,于是发个广播:找B的mac。
B收到ARP请求后把自己的mac发给交换机,自己也缓存下。
交换机收到b的mac后,在自己的arp表中记录下ip与mac的映射;在三层硬件转发表中新增一项: B的IP地址、MAC地址、进入交换机的端口号等信息。
这样就完成了第一次A和B的通信,三层交换机的硬件转发表中多了两项:分别是
A的IP A的port A的mac A的vlan 。。。
B的IP B的PORT B的MAC B的VLAN 。。。
等下次有别的主机想和A或者B通信的时候,由于表中有记录,直接走表中记录的端口转发过去就可以了。
即 一次路由,多次交换~(首尾呼应2333

arp全0和全f的问题

在网络层的ARP协议(TCP/IP模型)不知道目的mac,所以把目的mac置0;到了数据链路层置为全F 意为广播帧–数据链路层不认识ip。
如果有错误欢迎提出,共同进步