计算机网络<二>——集线器、网桥、交换机

494 阅读11分钟

网卡的作用

计算机上有一个硬件设备叫网卡(一台计算机可能不止一个网卡),用来接受网络数据,然后再传递给上一层比如说服务器软件tomcat

其实我们光知道服务器的IP地址还不行,我们还要知道其网卡地址,那为什么平时我们访问服务器只需要知道IP地址就可以了呢?

因为有东西自动帮我们根据IP地址解析出了网卡地址,只有知道了网卡地址之后我们才知道网络数据应该传给谁

计算机之间的通信基础

  • 需要得知对方的IP地址

  • 最终是根据MAC地址(网卡地址),输入数据到网卡,被网卡接收

    • 如果网卡发现数据的目标MAC地址是自己,就会将数据传递给上一层进行处理
    • 如果网卡发现数据的目标MAC地址不是自己(用同轴电缆或者集线器连接的计算机可能会出现这种情况,即使网卡地址不是自己,也有可能接受到其它计算机发送过来的消息),就会将数据丢弃,不会将数据传递给上一层进行处理

路由器的作用

路由器负责连接两个不同的网段

ARP协议和广播的简介

ARP协议,广播是在同一个网段中传播的,不同网段中是隔绝广播的

  • 广播这个操作真的就像广播一样,向周围的机器都发送查询请求,直到找到与目标IP地址一样的机器,该机器会把对应的网卡地址响应回去
  • 发广播的目的:获取对方的MAC地址
  • MAC地址全是1的请求代表它是一个广播请求,即在同一个网段的所有网卡都能接受到这个广播

计算机之间的连接方式 - 网线直连(交叉线)

  • 在两个计算级首次通信之前,我们就算知道对方的IP地址,但是在不知道其对应的网卡地址的情况下,并不能将网络数据发送过去。我们需要先通过ARP协议发送广播,获取到对方服务器的网卡MAC地址,这样才可以进行数据的传输
  • ARP是有缓存的,只要获取过了某一个IP对应的网卡地址,那么下一次再往这个IP地址发送请求消息的时候就可以直接发送过去

计算机之间的连接方式 - 同轴电缆

  • 它使用的是半双工通信,即一条通道在同一时间只能进行单向的传输,比如A向B发数据,B就不能同时向A发送数据,不过这种方式现在已经被淘汰了
  • 容易冲突,可能多台设备都在同时发送消息
  • 不安全,容易被抓包
  • 中间某个地方断了,整个网就会瘫掉
  • 还有一种通信叫全双工通信,真正实现了我发给你的同时你也可以发给我,也是现在普及的方式

计算机之间的连接方式 - 集线器(Hub)

  • 跟同轴电缆一样,也是半双工通信
  • 容易冲突
  • 不安全
  • 跟同轴电缆一样没有智商,也就是说即使不是目标网卡,也有可能会受到请求消息
  • 比同轴电缆好了一点就是:如果集线器或者某条线路出了问题,不会对其它计算机之间的通信造成影响

比如我们来说一下这幅图中计算机0是如何发送给计算机2的

  • 首先因为一开始只知道计算机2的IP地址而不知道其网卡地址,所以需要用ARP广播得到网卡地址先
  • 广播到集线器后,因为集线器没有智商,它会继续广播到计算机1和计算机2上对应的网卡上
  • 由于计算机1上的网卡发现目标IP并不是自身,所以会将该消息丢弃掉
  • 而计算机2发现要查询的IP地址的MAC地址就是自身,于是会响应MAC地址回去
  • 响应消息要先经过集线器,然后集线器真的是没有智商,它只负责将各个计算机连接起来,然后它会把响应消息同时发送给计算机0和计算机1
  • 计算机1的网卡识别到自己不是目标MAC地址,所以其依旧会丢弃数据
  • 计算机0上的网卡识别到了消息就是发给自己的,于是接受下了消息,传递给了上层并将MAC地址缓存了起来,注意:集线器没有缓存功能,但是计算机有
  • 有了MAC地址之后,计算机0又会按照协议发送请求消息,只不过现在的请求消息中携带了目标MAC地址
  • 很遗憾的是,集线器依旧会把该请求消息传播到计算机0和计算机1处
  • 计算机1识别到自己不是目标地址,丢弃消息;计算机2响应数据回去
  • 集线器又会广播,还是同样的,计算机1丢弃消息,计算机0接受消息
  • 并且计算机0上缓存的计算机2的MAC地址没有过期之前,向计算机2发送请求都不需要再进行ARP广播了

多台集线器相连接

集线器的端口是有限的,那么就代表着一台集线器能够连接的计算机数目是有限的,如果我们想要将多台计算机连接起来,可能就需要多个集线器进行相连(相同的设备用交叉线相连,不同的设备用的是直通线);跨集线器的计算机通信起来还是像以前一样,没有什么区别

我们想象,如果一台集线器连接了1000台计算机,那么ARP广播的时候每一条线路都要广播,计算机响应数据的时候也要经过集线器,同样要进行大规模的数据传递。这样就导致了很多无用的包出现在了网络上,又因为集线器是半双工通信的,这样就会大大占用了线路,从而导致效率问题

计算机之间的连接方式 - 网桥

  • 能够通过自学习得知每个接口那侧的MAC地址,从而起到隔绝冲突域的作用

每次进行ARP广播或者发送请求,只要有消息经过了网桥,网桥都会把它在哪个方位以及其对应的MAC地址记录下来。这样的好处是什么呢?

比如现在是计算机6像计算机7发送消息,首先是进行ARP广播,由于现在网桥中还没有记忆,所以广播会经过网桥达到集线器0所在的区域,但是网桥会将计算机6所在的方位以及对应的MAC地址记录下来,计算机7响应回MAC地址的时候又会经过网桥,这样一来,网桥又记录了计算机7的MAC地址。等到计算机6真正向计算机7发送请求消息的时候,经过网桥时,由于此时网桥已经知道了计算机7在左边,所以并不会让这个消息继续传递到集线器0所在的区域,从而达到隔绝冲突域的目的,这样的好处就是,集线器1所在区域内部发送请求消息的时候,由于网络请求并不会到达集线器0所在区域,所以两个区域可以同时发送请求,提高了效率

但是这样子并没有从根本上去解决问题,因为在自己的区域内,集线器还是会傻瓜式的传播消息,还是会有冲突的情况发生,效率依旧很低下。

计算机的连接方式 - 交换机

交换机相当于是集线器和网桥的加强版,其不仅有很多的接口可以连接计算机,而且还像网桥一样有记忆功能可以记录每一个接口所对应的MAC地址

同一个网段就可以进行广播

  • 相当于接口更多的网桥,其接口数量比网桥要多
  • 全双工通信
    • 在设备A发送消息给设备B的同时,其他的设备之间也可以相互进行通信
  • 比集线器安全
    • 在第一次需要广播的时候且交换机没有记录对应的MAC地址时,交换机还是会像集线器一样将消息扩散,但是这一次扩散会让交换机记录下要通信的两个设备对应的MAC地址。等到真正要发送请求消息的时候,交换机就可以直接将消息转移到目标MAC地址对应的网卡上,不会转发无意义的请求,所以效率会比集线器高很多,正因为如此,其它无关的网卡根本就不会接受到不属于它们的消息,一些安装在它们身上的抓包工具自然也不能进行抓包
  • 那如果全球的设备都用交换机连接会怎么样呢?
    • 首先一台交换机的连接是有数量限制的,那么可能就需要多台交换机互相连接,而且交换机进行广播必须要在一个网段下面,这样可能会导致IP地址不是很够,但这不是主要问题
    • 比如说我们现在需要向美国的一台计算机进行通信,因为是第一次,需要ARP广播,这个广播就离谱了,因为全世界所有的计算机都会收到,如果此时又有其它的计算机需要进行广播,那么所有计算机又收到了,这种到处都是广播的情况被称之为广播 风暴,非常占用网络资源,效率十分低下

计算机之间的连接方式-路由器(Router)

网络直连、同轴电缆、集线器、网桥、交换机,与它们相连的设备必须要在同一网段,也就处在同一广播域下

路由器的作用:

  • 可以在不同网段之间转发数据
    • 同一个网段的计算机不要用路由器连接,用交换机就行了,路由器主要是用来让不同网段的设备进行通信的
  • 隔绝广播域
    • 一个广播不可以通过路由器达到另一个网段,因为路由器具有隔绝广播域的作用 主机发数据之前,首先会判断目标主机的IP地址跟它是否在同一个网段,有下面两种情况:
  • 在一个网段:
    • 通过ARP广播获取MAC地址,然后通过交换机/集线器传递数据
  • 不在同一个网段:
    • 首先我们不知道对方设备的MAC地址,而路由器又是隔绝ARP广播的
    • 所以我们只能借助网关(并不是一个计算机,但是其具有多个网卡,而且对应的MAC地址在不同的网段)来实现数据的传输,所以我们得先通过ARP广播获取到路由器负责该网段的网关的MAC地址
    • 通过ARP广播获取路由器在相同网段下对应的MAC地址,然后与该网关进行数据通信
    • 路由器接受到数据之后会根据目标IP地址切换到目标设备所对应的网关
    • 但是该网关并不知道目标设备的MAC地址,所以要先通过ARP广播获取到目标设备的MAC地址
    • 获取到MAC地址之后,网关再将数据发送到目标设备的网卡中,这样发送数据的过程就完成了

现在我们就可以回答为什么路由器两边连着同一个网段的设备的话,通信会出现问题了?

因为在发数据之前,我们的计算机会发现目标IP地址和我们在同一个网段,那么它将会去使用ARP广播获取目标设备上的MAC地址,而不是去问路由器对应网关的MAC地址,由于网关具有拦截广播的作用,所以根本就获取不到对应的MAC地址,自然通信起来就有问题了