[转]数据链路层
目录
数据链路层标准
数据链路层术语
信道
链路定义
三个基本问题
两种重要的措施
CSMA/CD 协议
以太网提供的服务
MAC帧
扩展局域网
计算机通过适配器和局域网进行通信
集线器
网桥
网络拓扑
交换机
虚拟局域网VLAN
虚拟局域网使用的以太网帧格式
发送一帧所需的平均时间
LAN 的无线协议
LAN 的以太网协议
WAN 的点对点协议
PPPoE 的点对点协议
数据链路层标准
数据链路层术语
信道
两种信道方式:
点对点信道:
通信方式:
使用一对一的点对点通信方式
PPP协议:
帧首部:
应满足的需求:
-
-
-
- 简单(这是首要的要求)
- 封装成帧
- 透明性
- 多种网络层协议
- 多种类型链路
- 差错检测
- 检测连接状态
- 最大传送单元
- 网络层地址协商
- 数据压缩协商
-
-
不需要的功能:
-
-
-
- 纠错
- 流量控制
- 序号
- 多点线路
- 半双工或单工链路
-
-
三个组成部分:
-
-
-
- 一个将 IP 数据报封装到串行链路的方法.
- 链路控制协议 LCP (Link Control Protocol).
- 网络控制协议 NCP (Network Control Protocol).
-
-
PPP 协议工作状态:
透明传输问题:
字符填充:
-
-
-
- 将信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D, 0x5E).
- 若信息字段中出现一个0x7D的字节,则将其转变成为2字节序列(0x7D, 0x5D).
- 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变.
-
-
零比特填充:
方法:
-
-
-
-
- 发送时,只要发现有5个连续1.则立即填入一个0
- 接受时,对帧中的比特流进行扫描.每当发现5个连续1时,就把这5个连续1后的一个0删除
-
-
-
注意:
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送).这时PPP协议采用零比特填充方法来实现透明传输
广播信道:
通信方式:使用一对多的广播通信方式
注意:因此必须使用专用的共享信道协议来协调这些主机的数据发
信道划分:
- 静态划分信道:
- 频分复用
- 时分复用
- 波分复用
- 码分复用
- 动态划分信道:
- 动态媒体接入控制(多点接入),随机接入
- 动态媒体接入控制(多点接入),受控接入
链路定义
链路(link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点
数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输.若把实现这些协议的硬件和软件加到链路上,就构成了数据链路.
三个基本问题
封装成帧:
在一段数据的前后分别添加首部和尾部,然后就构成了一个帧.确定帧界限
透明传输:
定义:
数据在传输中为透明的
解决透明传输问题:
-
- 发送端的数据链路层在数据中出现控制字符"SOH"或"EOT"的前面插入一个转义字符"ESC"(其十六进制编码是 1B).
- 字节填充(byte stuffing)或字符填充(character stuffing)━接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
- 如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符.当接收端收到连续的两个转义字符时,就删除其中前面的一个
差错控制:
- 循环冗余检验
- 帧检验序列 FCS
两种重要的措施
采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据
以太网对发送的数据帧不进行编号,也不要求对方发回确认
CSMA/CD 协议
定义:
载波监听多点接入/碰撞检测CSMA/CD
冲突:
冲突受控:
冲突争用:
做法:
第一步,先听后发(每个站在发送数据前先要检测一下总线上是否有其他计算机在发送数据)
第二步,边听边发(每个站在发送数据时要检查是否发送碰撞)
第三步,冲突停止(当发生碰撞时候双方要立马停止发送数据,并发送人为干扰信号)
第四步,随机重发(然后依据退避算法重新发送数据)
传播时延对载波监听:
人为干扰信号:
特点:
- 一个站点不可能同时发送数据和接收数据
- 多计算机以多点接入的方式连接在一根总线上
退避算法:
- 确定基本退避时间,一般是取为争用期 2τ
- 定义重传次数 k,k = Min[重传次数, 10].从整数集合[0,1,…, (2的k-1次方减去1)]中随机地取出一个数记为r.重传所需的时延就是r 倍的的退避时间
- 当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告
争用期:
- 从发送方传送数据到接受方,并由接收方返回数据到发送方的时间
- 以太网取51.2s 为争用期的长度,在争用期内可发送512 bit,即 64 字节.在争用期内可发送数据若前 64 字节没有发生冲突,则后续的数据就不会发生冲突,若接受到的帧小于64字节直接丢弃
CSMA/CD 发送流程:
CSMA/CD 接收流程:
以太网提供的服务
以太网提供的服务是不可靠的交付,即尽最大努力的交付.当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做.差错的纠正由高层来决定.如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送.
MAC帧
MAC帧格式:
MAC 帧类型字段值及其意思:
- 0x0000 - 0x05DC IEEE 802.3 长度
- 0x0101 - 0x01FF 实验
- 0x0600 XEROX NS IDP
- 0x0660
- 0x0661 DLOG
- 0x0800 网际协议(IP)
- 0x0801 X.75 Internet
- 0x0802 NBS Internet
- 0x0803 ECMA Internet
- 0x0804 Chaosnet
- 0x0805 X.25 Level 3
- 0x0806 地址解析协议(ARP : Address Resolution Protocol)
- 0x0808 帧中继 ARP (Frame Relay ARP) [RFC1701]
- 0x6559 原始帧中继(Raw Frame Relay) [RFC1701]
- 0x8035 动态 DARP (DRARP:Dynamic RARP)反向地址解析协议(RARP:Reverse Address Resolution Protocol)
- 0x8037 Novell Netware IPX
- 0x809B EtherTalk
- 0x80D5 IBM SNA Services over Ethernet
- 0x80F3 AppleTalk 地址解析协议(AARP:AppleTalk Address Resolution Protocol)
- 0x8100 以太网自动保护开关(EAPS:Ethernet Automatic Protection Switching)
- 0x8137 因特网包交换(IPX:Internet Packet Exchange)
- 0x814C 简单网络管理协议(SNMP:Simple Network Management Protocol)
- 0x86DD 网际协议v6 (IPv6,Internet Protocol version 6)
- 0x880B 点对点协议(PPP:Point-to-Point Protocol)
- 0x880C 通用交换管理协议(GSMP:General Switch Management Protocol)
- 0x8847 多协议标签交换(单播) MPLS:Multi-Protocol Label Switching <unicast>)
- 0x8848 多协议标签交换(组播)(MPLS, Multi-Protocol Label Switching <multicast>)
- 0x8863 以太网上的 PPP(发现阶段)(PPPoE:PPP Over Ethernet <Discovery Stage>)
- 0x8864 以太网上的 PPP(PPP 会话阶段) (PPPoE,PPP Over Ethernet<PPP Session Stage>)
- 0x88BB 轻量级访问点协议(LWAPP:Light Weight Access Point Protocol)
- 0x88CC 链接层发现协议(LLDP:Link Layer Discovery Protocol)
- 0x8E88 局域网上的 EAP(EAPOL:EAP over LAN)
- 0x9000 配置测试协议(Loopback)
- 0x9100 VLAN 标签协议标识符(VLAN Tag Protocol Identifier)
- 0x9200 VLAN 标签协议标识符(VLAN Tag Protocol Identifier)
- 0xFFFF 保留
Mac地址
地址分配:
-
- IEEE 的注册管理机构RA负责向厂家分配地址字段的前三个字节(即高位24位)
- 地址字段中的后三个字节(即低位24位)由厂家自行指派,称为扩展标识符,必须保证生产出的适配器没有重复地址
定义:
硬件地址又称为物理地址,或 MAC 地址
MAC帧:
-
- 单播(unicast)帧(一对一)
- 广播(broadcast)帧(一对全体)
- 多播(multicast)帧(一对多)
- 以太网配适器还可以设置为一种特殊方式,混杂范式,既工作时,只要听到有帧在以太网上传输都悄悄的接收下来
两种标准:
-
- DIX Ethernet V2 标准(最常用的 MAC 帧是以太网 V2 的格式)
- IEEE 的 802.3 标准
无效的 MAC 帧:
-
- 数据字段的长度与长度字段的值不一致
- 帧的长度不是整数个字节
- 用收到的帧检验序列 FCS 查出有差错
- 数据字段的长度不在 46 ~ 1500 字节之间
帧间最小间隔:
-
- 定义: 帧间最小间隔为9.6 s,相当于96 bit的发送时间
- 目的: 一个站在检测到总线开始空闲后,还要等待9.6 s 才能再次发送数据.这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备
扩展局域网
在物理层扩展局域网(用集线器扩展局域网)
优点:
-
- 使原来属于不同碰撞域的局域网上计算机能够进行跨碰撞域的通信
缺点:
-
- 碰撞域增大了,但总的吞吐量并未提高
- 若不同碰撞域使用不同数据率,则就不能用集线器将它们互连起来
在数据链路层扩展局域网(用网桥扩展局域网)
优点:
-
- 扩大了局域网覆盖的地理范围
- 过滤通信量
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层,不同MAC子层和不同速率(如10 Mb/s和100Mb/s以太网)的局域网
- 网桥使各网段成为隔离开的碰撞域
缺点:
-
- 存储转发增加了时延
- 在MAC 子层并没有流量控制功能
- 具有不同MAC子层的网段桥接在一起时时延更大
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞.这就是所谓的广播风暴
在物理层上和在数据链路层上扩展局域网的不同:
- 集线器在转发帧时,不对传输媒体进行检测
- 网桥在转发帧之前必须执行CSMA/CD 算法.若在发送过程中出现碰撞,就必须停止发送和进行退避
计算机通过适配器和局域网进行通信
集线器
网桥
转发表中登记以下三个信息:
- 源地址
- 接口号
- 时间
透明网桥自学习算法:
处理接收到的数据帧流程:
要求:
每隔一段时间内更新下转发表
生成树算法:
-
- 方法:
- 互连在一起的网桥在进行彼此通信后,就能找出原来的网络拓扑一个子集.在这个子集里,整个连通的网络中不存在回路,即在任何两个站之间只有一条路径
- 为了得出能够反映网络拓扑发生变化时的生成树,在生成树上的根网桥每隔一段时间还要对生成树的拓扑进行更新
- 目的:
- 为了避免产生转发的帧在网络中不断地兜圈子
- 方法:
源路由网桥:
- 目的:
- 找出最佳路由路径
- 方法:
- 源站以广播方式向欲通信的目的站发送一个发现帧,每个发现帧都记录所经过的路由
- 发现帧到达目的站时就沿各自的路由返回源站
- 源站在得知这些路由后,从所有可能的路由中选择出一个最佳路由
- 凡从该源站向该目的站发送的帧的首部,都必须携带源站所确定的这一路由信息
网络拓扑
星形拓扑:
由于集线器的出现和双绞线大量用于局域网,此拓扑结构非常广泛得到应用
环形拓扑:
- 在逻辑环拓扑中,各节点依次接收帧.若帧并非发往该节点,它将把帧传递到下一节点.这将允许环使用一种受控介质访问控制技术,称为令牌传递
- 逻辑环拓扑中的节点从环中取下帧,检查地址,如果它并非发往该节点则将它发回环上
- 在环中,源节点和目的节点之间的环一周的所有节点都会检查该帧
总线拓扑:
- 使多个节点可通过使用相同的共享介质相互通信
- 一个时刻只有一个终端在发送数据
- 每个节点都可以看见介质上的所有帧,但是只有帧的目的节点可处理帧内容
- 使用的介质访问控制方法通常为 CSMA/CD或 CSMA/CA
点对点拓扑:
- 点对点拓扑将两个节点直接连接在一起
- 虚电路是在网络中的两个网络设备间创建的逻辑连接
交换机
交换式集线器常称为以太网交换机(switch)或第二层交换机(表明此交换机工作在数据链路层)以太网交换机通常都有十几个接口.因此,以太网交换机实质上就是一个多接口的网桥,可见交换机工作在数据链路层
虚拟局域网VLAN
由一些局域网网段构成的与物理位置无关的逻辑组
每一个VLA 的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个VLAN
利用以太网交换机实现虚拟局域网
这些网段具有某些共同的需求
虚拟局域网使用的以太网帧格式
发送一帧所需的平均时间
LAN 的无线协议
LAN 的以太网协议
WAN 的点对点协议
PPPOE协议
前言
PPPOE(PPP over Ethernet, RFC2516,值得注意的是此RFC不是Standard而是Information类型的)定义了如何在以太网上传输PPP数据包的方法,目前流行的宽带类型
ADSL就是通过PPPoE实现的.
通信过程概述
建立PPPOE通道(ADSL拨号)分两个阶段:发现阶段和PPP会话阶段.
在发现阶段,以太网上的客户机要找到一个访问集中器(AC,Access Concentrator),就是ADSL MODEM,一般家用时一般就只有一个AC;但如果是一个以太网内可能会有多条ADSL,就会有多个AC,这时客户机就从中选择一个.发现阶段完成后,客户机和AC都得到要在以太网上建立PPP通道的相关信息.
发现阶段是无状态的,也就是两边都不用保存以前的状态信息;只有PPP会话开始后,双方就要建立一个虚拟的PPP通信接口,具体在Linux下会有ppp0网卡,在windows下网络连接中增加ADSL的接口.
协议头格式
协议值
PPPOE数据是直接在以太头数据之上的,其等级和ARP、IP等是相同的,在以太头的类型字段中,用0x8863 表示是PPPOE发现阶段数据,用0x8864表示PPP会话阶段数据,如下所示.(类比:0x0800表示IP数据,0x0806表示ARP数据)
PPPOE协议头
PPPOE协议头有6个字节,正好和14字节的以太头实现了4字节对齐,包括以下字段:
-
-
- VER版本号,4位,必须为0x01
- TYPE类型,4位,必须是0x01
- CODE:8位,在发现阶段和PPP会话阶段有不同的定义
- SESSION_ID回话标识:16位,用来定义一个PPP会话,在发现过程中定义
- LENGTH:16位,表示负载长度,不包括以太头和PPPOE头.
-
发现阶段
PPPOE发现阶段数据的以太类型是0x8863.
TAG
在发现阶段用于交换客户机和AC的信息,建立PPPOE通道,负载信息都是PPPOE信息,并没有上层协议数据.
发现阶段的负载称为TAG,一个TAG信息格式如下,负载信息中可能会包含多个TAG:
TAG_TYPE:16位,TAG类型(TAG_TYPE可取以下值(注意第一字节为2表示是错误信息))
-
-
- 0x0000 End-Of-List
- 0x0101 Service-Name
- 0x0102 AC-Name
- 0x0103 Host-Uniq
- 0x0104 AC-Cookie
- 0x0105 Vendor-Specific
- 0x0110 Relay-Session-Id
- 0x0201 Service-Name-Error
- 0x0202 AC-System-Error
- 0x0203 Generic-Error
-
TAG_LENGTH:16位,表示TAG_VALUE部分的长度TAG_VALUE:TAG值
PPPOE主动发现初始包
PPPOE主动发现初始包(PPPoE Active Discovery Initiation, PADI)由客户机发出,以太头中的目的地址是以太广播地址FF:FF:FF:FF:FF:FF,PPPOE头中的CODE为0x09,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG,整个PPPOE包不能超过1484字节,这样省出的16字节可以由ADSL中继设备添加中继TAG.
一个PADI包的例子为:
PPPOE主动发现提议包
PPPOE主动发现提议包(PPPoE Active Discovery Offer, PADO)由AC发出,用来回应客户机的PADI包,以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x07,SESSION_ID值必须为0,负载部分必须包含一个AC-Name类型的TAG,用来指示本AC的名称,一个在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG.如果AC不对该客户机提供服务,AC就不回应PADO包. 一个PADO包的例子为:
PPPOE主动发现请求包
PPPOE主动发现请求包(PPPoE Active Discovery Request, PADR)由客户机发出,因为可能会有多个AC对客户机发出的PADI包回应了PADO包,客户机从回应的PADO包中选择一个AC发送PADR包,以太头中的目的地址是该AC的MAC地址,PPPOE头中的CODE为0x19,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG.
PPPOE主动发现会话确认包
PPPOE主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS)由AC发出,收到客户机的PADR包后,AC将产生一个SEESSION_ID值用来标志本次PPP会话,以PADR包方式发送给客户机.以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x65,SESSION_ID值必须为所生成的那个SESSION_ID,负载部分必须只包含一个Service-Name类型的TAG,表示该服务类型被AC接受,另外可以包含其他TAG.如果AC不接受PADR中的Server-Name,PADS中则包含一个Service-Name-Error类型的TAG,这时SESSION_ID设置为0.
PPPOE主动发现停止包
PPPOE主动发现停止包(PPPoE Active Discovery Terminate, PADT)表示PPPOE会话过程的结束,AC和客户机都可以主动发出.以太头中的目的地址是对方的MAC地址,PPPOE头中的CODE为0xa7,SESSION_ID值必须为PPPOE会话过程的SESSION_ID,不需要TAG.
PPP会话阶段
在PPP会话阶段,PPP包被封装在PPPOE以太帧中,以太包目的地址都是单一的,以太协议为0x8864,PPPOE头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值,PPPOE的负载是整个PPP包,PPP包前是两字节的PPP协议ID值.
一个PPPOE会话过程包的例子为:
注意:由于PPPOE头是6字节,PPP协议ID号两个字节,一共要占用8个字节,而以太网的MTU值为1500,所以上层PPP负载数据不能超过1492字节,所以PPP协商时协商的最大接收单元值不能超过1492字节,也就是相当于在PPPOE环境下的MTU是1492字节.
ADSL拨号过程简述
客户机启动拨号程序,发送PADI包,ADSL MODEM回应PADO包,客户机再发送PADR包,ADSL MODEM回应PADS包后建立PPPOE通道,随后客户机进行普通的PPP协议拨号过程,不过PPP数据包都是包装进以太帧中的,拨号成功后客户机和服务器之间建立了PPP通道,ADSL MODEM起到将以太帧转换为PPP包的作用.ADSL虽然是用电话线,但所用频率不是通话用的频率,所以ADSL拨号不影响打电话.通信结束后,会发送PADT断开PPPOE通道.
结论
由于ADSL的大面积使用,PPPOE也随之应用,了解其通信协议和数据格式对于底层驱动的开发、协议分析、访问控制等是必要的,现在不论在windows还是linux下都可以很好地支持PPPOE.