电脑A和B,通过网线进行连接
数据传输:
继续扩展,三台电脑呢,A向B传输数据:
这就产生了疑问:
- 为什么数据要在两个网线上都传输呢,不能直接发送给B吗?
- B和C都收到了数据,这不传错了吗?
如同寄快递一样,有效的快递包裹,有寄件和收件地址。每台电脑出厂都有自己的身份证号,叫做MAC地址。发送数据前,得人为的获取到B的MAC地址(有专门的获取方式)。将信息加到数据包中,一起传输。
数据包整理好之后,A也并不知道网线的另一端是谁,所以只能全部发送(术语广播),B和C都会接收到数据。B和C可以识别到数据包中的目标MAC地址,B发现是自己的地址,则接受,C发现不是自己的地址选择忽略。
传输过程:
如果100台电脑需要相互通信,不可能每台电脑同时插100根网线,硬件也无法支持,于是出现了集线器(也叫HUB),负责转发电信号。
集线器
传输过程:
集线器只能转发电信号,所以A发送数据包到B,集线器要将数据包对所有的接口进行发送(包括来源的A)
这产生了很多问题
-
任一的电脑总是会收到与自己无关的数据包,要进行忽略处理(占用电脑资源)
-
网线中同一时间能够传输的数据包是有上限的(硬件设施的能力上限)。线路中存在大量的广播数据,有效的数据占比低,如果大量的数据要通过集线器传输,就会变得很困难。
-
如果A->B,C->D同时发送数据包到集线器,两个数据包会碰到一起,这就是数据碰撞。集线器无法处理转发,只能广播告诉所有电脑有数据碰撞了,你们得重新发送数据包了。可见数据传输效率很低。
怎么优化呢,于是出现了交换机
交换机
传输过程:
交换机可以把数据包直接转发到连接B的网线接口,至于交换机如何获取到MAC的映射包?上图只是一个最终的版本,实际上交换机完成数据传输需经历以下两个阶段
交换机自身会维护一个MAC地址和它的网线接口的映射表,初始为空
一阶段:
- 电脑A把数据包发往交换机
- 交换机将A的MAC地址和接口对应关系,加入到它的映射表中
- 由于映射表并没有B的映射关系,所以需要泛洪(将数据包发往除了A网线的所有其他接口)
- 电脑B接收到数据包,其他电脑由于数据包与各自MAC不匹配则忽略数据。
二阶段:
随着电脑之间的不断发送数据,交换机的映射表就会存有所有映射关系,发送数据就变成以下方式
- 电脑A把数据包发往交换机
- 交换机查询到了目标B的MAC地址映射信息
- 交换机将数据从接口2发往B
- 电脑B接收到数据
所以在双方通过交换机相互发送过数据一次之后,交换机就可以固定线路转发数据。
所以我们发现相比于集线器来说:
- 广播的数据变少了,只有初始阶段的时候需要。电脑绝大部分都是处理与自己相关的数据
- 电脑都是与交换机不同的接口进行连接。同一时间A->B, C->D的数据不会有碰撞了,属于不同的接口。交换机直接进行了转发处理,网络利用率有了很高的提升。
随着电脑的不断增多,一台交换机已经不够了,这我们就想,那就多增加交换机,这可以解决吗?
假设拓扑图如上,12台电脑通过4台交换机互联。 电脑A向电脑J发送数据,由于交换机1不与J直连所以不会有J的MAC地址则进行泛洪,数据发送到交换机2,交换机2也需要进行泛洪,同样交换机3也是如此,交换机4有可能有J的MAC信息,泛洪或者转发给J。
电脑A给电脑J发送数据,要进行多次泛洪,就算是各个交换机维护了各自的MAC映射表,下一次的数据传输,还是要进行泛洪, 这样会带来几个问题
-
数据的传输效率过低,无法进行直接转发
-
大量的无效数据包占用着线路。线路利用率低,也会导致线路拥塞,无法传输正常数据包。类似于集线器。
-
如果继续扩展,成千山万台电脑通过该类拓扑连接,电脑之间将无法通信。
那么大量的电脑该怎么如何进行通信呢?
仅仅通过MAC地址已经无法做到有效的跨交换机通信,这里就要新引出新的概念,ip和路由器。
路由器
ip是一串有规则的数字,例如:192.169.0.2, 我们给互联的每台电脑都设置ip 先看一个有趣的事情,电脑可以通过ip自动帮我们寻找目标的MAC地址,这样不需要人为的去找目标电脑的MAC地址来加到数据包,这就是所谓的ARP协议。
传输过程:
每台电脑都有一个arp缓存表,用来记录其他电脑的ip和MAC的对应关系
- 准备数据包,由于本机的ARP缓存表中没有B的MAC地址,所以会特殊发送ARP数据包,该数据包中的目标MAC设置为00
- 数据包发往交换机1,交换机1 由于00的特殊地址,于是进行泛洪
- B接收到数据后,ARP表存储A的IP-MAC信息后,发送ARP回复包给A。回复包中目标MAC地址为AA,所以进行单播
- A接收到回复包后,添加B的IP-MAC信息,并重新更新初始的数据包中的MAC信息 这便是完整的通过ip获取MAC地址的ARP协议。
于是A发送数据包给B,在IPP的帮助下,电脑会自动根据IP获取B的MAC信息,来补全数据包,补全后就是单交换机下A与B的通信。
那么A向D如何发送数据包呢?目前我们只是发现路由器的作用是给电脑设置IP,还有其他的作用吗?
这里我们引入一些概念。
子网:图中路由器设置了两个网段,网段1:192.168.0.0/24,网段2:192.168.1.0/24,只要是192.168.0.x这个规则的ip都属于网段1(x最大值为255),显然,A,B,C属于网段1,D,E,F属于网段2,同一个网段内可以直接相互通信,如同上文描述,不同网段直接需要路由器进行转发来实现。
网关:路由器的接口E0和E1 都有自己的ip,192.168.0.1和192.168.1.1,这就是网关ip,网段1的网关ip为192.168.0.1,该网段下的每台电脑上都存储了这个网关ip信息。
处于不同网段的A和D的通信流程如下:
- 准备数据包,由于A和D处于不同的网段,不能直接通信,数据的转发需要有路由器处理,所以将目标的MAC地址设置为网关(192.168.0.1)的MAC地址(这里省略了一个环节,A通过APR获取到网关的MAC,假设之前已经获取过)
- 交换机1接收到数据包,根据自身的MAC映射表,将数据包转发给路由器接口E0。 3. 路由器收到数据包后,增加A的IP-MAC关系到ARP缓存表。缓存表中并没有D的MAC信息,识别到D的ip属于网段192.168.1.0/24,使用接口E1,于是发出ARP数据包寻找D的MAC
- D收到ARP包后,将网关IP-MAC增加到ARP缓存表,并发送ARP回复包给网关E1
- 路由器收到ARP回复包后在ARP缓存表增加D的信息。并将原始数据包中的目标MAC更新为D的MAC地址
- 路由器将完整的数据包,通过E1接口发送。通过交换机传输到D,至此完成。