一、
Ethernet
地址
为了标识以太网上的每台主机,需要给每台主机上的网络适配器(网络接口卡)分配一个唯一的通信地址,即
Ethernet
地址或称为网卡的物理地址、
MAC
地址。
IEEE
负责为网络适配器制造厂商分配
Ethernet
地址块,各厂商为自己生产的每块网络适配器分配一个唯一的
Ethernet
地址。因为在每块网络适配器出厂时,其
Ethernet
地址就已被烧录到网络适配器中。所以,有时我们也将此地址称为烧录地址(
Burned-In-Address
,
BIA
)。
Ethernet
地址长度为
48
比特,共
6
个字节,如图
1
所示。其中,前
3
字节为
IEEE
分配给厂商的厂商代码,后
3
字节为网络适配器编号。
图
1
Ethernet
地址
二、
CSMA/CD
在
ISO
的
OSI
参考模型中,数据链路层的功能相对简单。它只负责将数据从一个节点可靠地传输到相邻节点。但在局域网中,多个节点共享传输介质,必须有某种机制来决定下一个时刻,哪个设备占用传输介质传送数据。因此,局域网的数据链路层要有介质访问控制的功能。为此,一般将数据链路层又划分成两个子层:
●
逻辑链路控制
LLC
(
Logic Line Control
)子层
●
介质访问控制
MAC
(
Media Access Control
)子层
图
2
LLC
和
MAC
子层
如图
2
所示。其中,
LLC
子层负责向其上层提供服务;
MAC
子层的主要功能包括数据帧的封装
/
卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。
MAC
子层的存在屏蔽了不同物理链路种类的差异性。
在
MAC
子层的诸多功能中,非常重要的一项功能是仲裁介质的使用权,即规定站点何时可以使用通信介质。
实际上,局域网技术中是采用具有冲突检测的载波侦听多路访问(
Carrier Sense Multiple Access / Collision Detection
,
CSMA/CD
)这种介质访问方法的。
在这种介质访问方法中规定:在发送数据之前,一个节点必须首先侦听网线上的载波,如果在
9.6
微秒的时间之内没有检测到载波(说明通信介质空闲),节点才可以发送一帧数据。
如果两个节点同时检测到介质空闲并同时发送出一帧数据,则会导致数据帧的冲突,双方的数据帧均被破坏。一方面,检测到冲突的节点会发送
"
冲突增强
"
信号(
32
比特的
"1"
)通知介质上的每个节点发生了冲突。另一方面,发生冲突的节点在再次发送自己的数据帧之前会各自等待一段随机的时间。
随着以太网上节点数量的增加,冲突的数量也随之增加,而整个网段的有效带宽将随之减少。
三、以太网帧格式
目前,有四种不同格式的以太网帧在使用,它们分别是:
●Ethernet II
即
DIX 2.0
:
Xerox
与
DEC
、
Intel
在
1982
年制定的以太网标准帧格式。
Cisco
名称为:
ARPA
。
●Ethernet 802.3 raw
:
Novell
在
1983
年公布的专用以太网标准帧格式。
Cisco
名称为:
Novell-Ether
。
●Ethernet 802.3 SAP
:
IEEE
在
1985
年公布的
Ethernet 802.3
的
SAP
版本以太网帧格式。
Cisco
名称为:
SAP
。
●Ethernet 802.3 SNAP
:
IEEE
在
1985
年公布的
Ethernet 802.3
的
SNAP
版本以太网帧格式。
Cisco
名称为:
SNAP
。
在每种格式的以太网帧的开始处都有
64
比特(
8
字节)的前导字符,如图
3
所示。其中,前
7
个字节称为前同步码(
Preamble
),内容是
16
进制数
0xAA
,最后
1
字节为帧起始标志符
0xAB
,它标识着以太网帧的开始。前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。
图
3
以太网帧前导字符
除此之外,不同格式的以太网帧的各字段定义都不相同,彼此也不兼容。
四、
Ethernet II
帧格式
如图
4
所示,是
Ethernet II
类型以太网帧格式。
图
4
Ethernet II
帧格式
Ethernet II
类型以太网帧的最小长度为
64
字节(
6
+
6
+
2
+
46
+
4
),最大长度为
1518
字节(
6
+
6
+
2
+
1500
+
4
)。其中前
12
字节分别标识出发送数据帧的源节点
MAC
地址和接收数据帧的目标节点
MAC
地址。(注:
ISL
封装后可达
1548
字节,
802.1Q
封装后可达
1522
字节)
接下来的
2
个字节标识出以太网帧所携带的上层数据类型,如
16
进制数
0x0800
代表
IP
协议数据,
16
进制数
0x809B
代表
AppleTalk
协议数据,
16
进制数
0x8138
代表
Novell
类型协议数据等。
在不定长的数据字段后是
4
个字节的帧校验序列(
Frame. Check Sequence
,
FCS
),采用
32
位
CRC
循环冗余校验对从
"
目标
MAC
地址
"
字段到
"
数据
"
字段的数据进行校验。
五、
Ethernet 802.3 raw
帧格式
如图
5
所示,是
Ethernet 802.3 raw
类型以太网帧格式。
图
5
Ethernet 802.3 raw
帧格式
在
Ethernet 802.3 raw
类型以太网帧中,原来
Ethernet II
类型以太网帧中的类型字段被
"
总长度
"
字段所取代,它指明其后数据域的长度,其取值范围为:
46-1500
。
接下来的
2
个字节是固定不变的
16
进制数
0xFFFF
,它标识此帧为
Novell
以太类型数据帧。
六、
Ethernet 802.3 SAP
帧格式
如图
6
所示,是
Ethernet 802. 3 SAP
类型以太网帧格式。
图
6
Ethernet 802. 3 SAP
帧格式
从图中可以看出,在
Ethernet 802.3 SAP
帧中,将原
Ethernet 802.3 raw
帧中
2
个字节的
0xFFFF
变为各
1
个字节的
DSAP
和
SSAP
,同时增加了
1
个字节的
"
控制
"
字段,构成了
802.2
逻辑链路控制(
LLC
)的首部。
LLC
提供了无连接(
LLC
类型
1
)和面向连接(
LLC
类型
2
)的网络服务。
LLC1
是应用于以太网中,而
LLC2
应用在
IBM SNA
网络环境中。
新增的
802.2 LLC
首部包括两个服务访问点:源服务访问点(
SSAP
)和目标服务访问点(
DSAP
)。它们用于标识以太网帧所携带的上层数据类型,如
16
进制数
0x06
代表
IP
协议数据,
16
进制数
0xE0
代表
Novell
类型协议数据,
16
进制数
0xF0
代表
IBM NetBIOS
类型协议数据等。
至于
1
个字节的
"
控制
"
字段,则基本不使用(一般被设为
0x03
,指明采用无连接服务的
802.2
无编号数据格式)。
七、
Ethernet 802.3 SNAP
帧格式
如图
7
所示,是
Ethernet 802. 3 SNAP
类型以太网帧格式。
图
7
Ethernet 802. 3 SNAP
帧格式
Ethernet 802. 3 SNAP
类型以太网帧格式和
Ethernet 802. 3 SAP
类型以太网帧格式的主要区别在于:
●2
个字节的
DSAP
和
SSAP
字段内容被固定下来,其值为
16
进制数
0xAA
。
●1
个字节的
"
控制
"
字段内容被固定下来,其值为
16
进制数
0x03
。
●
增加了
SNAP
字段,由下面两项组成:
◆新增了
3
个字节的组织唯一标识符(
Organizationally Unique Identifier
,
OUI ID
)字段,其值通常等于
MAC
地址的前
3
字节,即网络适配器厂商代码。
◆
2
个字节的
"
类型
"
字段用来标识以太网帧所携带的上层数据类型。
浅谈以太网帧格式
用过
NetXray
之类的抓包软件的人,可能经常会被一些不同的
Frame Header
搞糊涂,为何用的
Frame
的
Header
是这样的,而另外的又不一样。这是因为在
Ethernet
中存在几种不同的帧格式,下面就简单介绍一下几种不同的帧格式及他们的差异。
一。
Ethernet
帧格式的发展
1980 DEC,Intel,Xerox
制订了
Ethernet I
的标准
1982 DEC,Intel,Xerox
又制订了
Ehternet II
的标准
1982 IEEE
开始研究
Ethernet
的国际标准
802.3
1983
迫不及待的
Novell
基于
IEEE
的
802.3
的原始版开发了专用的
Ethernet
帧格式
1985 IEEE
推出
IEEE 802.3
规范
后来为解决
EthernetII
与
802.3
帧格式的兼容问题推出折衷的
Ethernet SNAP
格式
(
其中早期的
Ethernet I
已经完全被其他帧格式取代了。所以现在
Ethernet
只能见到后面几种
Ethernet
的帧格式。现在大部分的网络设备都支持这几种
Ethernet
的帧格式如
:cisco
的路由器再设定
Ethernet
接口时可以指定不同的以太网帧格式
:arpa,sap,snap,novell-ether)
二
.
各种不同的帧格式
・
Ethernet II
就是
DIX
以太网联盟推出的,它由
6
个字节的目的
MAC
地址,
6
个字节的源
MAC
地址,
2
个字节的类型域(用于标示封装在这个
Frame
、里面数据的类型
)
以上为
Frame Header,
接下来是
46--1500
字节的数据,和
4
字节的帧校验)
6
字节目的地址
6
字节目的地址
2
字节类型
46-1500
字节数据
4
字节校验
・
Novell Ethernet
它的帧头与
Ethernet
有所不同其中
EthernetII
帧头中的类型域变成了长度域,后面接着的两个字节为
0xFFFF
用于标示这个帧是
Novell Ether
类型的
Frame
由于前面的
0xFFFF
占了两个字节所以数据域缩小为
44-1498
个字节
,
帧校验不变。
・
IEEE 802.3/802.2
(没有实际应用)
802.3
的
Frame Header
和
Ethernet II
的帧头有所不同
EthernetII
类型域变成了长度域。其中又引入
802.2
协议
(LLC)
在
802.3
帧头后面添加了一个
LLC
首部
,
由
DSAP(Destination Service Access Point) 1 byte,SSAP(Source SAP),ctrl(
控制位
)1 byte
。
SAP
用于标示帧的上层协议
6
字节目的地址
6
字节目的地址
2
字节长度
/
类型
1
字节
DSAP 1
字节
SSAP 1
字节
CTRL 43-1497
字节数据
4
字节校验
・
Ethernet SNAP(
现在常用的帧格式
)
SNAP Frame
与
802.3/802.2 Frame
的最大区别是增加了一个
5 Bytes
的
SNAP ID
其中前面
3
个
byte
通常与源
mac
地址的前三个
bytes
相同为厂商代码!有时也可设为
0,
后
2 bytes
与
Ethernet II
的类型域相同
6
字节目的地址
6
字节目的地址
2
字节长度
1
字节
DSAP 1
字节
SSAP 1
字节
CTRL 3
字节
ORG 2
字节类型
38-1492
字节数据
4
字节校验
三
.
如何区分不同的帧格式
Ethernet
中存在这四种
Frame
那些网络设备又是如何识别的呢
?
如何区分
EthernetII
与其他三种格式的
Frame
如果帧头跟随
source mac
地址的
2 bytes
的值大于
1500
则此
Frame
为
EthernetII
格式的。
接着比较紧接着的两
bytes
如果为
0xFFFF
则为
Novell Ether
类型的
Frame
如果为
0xAAAA
则为
Ethernet SNAP
格式的
Frame
,如果都不是则为
Ethernet 802.3/802.2
格式的帧