相信很多新人在学习协议的时候会遇到很多问题,有些地方可能会总是想不明白(因为我自己也是新人
^_^
),所以,跟据我自己学习的经历和我在学习中所遇到的问题,我总结了一下列出来。如果能对大家有所帮助,将是我莫大的荣耀!
关于局域网的起源和发展,这里就不多说,因为很多书上和网上都有详细的说明,我们将直接进入对局域网协议的学习中。
局域网的几种协议,主要包括以太网第二版、
IEEE802
系列、令牌环网和
SNAP
等(之所以加个“等”字,是因为我只知道这几种,如果还有其他的,欢迎朋友们给我补充)。而最为常见的,也就是以太网第二版和
IEEE802
系列,我们也主要去了解这两种(
IEEE802
包括好多种,我们也不一一介绍,只对其中常见做研究)。
一,以太网(
V2
)
以太网第二版是早期的版本,是由
DEC
、
Intel
和
Xerox
联合首创,简称
DIX
。帧格式如下图:
前导信息:采用
1
和
0
的交替模式,在每个数据包起始处提供
5MHZ
的时钟信号,以充许接收设备锁定进入的位流。
目标地址:数据传输的目标
MAC
地址。
源
地
址:数据传输的源
MAC
地址。
以太网类型:标识了帧中所含信息的上层协议。
数据加填充位:这一帧所带有的数据信息。(
以太网帧的大小是可变的。每个帧包括一个
1 4
字节的报头和一个
4
字节的帧校验序列域。这两个域增加了
1 8
字节的帧长度。帧的数据部分可以包括从
4 6
字节到
1 5 0 0
字节长的信息(如果传输小于
4 6
字节的数据,则网络将对数据部分填充填充位直到长度为
4 6
字节
)。因此,以太网帧的最小长度为
1 8 + 4 6
,或
6 4
个字节,最大长度为
1 8 + 1 5 0 0
,或
1 5 1 8
个字节。)
F C S
: 帧校验序列(
F C S
,
Frame Check Sequence
)域确保接收到的数据与发送时的数据一样。当源节点发送数据时,它执行一种称为循环冗余校验(
C R C
,
Cyclical Redundancy Check
)的算法。
C R C
利用帧中前面所有域的值生成一个惟一的
4
字节长的数,即
F C S
。当目标节点接收数据帧时,它通过
C R C
破解
F C S
并确定帧的域与它们原有的形式一致。如果这种比较失败,则接收节点认为帧已经在发送过程中被破坏并要求源节点重发该数据。
二,IEEE802系列。
IEEE802
系列包含比较多的内容,但比较常见的是802.2 和 802.3 。下面我们就比这两种帧。
<!--[if !supportLists]-->
1, <!--[endif]-->
IEEE802.3
为什么我要先把802.3列出来?因为我个人觉得802.3应该是在802。2之前出来,只它存在问题,所以才出现了802。2以解决它的问题,大家是不是觉得有点糊,没关系,请继续看下去。下面是这个帧的帧格式:
大家有没有发现在这个帧格式跟以太网第二版本的格式非常像?没错,它们这间改动的比较少,因为802。3是在以太网V2的基础上开发的,为了适应100M的网络,所以才把8位的前导步信息分成了7字节,并加入了一个SFD的域(为什么说这样分开一下可以支持100M?我目前还没搞懂。^8^那位高手有这方面的资料贡献一下啊)。那前导和SFD到底起什么作用?我的理解是,
前导与SOFD相当于跑步竞赛开始时的那句“预备!跑!”,前导就是“预备!”,SFD就是“跑!”,所以前导让接收设备进入状态,SOFD让接收设备开始接收。而这里所谓比特流硬件时钟同步,是指让设备按当前比特流信号频率同步,以得到精确的接收数据的位置,避免接收出错,与PC里所谓时钟概念是一样的。
再有就是类型字段变成了长度字段,这是因为当初这个协议是由novell开发的,所以它默认就是在就是局域网就是novell网,服务器是netware服务器,跑的是IPX的协议,因此去掉了类型换成了长度。后来IEEE再据此制定802。3的协议,结果问题也就出来了。如果我上层用的是IP协议呢?那怎么办?别急,有问题就会有方法,IEEE802。2也就由此出现了。
<!--[if !supportLists]-->
2, <!--[endif]-->
IEEE802
。2
请看帧格式:
可以看到,种帧的最大区别就在于多了一个LLC的域,即逻辑链路控制
(
L L C
,
Logical Link Control
)
。该信息用来区别一个网络中的多个客户机。如果
L L C
和数据信息的总长度不足
4 6
字节,数据域还将包括填充位。长度域并不关心填充位,它仅仅报告逻辑链接控制层信息(
L L C
)加上数据信息的长度。逻辑链接控制层(
L L C
)信息由三个域组成:目标服务访问点(
D S A P
,
D e s t i n a t i o n
Service Access Point
),源服务访问点(
S S A P
,
Source Service Access Point
)和一个控制域。每个域都是
1
个字节长,
L L C
域总长度为
3
字节。一个服务访问点(
S A P
,
Service Access Point
)标识了使用
L L C
协议的一个节点或内部进程,网络中源节点和目标节点之间的每个进程都有一个惟一
S A P
。控制域标识了必须被建立
L L C
连接的类型:无应答方式(无连接)和完全应答方式(面向连接)。
我们在工作中最常见的也就是这三种帧了,下面加入一张网上找到的图片,以加深大家的理解,并做一个小小的总结:
三、用sniffer捕帧。
Ok,
局域网的基本协议已经讲完,现在该动动手了。
下面是我用sniffer捕的几个帧。
ARP
帧:
DNS
的包:
HTTP
的包:
通过上面所捕获的帧,相信大家对网络的分层应该会有一个比较深的理解。我所展开的是数据链路层的包头。
对照上面的帧格式,我们可以看到,有目的地址,有源地址,有类型,从
IP
开始就属于
信息字段了。姨,不对呀,怎么没有前导和
SFD
?当然,这是用来同步的,对协议分析没有意
义,包括
FCS
,所以去掉了(
*8*
不是我想的,
sniffer
捕完后就去掉了的别打我)。
可是,不对啊?没错,眼尖的朋友发现了,哈,都是以太网第二版的帧,看上面字段
“
Ethertype=0800(ip)”.
这是怎么回事?不是说现在都是
802
。
3
的,至少也是
802
。
2
的嘛?怎么
还用以太网
V2
?那么打包成何种帧是由哪个决定的?
其实这个问题我当时也糊了,而且很多人也都不是特别的清楚,后来跟我们老师沟通后这么认为:打包成何种帧一般是由操作系统决定的,在微软的
OS
里边,其默认都会打包成以太网第二版的(可以改),这并不是说网络环境变成
10M
了,因为现在这个以太网第二版应该也是支持
100M
的,而在
netware
环境里面,通常都默认是
802
。
2
或
802
。
3
,具体
2
还是
3
,就要看
netware
版本了,一般来讲,
运行低于
Netware 3.12
版本的网络的缺省帧类型是802。3。
Ok.
咱就说到这了,当然不敢说完全正确,只希望能让大家共同交流,所以欢迎大家能够指出我所不对的地方,共同进步。
用过
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字节的帧校验)
- 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),一个控制域--1 byte!
SAP用于标示帧的上层协议
- Ethernet SNAP
SNAP Frame与802.3/802.2 Frame的最大区别是增加了一个5 Bytes的SNAP ID其中前面3个byte通常与源mac地址的前三个bytes相同为厂商代码!有时也可设为0,后2 bytes 与Ethernet II的类型域相同。。。
三
.
如何区分不同的帧格式
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
格式的帧