作为以太网中的重要角色,交换机是怎么工作的呢?
早期的局域网并不全是由交换机连接的,还有其他的局域网技术,比如令牌环、FDDI等等,但逐渐都被以太网淘汰了。我们现在所接触到的局域网,基本上都是以太网。
交换机有很多端口,每个端口都可以连接一台电脑。假如A电脑发送数据给B电脑,那交换机怎么知道B电脑接在哪个端口呢?
你看,以太网是一个典型的MA网络(Multiple Access,多点接入)。也就是说,交换机可以同时为很多电脑服务。
既然这样,那就需要一个东西能表示哪台电脑是谁谁谁了。
这个东西就是MAC地址。
MAC地址很像我们的身份证号码,每个支持以太网的设备都有一个MAC地址,就像身份证号码全国唯一一样,MAC地址也是唯一的。
MAC地址长度6个字节,每个字节有8位二进制,共48位二进制数,一般用16进制表示,类似0012-3456-789A的样子。其中的“-”是分隔符,分隔符只是为了方便我们看,并不在真实地址中出现,所以也有写成类似00-12-34-56-78-9A或00:12:34:56:78:9A的样子。
MAC地址前3个字节叫OUI(组织唯一标识符)。不同厂家OUI也不同,由厂家向IEEE(电气电子工程师协会)申请,IEEE统一分配。通过OUI,可以知道设备是谁生产的。后3个字节叫EUI(扩展标识符),由厂家自己编。
等等,我听说过IP地址,那IP地址又是啥?
你想,我们每人都有名字,也有身份证,平时你和别人打交道,是叫名字还是叫身份证号码呢?
MAC地址像身份证号码,而IP地址,就像名字。
平常我们和别人交流,称呼名字就可以了。但是,有的时候你必须提供身份证号码,比如你办银行卡、电话卡、去网吧、住酒店,等等。
所以,两种地址各有各的用处,有时用IP地址,有时用MAC地址,看谁用,在什么场合用。
还有一点,IP地址和名字一样,可以改;而MAC地址和身份证号码一样,不能改。
关于IP地址,以后再详细讨论它。
有了MAC地址,交换机只需要记住每个端口所接着的MAC地址是谁,就行了。
交换机要记住这些信息,就需要有个东西来记,这个东西叫“MAC地址表”,交换机的工作全靠它。
地址分别是电脑A、B、C、D的地址,每个地址对应着连接哪个端口,还有个老化时间,这是为了更好地利用内存资源,把超过老化时间的表项删除,节省内存。每个MAC地址表项的初始老化时间是300秒。
比如,“地址A”的老化时间是68秒,意味着68秒前交换机从“端口1”收到“地址A”发过来的信息。如果再次收到“地址A”发的信息,老化时间就变0重新计时。
“地址B”已经275秒没有发信息了,它出什么事了交换机可不关心,只要再过25秒它还没发信息,不好意思,交换机就会把“地址B”这行从表里删除!以后,电脑B又发数据了,交换机再重新把地址B写进表里。
现在我们来看,交换机有了MAC地址表。如果电脑A发送数据给电脑B,电脑A发的数据被交换机收到,交换机一看是地址A发来的,先把它的老化时间清零;再一看,是发给地址B的,于是把这些数据统统从“端口2”发出去。而且,与此同时,“地址C”还能给“地址D”发数据,不会冲突。
是不是很给力!
如果,“电脑B”这行在MAC地址表中不存在呢?
交换机收到电脑A发给电脑B的数据,在MAC地址表里把电脑A的老化时间清零后,发现收件人电脑B的MAC地址在表中根本就没有,不知道该从哪个端口发出去!
怎么办?
交换机会把这个数据复制成很多份,从除了接收数据的端口1外的其他所有端口发出去!
我们把MAC地址表中找不到收件人MAC地址的数据,叫“未知单播帧”,交换机把“未知单播帧”从其他所有端口发出去的行为,叫“泛洪”。
但有一种情况,交换机不会转发:
你看,地址A和地址B都连接着端口1。如果此时电脑A发数据给电脑B,电脑A把数据发给了交换机,交换机一看,还要从端口1发出去,玩我哪,那不行,交换机会把数据扔了,不发。
为什么呢?
交换机的一个端口只可能连接一台电脑,或者一台其他的网络设备,比如其他的交换机,或者Hub。
前面我们曾提到过Hub,它虽然样子长得跟交换机差不多,但实际上它就是一条公共道路,并没有“MAC地址表”。也就是说,接在Hub上的电脑,只要有一台发数据,其他人都能收到。
那么,如果是这样:
PCA发送数据给PCB,数据来到Hub,Hub把数据复制成2份,然后分别发给PCB和交换机。
此时,PCB收到数据了。
然鹅,如果交换机把从端口1收到的数据又从端口1发出来,Hub又把数据复制成2份,再发给PCA和PCB。
发给PCA的,PCA发现这个数据的收件人是PCB而不是自己,丢弃;
发给PCB的,PCB又双叒叕收到了!
你看,PCB重复收到了2份数据,这可不行哦!
所以,如果交换机发现接收数据的端口和要发出去的端口一样,就不发了。除此之外,都会转发。
前面,我们说的是“单播”,就是只有一个接收者。
还有个“组播”,就是有多个(一般不是全部)接收者。关于组播,我们以后再说。
还有个“广播”,其他人全都是接收者。注意是“其他人”,也就是说,不包含发送者本人。
如果电脑A想把一条消息发给所有人,那么接收者就不能是具体某个人的MAC地址了,不然交换机会当成单播处理。
因此,需要约定一个特殊的地址,FFFF-FFFF-FFFF,我们把它叫“广播地址”。
电脑A把数据的发送地址写成自己的MAC地址,接收地址写成“广播地址”,发给交换机。
交换机收到数据一看,发件人是地址A,看看MAC地址表里有没有,如果有,把它的老化时间清零,如果没有,写进表里;再一看,收件人地址是“广播地址”,于是把这个数据复制成3份,分别从端口2、端口3、端口4发送出去。注意,不会再从端口1发出去了!
广播就是这样,有几个其他端口就复制几份。
这个过程看起来像不像寄快递:电脑A是寄件人,电脑B或者其他人是收件人,交换机是“快递小哥”,嘿嘿!
既然像寄快递,那要写个类似“快递单”的东西,写明发件人、收件人等等信息。
这个“快递单”就是以太网的封装格式。
我们要发的数据是Data。电脑A在发送之前,需要填上收件人地址DMAC、发件人地址SMAC(就是自己的MAC地址),Type是告诉收件人,收到后把数据交给谁处理,CRC是为了避免数据在路上出错。
看上去挺不错,但这里有个问题:发件人在发数据前,需要知道接收者的MAC地址,不然这“快递单”没法写!
这太难了!平时我们跟别人交流,从来都是叫名字,谁去记他的身份证号码呀!
于是,我们有了一个协议:ARP(Address Resolution Protocol,地址解析协议)。
小Q:以太网封装中Type常见的有哪些?
欢迎留言讨论。