《计算机网络基础 — 以太网》
冲突域是一种 “物理分段”,指连接在同一物理介质(e.g. 中继器、集线器)上的所有站点(Station)的集合。这些站点之间存在物理介质争用现象(e.g. 以太网中的 CSMA/CD 介质检测原理),也就是它们在数据通信时需要共享公用物理介质的某个部分。简单的说,冲突域可以看成是一条直通的管道,同时只能有一端发送数据。
在同一冲突域中的计算机等设备互联时会通过同一个物理通道,同一时刻只允许一个设备发送的数据在这条通道中通过,其他设备发送的数据则要等到这个通道处于 “空闲” 时才可以继续通过,否则会出现冲突,这时就可能出现大量的数据包因为延时而被丢弃或者丢失。冲突域指的是不会产生这类冲突的最小范围。
冲突域可以衡量一个设备的性能,冲突域越小性能就越高。集线器、中继器都是典型的共享介质连接设备,工作在物理层上。连接在这些设备上的站点都处于同一个冲突域中。
而工作在数据链路层上的设备,如网桥和交换机,它们是可以划分冲突域的,也可以连接不同的冲突域。如果我们把集线器、中继器上的传输通道看成是一根电缆的话,则可将网桥、交换机的交换通道看成是一束电缆,有多条独立的通道,这样就可以允许同一时刻进行多方通信了。
虽然网桥与中继器类似,都只有两个端口,但网桥可用于连接不同的二层物理网段(ps:这里区别于三层的 IP 逻辑网段)。可以把网桥看成是可以连接两个冲突域的设备,连接在同一网桥上的两个网段各自成为一个冲突域。交换机则是网桥的扩展,它有许多端口,而且每个端口就是一个冲突域,即一个或多个端口的高速传输不会影响其他端口的传输,因为不同端口发送的数据不需要在同一条通道中排队通过,而只是在同一端口中的数据才要在对应端口通道中排队。
如果一个数据包的目标 IP 地址是这个网段的广播 IP 地址(广播 IP 地址对应网段的最后一个 IP 地址,e.g. 192.168.10.255/24)或者目标 MAC 地址是 FF-FF-FF-FF-FF-FF,那么这个数据包就会被这个网段的所有计算机接收并响应,这就叫做广播包(e.g. ARP 请求发出的广播包)。
广播域就是指可以接收相同广播消息的站点范围,在此范围中,任意一个站点发出广播包,都会被其他站点接收到。广播域是数据链路层的概念,所以像网桥和二层交换机等二层网络设备所连接的站点都被认为处于同一广播域,通常一个局域网就是一个广播域。广播域中的机器可以收到域中其他任何一台机器的广播,而不能收到域外机器的广播,域外机器也不能收到域内机器发的广播。而路由器、三层交换机、VLAN 交换机这样的二、三层网络设备是可以划分广播域的。
通常广播包是用来进行 ARP 寻址等用途的,但是广播域无法控制也会对网络健康带来严重影响(e.g. 带宽、网络延迟)。二层交换机对广播的处理是转发,所以不能分割广播域,而路由器一般不会转发广播,所以可以分割或定义广播域。
VLAN 一般被用于将一个大的网络划分成多个小的虚拟网络,所以 VLAN 也具有划分多个广播域、缩小广播域大小的功能。因为不同 VLAN 间是不能直接通信的,VLAN 间的通信需要依靠三层路由,就像不同网段间的通信一样。
冲突域 | 广播域 |
---|---|
物理层(一层)的概念 | 数据链路层(二层)的概念 |
只发生在同一个物理网段 | 可以跨物理网段 |
被网桥、交换机等二层设备划分 | 被路由器、三层交换机等三层设备划分 |
在同一冲突域中的所有站点都能收到所有被发送的帧 | 网络中能接收任一站点发出的广播帧的所有设备的集合 |
集线器(HUB) 所有端口都在同一个冲突域内 | 交换机(Swith)所有端口都在同一个广播域内,而每一个端口又是一个冲突域 |
NOTE:
最初,为了将多个计算机连接起来,就有了集线器(Hub)。这种集线器,通常有多个端口,可以接入多台电脑,使电脑能够连接在一起,其工作原理就是信号放大器。随着以太网的流行,网络的覆盖范围和规模变得越来越大,引发了两个问题:第一个问题,传输信号会随着网线距离的变长而衰减,使通信变得越发不可靠;第二个问题,集线器并不隔离冲突域,站点数量越多,网络的利用率就会越低。由此,就需要一种既可以将信号中继、放大又可以划分冲突域的 “集线器”,就是网桥。
网桥只需两个端口,一端连着一根网线,由于其本来的目的就是延伸网线、划分冲突域。为了可以智能的处理 MAC 映射表,网桥具有 MAC 地址自学习功能。随着网络规模的发展,网桥只有两个端口已经无法满足需求,于是就有了交换机,具有多个端口的 “网桥” 设备,每个端口就是一个冲突域,多个端口组成一个广播域。
依旧是随着网络的发展,基于二层数据帧交换的局域网已经无法满足满足,基于三层 IP 数据包的路由器出现了。路由器可以隔离并连接多个广播域,基于路由器组建的城域网和广域网得以实现。
综上,计算机网络的基石:二层交互、三层转发,就是这么简单的一个东西。
当电子信号在电缆上传送时,信号强度会随着传递长度的增加而递减。因此需要中继器将信号重新加强以增加数据的发送距离。中继器的本质是一个将输入信号增强放大的模拟设备,用来加强缆线的信号,把信号送得更远,以延展网络长度。
简单来说,中继器就是一种用于频率转换及功率增强的模块或设备,主要用于信号增强和频率差转。
集线器和双绞线等传输介质一样,是一种不需任何软件支持,只要求管理软件进行管理的硬件设备。应用于 OSI 参考模型的物理层,因此又被称为物理层设备。
集线器内部采用了电器互联,当 LAN 的环境是逻辑总线或环型结构时,完全可以用集线器建立一个物理上的星型或树型网络结构。在这方面,集线器所起的作用相当于多端口的中继器。其实,集线器实际上就是中继器的一种,其区别仅在于集线器能够提供更多的端口服务,所以集线器又叫多口中继器。
工作原理:集线器的工作过程是非常简单的,首先是节点发信号到线路,集线器接收该信号,因信号在电缆传输中有衰减,集线器接收信号后将衰减的信号整形放大,最后集线器将放大的信号广播转发给其他所有端口。
网桥是一种数据链路层设备,实现中继,对数据帧进行转发的技术,除了对所接收的信号进行放大之外,还可以根据 MAC 地址来划分区块,以此来隔离冲突域,将多个二层物理网段在数据链路层连接起来的网络设备。一个网桥就是一个输入到输出的桥接(bridging)
下图所示,物理网段 1 和物理网段 2 中的主机分别通过集线器集中连接起来,两个物理网段各自形成一个冲突域。而网桥的背板信道不是共享的(每个端口的数据收发都有一条单独的信道),所以网桥隔离了两个冲突域。
通过上面的描述可以感受到,网桥最核心的作用就是:与集线器配合将规模较大的局域网划分成多个既互相对独立又能互相通信的两个局域网子网段(划分冲突域),从而改善各个子网段的性能、可靠性和安全性。
网桥的主要缺点:由于网桥在进行数据帧转发前会对数据帧进行缓冲,与中继器相比引入了更多的时延。而且网桥不提供流控功能,因此在流量较大时有可能会造成过载,从而丢失数据帧,不能最佳地利用网络带宽。所以网桥通常用于链接数量不多的,具有相同或相似体系结构网络系统。
网桥还可以基于物理网段的 MAC 地址进行学习,并根据 MAC 地址表对数据帧进行交换。MAC 地址表,也叫 MAC-Port 映射表,也就是通常所说的 CAM(Content Addressable Memory,内容可寻址存储器)表,保存的是对应 MAC 地址主机与所连接的网桥(或交换机)端口的映射。
当网桥收到集线器的广播帧后,网桥会把数据帧中的源 MAC 地址和目的 MAC 地址与网桥缓存中保存的 MAC 地址表进行比较。
最初,网桥的缓存中是没有任何 MAC 地址的,所以一开始它也不知道目标主机和源主机都在哪个物理网段上,收到的所有数据帧都直接以泛洪(Flood)方式转发到另一个端口上,同时会把数据帧中的源 MAC 地址所对应的网桥端口记录下来。
在数据帧被某个 PC 接收后,也会把对应目的 MAC 地址所对应的物理网段记录在缓存中的 MAC 表中。这样,经过多次 “学习”,就可以在 MAC 地址表中把整个网络中各主机 MAC 地址与对应的物理网段全部记录下来。因为网桥的端口通常是连接集线器的,所以一个网桥端口会与多个主机 MAC 地址进行映射。
当网桥收到的数据帧中源 MAC 地址和目的 MAC 地址都在网桥 MAC 地址表中可以找到时,网桥会比较这两个 MAC 地址是否属于同一个物理网段。如果是同一物理网段,则网桥不会把该帧转发到下一个端口,直接丢弃,起到冲突域隔离作用。相反,如果两个 MAC 地址不在同一物理网段,则网桥会把从一个物理网段发来的数据帧转发到连接另一个物理网段上,然后再通过所连接的集线器进行复制方式的广播。
MAC 地址表的表项可以由管理员手动绑定创建,也可以由网桥(或交换机)自动学习得到。如果在交换机上,可以通过一些命令(如 Cisco 交换机是使用 show mac-address-table
)查看。下面是一个在交换机上查看 MAC 地址和端口映射表的示例,其中列出了交换机中为 CPU 分配的静态(Static)MAC 地址和通过学习功能自动学习得到的动态(Dynamic)MAC 地址,其中的 Ports 列显示的是对应 MAC 地址主机所连接的端口,VLAN 列则为对应主机连接端口所属的 VLAN。
switch # show mac-address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
All ffff.ffff.ffff STATIC CPU
1 0000.0c07.accb DYNAMIC Gi0/1
1 0002.8501.de00 DYNAMIC Gi0/1
1 0015.f915.8e80 DYNAMIC Gi0/1
1 0016.7694.c009 DYNAMIC Gi0/1
1 0020.ed14.399c DYNAMIC Gi0/1
1 0030.b637.8e10 DYNAMIC Gi0/1
1 0050.ba10.404a DYNAMIC Gi0/1
100 0007.847b.c40a DYNAMIC Gi0/1
100 00d0.d3a4.7cec DYNAMIC Gi0/1
110 0006.28bb.71c0 DYNAMIC Gi0/1
110 00d0.d3a4.7cec DYNAMIC Gi0/1
120 0000.b497.8250 DYNAMIC Fa0/20
120 0002.b3d8.68e7 DYNAMIC Fa0/20
120 0002.b3d8.6928 DYNAMIC Fa0/20
120 0003.a03a.03fc DYNAMIC Fa0/19
传统 Switch:可以看成是更先进的网桥,是由多个网桥集成的设备,也工作在数据链路层。一个交换机口的输入到另一个交换机口的输出也可以认为是一个 bridging(桥接)。交换机中的 MAC 地址表实际上就是为了网桥能工作而存在的,提供基于 MAC 地址的转发功能。一个 N 口的交换机可以看出是 N*(N-1)
个网桥的集合。
三层 Switch:就是包含了 L3 Routing 功能的交换机。
交换机的每一个端口就是一个冲突域,同时可以通过配置交换机端口组的方式来划 VLAN。同一个 VLAN 中主机的广播包会在 VLAN 对应的端口组中进行广播,这也是基于交换机的 MAC-Port 映射表来实现的。
交换机根据收到数据帧中的源 MAC 地址建立该地址与交换机端口的映射关系,并将其写入 MAC-Port 映射表中。
交换机将数据帧中的目的 MAC 地址与已建立的 MAC-Port 映射表进行比较,以决定在哪个端口进行转发。
如果数据帧中的目的 MAC 地址不在 MAC 地址表中,则向所有端口转发。这一过程称为泛洪(Flood)。当收到回应后,交换机就自动 “学习” 到了一个新的 MAC 地址与端口的对应关系并写入到内存中的 MAC-Port 映射表。
广播帧和组播帧向所有的端口转发。
如上图,主机 A 发送的报文被送到交换机 S1 的 eth0 口,由于 eth0 与 eth1、eth2 桥接(交换机任意两个端口之间为桥接关系)在一起,故而报文被复制到 eth1 和 eth2,并且发送出去,然后被主机 B 和交换机 S2 接收到,而 S2 又会将报文转发给主机 C、D。
若主机 C 向主机 A 发送一个报文,报文来到了交换机 S1 的 eth2 网口上。假设 S1 刚刚启动,还没有学习到任何地址,就不会知道这个报文应该从哪个端口转发了,这时只好将报文转发到所有的端口(接收报文的那个端口除外),这就是所谓的二层网络泛洪(Flood),将报文转发给 eth0 和 eth1。同时,S1 会根据报文的源 MAC 地址,记录下 “主机 C 是通过本交换机的 eth2 端口接入的”。于是当主机 A 向 C 发送报文时,S1 只需要将报文转发到 eth2 网口即可。而当主机 D 向 C 发送报文时,假设交换机 S2 将报文转发到了 S1 的 eth2 网口(实际上 S2 也多半会因为地址学习而不这么做),则 S1 会直接将报文丢弃而不做转发(因为主机 C 就是从 eth2 接入的,意味着 D 和 C 在同一个交换机上)。
然而,网络拓扑不可能永不改变。假设我们将主机 B 和主机 C 换个位置,当主机 C 发出报文时(不管发给谁),交换机 S1 的 eth1 口收到报文,于是交换机 S1 会更新其学习到的地址,将原来的 “主机 C 是通过 eth2 网口接入的” 改为 “主机 C 是通过 eth1 网口接入的”。但是如果主机 C 一直不发送报文呢?S1 将一直认为 “主机 C 是通过 eth2 网口接入的”,于是将其他主机发送给 C 的报文都从 eth2 转发出去,结果报文就丢失了。所以交换机的地址学习需要有超时策略。对于交换机 S1 来说,如果距离最后一次收到主机 C 的报文已经过去一定时间了(默认为 5 分钟),则 S1 需要忘记 “主机 C 是通过 eth2 网口接入的” 这件事情。这样一来,发往主机 C 的报文又会被转发到所有网口上去,而其中从 eth1 转发出去的报文将被主机 C 收到。
需要注意的是,当一台交换机收到一个数据帧时,分析数据帧头部的目的地址,并地址表中进行查找,如果有匹配项,则将数据帧从该匹配项所关联的交换机端口交换出去,如果没有匹配项,则将数据帧进行泛洪(Flood),将该数据帧在除了接收帧之外的所有端口上发出去。在数据网络中,如果交换机之间存在环路,泛洪数据帧将在环路中循环交换转发产生广播风暴,占用所有网络资源,以致整个网络没有资源传送其他有效数据帧而瘫痪。
网桥和交换机同样都有一张 MAC-PORT 映射表(CAM),不一样的是:网桥的 MAC 地址表是一对多的(一个 Port 对多个 MAC 地址);而交换机的 CAM 表却是一对一的(一个 Port 对应一个 MAC 地址),如果一个端口有了新的 MAC 地址,它不会新增 MAC-Port 记录,而是修改原有的记录。对比如下列两张图:
在现代的机房中,已经很难看见网桥和集线器设备了,基本都是物理服务器与交换机直连的架构,一台物理服务器就是一个冲突域,极大的提高了网络带宽的性能。
VLAN(Virtual Local Area Network,虚拟局域网)。当交换机接入较多的站点时,任意一台站点发送广播包都会传遍整个 LAN。对于规模较大的组网场景,广播风暴会网络的通信健康造成很大的影响(e.g. 网络延迟)。VLAN 为这一问题提供了解决方案,它将一个网络划分为多个逻辑上的虚拟网络,并规定广播包仅在 VLAN 中进行传递。VLAN 在数据链路层中实现了广播域隔离。
VLAN 的隔离是二层上的隔离,VLAN 之间无法相互访问指的是二层广播包无法跨越 VLAN 的边界。现在的交换机几乎都是支持 VLAN 的,甚至可以支持路由功能(三层交换机)。一般的,交换机的端口具有两种配置模式(交换机具有两种类型的端口):
Access 口:这类端口都具有一个唯一的 VLAN ID 和 Tag 来作为标识,VLAN ID 的取值范围是 [1, 4096]。Access 口都是直接与网络适配器相连的,从该网络适配器出来的数据包在通过 Access 口后会被打上特定的 VLAN Tag,以此来区分该数据包只能在具有相同 VLAN Tag 的 VLAN 传递。Access 口只属于一个 VLAN。
Trunk 口:假设有 SwitchA 和 SwitchB 两个交换机。SwitchA 上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);SwitchB 上也有 VLAN1、2、3。那如何让 AB 上相同 VLAN 之间能够通信呢?办法就是将 AB 连接起来,并且连接 AB 的端口要允许 VLAN1、2、3,三个不同 VLAN 的数据通过。这样的端口就是 Trunk 口了(同时允许多个不同 VLAN 的数据包通过的交换机端口)。VLAN1、2、3 的数据包通过 Trunk 口后,自己的 VLAN Tag 始终不变。
简单来说,Access 口用来标识每个端口的 VLAN ID,而 Trunk 口用来保证不同 VLAN 的数据包可以在交换机之间传递。显然,如果想跨交换机建立 VLAN,就需要同时应用两种类型的端口了。
路由器工作在网络层,提供基于 IP 地址的转发功能。用于连接不同的 IP 逻辑网段,负责在复杂的网络世界中找到数据包传输(跳转)的最优路径。路由器在网络层划分广播域,连接到同一路由器上的不同网段会被分割成不同的广播域,广播域之间的数据包转发需要路由器来完成。
路由器的基本功能包括两大部分:
路由算法分为:
在收到数据包时,路由器会进行如下操作:
路由器的转发功能可用图表示为:
一个数据包在网络上的传递过程可用图表示为:
网络的工作方式是使用两种设备:交换机和路由器,来将计算机与外围设备连接起来。这两种工具使连接到网络上的设备之间以及其它网络相互通信。
虽然路由器和交换机看起来很像,但是它们在网络中的功能却截然不同:
交换机(Switch):主要用于将一栋大厦或一个校园里的多台设备连接到同一个网络上。例如,一台交换机可以将您的多台计算机、打印机和服务器连接起来,从而形成一个共享资源网络。交换机相当于一个控制器,允许不同的设备共享信息并且彼此通信。通过共享信息和合理地分配资源,交换机可以帮助您节省资金,提高工作效率。交换机有两种基本类型:非管理型和管理型。
路由器(Router):主要用于将多个网络连接起来。例如,您会用一台路由器将联网的计算机连接到互联网上,从而使多名用户共享一个互联网连接。路由器相当于一个调度员,它会选择最佳的路由路径来传送信息,以便您迅速收到信息。首先,路由器会分析网络发送的数据,改变数据的打包方式,然后将数据发送到另一个网络上或者其他类型的网络上。它们将贵公司与外界连接起来,保护信息不受安全威胁,甚至可以决定哪些计算机拥有更高的优先级。根据贵公司的具体需求和网络计划,可以选择具有不同功能的路由器:
交换技术是随着电话通信的发展和使用而出现的通信技术。电话刚开始使用时,只能实现固定的两个人之间的通话,随着用户的增加,人们开始研究如何构建连接多个用户的电话网络,以实现任意两个用户之间的通信。
从广义上讲,任何数据的转发都可以叫做交换(Switch)。但是,传统的、狭义的第 2 层交换技术,仅包括数据链路层的转发。2 层交换机主要用在小型局域网中,计算机数量在二、三十台以下,这样的网络环境下,广播包影响不大,2 层交换机的快速交换功能、多个接入端口和低廉价格,为小型网络用户提供了完善的解决方案。交换式局域网技术使专用的带宽为用户所独享,极大地提高了局域网传输的效率。
在大规模局域网中,为了减小广播风暴的危害,就必须把大型局域网按功能或地域等因素划分成多个小局域网。与此同时,就出现了不同子网间的互访需求,但这是 2 层交换技术无法实现的。为了从技术上解决这个问题,网络厂商利用第 3 层交换技术开发了 3 层交换机,又称路由交换机,它是传统交换机与路由器的智能结合。简单地说,可以处理网络第 3 层数据转发的交换技术就是第 3 层交换技术。
从硬件上看,在第 3 层交换机中,与路由器有关的第 3 层路由硬件模块,也插接在高速背板/总线上。这种方式使得路由模块可以与需要路由的其它模块间,高速交换数据。3 层交换机是为 IP 设计的,接口类型简单,拥有很强的 3 层包处理能力,价格又比相同速率的路由器低得多,非常适用于大规模局域网络。
第 7 层交换技术通过逐层解开数据包的每层封装,并识别出应用层的信息,以实现对数据内容的理解。可以处理网络应用层数据转发的交换技术就是第 7 层交换技术。其主要目的是充分利用带宽资源,对互联网上的应用、内容进行管理,提高网络服务水平,数据流优化和智能负载均衡,完成互联网向智能化的转变。第 7 层交换技术通过应用层交换机实现了所有高层网络的功能,使网络管理者能够以更低的成本,更好地分配网络资源。
从硬件上看,7 层交换机将所有功能集中在一个专用的特殊应用集成电路或 ASIC(Application-specific Integrated Circuit,专用集成电路)上。ASIC 比传统路由器的 CPU 便宜,而且通常分布在网络端口上,在单一设备中包括了 50 个 ASIC,可以支持数以百计的接口。
路由技术主要是指路由选择算法、因特网的路由选择协议的特点及分类。
路由选择算法:
路由选择协议的特点:
路由选择协议划分为两大类: