在上一节介绍了广播网络和多路访问协议之后,接下来让我们将注意力转向交换本地网络(switched local networks)。图6.15显示了连接三个部门、两台服务器和一台带有四台交换机的路由器的交换本地网络。**因为这些交换机在链路层运行,所以它们交换链路层帧(而不是网络层数据报),无法识别网络层地址,并且不使用OSPF之类的路由算法来确定通过第2层交换机网络的路径**。我们很快就会看到它们使用链路层地址(link-layer addresses)通过交换机网络转发链路层帧,而不是使用IP地址。我们将从首先介绍链路层编址开始研究交换LAN(6.4.1节)。然后,我们将研究著名的**以太网协议(Ethernet protocol)**(6.4.2节)。在研究了链路层编址和以太网之后,我们将了解链路层交换机的工作方式(第6.4.3节),然后看看(第6.4.4节)这些交换机通常如何用于构建大规模LAN。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12377925/1638079815151-dfabed30-7d74-40db-ad45-8f4392438e6c.png#clientId=uade3944a-587b-4&from=paste&height=626&id=ud56bd6f5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=626&originWidth=1040&originalType=binary&ratio=1&size=130140&status=done&style=none&taskId=u7fc70d72-0e1f-4071-b9b6-16d209189e8&width=1040)<br />**Figure 6.15 ♦ An institutional network connected together by four switches**<br />**图6.15♦由四台交换机连接在一起的机构网络**
6.4.1 链路层编址和ARP Link-Layer Addressing and ARP
主机和路由器具有链路层地址。现在,您可能会感到惊讶,回想起第4章中的内容,主机和路由器也有网络层地址。您可能会问,我们究竟为什么需要在网络层和链路层都有地址?除了描述链路层地址的语法和功能外,在本节中,我们还希望阐明为什么这两层地址是有用的,而且实际上是不可或缺的。我们还将介绍地址解析协议(Address Resolution Protocol,ARP),它提供了一种将IP地址转换为链路层地址的机制。
MAC地址 MAC Addresses
事实上,不是主机和路由器拥有链路层地址,而是它们的适配器(即网络接口)拥有链路层地址。因此,具有多个网络接口的主机或路由器将具有与其关联的多个链路层地址,就像它也将具有与其关联的多个IP地址一样。但是,请务必注意,链路层交换机没有与其连接到主机和路由器的接口相关联的链路层地址。这是因为链路层交换机的工作是在主机和路由器之间传输数据报;交换机透明地完成此工作,即主机或路由器不必明确将帧寻址到中间交换机。这如图6.16所示。链路层地址可称为LAN地址(LAN address)、物理地址(physical address)或MAC地址(MAC address)。由于MAC地址似乎是最流行的术语,因此我们此后将链路层地址称为MAC地址。对于大多数LAN(包括以太网和802.11无线LAN),MAC地址为6字节长,提供2**48**个可能的MAC地址。如图6.16所示,这些6字节地址通常以十六进制表示,地址的每个字节都表示为一对十六进制数。虽然MAC地址被设计为永久地址,但现在可以通过软件更改适配器的MAC地址。然而,在本节的其余部分中,我们将假设适配器的MAC地址是固定的。
Figure 6.16 ♦ Each interface connected to a LAN has a unique MAC address
图6.16♦MAC连接到局域网的每个接口都有唯一的地址
MAC地址的一个有趣属性是没有两个适配器具有相同的地址。考虑到适配器是由许多公司在许多国家生产的,这似乎令人惊讶。台湾的适配器制造公司如何确保它使用的地址与比利时的适配器制造公司的地址不同?答案是IEEE管理MAC地址空间。特别是,当一家公司想要制造适配器时,它会象征性地支付费用,购买由2**24个地址组成的地址空间的一大块。IEEE通过固定MAC地址的前24位并让公司为每个适配器创建唯一的后24位组合来分配224**个地址块。
适配器的MAC地址具有平面结构(与层次结构相反),并且无论适配器位于何处都不会更改。无论计算机位于何处,带以太网接口的笔记本电脑始终具有相同的MAC地址。无论智能手机在哪里,802.11接口的智能手机总是有相同的MAC地址。请记住,相反,IP地址具有分层结构(即,网络部分和主机部分),并且当主机移动(即改变其连接到的网络)时,需要改变主机的IP地址。适配器的MAC地址类似于个人的社会安全号码,该号码也具有扁平的地址结构,并且无论人走到哪里都不会改变。IP地址类似于一个人的邮政地址,它是分层的,并且必须在人移动时更改。正如一个人可能会发现同时拥有邮政地址和社会安全号很有用一样,主机和路由器接口同时拥有网络层地址和MAC地址也很有用。
当适配器要将帧发送到某个目的适配器时,发送适配器会将目的适配器的MAC地址插入帧中,然后将帧发送到LAN。我们很快就会看到,交换机偶尔会将传入帧广播到其所有接口。我们将在第7章看到,802.11也会广播帧。因此,适配器可能会收到不是发往它的帧。因此,当适配器接收到帧时,它将检查帧中的目的MAC地址是否与其自身的MAC地址匹配。如果匹配,则适配器提取包含的数据报并将该数据报向上传递到协议栈。如果不匹配,适配器将丢弃该帧,而不向上传递网络层数据报。因此,只有在接收到帧时,目的地才会中断。
但是,有时发送适配器确实希望LAN上的所有其他适配器接收并处理它将要发送的帧。在这种情况下,发送适配器会在帧的目的地址字段中插入特殊的MAC广播地址。对于使用6字节地址(例如以太网和802.11)的LAN,广播地址是48个连续1的字符串(即十六进制记法中的FF-FF-FF-FF-FF-FF)。
地址解析协议(ARP) Address Resolution Protocol (ARP)
由于既有网络层地址(例如Internet IP地址)又有链路层地址(即MAC地址),因此需要在它们之间进行转换。对于Internet,这是地址解析协议(Address Resolution Protocol,ARP)[RFC 826]的工作。
要了解对ARP之类协议的需求,请考虑图6.17所示的网络。在这个简单的示例中,每台主机和路由器都有一个IP地址和一个MAC地址。与往常一样,IP地址以点分十进制表示法显示,MAC地址以十六进制表示法显示。出于本讨论的目的,我们在本节中假定交换机广播所有帧;也就是说,每当交换机在一个接口上收到帧时,它就会在其所有其它接口上转发该帧。在下一节中,我们将更准确地解释交换机的工作方式。
Figure 6.17 ♦ Each interface on a LAN has an IP address and a MAC address
图6.17♦MAC局域网上的每个接口都有一个IP地址和一个地址
PRINCIPLES IN PRACTICE 实践中的原则 KEEPING THE LAYERS INDEPENDENT 保持层的独立性 除了网络层地址外,主机和路由器接口还具有MAC地址的原因有几个。首先,LAN是为任意网络层协议设计的,而不仅仅是IP和Internet。如果为适配器分配的是IP地址而不是“中立”MAC地址,则适配器将不能轻松支持其他网络层协议(例如,IPX或DECnet)。其次,如果适配器要使用网络层地址而不是MAC地址,则网络层地址必须存储在适配器RAM中,并在适配器每次移动(或通电)时重新配置。另一种选择是不使用适配器中的任何地址,并让每个适配器将其接收到的每个帧的数据(通常是IP数据报)向上传递到协议栈。然后,网络层可以检查匹配的网络层地址。此选项的一个问题是,LAN上发送的每个帧都会中断主机,包括发往同一广播LAN上其它主机的帧。总之,为了使各层在很大程度上成为网络体系结构中独立的构建块,不同的层需要有自己的寻址方案。我们现在看到了三种类型的地址:应用层的主机名、网络层的IP地址和链路层的MAC地址。
现在假设IP地址为222.222.222.220的主机想要向主机222.222.222.222发送IP数据报。在本例中,根据第4.3.3节的地址含义,源设备和目的设备都在同一子网中。要发送数据报,源不仅必须向其适配器提供IP数据报,还必须提供目的地222.222.222.222的MAC地址。然后,发送适配器将构建一个包含目的地MAC地址的链路层帧,并将该帧发送到LAN。<br />本节讨论的重要问题是,发送主机如何确定IP地址为222.222.222.222的目的主机的MAC地址?正如您可能已经猜到的那样,它使用ARP。发送主机中的ARP模块将同一LAN上的任何IP地址作为输入,并返回相应的MAC地址。在手边的示例中,发送主机222.222.222.220向其ARP模块提供IP地址222.222.222.222,ARP模块返回相应的MAC地址49-BD-D2-C7-56-2A。<br />因此,**我们可以看到ARP将IP地址解析为MAC地址**。在许多方面,**它类似于DNS(在2.5节中学习),后者将主机名解析为IP地址**。但是,**这两个解析器之间的一个重要区别是,DNS解析Internet中任何位置主机的主机名,而ARP仅解析同一子网上主机和路由器接口的IP地址**。如果加利福尼亚州的节点尝试使用ARP解析密西西比州节点的IP地址,则ARP将返回错误。<br />现在我们已经解释了ARP的作用,让我们来看看它是如何工作的。**每台主机和路由器的内存中都有一个ARP表(ARP table),其中包含IP地址到MAC地址的映射。**图6.18显示了主机222.222.222.220中的ARP表可能是什么样子。ARP表还包含**生存时间(time-to-live,TTL)值**,**该值指示从表中删除每个映射的时间**。请注意,**表不一定包含子网中每台主机和路由器的条目;有些可能从未输入到表中,有些可能已过期**。**条目的典型过期时间是从将条目放入ARP表开始的20分钟。**
IP Address | MAC Address | TTL |
---|---|---|
222.222.222.221 | 88-B2-2F-54-1A-0F | 13:45:00 |
222.222.222.223 | 5C-66-AB-90-75-B1 | 13:52:00 |
Figure 6.18 ♦ A possible ARP table in 222.222.222.220
图6.18♦222.222.220中可能的ARP表
现在假设主机222.222.222.220想要发送一个IP地址为该子网上另一台主机或路由器的数据报。发送主机需要在给定IP地址的情况下获取目的地的MAC地址。如果发送方的ARP表有目的地节点的条目,则此任务很容易完成。但是,如果ARP表当前没有目的地的条目怎么办?特别地,假设222.222.222.220想要向222.222.222.222发送数据报。在这种情况下,发送方使用ARP协议来解析地址。首先,发送方构造一个称为ARP数据包(ARP packet)的特殊数据包。ARP数据包有多个字段,包括发送和接收IP地址和MAC地址。ARP查询和响应数据包的格式相同。ARP查询数据包的目的是查询子网上的所有其它主机和路由器,以确定与要解析的IP地址对应的MAC地址。
返回到我们的示例,222.222.222.220向适配器传递ARP查询数据包以及适配器应该将数据包发送到MAC广播地址(即FF-FF-FF-FF-FF-FF)的指示。适配器将ARP数据包封装在链路层帧中,使用广播地址作为帧的目的地址,然后将帧传输到子网。回想我们的社保号/邮寄地址类比,ARP查询相当于一个人在某个公司(比如AnyCorp)拥挤的隔间里大声喊道:“邮寄地址是加利福尼亚州帕洛阿尔托AnyCorp,AnyCorp,112房间13号隔间的人的社保号是多少?”包含ARP查询的帧由子网中的所有其它适配器接收,并且(由于广播地址)每个适配器将帧中的ARP数据包向上传递到其ARP模块。每个ARP模块都会检查其IP地址是否与ARP数据包中的目的IP地址匹配。具有匹配项的主机向查询主机发回带有所需映射的响应ARP数据包。然后,查询主机222.222.222.220可以更新其ARP表并发送其IP数据报,该IP数据报封装在链路层帧中,其目的MAC是响应先前ARP查询的主机或路由器的MAC。
关于ARP协议,有几个有趣的事情需要注意。首先,查询ARP消息在广播帧内发送,而响应ARP消息在标准帧内发送。在继续阅读之前,你应该想一想为什么会这样。其次,ARP是即插即用的;也就是说,ARP表是自动构建的-它不必由系统管理员配置。如果主机与子网断开连接,其条目最终会从子网中的其他ARP表中删除。
学生经常想知道ARP是链路层协议还是网络层协议。正如我们已经看到的,ARP数据包封装在链路层帧中,因此在体系结构上位于链路层之上。但是,ARP数据包具有包含链路层地址的字段,因此可以说是链路层协议,但它也包含网络层地址,因此也可以说是网络层协议。最后,最好认为ARP是一种跨越链路层和网络层边界的协议—不能很好地适应我们在第一章中研究的简单分层协议栈。这就是现实世界中协议的复杂性!
将数据报发送出子网 Sending a Datagram off the Subnet
现在应该清楚了,当一台主机要将数据报发送到同一子网中的另一台主机时,ARP是如何工作的。但现在让我们看一下更复杂的情况,即子网上的主机想要向子网外的主机发送网络层数据报(即通过路由器发送到另一个子网)。让我们在图6.19的上下文中讨论这个问题,图6.19显示了一个由路由器互连的两个子网组成的简单网络。
Figure 6.19 ♦ Two subnets interconnected by a router
图6.19♦通过路由器互连的两个子网的
关于图6.19,有几件有趣的事情需要注意。每台主机正好有一个IP地址和一个适配器。但是,如第4章所述,路由器的每个接口都有一个IP地址。对于每个路由器接口,还有一个ARP模块(在路由器中)和一个适配器。因为图6.19中的路由器有两个接口,所以它有两个IP地址、两个ARP模块和两个适配器。当然,网络中的每个适配器都有自己的MAC地址。
另请注意,子网1的网络地址为111.111.111/24,子网2的网络地址为222.222.222/24。因此,连接到子网1的所有接口的地址格式为111.111.111.xxx,连接到子网2的所有接口的地址格式为222.222.222.xxx。
现在让我们研究一下子网1上的主机如何向子网2上的主机发送数据报。具体来说,假设主机111.111.111.111想要向主机222.222.222.222发送IP数据报。发送主机照常将数据报传递给其适配器。但发送主机还必须向其适配器指示适当的目的MAC地址。适配器应该使用什么MAC地址?人们可能会猜测,合适的MAC地址是主机222.222.222.222的适配器地址,即49-BD-D2-C7-56-2A。然而,这个猜测是错误的!如果发送适配器使用该MAC地址,则子网1上的适配器都不会费心将IP数据报向上传递到其网络层,因为帧的目的地址与子网1上任何适配器的MAC地址都不匹配。数据报就会死掉,然后去往数据报天堂。
如果仔细查看图6.19,我们会发现为了使数据报从111.111.111.111发往子网2上的主机,必须首先将数据报发送到路由器接口111.111.111.110,这是通往最终目的地的路径上第一跳路由器的IP地址。因此,帧的合适的MAC地址是路由器接口111.111.111.110的适配器地址,即E6-E9-00-17-BB-4B。发送主机如何获取111.111.111.110的MAC地址?当然是通过使用ARP!一旦发送适配器有了此MAC地址,它就会创建一个帧(包含地址为222.222.222.222的数据报),并将该帧发送到子网1。子网1上的路由器适配器发现链路层帧是发往它的,因此将该帧传递到路由器的网络层。万岁-IP数据报已成功从源主机移动到路由器!但我们还没有结束。我们仍然需要将数据报从路由器移动到目的地。路由器现在必须确定转发数据报的正确接口。如第4章所述,这是通过查询路由器中的转发表来实现的。转发表告诉路由器该数据报将通过路由器接口222.222.222.220转发。然后,此接口将数据报传递给其适配器,适配器将数据报封装在新帧中,并将帧发送到子网2。这一次,帧的目的MAC地址实际上是最终目的的MAC地址。路由器如何获取此目的MAC地址?当然是来自ARP!
RFC 826中定义了以太网ARP。在TCP/IP教程RFC 1180中对ARP进行了很好的介绍。我们将在作业问题中更详细地探讨ARP。
6.4.2 以太网 Ethernet
以太网几乎占据了有线局域网市场。在20世纪80年代和90年代初,以太网面临着来自其他局域网技术(包括令牌环、FDDI和ATM)的许多挑战。其中一些其他技术在几年内成功地抢占了局域网市场的一部分。但自20世纪70年代中期发明以来,以太网一直在不断发展壮大,并一直保持着其主导地位。今天,以太网是迄今为止最流行的有线局域网技术,在可预见的未来,它很可能会一直如此。有人可能会说,以太网之于局域网就像互联网之于全球网络一样。
以太网的成功有很多原因。首先,以太网是第一个广泛部署的高速局域网。由于很早就部署了以太网,网络管理员对以太网非常熟悉—它的奇妙之处和奇特之处—当他们出现时,他们不愿切换到其他局域网技术。其次,令牌环、FDDI和ATM比以太网更复杂、更昂贵,这进一步阻碍了网络管理员切换。第三,切换到另一种局域网技术(如FDDI或ATM)的最令人信服的原因通常是新技术的更高数据速率;然而,以太网总是进行反击,生产的版本运行在相同或更高的数据速率上。交换以太网在20世纪90年代初也被引入,进一步提高了其有效数据速率。最后,由于以太网非常流行,以太网硬件(特别是适配器和交换机(adapters and switches))已经成为一种商品,而且非常便宜。
最初的以太网LAN是由Bob Metcalfe和David Boggs在20世纪70年代中期发明的。最初的以太网LAN使用同轴总线来互连节点。以太网的总线拓扑实际上在整个20世纪80年代一直持续到90年代中期。采用总线拓扑的以太网是广播LAN-所有传输的帧都传输到连接到总线的所有适配器,并由其进行处理。回想一下,我们在第6.3.2节中使用二进制指数退避介绍了以太网的CSMA/CD多址协议。
到20世纪90年代末,大多数公司和大学已使用基于集线器的星型拓扑将其LAN替换为以太网装置。在这种装置中,主机(和路由器)通过双绞线铜线直接连接到集线器。集线器(hub)是作用于单个比特而不是帧的物理层设备。当代表0或1的比特从一个接口到达时,集线器只需重新创建该比特,增强其能量强度,然后将该比特传输到所有其他接口。因此,具有基于集线器的星型拓扑的以太网也是广播LAN-只要集线器从其接口之一接收到位,它就会在其所有其它接口上发送副本。特别是,如果集线器同时从两个不同的接口接收帧,则会发生冲突,创建帧的节点必须重新传输。
在21世纪初,以太网经历了又一次重大变革。以太网安装仍然使用星型拓扑,但中心的集线器被交换机取代。我们将在本章后面深入研究交换以太网。目前,我们只提到交换机不仅是“无冲突”的,而且是真正的存储转发数据包交换机;但与通过第3层向上运行的路由器不同,交换机仅在第2层上运行。
以太网帧结构 Ethernet Frame Structure
我们可以通过检查以太网帧了解更多关于以太网的信息,如图6.20所示。为了给这个关于以太网帧的讨论提供一个具体的上下文,让我们考虑将IP数据报从一台主机发送到另一台主机,两台主机都在同一个以太网LAN上(例如,图6.17中的以太网LAN)。(虽然我们的以太网帧的有效负载是IP数据报,但我们注意到以太网帧也可以承载其他网络层数据包。)。假设发送适配器(适配器A)的MAC地址为AA-AA-AA-AA-AA-AA,接收适配器(适配器B)的MAC地址为BB-BB-BB-BB-BB-BB。发送适配器将IP数据报封装在以太网帧中,并将该帧传递到物理层。接收适配器从物理层接收帧,提取IP数据报,并将IP数据报传递到网络层。在此上下文中,现在让我们研究以太网帧的六个字段,如图6.20所示。
Figure 6.20 ♦ Ethernet frame structure
图6.20♦以太网帧结构
- 数据字段(46到1,500字节)(Data field)。此字段承载IP数据报。以太网的最大传输单位(maximum transmission unit,MTU)为1500字节。这意味着如果IP数据报超过1,500字节,则主机必须将数据报分段,如第4.3.2节所述。数据字段的最小大小为46字节。这意味着如果IP数据报小于46字节,则数据字段必须被“填充”以填充到46字节。使用填充时,传递到网络层的数据包含填充和IP数据报。网络层使用IP数据报首部中的长度字段来删除填充。
- 目的地址(6个字节)(Destination address)。此字段包含目标适配器的MAC地址BB-BB-BB-BB-BB-BB。当适配器B接收到目标地址为BB-BB-BB-BB-BB-BB或MAC广播地址的以太网帧时,它会将该帧的数据字段的内容传递到网络层;如果它接收到具有任何其他MAC地址的帧,则会丢弃该帧。
- 源地址(6个字节)(Source address)。此字段包含将帧传输到LAN的适配器的MAC地址,在本例中为AA-AA-AA-AA-AA-AA。
- 类型字段(2个字节)(Type field)。类型字段允许以太网多路复用网络层协议。要理解这一点,我们需要记住,除了IP之外,主机还可以使用其他网络层协议。事实上,给定的主机可能支持多个网络层协议,这些协议针对不同的应用使用不同的协议。因此,当以太网帧到达适配器B时,适配器B需要知道它应该将数据字段的内容传递给(即,多路分解)哪个网络层协议。IP和其他网络层协议(例如Novell IPX或AppleTalk)都有自己的标准化类型号。此外,ARP协议(在上一节中讨论)有其自己的类型号,如果到达的帧包含ARP数据包(即,类型字段为0806十六进制),则ARP数据包将被多路分解为ARP协议。请注意,类型字段类似于网络层数据报中的协议字段和传输层段中的端口号字段;所有这些字段都用于将某一层的协议与上一层的协议粘合在一起。
- 循环冗余校验(Cyclic redundancy check,CRC)(4字节)。如第6.2.3节所述,CRC字段的目的是允许接收适配器(适配器B)检测帧中的比特错误。
- 前同步码(8字节)(Preamble)。以太网帧以8字节前同步码字段开头。前同步码的前7个字节中的每个字节的值为10101010;最后一个字节为10101011。前同步码的前7个字节用于“唤醒”接收适配器,并使它们的时钟与发送者的时钟同步。为什么时钟会不同步?请记住,适配器A的目标是以10 Mbps、100 Mbps或1 Gbps的速率传输帧,具体取决于以太网LAN的类型。但是,由于没有什么是绝对完美的,适配器A将不会以精确的目标速率传输帧;总会有一些偏离目标速率的漂移,这种漂移是LAN上的其他适配器事先不知道的。接收适配器只需锁定前同步码的前7个字节中的位,即可锁定适配器A的时钟。前同步码第八个字节的最后2位(前两个连续的1)警告适配器B“重要信息”即将到来。
所有以太网技术都为网络层提供无连接服务。也就是说,当适配器A想要向适配器B发送数据报时,适配器A将该数据报封装在以太网帧中并将该帧发送到LAN中,而无需首先与适配器B握手。这种第2层无连接服务类似于IP的第3层数据报服务和UDP的第4层无连接服务。
CASE HISTORY 历史案例 BOB METCALFE AND ETHERNET 鲍勃·梅特卡夫和以太网 20世纪70年代初,鲍勃·梅特卡夫(Bob Metcalfe)在哈佛大学(Harvard University)攻读博士学位时,曾在麻省理工学院的ARPAnet上工作。在学习期间,他还接触到了艾布拉姆森在ALOHA和随机接入协议方面的工作。在完成博士学位后,就在施乐帕洛阿尔托研究中心(Xerox Parc)开始工作之前,他拜访了Abramson和他在夏威夷大学的同事,为期三个月,亲眼目睹了ALOHAnet。在施乐帕洛阿尔托研究中心,梅特卡夫接触到了Alto计算机,这在很多方面都是20世纪80年代个人计算机的前身。梅特卡夫认为有必要以一种廉价的方式将这些计算机联网。因此,梅特卡夫凭借他对ARPAnet、ALOHAnet和随机访问协议的了解,与他的同事大卫·博格斯一起发明了以太网。 梅特卡夫和博格斯最初的以太网运行速度为2.94 Mbps,可连接最多256台相距1英里的主机。梅特卡夫和博格斯成功地让施乐帕洛阿尔托实验室(Xerox Parc)的大多数研究人员通过他们的Alto计算机进行交流。梅特卡夫随后在施乐、数字和英特尔之间结成联盟,将以太网建立为IEEE批准的10 Mbps以太网标准。施乐对将以太网商业化没有表现出太大兴趣。1979年,梅特卡夫成立了自己的公司3Com,该公司开发和商业化网络技术,包括以太网技术。特别值得一提的是,3Com在20世纪80年代初为广受欢迎的IBM PC开发和销售以太网卡。
如果因丢弃以太网帧而出现缺口(gaps),主机B上的应用程序是否也会看到缺口?正如我们在第3章中了解到的,这取决于应用程序使用的是UDP还是TCP。如果应用程序使用UDP,则主机B中的应用程序确实会看到数据中的缺口。另一方面,如果应用程序使用TCP,则主机B中的TCP不会确认丢弃帧中包含的数据,从而导致主机A中的TCP重新传输。请注意,当TCP重新传输数据时,数据最终将返回被丢弃的以太网适配器。因此,在这个意义上,以太网确实会重新传输数据,尽管以太网不知道它正在传输的是具有全新数据的全新数据报,还是包含至少已经传输过一次的数据的数据报。
以太网技术 Ethernet Technologies
在上面的讨论中,我们提到了以太网,就好像它是单一协议标准一样。但事实上,以太网有很多不同的风格,有一些令人费解的缩写,如10BASE-T、10BASE-2、100BASE-T、1000BASE-LX、10GBASE-T和40GBASE-T。这些技术和许多其他以太网技术多年来已由IEEE 802.3 CSMA/CD(以太网)工作组(IEEE 802.3 2020)标准化。虽然这些首字母缩写可能看起来令人费解,但实际上这里有相当大的秩序。首字母缩写的第一部分指的是标准的速度:10、100、1000或10G,分别表示10兆位(每秒)、100兆位、千兆位、10千位和40千位以太网。“BASE”指的是基带以太网,即物理介质仅承载以太网流量;几乎所有的802.3标准都用于基带以太网。缩写的最后一部分指的是物理介质本身;以太网既是链路层规范,也是物理层规范,通过各种物理介质传输,包括同轴电缆、铜线和光纤。通常,“T”指的是双绞线铜线。
在历史上,以太网最初被设想为同轴电缆的一段。早期的10BASE-2和10BASE-5标准规定通过两种类型的同轴电缆传输10 Mbps以太网,每种同轴电缆的长度限制为500米。通过使用中继器(repeater)(一种物理层设备,在输入端接收信号,然后在输出端重新生成信号),可以获得更长的运行时间。同轴电缆很好地符合我们对以太网作为广播介质的看法—一个接口传输的所有帧都在其他接口上接收,而以太网的CDMA/CD协议很好地解决了多路访问问题。节点只需连接到电缆,瞧,我们就有了局域网!
多年来,以太网经历了一系列的发展步骤,今天的以太网与最初使用同轴电缆的总线拓扑设计有很大的不同。在当今的大多数装置中,节点通过由双绞线铜线或光缆制成的点对点网段连接到交换机,如图6.15-6.17所示。
在20世纪90年代中期,以太网被标准化为100 Mbps,比10 Mbps以太网快10倍。保留了原来的以太网MAC协议和帧格式,但为铜线(100BASE-T)和光纤(100BASE-FX、100BASE-SX、100BASE-BX)定义了更高速的物理层。图6.21显示了这些不同的标准以及常见的以太网MAC协议和帧格式。100 Mbps以太网通过双绞线限制为100米距离,通过光纤限制为几公里,允许连接不同建筑物中的以太网交换机。
Figure 6.21 ♦ 100 Mbps Ethernet standards: A common link layer, different physical layers
图6.21♦100Mbps以太网标准:公共链路层,不同物理层
千兆以太网是非常成功的10 Mbps和100 Mbps以太网标准的扩展。40千兆以太网提供40,000 Mbps的原始数据速率,与庞大的以太网设备装置群保持完全兼容。千兆以太网标准(称为IEEE 802.3z)执行以下操作:
- 使用标准以太网帧格式(图6.20),向后兼容10BASE-T和100BASE-T技术。这样就可以轻松地将千兆以太网与现有的以太网设备客户群集成在一起。
- 允许点对点链路(point-to-point links)以及共享广播信道(shared broadcast channels)。如前所述,点对点链路使用交换机,而广播信道使用集线器。在千兆以太网术语中,集线器称为缓冲分配器(buffered distributors)。
- 将CSMA/CD用于共享广播信道。为了具有可接受的效率,必须严格限制节点之间的最大距离。
- 允许点对点信道在两个方向上以40 Gbps的速度进行全双工操作。
千兆位以太网最初通过光纤运行,现在可以通过5类UTP布线(适用于1000BASE-T和10GBASE-T)运行。
让我们通过提出一个可能已经开始困扰您的问题来结束我们对以太网技术的讨论。在总线拓扑和基于集线器的星形拓扑的时代,以太网显然是一种广播链路(如第6.3节所定义),在该链路中,当节点同时传输时会发生帧冲突。为了处理这些冲突,以太网标准包括CSMA/CD协议,该协议对于跨越较小地理区域的有线广播LAN特别有效。但是,如果今天以太网的普遍使用是基于交换机的星型拓扑,使用存储转发数据包交换,那么以太网MAC协议真的还需要吗?我们很快就会看到,交换机协调其传输,并且在任何时候都不会将多个帧转发到同一接口。此外,现代交换机是全双工的,因此交换机和节点可以彼此同时发送帧,而不会产生干扰。换句话说,在基于交换机的以太网LAN中没有冲突,因此不需要MAC协议!
正如我们已经看到的,今天的以太网与40多年前梅特卡夫和博格斯设想的最初的以太网有很大的不同-速度增加了三个数量级,以太网帧在各种媒体上传输,交换式以太网(switched-Ethernets)已经成为主导,现在甚至连MAC协议都经常是不必要的!所有这些真的还是以太网吗?当然,答案是“是的,根据定义。”然而,有趣的是,通过所有这些变化,确实有一个恒久不变的东西在过去30年中一直没有改变—以太网的帧格式。也许这就是以太网标准唯一真正和永恒的核心。
6.4.3 链路层交换机 Link-Layer Switches
到目前为止,我们一直故意对交换机的实际功能和工作方式含糊其辞。交换机的作用是接收传入的链路层帧并将其转发到传出链路上;我们将在本节中详细研究此转发功能。我们将看到交换机本身对于子网中的主机和路由器是透明的;也就是说,主机/路由器将帧寻址到另一个主机/路由器(而不是将帧寻址到交换机),并愉快地将帧发送到LAN,而不知道交换机将接收帧并转发它。帧到达任何一个交换机输出接口的速率可能会暂时超过该接口的链路容量。为解决此问题,交换机输出接口具有缓冲区,这与路由器输出接口具有用于数据报的缓冲区的方式大致相同。现在让我们仔细看看交换机是如何运行的。
转发和过滤 Forwarding and Filtering
过滤(Filtering)是一种交换机功能,用于确定帧是应该转发到某个接口还是应该直接丢弃。转发(Forwarding)是一种交换机功能,用于确定帧应该定向到的接口,然后将帧移动到这些接口。交换机过滤和转发是通过交换表(switch table)完成的。交换表包含LAN上部分(但不一定是全部)主机和路由器的条目。交换器表中的条目包含(1)MAC地址,(2)通向该MAC地址的交换机接口,以及(3)条目放入表中的时间。图6.22显示了图6.15中最上面的交换机的示例交换机表。帧转发的这一描述听起来可能类似于我们在第4章中讨论的数据报转发。实际上,在我们在第4.4节讨论通用转发时,我们了解到许多现代数据包交换机可以配置为根据第2层目的MAC地址(即,充当第2层交换机)或第3层IP目的地地址(即,充当第3层路由器)进行转发。尽管如此,我们还是要做一个重要的区分,即交换机基于MAC地址而不是IP地址转发数据包。我们还将看到,传统(即在非SDN上下文中)交换表的构建方式与路由器转发表截然不同。
Figure 6.22 ♦ Portion of a switch table for the uppermost switch in Figure 6.15
图6.22♦图6.15中最上面的交换机的交换表的部分
为了了解交换机过滤和转发的工作原理,假设目的地址为DD-DD-DD-DD-DD-DD的帧到达接口x上的交换机。交换机使用MAC地址DD-DD-DD-DD-DD-DD为其表编制索引。可能有三种情况:
- 表中没有DD-DD-DD-DD-DD-DD的条目。在这种情况下,交换机会将帧的副本转发到除接口x之外的所有接口之前的输出缓冲区。换句话说,如果目的地址没有条目,交换机会广播该帧。
- 表中有一个条目,将DD-DD-DD-DD-DD-DD与接口x相关联。在本例中,帧来自包含适配器DD-DD-DD-DD-DD-DD的LAN网段。由于不需要将帧转发到任何其它接口,交换机通过丢弃该帧来执行过滤功能。
- 表中有一个条目,将DD-DD-DD-DD-DD-DD与接口y≠x相关联。在这种情况下,需要将帧转发到连接到接口y的局域网网段。交换机通过将帧放入接口y之前的输出缓冲区来执行转发功能。
让我们演练一下图6.15中最上面的交换机及其图6.22中的交换表的这些规则。假设目的地址为62-FE-F7-11-89-A3的帧从接口1到达交换机。交换机检查其表,发现目的地址位于连接到接口1(即电气工程)的LAN网段上。这意味着该帧已在包含目的地的LAN网段上广播。因此,交换机会过滤(即丢弃)帧。现在,假设具有相同目的地址的帧从接口2到达。交换机再次检查其表,发现目的地址是接口1的方向;因此,它将帧转发到接口1之前的输出缓冲区。从本例中应该可以清楚地看到,只要交换表完整且准确,交换机就会在不进行任何广播的情况下将帧转发到目的地址。
从这个意义上说,交换机比集线器“更聪明”。但是,这个交换表最初是如何配置的呢?是否有与网络层路由协议等效的链路层协议?或者,超负荷工作的经理是否必须手动配置交换表?
自学习 Self-Learning
交换机具有出色的特性(特别是对于已经超负荷工作的网络管理员),它的表是自动、动态和自主构建的,无需网络管理员或配置协议的任何干预。换句话说,交换机是自学(self-Learning)的。此功能的实现方式如下:
- 交换表最初是空的。
- 对于在接口上收到的每个传入帧,交换机在其表中存储(1)帧的源地址字段中的MAC地址、(2)帧到达的接口和(3)当前时间。通过这种方式,交换机在其表中记录发送方所在的LAN网段。如果LAN中的每台主机最终都发送了一个帧,那么每台主机最终都会记录在表中。
- 如果在一段时间(老化时间(aging time))后未收到以该地址为源地址的帧,则交换机将删除表中的地址。通过这种方式,如果一台PC被另一台PC(使用不同的适配器)替换,原始PC的MAC地址最终将从交换表中清除。
让我们了解一下图6.15中最上面的交换机及其对应的图6.22中的交换表的自学习属性。假设源地址为01-12-23-34-45-56的帧在时间9:39从接口2到达。假设此地址不在交换表中。然后交换机向表中添加一个新条目,如图6.23所示。
Figure 6.23 ♦ Switch learns about the location of an adapter with address 01-12-23-34-45-56
图6.23♦交换机获知地址为01-12-23-34-45-56的适配器的位置
继续这个相同的示例,假设此交换机的老化时间为60分钟,并且在9:32到10:32之间没有源地址为62-FE-F7-11-89-A3的帧到达交换机。然后,在时间10:32,交换机从其表中删除此地址。
交换机是即插即用设备(plug-and-play devices),因为它们不需要网络管理员或用户干预。想要安装交换机的网络管理员只需将LAN网段连接到交换机接口即可。管理员不需要在安装时或从其中一个LAN网段中删除主机时配置交换机表。交换机也是全双工的,这意味着任何交换机接口都可以同时发送和接收。
链路层交换的属性 Properties of Link-Layer Switching
描述了链路层交换机的基本操作后,现在让我们来看看它们的功能和属性。我们可以确定使用交换机而不是广播链路(如总线或基于集线器的星型拓扑)的几个优点:
- 消除冲突(Elimination of collisions)。在由交换机(且没有集线器)构建的LAN中,不会因冲突而浪费带宽!交换机会缓冲帧,并且在任何时候都不会在网段上传输多个帧。与路由器一样,交换机的最大聚合吞吐量是所有交换机接口速率的总和。因此,与使用广播链路的LAN相比,交换机提供了显著的性能提升。
- 异构链路(Heterogeneous links)。由于交换机将一条链路与另一条链路隔离,因此LAN中的不同链路可以不同的速度运行,并且可以在不同的介质上运行。例如,图6.15中最上面的交换机可能有三条1 Gbps 1000BASE-T铜缆链路、两条100 Mbps 100BASE-FX光纤链路和一条100BASE-T铜缆链路。因此,交换机是混合旧设备和新设备的理想选择。
- 管理(Management)。除了提供增强的安全性(请参阅侧栏关注安全性),交换机还可以简化网络管理。例如,如果适配器发生故障并持续发送以太网帧(称为叽叽喳喳的适配器(jabbering adapter)),交换机可以检测到问题并在内部断开故障适配器的连接。有了此功能,网络管理员无需起床开车回去工作即可纠正问题。同样,切断电缆只会断开使用切断电缆连接到交换机的主机。在同轴电缆时代,许多网络管理员花费数小时“走线”(或者更准确地说,是“在地板上爬行”)来查找导致整个网络瘫痪的电缆故障。交换机还会收集有关带宽使用率、冲突率和流量类型的统计数据,并将此信息提供给网络管理员。此信息可用于调试和纠正问题,以及规划LAN未来应如何发展。研究人员正在探索在原型部署中向以太网LAN添加更多管理功能[Casado 2007;Koponen 2011]。
FOCUS ON SECURITY 关注安全 SNIFFING A SWITCHED LAN: SWITCH POISONING 嗅探交换LAN:交换机中毒 当主机连接到交换机时,它通常只接收发送给它的帧。例如,以图6.17中的交换LAN为例。当主机A向主机B发送帧,并且交换表中有主机B的条目时,交换机将仅将该帧转发给主机B。如果主机C碰巧正在运行嗅探器,则主机C将无法嗅探此A到B的帧。因此,在交换局域网环境中(与802.11局域网或基于集线器的以太网局域网等广播链路环境相比),攻击者更难嗅探帧。但是,因为交换机广播的帧的目的地址不在交换表中,所以C处的嗅探器仍然可以嗅探某些不是发往C的帧。此外,嗅探器将能够嗅探目的地址为FF–FF–FF–FF–FF–FF的所有以太网广播帧。针对交换机的一种众所周知的攻击称为交换机中毒(switch poisoning),它会使用许多不同的伪源MAC地址向交换机发送大量数据包,从而用虚假条目填满交换机表,从而无法为合法主机的MAC地址留出空间。这会导致交换机广播大多数帧,然后嗅探器可以拾取这些帧[Skoudis 2006]。即使对于经验丰富的攻击者来说,这种攻击也相当复杂,因此交换机比集线器和无线局域网更不容易被嗅探。
交换机与路由器 Switches Versus Routers
正如我们在第4章中了解到的,路由器是使用网络层地址转发数据包的存储转发数据包交换机。虽然交换机也是存储和转发数据包的交换机,但它与路由器的根本区别在于它使用MAC地址转发数据包。路由器是第3层数据包交换机,而交换机(switch)是第2层数据包交换机(switch )。但是,回想一下,我们在第4.4节中了解到,使用“匹配加操作”操作的现代交换机可用于根据帧的目的MAC地址转发第2层帧,以及使用数据报的目的IP地址转发第3层数据报。事实上,我们看到使用OpenFlow标准的交换机可以根据11个不同的帧、数据报和传输层报头字段中的任何一个来执行通用数据包转发。
尽管交换机和路由器在本质上是不同的,但网络管理员在安装互连设备时通常必须在两者之间做出选择。例如,对于图6.15中的网络,网络管理员可以同样轻松地使用路由器而不是交换机来连接部门LAN、服务器和Internet网关路由器。实际上,路由器可以在不产生冲突的情况下实现部门间通信。鉴于交换机和路由器都是互连设备的候选设备,这两种方法的优缺点是什么?
首先考虑交换机的优缺点。如上所述,交换机是即插即用的,这是世界上所有超负荷工作的网络管理员所珍视的属性。交换机也可以具有相对较高的过滤和转发速率-如图6.24所示,交换机只能向上处理第2层的帧,而路由器必须向上处理第3层的数据报。另一方面,为了防止广播帧循环,交换网络的活动拓扑仅限于生成树(spanning tree)。此外,大型交换网络需要主机和路由器中有较大的ARP表,并且会产生大量的ARP流量和处理。此外,交换机很容易受到广播风暴(broadcast storms)的影响-如果一台主机失控,传输无休止的以太网广播帧,交换机将转发所有这些帧,导致整个网络崩溃。
Figure 6.24 ♦ Packet processing in switches, routers, and hosts
图6.24♦交换机、路由器和主机中的数据包处理
现在考虑路由器的优缺点。由于网络编址通常是分层的(与MAC编址不一样,网络编址通常不是平面的),因此即使网络有冗余路径,数据包通常也不会循环通过路由器。(但是,当路由器表配置错误时,数据包可能会循环;但正如我们在第4章中了解到的,IP使用特殊的数据报首部字段来限制循环。)。因此,数据包不限于生成树,可以使用源和目的地之间的最佳路径。由于路由器没有生成树限制,因此它们允许使用丰富的拓扑构建Internet,例如,包括欧洲和北美之间的多条活动链路。路由器的另一个功能是提供针对第2层广播风暴的防火墙保护。然而,路由器最大的缺点可能是它们不是即插即用的-它们和连接到它们的主机需要配置它们的IP地址。此外,路由器的每个数据包处理时间通常比交换机长,因为它们必须向上处理第3层字段。最后,单词Router有两种不同的发音方式,要么是“rootor”,要么是“rowter”,人们浪费了很多时间来争论正确的发音(Perlman 1999)。
鉴于交换机和路由器各有优缺点(如表6.1所示),机构网络(例如,大学园区网络或企业园区网络)何时应使用交换机,何时应使用路由器?通常,由数百台主机组成的小型网络有几个LAN网段。交换机可以满足这些小型网络的需求,因为它们无需配置任何IP地址即可实现流量本地化并提高聚合吞吐量。但是,由数千台主机组成的较大网络通常包括网络中的路由器(除了交换机)。路由器提供更强大的流量隔离,控制广播风暴,并在网络中的主机之间使用更智能的路由。
集线器 Hubs | 路由器 Routers | 交换机 Switches | |
---|---|---|---|
流量隔离(Traffic isolation) | No | Yes | Yes |
即插即用(Plug and play) | Yes | No | Yes |
最佳路由(Optimal routing) | No | Yes | No |
有关交换网络与路由网络的优缺点的更多讨论,以及如何扩展交换LAN技术以容纳比今天的以太网多两个数量级的主机的讨论,请参见[Meyers 2004;Kim 2008]。
6.4.4 虚拟局域网(VLAN) Virtual Local Area Networks (VLANs)
在前面对图6.15的讨论中,我们注意到现代机构LAN通常是分层配置的,每个工作组(部门)都有自己的交换LAN,通过交换机分层结构连接到其他组的交换LAN。虽然这样的配置在理想世界中运行良好,但现实世界往往远非理想。图6.15中的配置存在三个缺陷:
- 缺乏流量隔离(Lack of traffic isolation)。尽管该分层结构将组业务定位到单个交换机内,但广播业务(例如,携带ARP和DHCP消息的帧或其目的地尚未被自学习交换机获知的帧)仍必须遍历整个机构网络。限制此类广播流量的范围将提高LAN性能。也许更重要的是,出于安全/隐私原因,可能还需要限制LAN广播流量。例如,如果一个组包含公司的高管管理团队,而另一个组包含运行Wireshark数据包嗅探器的心怀不满的员工,则网络经理很可能希望高管的流量永远不会到达员工主机。这种类型的隔离可以通过将图6.15中的中心交换机替换为路由器来实现。我们很快就会看到,这种隔离也可以通过交换机(第2层)解决方案实现。
- 交换使用效率低下(Inefficient use of switches)。如果该机构不是三个组,而是10个组,则需要10个一级交换机。如果每个组都很小,比如不到10人,那么一台96端口的交换机可能足以容纳所有人,但这台交换机不能提供流量隔离。
- 管理用户(Managing users)。如果员工在组之间移动,则必须更改物理布线以将该员工连接到图6.15中的另一台交换机。属于两个群体的员工让这个问题变得更加困难。
幸运的是,所有这些困难都可以由支持虚拟局域网(virtual local area networks,VLAN)的交换机来解决。顾名思义,支持VLAN的交换机允许在单个物理局域网基础设施上定义多个虚拟局域网。VLAN中的主机相互通信,就像它们(而不是其他主机)连接到交换机一样。在基于端口的VLAN中,网络管理器将交换机的端口(接口)分组。每个组构成一个VLAN,每个VLAN中的端口形成一个广播域(即,来自一个端口的广播流量只能到达该组中的其他端口)。图6.25显示了一台具有16个端口的交换机。端口2到8属于EE VLAN,而端口9到15属于CS VLAN(端口1和16未分配)。此VLAN解决了上面提到的所有困难-EE和CS VLAN帧彼此隔离,图6.15中的两台交换机已替换为单台交换机,如果交换机端口8的用户加入CS部门,网络运营商只需重新配置VLAN软件,使端口8现在与CS VLAN相关联。可以很容易地想象VLAN交换机是如何配置和操作的-网络管理器使用交换机管理软件声明端口属于给定的VLAN(其中未声明的端口属于默认VLAN),在交换机内维护端口到VLAN映射表;并且交换机硬件仅在属于同一VLAN的端口之间传送帧。
Figure 6.25 ♦ A single switch with two configured VLANs
图6.25♦具有两个已配置VLAN的单台交换机
但是,通过完全隔离这两个VLAN,我们带来了新的困难!如何将EE部门的流量发送到CS部门?处理此问题的一种方法是将VLAN交换机端口(例如,图6.25中的端口1)连接到外部路由器,并将该端口配置为同时属于EE和CS VLAN。在这种情况下,即使EE和CS部门共享同一物理交换机,逻辑配置看起来就像EE和CS部门通过路由器连接了不同的交换机。从EE到CS部门的IP数据报将首先穿过EE VLAN到达路由器,然后由路由器通过CS VLAN转发回CS主机。幸运的是,交换机供应商通过构建同时包含VLAN交换机和路由器的单个设备来简化网络管理员的配置,因此不需要单独的外部路由器。本章末尾的家庭作业问题更详细地探讨了这种情况。
回到图6.15,现在让我们假设一些EE和CS教员不是有一个单独的计算机工程系,而是住在一个单独的大楼里,在那里(当然!)。他们需要网络接入,而且(当然!)。他们想成为部门VLAN的一部分。图6.26显示了第二个8端口交换机,其中的交换机端口已根据需要定义为属于EE或CS VLAN。但是,这两台交换机应该如何互联呢?一种简单的解决方案是在每台交换机上定义一个属于CS VLAN的端口(EE VLAN类似),并将这些端口相互连接,如图6.26(A)所示。但是,该解决方案不能扩展,因为N个VLAN需要每台交换机上的N个端口才能将两台交换机互连。
Figure 6.26 ♦ Connecting two VLAN switches with two VLANs: (a) two cables (b) trunked
图6.26♦使用两个连接两台虚拟局域网交换机的VLAN:(A)两根电缆(B)中继
互连VLAN交换机的一种更具可扩展性的方法称为VLAN中继(VLAN trunking)。在图6.26(B)所示的VLAN中继方法中,每台交换机上的一个特殊端口(左侧交换机上的端口16和右侧交换机上的端口1)被配置为中继端口,以互连两台VLAN交换机。中继端口属于所有VLAN,发送到任何VLAN的帧会通过中继链路转发到另一台交换机。但这又提出了另一个问题:交换机如何知道到达中继端口的帧属于特定VLAN?IEEE为通过VLAN中继的帧定义了扩展以太网帧格式802.1Q。如图6.27所示,802.1Q帧由标准以太网帧组成,首部中添加了一个四字节的VLAN标签(VLAN tag),该首部携带帧所属VLAN的标识。VLAN标记由VLAN中继发送端的交换机添加到帧中,然后由中继接收端的交换机解析和删除。VLAN标签本身由2字节标签协议标识符(Tag Protocol Identifier,TPID)字段(具有固定的十六进制值81-00)、包含12位VLAN标识符字段的2字节标签控制信息字段以及意图类似于IP数据报TOS字段的3位优先级字段组成。
Figure 6.27 ♦ Original Ethernet frame (top), 802.1Q-tagged Ethernet VLAN frame (below)
图6.27♦原始以太网帧(上)、802.1Q标记以太网VLAN帧(下)
在本讨论中,我们仅简要介绍了VLAN,并重点介绍了基于端口的VLAN。我们还应该提到,VLAN可以用其他几种方式定义。在基于MAC的VLAN中,网络管理器指定属于每个VLAN的MAC地址集;每当设备连接到端口时,端口就会根据设备的MAC地址连接到相应的VLAN。还可以基于网络层协议(例如,IPv4、IPv6或AppleTalk)和其他标准来定义VLAN。VLAN还可以跨IP路由器扩展,允许LAN孤岛连接在一起,形成一个可以横跨全球的单个VLAN[于2011]。有关详细信息,请参阅802.1Q标准[IEEE 802.1q 2005]。