局域网(Local Area Network, LAN)
- 局域网(Local Area Network, LAN)指的是在一个局部的地理范围内,将个人计算机、服务器、网络打印机等各种电子设备连接起来的通信网络。
- 局域网的地理覆盖范围通常不会太大。例如一个公司的内部网络、一家网吧的网络、一个家庭网络等。
局域网技术
- 以太网是一种计算机局域网技术。
- IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。
- 以太网是目前应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI和ARCNET。
以太网交换机
- 基于以太网技术,在现实局域网组网部署中,以太网二层交换机是极其重要及基础的网络设备。
- 通过以太网交换机可将网络中的个人计算机、服务器以及网络打印机等电子设备连接起来并且实现相互通信,如下图所示。
交换机基于实际应用定位分类
- 交换机机通常以两种形态呈现:二层交换机和三层交换机。
- 二层交换机指的是只具备二层交换(Layer 2 Switching)功能的交换设备,所谓二层交换,指的是根据数据链路层信息对数据进行转发的行为,此处的数据链路层指的是TCP/IP对等模型中的第二层。
- 三层交换机除了具备二层交换机的功能,还具备三层路由和三层数据转发功能。
网络参考模型
-
众所周知,在网络通信领域中,OSI模型(Open System Interconnection Reference Model,开放系统互联参考模型)及TCP/IP模型地出现,极大地推动了网络技术的发展。
-
TCP/IP模型存在两个不同的版本,它们分别是TCP/IP标准模型及TCP/IP对等模型。如下图所示,展示了OSI参考模型和TCP/IP对等模型、TCP/IP标准模型的比较,在实际应用中,TCP/IP对等模型的使用最为广泛。
-
现实中,,因此在本书后续的内容中将使用TCP/IP
TCP/IP对等模型示例
- 如下图所示,展示了局域网内两台PC基于TCP/IP对等模型通过以太网二层交换机进行数据交换过程。
- 当PC1要发送一份数据给PC2时:
- PC1的应用层协议会产生应用数据(即有效载荷),而数据网络的基本功能就是要将这份数据传输到目的设备PC2。
- 这些应用数据不可能被直接扔到网络中进行传输,PC1还需要对其进行层层封装(类似邮寄一封信件时,需要我们先将信件放入一个信封,在信封上填写相应的信息,例如寄件人、收件人及地址信息等,再将封装好的信件交给邮局,邮局则根据信封上的收件人及地址来进行信件的传递)。
- 以HTTP会话为例,数据发送方PC1的HTTP会产生应用数据载荷:
- 在传输层(Transport Layer)这些数据载荷会被封装一个TCP的头部,
- 接着在网络层(Network Layer)再被封装一个IP的包头,
- 随后在数据链路层(Data Link Layer)则再被封装一个数据帧头部,在以太网中,该头部便是以太网帧头(由于数据链路层位于TCP/IP对等模型的第二层,因此数据链路层的头部也被称为二层头部),
- 最后,完成封装的数据以电信号的方式通过网线传输到链路对端。
- 由于PC1连接着一台交换机,当交换机从接口上接收到这些电信号时:
- 首先会将它们还原成数据帧,
- 然后会检查数据帧的完整性,
- 并根据帧头中的目的MAC地址(Media Access Control Address)来转发该数据帧。
- 每台二层交换机都维护着一个MAC地址表(MAC Address Table ),交换机在转发数据帧时,会在MAC地址表中查询该数据帧的目的MAC地址,以便决定将其从哪一个接口发送出去。由于此时交换机是根据数据的二层头部中的信息来进行转发操作的,因此这种行为又被称为二层交换。在本例中,交换机在其MAC地址表中查询到匹配数据帧目的MAC地址的表项后,将数据帧转发给PC2。
- PC2收到数据帧后:
- 首先会检查数据帧的完整性,
- 然后校验帧头中的目的MAC地址是否和自己的MAC地址相同,经校验,发现相同,剥离二层数据帧头部
- 继续校验IP头部中的目的IP地址是否和自己的IP地址相同,经校验,发现相同,剥离三层数据包头部,
- 接着校验TCP头部,发现存在和TCP头部中相同端口号的应用(HTTP进程),剥离TCP头部,
- 最后将数据荷载交给运行HTTP的应用。
MAC地址
- 以太网是最常见的数据链路层技术之一,在以太网中,MAC地址用于定位设备,也被用于第二层的数据寻址。
- MAC地址是在IEEE 802标准中定义的,符合IEEE 802标准的接口必须拥有MAC地址。
- 以太网标准是IEEE 802的一个子集,因此每一个以太网接口都必须拥有MAC地址,比如电脑的以太网接口,或者路由器的以太网接口等(需要注意的是,此处的MAC地址指的是单播MAC地址)。
- MAC地址的长度为48bit,通常采用十六进制的格式来呈现,例如0025-9ef8-9e7d(或者表示为00-25-9e-f8-9e-7d ) ,MAC地址与IP地址类似,也有单播、组播及广播类型之分。
- 数据链路层是TCP/IP对等模型中的第二层,位于网络层和物理层之间,它最基本的功能是将源设备的网络层下发的数据传输到链路上的目的相邻设备。
- 为了保证数据能够准确地送达目的相邻设备,需要借助数据链路层的MAC地址。
MAC地址分类
MAC地址分为三种,分别是单播MAC地址、组播MAC地址以及广播MAC地址。
单播MAC地址
-
单播MAC地址用于唯一地标识一台设备的某个接口,这种MAC地址第1个字节的最低比特位为0,如下图所示。
-
单播MAC地址通常也被称为硬件地址,因为它往往是被烧录在以太网网卡上的。
-
每一个单播MAC地址都具有全球唯一性。
-
厂商在生产以太网接口卡(网卡)之前,必须先得到24bit的组织唯一标识(Organizationally Unique Identifier OUI ),而OUI是通过向IEEE注册得到的。厂商在生产网卡时,将OUI作为MAC地址的前面24bit,而MAC地址的后24bit则由厂商自己指定。
-
当主机(PC、服务器等网络设备)的网卡接口收到一个数据帧时,若该数据帧的目的MAC地址为单播MAC地址,并且这个MAC地址与该网卡接口本身的MAC地址不相同时,网卡会丢弃这个数据帧。
组播MAC地址
- 组播MAC地址标识了一组设备,这种MAC地址第1个字节的最低比特位为1,比如MAC地址0100-005e-00ab。
- 一个组播MAC地址所标识的一组设备有着共同的特点,那就是它们都加入了相同的组播组,这些设备将会侦听目的MAC地址为该组播MAC地址的数据帧。
- 需要注意的是,只有单播MAC地址才能够被分配给一个以太网接口,组播或广播MAC地址是不能被分配给任何一个以太网接口的,也就是说,组播MAC地址和广播MAC地址这两种类型的MAC地址不能作为数据帧的源MAC地址,而只能作为目的MAC地址。
广播MAC地址
- 广播MAC地址的所有比特位全都是1,也就是说广播MAC地址格式就是ffff-ffff-ffff。
- 广播MAC地址标识了所有的以太网接口。
- 当一个数据帧的目的MAC地址为ffff-ffff ffff,那么这就是一个广播数据帧,所有收到该数据帧的网卡都要处理它。
以太网数据帧
-
一个IP数据包要想在以太网链路上传输,就需要增加以太网的封装,从而形成一个以太网帧(Ethernet Frame )。
-
以太网帧的格式有两种标准,一个是IEEE 802.3格式,另一个是Ethernet II格式,如下图所示。
-
网络设备及网卡一般都兼容IEEE 802.3及Ethernet II两种格式的以太网帧,但是在现实网络中,大多数的以太网帧使用Ethernet II格式。
Ethernet II格式
- 目的MAC地址(Destination MAC Address ):标识了该数据帧的接收者。目的MAC地址可以是单播MAC地址、组播MAC地址或者广播MAC地址。
- 源MAC地址(Source MAC Address ):标识了该数据帧的发送者。源MAC地址只能是单播MAC地址。
- 类型(Type):用来标识该数据帧头部后所封装的上层协议类型(载荷数据的类型)。该数据帧的接收方可以通过这个字段得知载荷数据是什么类型的数据。比如,如果类型字段值为0x0800,则表示载荷数据是IPv4报文;如果类型字段值为0x86dd,则表示载荷数据是IPv6报文。
- 载荷数据(Payload ):载荷数据,其长度为46~1500byte 。
- CRC(Cyclic Redundancy Check):循环冗余校验字段,用于检测数据帧在传输过程中是否发生损坏。
MAC地址表
- MAC地址表是交换机能够正常工作的重要依据,MAC地址表中的每一个表项都包含着MAC地址、VLAN-ID以及交换机接口等信息。
- 如下图所示的网络中:
- 交换机SW连接着两台PC。
- 初始情况下,SW的MAC地址表是空的,当它的某个接口收到一份数据帧时,它会将该数据帧的源MAC地址学习到MAC地址表中,并且与收到该帧的接口以及该接口所加入的VLAN进行关联,从而形成一个表项。
- 如上图所示,通过查看交换机的MAC地址表,能非常直观地看出哪一台设备连接在交换机的哪个接口。
- 当PC1及PC2开始在网络中发送数据时,SW便能够学到两者的MAC地址并且在MAC地址表中形成相应的表项。
- 交换机在接收数据帧时,通过检查数据帧从而自动学习到的MAC地址表项是动态表项,在MAC地址表中,这些表项的类型为Dynamic(动
态)。动态的MAC地址表项是存在老化时间的。 - 在初始情况下,当PC1发送的数据帧到达SW的GE0/0/1接口时:
- SW学习PC1的MAC地址并且与GE0/0/1接口进行关联,从而形成一个MAC地址表项,
- 与此同时,SW为这个表项启动一个计时器,这个计时器从缺省300s开始倒计时,当PC1的下一个数据帧到达SW的GE0/0/1接口时,该MAC地址表项被刷新,计时器复位并重新开始倒计时。
- 但是如果SW一直没有收到PC1发送的新数据,并且该计时器计数到0时,这个MAC地址表项将被删除。动态MAC地址老化机制使得交换机
的MAC地址表不至于被大量陈旧的、无用的表项填充,因为该数据表的存储空间是有限的。 - 除了动态的MAC地址表项之外,我们还能为交换机添加静态的表项,静态表项不会被老化。
二层交换原理
- 当交换机在某个接口上收到一个单播数据帧时,它将首先读取数据帧的目的MAC地址,并且在自己的MAC地址表中查询该地址:
- 如果查询不到匹配的表项,则将该数据帧进行泛洪(Flooding,泛洪就是指将数据帧从除了收到该帧的接口之外的所有接口都发送一份拷贝。
- 如果能够在MAC地址表中找到匹配的表项,并且收到该帧的接口与该表项中对应的接口不同时,则将数据帧从该表项中对应的接口转发出去;
- 如果收到该帧的接口与该表项中对应的接口相同时,则丢弃该数据帧。
- 当交换机收到一个数据帧时,它还会读取数据帧的源MAC地址:
- 如果该地址在MAC地址表中并不存在相关表项,则交换机将创建一个MAC地址表项,并将该MAC地址及收到该数据帧的接口记录在该表项中,这就是交换机的MAC地址学习功能。
示例
如下图所示,在初始情况下,交换机的MAC地址表为空,当PC1发送一个数据帧给PC3时,分析一下交换机的帧转发行为。
- PC1构造IP数据包:
- IP头部里的源IP地址为本地IP地址192.168.1.1,目的IP地址为192.168.1.3。
- 为了实现IP数据包能够在以太网环境中传输,还需要封装一个以太网的帧头。在帧头中源MAC地址为0021-ccc9-dc01,目的MAC地址为0021-ccc9-00aa(此处忽略ARP解析过程,假设PC1己经知晓了PC3的MAC地址)。
- PC1将该数据帧发出。
- 交换机SW收到这个数据帧后:
- 首先借助数据帧尾部的CRC字段进行差错校验,确保该数据帧在传输过程中没有被损坏。
- 接下来交换机会读取数据帧的目的MAC地址,并且在其MAC地址表中查询该地址,结果发现并不存在匹配的表项,于是它将这个数据帧进行泛洪,如下图所示。
- 由于数据帧被泛洪,导致除了GE0/0/1接口外,交换机其他的所有接口(相同VLAN内的接口)所连接的设备都将会收到该数据帧的拷贝。
- 然后交换机SW还会进行源MAC地址的学习,它发现数据帧的源MAC地址在MAC地址表中并不存在,因此SW为该MAC地址创建一个新的MAC地址表项,由于这个数据帧是在接口GE0/0/1上接收,因此MAC地址0021-ccc9-dc01与接口GE0/0/1形成关联,如上图所示。
-
PC2收到交换机转发的数据帧后,发现该帧的目的MAC地址与自己的网卡接口MAC地址并不相同,因此它丢弃这个数据帧。
-
而PC3则会接收这个数据帧(目的MAC地址和自己的网卡接口MAC地址相同,目的IP地址和自己网卡接口IP地址相同),并且对
数据帧进行解封装。 -
PC3收到数据之后,需要向PC1回复一份数据,并且将数据封装成帧后,从网卡接口发出。
- IP头部里的源IP地址为本地IP地址192.168.1.3,目的IP地址为192.168.1.1。
- 该帧的源MAC地址为0021-ccc9-00aa,目的MAC地址为0021-ccc9-dc01,
- PC3将该数据帧发出。
- SW在其GE0/0/3接口上收到这个帧。
- 首先它读取数据帧的目的MAC地址,并且在其MAC地址表中查询该地址,它将在表中查询到一个匹配的表项,而且该表项的出接口为GE0/0/1,于是它将这个数据帧从GE0/0/1接口转发出去。
- 然后SW将数据帧的源MAC地址学习到MAC地址表中,如下图所示。
上述就是典型的二层交换机制。实际上对于二层交换的过程来说,数据帧从进入交换机,到其被交换机从某个接口转发出去,通常是没有任何改变的(插入802.1Q Tag的情况除外),因此我们通常将二层交换机的帧交换操作称为“透传”。
- 在上述示例中,初始时如果PC1并不知道PC3的IP地址对应的地址:
- 那么PC1将向网络中发送一个广播的ARP Request数据帧,用于请求对方的地址。
- 这个广播帧将会被SW进行泛洪。
- PC2收到该帧后需首先将数据帧解封装,将里面的ARP载荷上交ARP协议模块去处理,当该协议模块发现该ARP请求并非发给自己时,PC2将忽略该ARP请求。
- 但是PC3收到该ARP Request数据帧后,会使用一个单播的ARP Reply数据帧进行回应,如此一来,PC1便获知了PC3的IP地址对应的
MAC地址。
-
当交换机收到一个广播数据帧(目的MAC地址为ffff-ffff-ffff)时,交换机不会进行目的MAC地址查询,而是直接将其进行泛洪。
-
当交换机收到一个组播数据帧时(组播数据帧指的是目的MAC地址为组播MAC地址的数据帧),
- 缺省情况下,交换机会对其进行泛洪处理,
- 但是如果交换机部署了诸如IGMP Snooping这样的二层组播技术,那么组播数据帧将只会被交换机从特定的一些接口转发出去。