以太网数据链路层协议分析

相信很多新人在学习协议的时候会遇到很多问题,有些地方可能会总是想不明白(因为我自己也是新人 ^_^ ),所以,跟据我自己学习的经历和我在学习中所遇到的问题,我总结了一下列出来。如果能对大家有所帮助,将是我莫大的荣耀!
 
关于局域网的起源和发展,这里就不多说,因为很多书上和网上都有详细的说明,我们将直接进入对局域网协议的学习中。
 
局域网的几种协议,主要包括以太网第二版、 IEEE802 系列、令牌环网和 SNAP 等(之所以加个“等”字,是因为我只知道这几种,如果还有其他的,欢迎朋友们给我补充)。而最为常见的,也就是以太网第二版和 IEEE802 系列,我们也主要去了解这两种( IEEE802 包括好多种,我们也不一一介绍,只对其中常见做研究)。
 
一,以太网( V2
以太网第二版是早期的版本,是由 DEC Intel Xerox 联合首创,简称 DIX 。帧格式如下图:
 

以太网数据链路层协议分析_第1张图片

 
前导信息:采用 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应该是在8022之前出来,只它存在问题,所以才出现了8022以解决它的问题,大家是不是觉得有点糊,没关系,请继续看下去。下面是这个帧的帧格式:
以太网数据链路层协议分析_第2张图片
         大家有没有发现在这个帧格式跟以太网第二版本的格式非常像?没错,它们这间改动的比较少,因为8023是在以太网V2的基础上开发的,为了适应100M的网络,所以才把8位的前导步信息分成了7字节,并加入了一个SFD的域(为什么说这样分开一下可以支持100M?我目前还没搞懂。^8^那位高手有这方面的资料贡献一下啊)。那前导和SFD到底起什么作用?我的理解是, 前导与SOFD相当于跑步竞赛开始时的那句预备!跑!,前导就是预备!SFD就是跑!,所以前导让接收设备进入状态,SOFD让接收设备开始接收。而这里所谓比特流硬件时钟同步,是指让设备按当前比特流信号频率同步,以得到精确的接收数据的位置,避免接收出错,与PC里所谓时钟概念是一样的。
再有就是类型字段变成了长度字段,这是因为当初这个协议是由novell开发的,所以它默认就是在就是局域网就是novell网,服务器是netware服务器,跑的是IPX的协议,因此去掉了类型换成了长度。后来IEEE再据此制定8023的协议,结果问题也就出来了。如果我上层用的是IP协议呢?那怎么办?别急,有问题就会有方法,IEEE8022也就由此出现了。
 
<!--[if !supportLists]--> 2, <!--[endif]--> IEEE802 2
 
请看帧格式:

以太网数据链路层协议分析_第3张图片

可以看到,种帧的最大区别就在于多了一个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 连接的类型:无应答方式(无连接)和完全应答方式(面向连接)。
 
     我们在工作中最常见的也就是这三种帧了,下面加入一张网上找到的图片,以加深大家的理解,并做一个小小的总结:
以太网数据链路层协议分析_第4张图片
 
   三、用sniffer捕帧。
Ok, 局域网的基本协议已经讲完,现在该动动手了。
下面是我用sniffer捕的几个帧。
ARP 帧:
以太网数据链路层协议分析_第5张图片
 
DNS 的包:
以太网数据链路层协议分析_第6张图片
 
HTTP 的包:
以太网数据链路层协议分析_第7张图片
 
  
           通过上面所捕获的帧,相信大家对网络的分层应该会有一个比较深的理解。我所展开的是数据链路层的包头。
 
      对照上面的帧格式,我们可以看到,有目的地址,有源地址,有类型,从 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 版本的网络的缺省帧类型是8023
 
 
   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.3Frame HeaderEthernet 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 BytesSNAP ID其中前面3byte通常与源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 格式的帧

你可能感兴趣的:(网络,header,service,SAP,Access,byte)