首先看一下 OSI 七层工作模型

集线器

首先,“识时务者为俊杰”,要知道集线器是当初技术不发达的时候开发出来的。随着交换机价格的降低,集线器大部分被淘汰。因为集线器(hub)是把将所有信号广播出去容易造成网络拥塞,而交换机能够处理 2 层的包,使用通过识别 MAC 地址来进行有选择的转发,既安全又不容易造成拥塞,所以交换机几乎取代了集线器。嗯,接着讲。

原理

集线器是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备(只对信号进行整型、放大后再重发,不进行编码,因此处于物理层)。其内部是总线型拓扑,各节点(端点)共用一条总线进行通信(其数据流在同一时间内必须维持单向才能保证数据不混淆,这也就决定了它只能工作在半双工模式下)。

集线器本身不能识别 MAC 地址和 IP 地址,当集线器下连接的主机设备间传输数据时,数据包是以广播的方式进行传输,即:集线器将输入端口的信号广播给以太网内其他所有的端口,所有其他端口都会接收信号并且判断其中的 Mac 报头中的接收方 Mac 地址是不是为自己的 Mac 地址,如果不是就抛弃,如果是就接收回应。

特性

共享带宽

集线器是一种“共享”设备,集线器本身不能识别目的地址,当同一局域网内的 A 主机给 B 主机传输数据时,数据包在以集线器为架构的网络上是以广播方式传输的,由每一台终端通过验证数据包头的地址信息来确定是否接收。

半双工模式

全双工是指两台设备在发送和接收数据时,通信双方都能在同一时刻进行发送或接收操作,这样的传送方式就是全双工。而处于半双工传送方式的设备,当其中一台设备在发送数据时,另一台只能接收,而不能同时将自己的数据发送出去,即:只能发送或者接收信号。

由于集线器采取的是“广播”传输信息的方式,因此集线器传送数据时只能工作在半双工状态下。

冲突域

集线器同一时间只能转发一种信号,换一种说法,就是同一时刻由集线器连接的网络中只能传输一组数据,如果发生冲突则需要重传。集线器下连接的所有端口共享整个带宽,即所有端口都有可能会冲突。因此,称可能发生冲突的端口组成的网络为一个冲突域。

百度百科:在以太网中,如果某个 CSMA/CD 网络上的两台计算机在同时通信时会发生冲突,那么这个 CSMA/CD 网络就是一个冲突域(collision domain)。如果以太网中各个网段以集线器连接,因为不能避免冲突,所以它们仍然是一个冲突域。

中继器

我们知道随着经过的线缆越来越长,信号就会变得越来越弱,而中继器的目的便是在比特级别对网络信号进行再生和重定时,从而使得它们能够在网络上传输更长的距离。而集线器的特性与中继器很相似,因此被称为多端口中继器。二者的区别在于连接设备的线缆的数量。一个中继器通常只有两个端口,而一个集线器通常有 4 至 20 个或更多的端口。

二层交换机

二层交换机属数据链路层设备,它在接收端口接收到信号,通过内部存储的 Mac 地址表查询接收方的端口号,查到之后让交换电路传输信号到指定的端口,如果在 Mac 地址表中查不到怎么办?那么交换机就会将信号转发到除了源端口之外的其他所有端口上,此时就类似于集线器的工作原理,这也是交换器比集线器高效的一点。

原理

交换机是链路层设备,其基本工作原理:

  1. 学习,根据收到的数据帧中的源 MAC 地址建立该地址同交换机端口的映射,写入 MAC 地址表(MAC 地址表记录了网络中所有 MAC 地址与该交换机各端口的对应关系)

  2. 直接转发,如果数据帧中的目的 MAC 地址在建立好的 MAC 地址表中,交换机便根据根据该地址在表中对应的端口进行转发。

  3. 泛洪(flood),如果数据帧中的目的 MAC 地址不在 MAC 地址表中,则向所有端口转发(除这个数据帧的入口),等到相应的主机单播回复之后,交换机记下回应数据帧的源 MAC 地址与对应接口,以方便下次转发。(通过 ARP 协议)

    注:ARP(全称 Address Resolution Protocol),网络层的协议,根据目的主机的 IP 地址,获得其 MAC 地址。

  4. 更新,交换机内部的 MAC 地址表只有 300S 的存在时间,定时五分钟会更新一次

特性

独占带宽

交换机能同时连通许多对的端口,并在大多数情况下,根据 MAC 地址表进行一对一精准的转发,这样其他端口就不会被知道他们正在转发数据。

这里与集线器比较一下比较好理解。

一个 8 口 hub,当端口 1 上的机器 A 要给端口 8 上的机器 B 发数据时

在集线器上数据是这样跑的:

  1. 首先 A 在端口 1 上侦听 hub 上有没有数据在传输,如果没有,端口 1 就跳出来向 hub 上喊:“我有数据包要给端口 8,请端口 8 听到后回话”
  2. 然后这个数据被以广播的方式发送到 hub 上的其余 7 个口上,每端口都会接到这样的数据包,然后端口 2 ~ 7 会发一则消息给端口 1:“我不是端口 8,请你释放带宽资源”
  3. 与此同时端口 8 会发消息给端口 1:“我是端口 8,你在找我吗?”端口 1 收到上述消息后,会和端口 8 进行确认,然后他们建立传输链接,完成数据转发。
  4. 如果端口 1 在发送寻找端口 8 的消息后,没有得到相应,那她还会接着广播这个消息,直到收到端口 8 的回答。等端口 1 和端口 8 完成数据转发后,假设他们还要进行通讯,那么 hub 上还会重复以上的过程。

而交换机则是这样:

  • 如果 MAC 表上有目的 MAC(即:机器 B) 对应 MAC 表项,那么交换机直接查表,然后只转发到端口 8

  • 如果 MAC 表上没有对应表项,则向所有端口(除了帧的进入端口)广播。更进一步,如果目标和源在同一端口,那么交换机则不做任何事,简单的丢掉这个帧而已。

所以我们可以看到,交换机的工作方式,很好地隔离了冲突域,同一端口的设备之间的通信干扰不到另一端口的设备之间的通信,因为它无法穿透交换机。一般情况下,每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据。此外, 交换机是通过自学习学习到端口和物理地址的映射的,并且 ARP 协议使用的就是广播,所以交换机绝对不能屏蔽广播。

全双工

全双工是收发数据独立,交换机内部的构造也是收发独立的,转发芯片、phy 芯片都是两个方向的,所以可以实现全双工;再加上目前绝大多数普通交换机都是存储转发,收到的报文先存储,再查表转发,多个入口到同一个出口的报文存在先后顺序,这样就不会出现 hub 的冲突情况了。

广播域

  • 广播是一种信息的传播方式,指网络中的某一设备同时向网络中所有的其它设备发送数据,这个数据所能广播到的范围即为广播域(Broadcast Domain)。
  • 在传输中当不知道目的 MAC 地址时,需要在网段内广播当前子网下所有的节点,相应的广播报文以及目的 MAC 查找失败报文会向所有端口转发,因此会消耗大量的网络带宽。而二层交换机只能隔离冲突域,不能隔离广播域。
  • 冲突域是基于第一层(物理层) 广播域是基于第二层(链路层)

交换机能隔离冲突域,不隔离广播域,集线器的所有端口在同一个冲突域下

路由器

路由器处于网络层(对我们来说,应该算是要重点掌握的),它根据目的 IP 以及路由表进行转发和选路

作用

  1. 异种网络互连:比如具有异种子网协议的网络互连

  2. 子网协议转换:不同子网间包括局域网和广域网之间的协议转换

  3. 路由:也就是寻路

  4. 速率适配:利用自己的缓存和流控协议进行适配

  5. 隔离网络:防止广播风暴,还能实现防火墙

  6. 报文分片和重组:超过接口的 MTU 报文会被分片,到达目的地之后的报文会被重组

  7. 备份、流量控制:主备线路的切换和复杂的流量控制

原理

路由器工作在 OSI 七层协议中的第三层,也就是网络层。其主要任务是接收来源于一个网络接口的数据包,根据这个数据包中所含目的 IP 地址,决定转发到的下一个目的地址。路由器中时刻维持着一张路由表,所有的数据包的发送和转发都通过查找路由表来实现的。这个路由表可以静态配置,也可以通过动态路由协议产生。

帧的解封装与封装

从路由器一个接口接收,然后选择合适端口转发,其间做帧的解封装与封装,并对包做相应处理,如下图所示:

  1. 路由器物理层从路由器的一个端口收到一个报文,上送到数据链路层。

  2. 数据链路层对到达的数据帧进行 CRC 校验并检查其目的数据链路层地址(即:MAC 地址)是否与本端口符合.不符合则丢弃,符合则将去掉链路层封装(帧的封装),根据报文的协议域上送到网络层

  3. 网络层首先看报文是否是送给本机的,若是,去掉网络层封装,送给上层。若不是,则根据报文的目的 IP 地址查找路由表,

    1. 若找不到对应路由表项,报文丢弃。

    2. 若找到对应路由表项,则根据表项决定转发接口与下一跳地址。获得了转发接口与下一跳地址信息后路由器将查看缓存中是否已经有了在外出接口上进行数据链路层封装所需的信息。如果没有这些信息,路由器将通过适当的进程获得这些信息

      1. 外出接口如果是以太网,则将通过 ARP 协议获得下一跳 IP 地址所对应的 MAC 地址
      2. 外出接口如果是广域网接口,则将通过手工配置或自动实现的映射过程获得相应的 2 层地址信息

      然后做新的数据链路层封装,并依据外出接口上所做的 QOS 策略入相应的队列,等待端口空闲进行数据转发.

其中路由表有五个表项

1、网络地址(Network Destination)、网络掩码(Netmask):网络地址和网络掩码相与的结果便是子网地址。

2、网关(Gateway,又称为下一跳服务器):在发送 IP 数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口,但是此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。

百度百科:网关就是一个网络连接到另一个网络的“关口”。也就是网络关卡。

网关既可以用于广域网互连,也可以用于局域网互连

网关实质上是一个网络通向其他网络的 IP 地址。比如有网络 A 和网络 B,网络 A 的 IP 地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为 255.0.0.0;网络 B 的 IP 地址范围为“192.168.2~192.168.2.254”,子网掩码为 255.255.0.0。在没有路由器的情况下,两个网络之间是不能进行 TCP/IP 通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP 协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络 A 中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络 B 的网关,网络 B 的网关再转发给网络 B 的某个主机(如附图所示)。网络 A 向网络 B 转发数据包的过程。

所以说,只有设置好网关的 IP 地址,TCP/IP 协议才能实现不同网络之间的相互通信。那么这个 IP 地址是哪台机器的 IP 地址呢?网关的 IP 地址是具有路由功能的设备的 IP 地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

3、接口(Interface):接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。

4、跃点数(Metric):跃点数用于指出路由的成本,通常情况下代表到达目标地址所需要经过的跃点数量,一个跃点代表经过一个路由器。跃点数越低,代表路由成本越低;跃点数越高,代表路由成本越高。当具有多条到达相同目的网络的路由项时,TCP/IP 会选择具有更低跃点数的路由项。

​ 路由和交换之间的主要区别就是交换发生在数据链路层,而路由发生在第三层,即网络层。这一区别决定了路由和交换在移动信息的过程中需要使用不同的控制信息,所以两者实现各自功能的方式是不同的。

路由选择

分为域内选路和域间选路,准备再开一篇文章来讲。

路由器工作过程总结:对于一个特定的路由协议,可以发现到达目的网络的所有路径。域内选路是根据域内选路算法赋予每一条路径 metric 值,比较 metric 值,选择 metric 值最小的路径为最佳路径进行数据的转发。ISP 之间的路由选择 BGP, 路由选择算法,按照以下优先次序:本地偏好 -> 最短 AS-PATH -> 热土豆路由选择 选路

本文基本完结,路由选择及总结还待完善。

参考资料:

计算机中的冲突域、广播域 为什么交换机隔离冲突域,不隔离广播域 路由表详解 路由器的工作原理 交换机工作原理、MAC 地址表、路由器工作原理详解 网关 路由器的工作原理 路由器与交换机的基本工作原理