目录
一、引入
1. 前言
20 世纪60 年代以来,计算机网络得到了飞速发展。各大厂商和标准组织为了在数据通信网
络领域占据主导地位,纷纷推出了各自的网络架构体系和标准,如IBM 公司的SNA 协议,
Novell 公司的IPX/SPX 协议,以及广泛流行的OSI 参考模型和TCP/IP协议。同时,各大厂
商根据这些协议生产出了不同的硬件和软件。标准组织和厂商的共同努力促进了网络技术
的快速发展和网络设备种类的迅速增长。
网络通信中, " 协议" 和" 标准" 这两个词汇常常可以混用。同时, 协议或标准本身又常
常具有层次的特点。一般地, 关注于逻辑数据关系的协议通常被称为上层协议, 而关注于
物理数据流的协议通常被称为底层协议。IEEE 802 就是一套用来管理物理数据流在局域网
中传输的标准, 包括在局域网中传输物理数据的802.3 以太网标准。除以太外, 还有一些用
来管理物理数据流在广域网中传输的标准, 如PPP ( Point-to- Poi nt Protocol ) , 高级数
据钅连路控制HDLC ( High-LeveI Data Link ControI ) 。
2. 网络通信协议
3. 终端之间的通信
数据包在以太网物理介质上传播之前必须封装头部和尾部信息, 封装后的数据包称为数据
帧, 数据帧中封装的信息决定了数据如何传输。以太网上传输的数据帧有两种格式, 选择
哪种格式由TCP/IP 协议簇中的网络层决定。
二、帧格式
以太网上使用两种标准帧格式。第一种是世纪80 年代初提出的DIX v2 格式, 即Ethernet
II 帧格式。Ethernet II 后来被IEEE802 标准接纳, 并写进了IEEE 802.3x-1997 的3.2.6 节。
第二种是1983 年提出的IEEE 802.3 格式。这两种格式的主要区别在于Ethernet II 格式中包
含一个Type 字段, 标识以太帧处理完成之后将被发送到哪个上层协议进行处理, IEEE
802.3格式中, 同样的位置是长度(length)字段。
不同的Type 字段值可以用来区别这两种帧的类型, 当Type 字段值小于等于1500 ( 或者十
六进制的0x05DC) 时, 帧使用的是IEEE 802.3 格式。当Type 字段值大于等于1536 ( 或者
十六进制的0x0600)时, 帧使用的是Ethernet II 格式。以太网中大多数的数据帧使用的是
Ethernet II 格式。
以太帧中还包括源和目的MAC 地址分别代表发送者的MAC 和接收者的MAC , 此外还有
帧校验序列字段, 用于检验传输过程中帧的完整性。
三、Ethernet Ⅱ 帧格式
1. 各字段说明
DMAC | 6字节 | 目的MAC地址,IPV4为6字节,该字段确定帧的接收者。 |
SMAC | 6字节 | 源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。 |
Type | 2字节 | 协议类型。取值表示了数据字段包含的高层协议。下表列出了链路直接封装的协议。 |
Data | 变长 | 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。 如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。 |
CRC | 4字节 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。这个字段只是提供检错功能,并不提供纠错功能。该效验和效验的范围为:目的地址,源地址,类型,数据等字段。CRC效验的生成多项式为: G(x)=X(32)+X(26)+X(23)+X(22)+X(16)+X(12)+X(11)+X(10)+X(8)+X(7)+X(5)+X(4)+X(2)+X(1)+1 |
对于Type 字段来说,不同的取值代表数据字段封装的不同上层协议,具体如下:
0x0800 | Internet Protocol (IP) [RFC894] |
0x0801 | X.75 Internet |
0x0805 | X.25 Level 3 |
0x0806 | Address Resolution Protocol (ARP)[RFC7042] |
0x0808 | Frame Relay ARP [RFC1701] |
0x8000 | IS-IS |
0x8035 | Reverse Address Resolution Protocol (RARP) [RFC903] |
0x8137 | Novell NetWare IPX/SPX (old) |
0x8138 | Novell, Inc. |
0x8100 | IEEE Std 802.1Q - Customer VLAN Tag Type |
0x814C | SNMP over Ethernet [RFC1089] |
0x86DD | IP Protocol version 6 (IPv6) [RFC7042] |
0x8808 | IEEE Std 802.3 - Ethernet Passive Optical Network (EPON) [RFC7042] |
0x880B | Point-to-Point Protocol (PPP) [RFC7042] |
0x880C | General Switch Management Protocol (GSMP) |
0x8847 | MPLS (multiprotocol label switching) label stack - unicast [RFC 3032] |
0x8848 | MPLS (multiprotocol label switching) label stack - multicast [RFC 3032] |
0x8863 | PPP over Ethernet (PPPoE) Discovery Stage [RFC2516] |
0x8864 | PPP over Ethernet (PPPoE) Session Stage [RFC2516] |
0x888E | IEEE Std 802.1X - Port-based network access control |
0x88A8 | IEEE Std 802.1Q - Service VLAN tag identifier (S-Tag) |
0x88B7 | IEEE Std 802 - OUI Extended Ethertype |
0x88C7 | IEEE Std 802.11 - Pre-Authentication (802.11i) |
0x88CC | IEEE Std 802.1AB - Link Layer Discovery Protocol (LLDP) |
0x88E5 | IEEE Std 802.1AE - Media Access Control Security |
0x88F5 | IEEE Std 802.1Q - Multiple VLAN Registration Protocol (MVRP) |
0x88F6 | IEEE Std 802.1Q - Multiple Multicast Registration Protocol (MMRP) |
这个以太网V2的前导域为8B,而IEEE802.3的前导域为7B,将空余出来的一个字节用作帧起始分解符,它的位模式为10101011,这样做的目的就是为了和IEEE802.4和IEEE802.5兼容。
还有的就是IEEE802.3帧规定的第三个字段是“长度/类型域”。当这个字段值大于1536时,表示类型,这个就是和V2以太网一样的标准了;当这个字段值小于1500时,才表示“长度”,这时,接收方无法确定对接收到的帧做如何处理,必须通过在数据部分增加一个小的LLC头部,用它来提供帧类型的
2. 两个问题
在以太网V2的MAC帧中,其首部并没有一个帧长度(或数据长度)的字段,那么MAC子层如何知道从接收到的以太网帧中取出多少字节的数据交给上一层的协议?
D: 这是因为以太网采用曼彻斯特编码,曼彻斯特编码的一个重要特点是:在曼彻斯特的每一个码元的正中间一定有一次电压的转化(从高到低或者从低到高)。当发送方把一个以太网帧发送完毕后,就不再发送其他码元(帧之间有着一定的间隔),这样发送方适配器上的电压就不再变化,于是接收方就可以很容易地找到以太网帧的结束位置,这个位置上往前数4B(效验和),就能确定数据字段的结束位置。
当数据字段不足46B时候,必须通过填充字段来扩充数据字段的长度,使其满足最小长度64B的要求,那么接收端的MAC子层在从接收到的帧中剥去首部和尾部后把数据字段交给上一层协议后,上一层协议如何识别有效的数据字段的长度?
D: 上一层协议要识别数据帧的数据字段的有效长度,一般是通过上层协议的类似“总长度”字段推断出来的。例如,如果上层协议使用的是IP协议的时候,其IP头中就有一个“总长度字段”,因此“总长度”字段加上填充字段,应当等于MAC帧中数据字段的长度。例如,当IP数据包的总长度为42B时,填充字段共有4B,当MAC帧将46B的数据交给IP层时,IP层就把其中的4B的填充字段丢弃。
3. 抓包示意
4. 参考标准
标准 | 描述 |
---|---|
IEEE 802.3 | Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specifications |
IEEE 802.3ae | Media Access Control (MAC) Parameters, Physical Layers, and Management parameters for 10Gb/s Operation |
RFC 894 | A Standard for the Transmission of IP Datagrams over Ethernet Networks |
RFC 1042 | A Standard for the Transmission of IP Datagrams over IEEE 802 Networks |
四、IEEE 802.3 帧格式
1. 字段说明
DMAC | 6 | 目的MAC地址 |
SMAC | 6 | 源MAC地址 |
Length | 2 | 指后续数据的字节长度,但不包括CRC检验码 |
DSAP | 1 | 目的服务访问点 |
SSAP | 1 | 源服务访问点 |
Data | 44~1498 | 负载 |
CRC | 4 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列) |
IEEE802.3 帧格式类似于Ethernet II 帧, 只是Ethernet II 帧的Type 域被802.3 帧的Length
域取代, 并且占用了Data 字段的8 个字节作为LLC 和SNAP 字段。
Length 字段定义了Data 字段包含的字节数。
逻辑链路控制LLC ( Logical Link Control ) 由目的服务访问点DSAP ( Destination
Service Access Point )、源服务访问点SSAP ( Source Service Access Point ) 和
Control 字段组成
SNAP ( Sub-network Access Protocol ) 由机构代码( Org Code ) 和类型( Type ) 字段组成。Org Code 三个字节都为0 。Type 字段的含义与Ethernet II 帧中的Type 字段相同。
IEEE802.3 帧根据DSAP 和SSAP 字段的取值又可分为以下几类:
1. 当DSAP 和SSAP 都取特定值0xff时,802.3 帧就变成了Netware-ETHERNET 帧, 用
来承载NetWare 类型的数据。
2. 当DSAP 和SSAP 都取特定值0xaa时,802.3 帧就变成了ETHERNET_SNAP帧
ETHERNET_SNAP 帧可以用于传输多种协议。DSAP和SSAP取值为其它时,就是纯的IEEE 802.3 帧。
2. 抓包示意
3. 参考标准
标准 | 描述 |
---|---|
IEEE 802.3 | Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specifications |
IEEE 802.3ae | Media Access Control (MAC) Parameters, Physical Layers, and Management parameters for 10Gb/s Operation |
RFC 894 | A Standard for the Transmission of IP Datagrams over Ethernet Networks |
RFC 1042 | A Standard for the Transmission of IP Datagrams over IEEE 802 Networks |
来源地址:https://blog.csdn.net/m0_53662978/article/details/123445930