以太是由亚里士多德提出的,被量子物理证伪,但以太网在数据通信领域大火!在以太网“统治”了局域网(Local Area Network,LAN)之后,又借助传送网把广域网打得满地找牙,如今ISDN、PPP、HDLC、Frame-Relay都找不到存在感了,以太网成了接入网络必不可少的技术。个人计算机和服务器等设备上的有线网卡(Network Interface Card,NIC)基本都是以太网网卡。
以太网最早是由Xerox公司在1980年推出的,后来Xerox公司又联合DEC和Intel成立DIX联盟(取DEC、Intel和Xerox的首字母)。DIX联盟于1982年推出第二个版本的以太网(Ethernet II);再后来由IEEE对Ethernet II进行规范化后于1983年推出,命名为IEEE 802.3。
以太网是通过以太网类型(Ethertype)为上层应用提供服务的,不同的以太网类型对应不同的应用协议,以太网类型(Type值)也是由IANA通过在线数据库地址管理的,该在线数据库的链接地址为https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml。
常见的以太网类型及对应协议如表2-11所示。
表2-11 常见的以太网类型及对应协议
续表
Ethernet II的报文格式如图2-32所示,具体的字段含义如下所述。
(1)Destination Address:目的地址,字段长度为6 B,表示接收端的物理地址,即通常所说的MAC地址。目的地址是一个用48 bit的二进制数表示的地址。
(2)Source Address:源地址,字段长度为6 B,表示发送端的物理地址。源地址也是一个用48 bit的二进制数表示的地址。
(3)Type/Length:类型/长度,字段长度为2 B,表示帧数据的长度或上层应用的类型,该字段的值为0~1500时表示长度,值为1536~65535时表示上层的协议类型,如0x0800表示IP、0x0806表示ARP。在普通的数据帧时,该字段表示Type;当封装Dot1Q数据帧时,该字段表示Length,Type由Dot1Q字段中的TPID表示。
(4)Data:数据,可变长度,字段长度为46~1500 B。
(5)FCS:帧校验序列,一般是循环冗余校验,字段长度为4 B,是对整个数据封装的校验。
图2-32 Ethernet II的报文格式
Ethernet II的报头长度是18 B,数据的最小长度是46 B、最大长度为1500 B,整个报文长度是64~1518 B。最大长度也称为最大传输单元(Maximum Transmission Unit,MTU)。
在以太网中,当MAC层检测到小于64 B的数据帧(Data Frame)时会把该数据帧当成残帧丢弃。如果确实有小于64 B的数据帧要传输,则通过填充内容为0的八位组的方式来补齐到64 B,填充内容不作为IP数据包的一部分,也不包含在报头的总字段长度中。这是一个非常巧妙的设计,既保证了小于最小帧长度的数据得以正常传输,又避免了把填充数据当成正常业务数据。
我们通常将以太网数据帧最大长度(MTU)设置是1500 B,也就是说通过以太网发送的数据包的最大长度是1500 B。一般的网关设备都支持全长数据帧,如有必要还会对其进行分段。在接收端,如果系统无法接收全长数据帧,则应采取措施阻止这种发送,如设置TCP的最大分段大小选项,即大块数据在发送时就会被先分段。
以上关于以太网数据帧长度,超小数据帧和超大数据帧的处理参考自RFC 894,文档链接地址为https://datatracker.ietf.org/doc/rfc894/?include_text=1。
在实际中,1500 B是默认的以太网数据帧最大长度,但不是固定的,用户可以根据需要修改其大小,尤其是在网络设备之间互联时,如交换机之间的互联,可通过开启Jumbo Frame的方式来传输更大的数据帧。其实,在目前的大多数交换机中,在1 Gbps及以上速率的设备之间链路上,都使用更大的MTU,如9216 B、10232 B等。在帧封装开销不变的情况下,增大MTU可以提高数据传输效率。
在Wireshark中显示的一个典型以太网数据帧示例如图2-33所示。
图2-33 在Wireshark中显示的一个典型以太网数据帧示例
从图2-33中可以看到如下信息:
源MAC地址是00:1e:65:28:2f:26;
目的MAC地址是20:a6:80:64:a3:5d;
封装的协议是IP(0x0800)。
Ethernet II的数据帧信息是网络接入层中的LLC层的信息,其内容已经开始包含数据层面的信息。
以太网是二层局域网中的事实标准,有“一统天下”之势。但局域网本身也存在一些问题,例如:①没有老化机制,当发生环路时,一个数据帧可以在二层网络中无限传输,直到环路消失为止;②二层网络中缺少类似ICMP的跟踪定位工具协议,帧结构相对简单,很难定位网络问题;③48 bit的MAC地址在未来已经无法满足实际需求。
数据链路层封装当初是怎么被设计出来的呢?如果没有这一层封装,又会带来什么问题呢?
二层网络有两个好处:①具有VLAN,通过VLAN可以使组网变得更加简单方便,成本低廉;②数据链路层进行了介质无关封装,使IP能够轻松应用于各种传输介质。对于网络层(或IP)来说,不管底层的传输介质是光、铜线,还是电磁波,更不用管载波信号是电、光,还是载波,也不用管传输速率、数据编码、介质访问控制的方式等,只要做好寻址(网际互联)就好了。如果IPv6发展出合适的扩展报头及处理机制,那么网络接入层是否可以只进行硬件差异屏蔽,不用进行封装与转发呢?如果不封装,那么又该如何屏蔽差异、如何统一地向上层提供服务呢?工程实现的复杂度又该如何解决?如果上面的问题都能解决,数据链路层被取代也不是没有可能,IPv6交换机也不是没有可能。关键是以上相互矛盾的问题能解决吗?
MPLS及其他其他依赖以太网的技术又该怎么办呢?对它们将产生什么样的影响呢?有什么替代的方案吗?
从数据链路层封装到直接在网络层封装,该如何过渡呢?两种封装应该如何共存呢?
TCP/IP将网络接入层划为逻辑链路控制(Logical Link Control,LLC)层和介质访问控制(Media Access Control,MAC)层。介质访问控制地址是最受我们关注的一个存在,它有48 bit,经常用12个十六进制数来表示。MAC地址的特点如下:
(1)MAC地址一个烧录(Burn In)地址,一次写入,不再更改。
(2)MAC地址的前24 bit是组织唯一标识符(Organizationally Unique Identifier,OUI),表示一个组织,可以通过链接https://mac-oui.com/可查询OUI和组织的对应关系。
(3)MAC地址的后24 bit是流水号,即某个组织分配的产品序号,所以设备的MAC地址在正常情况下是不会重复的。
(4)MAC地址的唯一性,可以帮助我们锁定某一台设备。
MAC地址是由IANA通过在线数据库管理的,该在线数据库的链接地址是https://www.iana.org/assignments/ethernet-numbers/ethernet-numbers.xhtml。
有关IP地址与MAC地址的一个问题。
既然有了IP地址,为什么还需要MAC地址?或者说有了MAC地址还需要IP地址吗?
地址是标识。既然是标识,就要考虑两个问题:一是标识空间,即能标识多少对象;二是标识目的,标识的目的是区别和辨识,地址标识还涉及到寻址,从MAC地址的寻址空间和地址结构来看,它在设计之初并没有充分考虑好寻址的需要,只是实现了本地化的标识和有限范围的寻址。实际上,MAC地址和IP地址是各自独立,谁也替代不了谁的。MAC地址是以太网标识,而以太网所承载的业务并不仅仅只有IP,能承载IP业务的链路类型也不仅仅只有以太网。虽说IP与介质无关,其实还是通过模块化思想来降低问题复杂度,进而解决问题的。如果IP的下层采用PPP、HDLC、Frame Relay或ATM等进行封装,哪里还有什么MAC地址;如果以太网对上层提供MPLS或IS-IS,哪里还有什么IP地址。
在中继链路上通常要承载多个VLAN,为了区分不同的VLAN数据帧,就需要为不同的VLAN数据帧添加一个标识,这个标识就是VLAN Tag。在本地链路上传输VLAN数据帧不需要添加VLAN Tag(也称为打Tag),只有中继链路上传输VLAN数据帧时才需要打Tag。
802.1Q也称为Dot1Q,是IEEE标准,用于标识中继链路上的VLAN数据帧,最多支持4094个VLAN。Dot1Q会对原始的数据帧进行修改,在源MAC地址(Source Address)和长度类型(Length/Type)字段之间加入4 B的Dot1Q Tag,并重新计算帧校验序列(FCS)。
Dot1Q的帧结构如图2-34所示,各字段的含义如下所述。
图2-34 Dot1Q的帧结构
(1)TPID:协议标识符(Tag Protocal Identifier),字段长度为3 B,用来标识上层协议,与以太网报文中的Type/Length字段作用一样,而此时的Type/Length字段只表示Length。
(2)PRI:优先级(Priority),字段长度为3 bit,只能表示0~7,可用于部署QoS。
(3)CFI:权威格式标识(Canonical Format Indicator),字段长度为1 bit,用于兼容令牌环,0表示以太网,MAC地址是权威格式;1表示令牌环,MAC地址不是权威格式。
(3)VID:VLAN ID,字段长度为12 bit,可表示0~4095,即2 12 ,共4096个VLAN ID。
在Wireshark中显示的一个Dot1Q帧示例如图2-35所示。
从图2-35中可以看到如下信息:
这是一个Ethernet II数据帧;
目的MAC地址是54:89:98:51:27:dd;
源MAC地址是54:89:98:f2:51:2a;
Type值是0x8100,是Dot1Q帧。
Dot1Q帧封装中各字段的含义如下:
PRI是0(默认值),尽力而为转发;
CFI是0,表示是MAC地址是权威格式;
VLAN ID是10;
Type值是0x0800,表示上层协议是IPv4。
图2-35 在Wireshark中显示的一个Dot1Q帧示例