从集线器、交换机和路由器说起

1 集线器

要保证网络节点间的相互通信,最简单的想法就是每两个节点间都建立一根网线,如下图所示,这样A、B、C、D、E五个节点之间就可以任意通信了。
在这里插入图片描述
但这种方法显然不可行,因为电脑显然没有这么多网口,即使有这么多网口,每个节点连接的网线数量为n-1,显然是不现实的。其实只要保证任意两节点间有路径可以到达,那么理论上就是可以通信的,像下面的图所示:
在这里插入图片描述
更进一步,如果每个节点只连一根网线,是否可以做到互相通信呢,答案是可以的,这里就要引入集线器了。
在这里插入图片描述

每个节点与集线器相连,包转发操作由集线器实现,集线器的转发策略是向其所连的所有节点广播包,由接收节点自己判断是否是发给自己的包。

这里就引出了一个问题,比如A要向C发送一个包,A要在包里写入什么信息才能让C知道这个包是发给自己的?答案是通过mac地址,如下图所示,我只要在数据包头部写入源mac地址和目标mac地址,就可以让接受方判断包是谁发的,是否是发给自己的。
在这里插入图片描述

集线器的引入使布局干净了很多(节省了网线和网口,将复杂性转移到了集线器上),但是还是存在如下问题:

  1. 不安全,数据包会广播,任意节点都能获得数据包信息
  2. 网络负载大,广播引起不必要的网络传输

其实总结起来就是一个问题:集线器不能精准地将数据包发送到目标节点。

2 交换机

交换机就是为了解决集线器问题而产生的,现在企业中基本都使用交换机,集线器已经成为历史了。

交换机是怎么解决精准转发问题的呢?答案是通过mac地址表,mac地址表的格式如下:

MAC地址端口
aa1
bb2
cc3

记录了mac地址和对应的mac地址连接的端口号的信息。当有数据包到交换机时,交换机解析出数据包头带的目的mac地址,通过mac地址表找到端口,然后将数据包从该端口中发送出去就可以了。

那么问题来了,这个mac地址表里面的信息是怎么建立起来的呢?显然一开始交换机中是不可能有这些信息的。答案是在转发的过程中动态建立起来的,仍以上面的A到C的数据包举例,A发送数据包给交换机,交换机从数据包中解析出源mac地址为aa,此时mac地址表中的第一条记录就可以创建起来了,即

MAC地址端口
aa1

交换机查找目的mac地址对应的端口,发现找不到,此时交换机就回退到了集线器,开始广播,C接收到数据包后会返回给交换机一个响应,因此,第二条记录也可以创建起来了,即

MAC地址端口
aa1
cc3

mac地址表的记录就是这样一步步创建好的。

至此,交换机通过mac地址表的方式解决了集线器的问题。但随着集群规模的扩大,新的问题显现了。

交换机的端口数量是有限的,随着节点越来越多,一个交换机显然连接不了所有节点,但聪明的你肯定想到了解决办法,可以通过将交换机与交换机相连来无限扩大端口数量,因为两台交换机相连各自只占一个端口,剩下的端口就可以多出来了。如下图所示:
在这里插入图片描述
此时交换机1和交换机2各自维护一个mac地址表,分别如下所示:

MAC地址端口
aa1
bb2
cc3
dd5
ee4
ff4
gg4
hh4
MAC地址端口
aa3
bb3
cc3
dd3
ee5
ff1
gg2
hh4

端口数量有限的问题解决了,但新的问题又浮现了,即mac地址表的大小,当集群中有几万台甚至几百万台电脑时,mac地址表已经无法记录如此庞大的信息。

3 路由器

交换机是没有mac地址的,否则我们我们可以通过下表的方式简化mac地址表信息:

MAC地址端口
aa1
bb2
cc3
dd5
交换机2mac地址4

这样上述交换机的问题就不存在了,俗话说没有什么事情是引入一个中间层解决不了的,虽然交换机没有mac地址,但我们可不可以引入一个具有mac地址的中间媒介,插入两个相连的交换机中间,这样不就解决问题了?其实这就是路由器承担的功能。

通过上面的功能描述,可以发现路由器应该具有如下特点:

  1. 每个端口都有一个独立的mac地址
  2. 具有转发包的功能

引入路由器后,拓扑结构如下图所示:
在这里插入图片描述

引入路由器后,数据包的帧结构又有了扩展,如下图所示:
在这里插入图片描述
具体的构造和发送过程如下(A到C):

  1. 在发送前只知道源mac地址,源ip地址和目标ip信息
  2. 根据子网掩码和目标ip判断目标ip是否在同一个子网内,C在同一个子网内
  3. A可以通过arp协议(arp缓存表记录了mac地址和ip的映射关系)获得C的mac地址,将C的mac地址填入,数据包帧结构构造完毕
  4. 交换机1通过mac地址表查询出端口,将数据包发送给C

具体的构造和发送过程如下(A到F):

  1. 在发送前只知道源mac地址,源ip地址和目标ip信息

  2. 根据子网掩码和目标ip判断目标ip是否在同一个子网内,F不在同一个子网内

  3. A通过arp协议获得默认网关(路由器与当前交换器连接端口的ip)的mac地址,将F的mac地址填入,数据包帧结构构造完毕

  4. 交换机1通过mac地址表查询出端口,将数据包发送给路由器

  5. 路由器有2步工作:

    a. 修改目的mac地址为F的mac地址(路由器同样根据arp协议获得F的mac地址)

    b. 根据路由算法计算出从哪个端口出去,发送给交换机2

  6. 交换机1通过mac地址表查询出端口,将数据包发送给路由器

  7. 路由器有2步工作:

    a. 修改目的mac地址为F的mac地址(路由器同样根据arp协议获得F的mac地址)

    b. 根据路由算法计算出从哪个端口出去,发送给交换机2

  8. 交换机2根据mac地址表查询出端口,将数据包发送给F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值