首先,得知道交换机的工作原理:
交换机的行为:
1、转发:交换机把从某一端口进来的数据帧从另一个端口转发处去(这里的另一个端口指除了这个数据帧进入交换机的那个端口以外的端口)
2、泛洪:交换机把从某一端口进来的数据帧从其它所有端口转发出去(这里的其它所有其它端口不能是这个数据帧进入交换机的那个端口)
3、丢弃:丢弃该数据帧
交换机的工作原理概述:
1、单播帧进入交换机时,交换机先学习其源MAC,接着再提取目的MAC并查询MAC地址表
(1)如果未查询到目的MAC(未命中),交换机标识为未知(未知单播帧),进行泛洪转发
(2)如果查询到目的MAC(命中),则比较MAC地址表中目的MAC对应的端口是不是这个帧进入交换机的那个端口,不是则从对应端口转发处去,若一致则丢弃
2、广播帧进入交换机时,交换机先学习其源MAC,接着再提取目的MAC发现是广播地址,直接进行泛洪转发,不再查询MAC地址表
3、组播帧进入交换机时(组播复杂了先不说)
源MAC的学习:交换机收到数据帧时,会将该帧的源MAC地址和接口的映射关系添加到MAC地址表中。如果此映射关系在MAC地址表已经存在,则老化时间会被刷新。还有一种情况MAC地址表项存在,但端口号和数据帧进入的端口不同,则会覆盖原来的MAC地址表项。
局域网内数据转发流程:
局域网内主机A 和主机B第一次通信:假如主机A ping 主机B的IP地址,应用层的程序ping会触发操作系统内核中的TCP/IP协议栈调用网络层的功能生成ICMP协议的Echo request报文,其中报文中的字段type=8,code=0表明该Echo报文为请求消息,ICMP报文被封装成IP数据包(ICMP是IP的附属协议,封装在IP数据包中),其中IP报头中的一些字段:源IP地址,目的IP地址为主机B,协议号为1表示IP报文数据部分封装的上层协议为ICMP。 接着IP数据包会在数据链路层被封装成以太网帧(准确来说是以太网2帧),但是在封装以太网帧之前,主机A会先查看自己的ARP缓存表,查看有没有与目的主机IP对应的MAC信息(如果有那么该MAC会被用于以太网帧封装中的目的MAC字段),发现没有对应信息,先暂停对IP数据包的以太网帧封装(因为缺少目的MAC地址,封装不了一点,得先运行ARP获取到目的MAC地址之后,再继续进行封装操作),此时操作系统会运行ARP,生成ARP request报文,其中ARP报文中的一些字段:源主机MAC和IP都是已知的,目的IP也是已知的,目的MAC未知(所以目的MAC为广播地址FF:FF:FF:FF:FF:FF),操作类型字段值=1表示该报文为请求报文,ARP请求报文在数据链路层被封装成以太网Ⅱ帧(广播帧),从主机A的网卡发送出去。
交换机从GE0/0/1收到该数据帧后,检查该数据帧的源MAC地址,并将该MAC地址与这个帧进入交换机的那个接口进行映射,然后将这个映射作为一个动态地址表项存放进MAC地址表,接着交换机检查目的MAC地址,发现是广播地址FF:FF:FF:FF:FF:FF,是一个广播帧,于是不再进行MAC地址表查询,而是直接进行泛洪操作,将该广播帧从各个接口(当然接收这个帧的接口除外)泛洪出去。
主机B从网卡接收到该数据帧,操作系统进行处理:检查该数据帧中的目的MAC地址,发现是自己的MAC地址,则予以接收(否则丢弃,当然为本机侦听的组播或广播MAC地址时也是接收),并把以太网封装剥掉后送往上层协议,网络层模块进行处理,发现是一个ARP Request报文(显然该报文的作用就是来告诉该主机B,对方A主机想要获取你的MAC地址),主机B先学习其中的源MAC和源IP并更新到自己的ARP缓存中,接着主机B生成一个ARP Replay报文,其中ARP Replay报文中的一些字段:源主机MAC为自己的,源IP为自己的,目的MAC为主机A的,目的IP为主机A的。ARP Replay报文在数据链路层被封装成以太网Ⅱ帧(单播帧)从网卡发送出去。
交换机从GE0/0/2口接收到该数据帧后,检查该数据帧的源MAC地址,并将该数据帧的源MAC地址与这个帧进入的接口进行映射,然后将这个映射作为一个动态地址表项存放进MAC地址表,接着交换机检查目的MAC地址,提取数据帧中的目的MAC地址,并查询MAC地址表,命中目的MAC地址表项(因为前面已经学习过了,有主机A对应的MAC地址表项,且该通信过程为局域网内的ARP请求与回复,显然不会超过MAC地址表的老化时间300s),并提取这条MAC地址表项中的对应的接口,且对应的接口≠接收该数据帧的接口,所以从对应的接口转发(否则,即对应接口=接收接口(如:自环数据),直接丢弃。)
主机A从网卡收到该数据帧,操作系统对其处理:解析以太网帧,剥离帧头、帧尾,交给上层,网络层发现是ARP Rplay报文,学习源MAC和源IP并更新到ARP缓存表中。至此,根据收到的数据帧,主机A终于获取了主机B的MAC地址,终于能继续将IP数据包封装成以太网Ⅱ帧(单播帧)了,然后从网卡发送出去……
终端设备接收到数据帧会如何处理:
1、当主机接收到的数据帧所包含的目的MAC地址是自己时,会把以太网封装剥掉后送往上层协议。
2、主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。
3、如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。