「计网」03-数据链路层
Chapter3 - 数据链路层
3.1 数据链路层设计要点
一、数据链路层概述
- 物理层实现了比特流的传输,而数据链路层在其基础上实现**帧(frame)**的传输
- 数据链路传输的协议数据单元(PDU)是帧
- 数据链路层使用的信道类型
- 点对点信道
- 使用一对一的点对点通信方式,如光纤
- 广播信道
- 使用一对多的广播通信方式
- 广播信道上连接多个主机,必须采用专门的共享信道协议来协调数据发送
- 比如两个主机不能同时发送信息,否则会影响主干路的电信号。
- 点对点信道
- 数据链路层涉及的问题
- **成帧(framing)**:怎样组成帧、怎样使接收方识别帧
- 差错控制:帧在传输过程中出错的检测
- 流量控制及可靠传输:仅是数据链路层的选项
- 广播信道中的介质访问控制
二、成帧方法
- 成帧要考虑:接收方如何识别帧的边界?
- 常用的成帧方法:(2,3在本章PPP协议中可看到实例)
- 字符计数法
- 在帧头部字段中指明本帧的字节数
- 字符填充的首尾定界法
- 定义专门的字符作为帧的起始/结束标志,并使用字符填充方式将标志字符与数据区分开
- 字符填充方式:若用户传输的数据中包含该标志字符,则需要对其进行替换
- 比特填充的首尾定界法
- 定义专门的比特序列作为帧的起始/结束标志,并使用比特填充方式将标志序列与数据区分开
- 物理编码违例法
- 使用无效的物理编码作为帧的开始/结束标志
3.2 错误检测和纠正
- 任何通信链路在传输数据时都可能出错,一般用误码率BER(Bit Error Rate)表示链路可靠性
- 误码率 = $\frac{出错的比特数}{传送的总比特数}$
- 例如:误码率为 $10^{-10}$ 表示平均每传送 $10^{10}$ 个比特会出现一个比特出错
- 处理方法
- 使用可检测并纠正错误的编码: 纠错码
- 使用可检测错误的编码 + 重传:检错码
一、检错编码(Error detecting code)
- 常用的检错编码方法
- 奇偶校验
- 简单累加和(校验和)
- 循环冗余校验CRC(Cyclic Redundancy Check)
奇偶校验
- 奇偶校验位(parity bit)或校验比特(check bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。
- 奇校验举例
- 一个字节中前7位表示数据位,最后一位留作校验位
- 由于数据位有4个1,要使其成奇数个,故校验位填1
- 注意,奇偶校验位是最简单的错误检测码,由其原理可知,只能检测单bit的翻转。
简单累加和
- 累加和校验算法,又名CheckSum算法。
- 发送方:
- 对要数据累加,得到一个数据和,对和求反,即得到我们的校验值。然后把要发的数据和这个校验值一起发送给接收方。
- 接收方:
- 对接收的数据(包括校验和)进行累加,然后加1,如果得到0,那么说明数据没有出现传输错误。
- 发送方:
- 累加和校验举例
- 发送方:
- 发送0xA8,0x50两个数据,其累加和为0xF8,即b11111000。
- 取反得校验和为 b00000111,即0x07,将这三个数据一起发送出去
- 接收方:
- 如果接受正确,则这三个数据累加和即为b11111111,加1则溢出为0,表明数据没有出现传输错误。
- 发送方:
- 注意,此处发送方和接收方用于保存累加结果的类型一定要一致,否则加1就无法实现溢出从而无法得到0,校验就会无效
循环冗余校验CRC(Cyclic Redundancy Check)
- CRC的基本原理:
- 把比特流看作多项式的系数。设定一个生成多项式(generator polynomial)作为除数。数据流看作被除数。发送方需要在数据流末尾加上一段冗余码,使得组合后的新数据流能够整除除数。
- CRC的计算过程:
- 不妨设原比特流的长度为k,冗余码的长度为n,则组合成的新数据流长度即为k+n
- 在原比特流末尾补上n个0
- 将得到的 (k+n) 位数除以事先约定好的长度为 (n+1) 位的除数P,得到的长度为n的余数R,即为冗余码。
- (简单来说,就是在数据流末尾补上n个0,然后做模2除法得到的余数即为所需的n位冗余码
- 不妨设原比特流的长度为k,冗余码的长度为n,则组合成的新数据流长度即为k+n
- 发送方在计算好冗余码后把它加到数据流的末尾,而接收方则通过传过来的数据做除法计算余数。显然,若余数不为0,则说明传输错误。
模2除法
- 模2除法不借位,因此,可以看做是按位异或,相同为0,不同为1。
- 它有三个原则:
- 除数与被除数最高几位(与除数位数相同)做异或,商1。(保证除数首位为1)
- 余数首先去掉首位,
- 若此时余数最高位为1,则商1,后面补位后与除数做异或;
- 若此时余数最高位为0,则商0,后面补位后与0做异或。
- 重复步骤2,直到余数位小于除数位数时,运算结束
- 模2除法举例
- 注意最后得到的余数位数为n位,不足要补前0
二、纠错编码(Error correcting code)
- 纠错编码通过增加冗余信息使得能够检测错误发生所在,以便于纠正,又称为前向纠错(forward error correcting)
- 海明编码
讨论 - 检错/纠错能实现可靠传输吗?
问:
在数据链路层使用检错码/纠错码能够发现数据的错误,实现无差错接收,这是否说明能够实现可靠传输?
答:
不能。传输差错可分为两大类:一类是前面所说的最基本的比特差错,而另一类则更复杂些,这就是收到的帧并没有出现比特差错,但却出现了帧丢失、帧重复或帧失序。
比如,发送方连续传送三个帧:[#1]-[#2]-[#3]。假定接收端收到的每一个帧都没有比特差错,但却出现下面的几种情况:
- 帧丢失:收到[#1]-[#3]
- 帧重复:收到[#1]-[#2]-[#2]-[#3]
- 帧失序:收到[#1]-[#3]-[#2]
以上三种情况都属于“出现传输差错”,但都不是因为这些帧里有“比特差错”。
3.3 基本数据链路协议
一、无限制的单工协议
- 假设前提
- 单向传输
- 理想信道
- 发送方总有数据发送
- 接收方总能及时处理所收到的数据
二、单工停-等(stop-and-wait)协议
- 问题:按照“无限制的单工协议”,如果接收方处理帧的速度不及发送方,则帧可能丢失
- 解决方法:增加流量控制(flow control)机制,得到单工停等协议
- 接收方每收到一帧,都向发送方返回一个应答帧
- 发送方每发送一帧,都等待来自接收方的应答帧,之后才发送下一帧
三、有噪声信道的单工协议
- 问题:在有噪声信道中,帧在传输过程中可能出错
- 解决方法:ARQ(Automatic Repeat reQuest)协议
- 校验和:使接收方能够检测帧是否出错
- 确认帧:使发送方知道帧已被正确接收
- 超时重发:发送方在规定时间内未收到确认帧,则重发帧
- 帧序号:保证接收方不会重复接收帧
- 协议设计时要考虑的三种情形
- 数据帧被正确接收
- 接收方返回确认帧,发送方收到后继续发送下一帧
- 数据帧出错或丢失
- 接收方未收到帧或校验出错丢弃该帧,发送方等待确认帧超时后,重发
数据帧
- 接收方未收到帧或校验出错丢弃该帧,发送方等待确认帧超时后,重发
- 确认帧出错或丢失
- 发送方未收到有效的确认帧,重发数据帧,接收方收到后,检查帧序号
重复,不上交该帧,只返回确认帧
- 发送方未收到有效的确认帧,重发数据帧,接收方收到后,检查帧序号
- 数据帧被正确接收
- ARQ协议在同一时刻仅有一个帧在链路上传输(数据帧或确认帧),其对信道的利用率较低
3.4 滑动窗口协议
一、滑动窗口协议原理(sliding window protocol)
基本思想与原理
- 滑动窗口协议的基本思想
- 允许发送方连续发送多个帧
- 通过滑动窗口实现流量控制
- 每个待发送的帧都有一个序列号
- 发送方维护一个发送窗口,它包含一组序列号,对应允许它发送的帧
- 接收方维护一个接收窗口,对应允许它接收的帧
- 滑动窗口协议的基本原理
- 发送方
- 发送窗口内的序列号代表允许它发送的帧
- 窗口内最大的序列号称为窗口上边界,或窗口上沿、前沿
- 窗口内最小的序列号称为窗口下边界,或窗口下沿、后沿
- 每当从网络层得到一个数据包,将其组成帧发出后,发送窗口的上边界+1
- 发送窗口下边界的帧被接收方确认后,下边界+1
- 发送窗口内的序列号代表允许它发送的帧
- 接收方
- 接收窗口内的序列号代表它可以接收的帧
- 收到的帧序列号等于窗口下边界时,将该帧上交网络层,并返回确认帧,同时整个窗口向前移动1个位置
- 如果收到帧序列号落在接收窗口之外,则将其丢弃
- 注意:接收窗口总是保持固定大小
- 发送方
示例
问题
- 如上图所示
- 2号帧出错或丢失导致接收端没有成功接收,因而没有发送确认帧ACK2,之后处于忙等状态。
- 发送端对每一帧都维护有一个计时器,在发送8号帧之后,2号帧的计时器超时,因此需要重发2号帧。
- 问题:连续发送的多个帧中,某一个帧出错或丢失,但后续帧已被正确接收,如何处理?
- 前提:数据链路层需按顺序向网络层上交帧
- 后退N帧:出错帧后的帧丢弃,从出错帧开始重新发送
- 选择性重传:出错帧后的帧保留,只重发出错帧
- 前提:数据链路层需按顺序向网络层上交帧
二、后退N帧的滑动窗口协议(Go back N)
当某帧出错时,该帧之后的帧全被丢弃,从出错帧开始重新发送。
- 如上图所示
- 在2号帧超时后,重新从2号帧开始依次发送帧。
三、选择性重传的滑动窗口协议(selective repeat)
当某帧出错时,只选择性地重发该帧,该帧之后发送的帧由接收方数据链路层缓冲,收到重发的出错帧后上交给网络层。
- 当接收方检测到出错帧时,发送一个否定的确认(NAK, Negative Acknowledgement)
- 当数据帧丢失时,则依靠计时器 + 累计确认的方式。
- 计时器:当某帧长时间未收到对应的确认帧时,则超时重发。
- 累计确认:ACKn表示n及n以前的帧均已被正确接收。
- 如上图所示:
- 2号帧错误或丢失,接收端发送NAK2,并缓存之后收到的帧;
- 发送端在接收到2号帧的否定确认NAK2时,选择重发2号帧;
- 若NAK2不幸也丢失,则2号帧会在发送完7号帧后,超时重发。
- 接收端在成功接收到2号帧后,将之前缓冲的3,4,5帧一并上交给网络层,并发送5号确认帧ACK5,即累计确认。
四、2009考研例题
- 题解:
- 累计确认表示n及n以前的帧均已被正确接收。
- 虽然发送方只收到0、2、3号确认帧,但实际上前3帧都已被正确接收,只是第1帧的确认帧ACK1在回复过程中出错或丢失。
- 因此是4号帧的计时器超时,只需从第4帧开始重发即可。
3.5 点对点协议 PPP
一、PPP协议的特点
- PPP (Point-to-Point Protocol):一种数据链路层协议,广泛应用于点到点链路的数据传输
- 用户计算机和ISP进行通信时所使用的的协议。
- PPP协议的组成
- 将IP数据报封装到串行链路的方法
- 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP(Link Control Protocol)
- 一套网络控制协议 NCP(Network Control Protocol),其中每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及AppleTalk等。
二、PPP协议的帧格式
1. 各字段的意义
- 标志字段 F:=0x7E (二进制:01111110),标志一个帧的开始
- 地址字段 A:置为 0xFF,实际上不起作用
- 控制字段 C:通常置为 0x03
- 协议字段:2字节,用于识别信息字段(又称为载荷,payload)的类型
- 0x0021:表明信息字段是IP数据报
- 0xC021:表明信息字段是 PPP 链路控制数据(LCP)
- 0x8021:表明信息字段是网络控制数据(NCP)
- 信息字段:长度可变,不超过1500字节
- 校验字段 FCS:2字节的CRC校验
- 标志字段 F:标志一个帧的结束
- 注意:
- PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
- 如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
- PPP的透明传输问题(帧边界识别) :
- 同步传输(如SONET/SDH):零比特填充
- 异步传输:字符填充
2. 字节填充
当PPP协议使用异步传输时,它把转义符定义为 0x7D(即 01111101),并使用字节填充,填充方法(使用软件实现)如下:
- 把信息字段中出现的每一个 0x7E 字节转变成2字节序列(0x7D, 0x5E)。
- 若信息字段中出现一个 0x7D 的字节(即出现了和转义字符一样的比特组合),则把 0x7D 转变成为2字节序列(0x7D, 0x5D)。
- 若信息字段中出现 ASCII 码的控制字符(即数值小于0x20的字符),则在该字符前面加入一个 0x7D 字节,同时改变该字符的编码。
- 例如,出现 0x03(控制字符中的“传输结束”ETX)就要把它转变为2字节序列(0x7D, 0x23)
3. 零比特填充
PPP协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
具体做法是(使用硬件实现):
- 在发送端,先扫描整个信息字段,只要发现有5个连续1,则立即填入一个0.
- 由于标志字段 F(即为01111110),因此经过填充后的数据,可以保证在信息字段不会出现6个连续1。
- 接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。
- 这样就保证了在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。
三、PPP协议的工作状态
- PPP链路的起始和终止状态永远是“链路静止”(Link Dead)状态,此时在用户个人电脑和ISP的路由器之间并不存在物理层的连接。
- 当用户个人电脑通过调制解调器(modem)拨号呼叫路由器时(通常是点击一个连接按钮),路由器就能够检测到调制解调器发出的载波信号。建立了物理连接之后,PPP就进入了“链路建立”(Link Establish)状态。
- 这时LCP开始协商一些配置选项,即发送LCP的配置请求帧。
- 这是一个PPP帧,其协议字段置为LCP对应的代码(0xC021),而信息字段包含特定的配置请求:
- 配置确认帧:所有选项都接受。
- 配置否认帧:所有选项都理解但不能接受。
- 配置拒绝帧:选项有的无法识别或不能接受,需要协商。
- 这是一个PPP帧,其协议字段置为LCP对应的代码(0xC021),而信息字段包含特定的配置请求:
- 协商结束后双方就建立了LCP链路,接着就进入了“鉴别”状态。若鉴别身份失败,则转到“链路终止”(Link Terminate)状态;若鉴别成功,则进入“网络层协议”状态。
- 在这一状态,只允许传送LCP协议的分组、鉴别协议的分组以及监测链路质量的分组。
- PPP支持两种身份认证协议:
- 若使用口令鉴别协议 PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。
- 如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议 CHAP(Challenge-Handshake Authentication Protocol)。
- 在“网络层协议”(Network-Layer Protocol)状态,PPP链路的两端的网络控制协议 NCP 根据网络层的不同协议互相交换网络层特定的网络控制分组。如果在PPP链路上运行的是 IP 协议,则对PPP链路的每一端配置 IP 协议模块(如分配IP地址)时就要使用 NCP 中支持的 IP 协议 ———— IP控制协议 IPCP。
- PPP协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信。
- IPCP 分组也封装成PPP帧(其中协议字段为 0x8021)在PPP链路上传送。
- 当网络层配置完毕后,链路就进入可进行数据通信的“链路打开”(Link Open)状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送回送请求 LCP 分组(Echo-Request)和回送回答 LCP分组(Echo-Reply),以检查链路的状态。
- 数据传输结束后,可以由链路的一端发送终止请求 LCP分组请求终止链路连接,在收到对方发来的终止确认 LCP分组,转到“链路终止”状态。
- 如果链路出现故障,也会从“链路打开”状态转到“链路终止”状态。
- 当调制解调器的载波停止后,则回到“链路静止”状态。
3.6 介质访问控制技术
一、局域网的数据链路层
局域网最主要的特点是:网络为一个单位所拥有的,且地理范围和站点数目均有限。
局域网具有如下一些主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变。
- 提高了系统的可靠性、可用性和生存性。
局域网可按网络拓扑分为星形网、环形网和总线网,如下图,各站直接连接在总线上。总线网以传统以太网最为著名,现在以太网几乎成为了局域网的代名词。
局域网需要解决的重要问题:介质访问控制技术(Media Access Control),即如何使众多用户能够合理而方便地共享通信媒体资源。这在技术上有两种方法:
- 静态划分信道:频分复用、时分复用、波分复用和码分复用等。用户只要分配到了信道就不会和其他用户发生冲突,但这种方法代价较高,不适合于局域网。
- 动态媒体接入控制,又称为多点接入(MULTIPLE ACCESS),其特点是信道并非在通信时固定分配给用户。这里又分为以下两类:
- 随机接入:用户可随机地发送信息,可能产生碰撞(即多个用户在同一时刻发送信息)。因此,必须有解决碰撞的网络协议。
- 典型协议:ALOHA、CSMA、CSMA/CD(有线网络)、CSMA/CA(WIFI) 等;
- 受控访问:用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探寻(polling),或称为轮询。
- 随机接入:用户可随机地发送信息,可能产生碰撞(即多个用户在同一时刻发送信息)。因此,必须有解决碰撞的网络协议。
由于受控接入目前使用的较少,以下重点讨论随机接入的以太网。
思考:为什么局域网采用广播通信方式而广域网不采用呢?
局域网的地理范围较小,且为一个单位所拥有的,采用广播通信方式十分简单方便,而广域网的地理范围很大,采用广播通信方式势必会造成极大的资源浪费,因此广域网不采用广播通信方式。
二、CSMA/CD 协议(重点)
CSMA/CD, Carrier Sense Multiple Access with Collision Detection,意思是载波监听多点访问/碰撞检测,是一种随机访问协议。CSMA/CD的几个核心概念:
- 载波监听(carrier sense)
- 结点在发送数据之前先检测一下总线上是否有其他结点正在发送数据,如有则暂时不要发送数据,以免发生碰撞,即 “发送前先听”;
- 碰撞检测(collision detection)
- 结点边发送数据边检测信道上是否发生了碰撞(监听总线上传输的信号),即 “边发送边听”;
- 由于线路的传播时延,单纯靠载波监听并不能完全避免碰撞,碰撞仍有可能发生
- 在发生碰撞时,两个或更多的信号在总线上相互叠加,导致无法识别
- 碰撞强化
- 发送方检测到碰撞后,立即停止发送,并发送32或48bit的人为干扰信号(jamming signal),以便让所有用户都知道已经发生了碰撞。
- 碰撞退避
- 碰撞后,结点等待一段时间,重新开始载波检测和发送操作;
- 为避免退避后再次碰撞,冲突各方的等待时间应各不相同;
- 以太网采用截断二进制指数退避算法 (truncated binary
exponential backoff)- 退避时间:T = 2τ×倍数(τ:端到端时延);
- 倍数:在0, 1, …, 2k-1中取随机数,k = min(重传次数, 10);
- 重传次数超过16后,丢弃该帧,并向上层报告;
显然,在使用 CSMA/CD 协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道)。因此使用 CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)。
- 实际情况举例:(见下图)
- 在 $t = 0$ 时,A发送数据。B检测到信道为空闲。
- 在 $t = τ - δ$ 时(这里 $τ > δ > 0$ ),A发送的数据还没有到达B,由于B检测到信道是空闲的,因此B发送数据。
- 经过时间 $δ/2$ 后,即在 $t = τ - δ/2$ 时,A发送的数据和B发送的数据发生了碰撞,但这时A和B都不知道发生了碰撞。
- 在 $t = τ$ 时,B检测到发生了碰撞,于是停止发送数据。
- 在 $t = 2τ - δ$ 时,A也检测到发生了碰撞,因而也停止发送数据。
- 结果,A和B发送数据均失败,它们都要推迟一段时间再重新发送。
从上图可以看出,A站在发送数据帧后至多经过时间 2τ(两倍的端-端时延) 就可知道是否发生了碰撞,因此以太网的端到端往返时延 2τ 称为争用期,又称碰撞窗口。如果经过争用期还没有检测到碰撞,就可以肯定这次发送不会发生碰撞
- 以太网的争用期
- 以太网的争用期长度:51.2 us
- 对于 10 Mb/s 以太网,在争用期内可发送 512 bit,即 64 字节
- 在发送数据时,若前 64 字节未发生碰撞,就不会发生碰撞 (因为在此之后总线将被发送端占据,其他主机必须等待直到总线资源被释放)
- 凡长度小于 64 字节的帧都是由于冲突而异常终止的无效帧,收到这种无效帧时应立即丢弃。
考研例题
解:
由于争用期的长短决定了数据帧的最小长度。因此,最小数据帧长度减少,意味着争用期也将相应地缩短。又因为信号的传播速度是固定的,所以距离也将减少,至少为800bit的发送时间 x 信号传播速度 / 2(因为是往返距离),而800bit的发送时间 = 800bit / 传输速率 1Gbps,因此实际上是不需要计算单向传输时延 $τ$ 的。
CSMA/CD协议的优缺点讨论
- 网络负载较轻时效率高
- 硬软件实现简单、灵活
- 网络负载较重时,碰撞发生概率增大,网络效率较低
- 由于存在多次冲突的可能,数据从发送方到达接收方的时间没有保证,即实时性较差
三、局域网技术标准
- IEEE802标准将局域网的数据链路层分为两个子层
- LLC(Logic Link Control) 逻辑链路控制子层
- MAC(Media Access Control) 介质访问控制子层(媒体接入控制子层)
- IEEE802系列局域网标准
- IEEE 802.1a 综述与体系结构
- IEEE 802.1b 寻址、互联、管理
- IEEE 802.2 逻辑链路控制(LLC)
- IEEE 802.3 CSMA/CD介质访问控制(MAC)与物理层技术规范
- IEEE 802.3u 快速以太网(Fast Ethernet)
- IEEE 802.3z 千兆以太网(Gigabit Ethernet)
- IEEE 802.4 Token Bus介质访问控制与物理层技术规范
- IEEE 802.5 Token Ring介质访问控制与物理层技术规范
- IEEE 802.11 无线局域网介质访问控制与物理层技术规范
- 注意:
- 令牌环网(token ring)和令牌总线网(token bus)使用一种称为令牌(token)的控制标志,当网络中结点持有该令牌时,才能够发送数据。(类似新闻发布会时,只有拿到话筒的记者才能够提问。)
- 这样的好处是没有碰撞/冲突,但对于令牌的维护对硬件的需求大大增加。
- 802.3规定了总线结构的以太网,802.4定义了总线结构的令牌总线网,802.5定义了令牌环网,90年代开始,802.3逐渐取代802.4和802.5,总线结构的以太网占据有线局域网的主导地位。
- 令牌环网(token ring)和令牌总线网(token bus)使用一种称为令牌(token)的控制标志,当网络中结点持有该令牌时,才能够发送数据。(类似新闻发布会时,只有拿到话筒的记者才能够提问。)
思考:为什么局域网的数据链路层要分为LLC和MAC两个部分
因为 802.3(局域网)是共享介质的,而广域网是专用的(通常是点对点的)不存在介质冲突的问题。
3.7 以太网
一、以太网的物理层
- 最初的以太网为总线结构,采用50Ω同轴电缆,传输速率10Mbps。
- 缺点:总线上单点故障会导致全网瘫痪,网络中结点数较多时可靠性较差且维护困难;同轴电缆成本较高。
- 后发展为采用更便宜和灵活的非屏蔽双绞线,使用集线器(HUB)连接各个结点,物理上呈星形结构。
- 此种技术称为10Base-T
- 10:10Mbps
- Base:基带传输
- T:双绞线(Twisted pair)
- 此种技术称为10Base-T
- 集线器的特点:
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议。
- 集线器很像一个多接口的转发器。
- 集线器工作在物理层。它的每个接口仅仅简单地转发比特,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。
- 集线器采用了专门的芯片,进行自适应串音回波抵消。这样可使接口转发出去的较强信号不至于对该接口接收到的较弱信号产生干扰(这种干扰即近端串音)。
- 采用曼彻斯特(Manchester)编码
- 用电平的跳变表示0或1,即每个码元都有电平跳变。
二、以太网的MAC层
MAC地址
- 在局域网中,硬件地址又称物理地址或 MAC 地址(因为这种地址用在 MAC 帧中)。
- 结点发送数据时,以太网总线结构,总线上的所有结点都能收到帧。
- 按照IEEE802.3标准,给每个结点分配唯一的MAC地址。
- MAC地址为48 bit,高24bit为厂商标识符,低24位由厂商自行分配,须保证每个网络接口具有全球唯一的MAC地址
- 适配器具有过滤功能。适配器每收到一个帧就先用硬件检查 MAC 帧中的目的地址,如果是发往本站的帧则进行处理,否则丢弃。这里“发往本站的帧”包括以下三种帧:
- 单播(unicast)帧(一对一),即受到的帧的MAC地址与办展的硬件地址相同。
- 广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。
- 组播/多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。
MAC帧的格式
常用的以太网MAC帧格式有两种标准,一种是 DIX Ethernet V2标准(即以太网V2标准),另一种是 IEEE 的 802.3 标准。这里只介绍使用得最多的以太网V2标注你的帧格式。
- 以太网V2的MAC帧由五个字段组成。
- 目的地址、源地址:各6字节的MAC地址。
- 类型类型:2字节,标明上层协议类型。
- 例:当类型字段的值是 0x0800 时,就表示上层使用的是 IP数据报;若类型字段的值为 0x8137 ,则表示该帧是由 Novell IPX 发过来的。
- 数据字段:网络层数据报,长度46 ~ 1500字节之间。
- 46字节是这样得出的:以太网帧最小长度为64字节,64减去14字节的头部和4字节的尾部就得出数据字段的最小长度(64 - 18 = 46)。
- 帧检测序列FCS:4字节,采用CRC校验。
- 注意
- 当数据字段的长度小于46字节时,MAC子层会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64字节。
- 由于MAC帧的数据自担在 46
1500字节之间,因此有效的MAC帧长度为 641518字节之间。
- 从上图可看出,在传输媒体上实际传送的要比MAC帧还多8个字节。这是因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,结果使整个MAC称为无用的帧。
- 为了接收端迅速实现位同步,从MAC子层向下传导物理层时还要在帧的前面插入8字节(由硬件生成),它由两个字段构成。
- 第一个字段是7个字节的前同步码(1和0交替码),它的作用是使接收端的适配器在接收MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,即实现位同步。
- 第二字段是帧开始定界符,定义为 10101011。
- MAC帧的FCS字段的检验范围不包括前同步码和帧开始定界符。
思考
- 在以太网V2的MAC帧格式中,其首部并没有一个帧长度(或数据长度)字段。那么,MAC子层是怎样知道从接收到的以太网帧中取出多少字节的数据交付给上一层协议呢?
- 由于以太网采用曼彻斯特编码,而在曼彻斯特编码的每一个码元(不管码元是1还是0)的正中间一定有一次电压的转换(从高到低或从低到高)。
- 当发送方把一个以太网帧发送完毕后,就不再发送其他码元了。因此,发送方网络适配器的接口上的电压也就不再变化了。
- 这样,接收方就可以很容易的找到以太网帧的结束为止。在这个位置往前数4字节(FCS字段长度为4字节),就能确定数据字段的结束位置。
- 在有填充字段的情况下,接收端的MAC子层在剥去首部和尾部后会把数据字段和填充字段一起交给上层协议。那么上层协议如何知道填充字段的长度呢?(IP层应当丢弃没有用处的填充字段。)
- 当上层使用IP协议时,其首部就有一个“总长度”字段(发送方在从上向下传输时,会在Header中加入该信息),因此,“总长度”加上填充字段的长度,应当等于MAC帧数据字段的长度。
- 例如:当IP数据报的总长度为42字节时,填充字段有4字节。当MAC把46字节的数据上交给IP层后,IP层就把其中最后4字节的填充字段丢弃。
- 不同于PPP帧,MAC帧中并没有帧结束定界符,也没有采用字节填充,那么如何保证透明传输?
- 在以太网上传送数据时是以帧为单位传送的。以太网在传送帧时,各帧之间还必须有一定的间隙。因此,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个MAC帧。
三、高速以太网
- 快速以太网(Fast Ethernet)
- IEEE802.3u标准
- 传输速率100Mb/s
- 仍使用 IEEE 802.3 CSMA/CD 协议(全双工模式时不用) – MAC 帧格式仍然是 802.3 标准规定的
- 最短帧长不变,但将一个网段的最大电缆长度减小到100m
- 线缆标准
- 100BASE-TX:使用2 对UTP 5 类线或屏蔽双绞线 STP
- 100BASE-FX:使用1对光纤
- 100BASE-T4:使用4对 UTP3类线或5类线
- 千兆以太网(Gigabit Ethernet)
- IEEE802.3z标准
- 传输速率1Gb/s
- 仍使用 IEEE 802.3 CSMA/CD 协议(全双工模式时不用)
- 线缆标准
- 1000BASE-X:基于光纤
- 1000BASE-SX SX表示短波长
- 1000BASE-LX LX表示长波长
- 1000BASE-CX CX表示铜线
- 1000BASE-T:使用 4对5类双绞线UTP
- 1000BASE-X:基于光纤
- 万兆以太网(10Gbps以太网)
- IEEE802.3ae标准
- 传输速率10Gb/s
- 帧格式不变
- 只使用光纤
- 只工作在全双工模式,不存在争用,因此不用CSMA/CD
- 更高速的以太网
- IEEE802.3ba: 40GE,传输速率40Gb/s
- IEEE802.3bm: 100GE,传输速率100Gb/s
3.8 局域网互连
一、在物理层扩展局域网
- 以太网的主机之间的距离不能太远(例如,10BASE-T以太网的两台主机之间的距离不超过200米),否则主机发送的信号经过铜线的传输就会衰减到使 CSMA/CD 协议无法正常工作。
- 在过去广泛使用粗缆或细缆以太网时,常使用工作在物理层的转发器来扩展以太网的地理覆盖范围。
- 现在,扩展主机和集线器之间的距离的一种简单方法是使用光纤和一对光纤调制解调器。进而形成多级星形结构的集线器以太网,见下图:
- 优点
- 可以方便地实现网络的扩展,且成本较低
- 缺点
- 碰撞域(又称冲突域,即在任意时刻,在每一个碰撞域中只能有一个站在发送数据)增大,碰撞发生概率增大,可能影响网络性能。
- 如上图,在三个系的以太网连起来之前,每个系的 10BASE-T 以太网是一个独立的碰撞域。若每个系的最大吞吐量是 10 Mbit/s,因此三个系总的最大吞吐量共有 30 Mbit/s。但在三个系的以太网通过集线器连接起来后,则共享一个碰撞域,最大吞吐量仍为 10Mbit/s。
二、在数据链路层扩展局域网
1. 网桥
- 扩展以太网更常用的方法是在数据链路层进行,最初人们使用的是网桥(bridge)。
- 网桥的基本工作原理:
- 根据 MAC 帧的目的地址对收到的帧进行转发和过滤。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是根据此帧的目的MAC地址,查找网桥中的地址表,然后确定将该帧转发到哪一个接口,或是丢弃(即过滤)。
- 用网桥实现局域网互连的优点
- 过滤通信量、增大吞吐量
- 各网段是独立的碰撞域
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层、不同 MAC 子层和不同速率的局域网
- 过滤通信量、增大吞吐量
- 用网桥实现局域网互连的局限性
- 存储转发增加了时延
- 在MAC 子层并没有流量控制功能
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网
- 广播风暴:因某些站点频繁发送广播帧产生网络拥塞。
2. 交换机(多接口网桥)
- 交换机(switch)早期称为交换式集线器(switching HUB),工作原理及特点为:
- 实质上就是一个多接口的网桥。
- 每个接口都直接与一个单台主机或另一个交换机相连,并且一般都工作在全双工方式。
- 具有并行性,即能同时连通多对接口,使多对主机能同时通信(而网桥只能一次分析和转发一个帧)。相互通信的主机都是独占传输媒体,无碰撞地传输数据。
- 与集线器相比:
- 交换机工作在数据链路层,每个接口为一个网段(碰撞域),可以大幅
提高网络性能
- 集线器由所有接口共享传输介质的带宽,而交换机为每个接口独享带宽。
3. 交换机的自学习过程
- 原理:
- 若从 A 发出的帧从接口 x 进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到 A。
- 过程:
- 初始时转发表为空,通过自学习逐步建立
- 交换机收到一个帧后的处理过程
- 首先进行自学习,检查帧中源地址在交换表中是否存在,如不存在,则在交换表添加一项,记下源地址和进入交换机的接口。
- 然后转发帧,根据收到的帧中的目的地址在交换表中查找。
- 如果找到,则对应的接口即为转发接口。
- 如果未找到,则向除进入接口外的所有其他接口转发(即广播)。
- 举例:
- 如下图,一开始,交换表为空。
- A通过接口1向B发送一帧。交换机接收到帧后,首先进行自学习,将(A,1)写入表中。再查交换表,没有查到,因此向除1以外的所有接口广播这个帧。
- C和D将丢弃这个帧,因为目的地址不对。只有B才收下这个目的地之正确的帧。这也称为过滤。
- 接下来B通过接口3向A发送一帧。首先进行自学习,写入(B,3)。查交换表,找到(A,1),因此从接口1转发给A。
- 经过一段时间后,只要主机C和D也向其他主机发送帧,交换表就会把转发到C货D应当经过的接口号(2或4)写入到交换表中。这样,交换表即学习完毕。
- 问题:
- 在下图中,假定一开始主机A通过交换机#1向B发送一帧。交换机#1收到这个帧后向其他所有接口广播。观察其中一个帧的走向:离开交换机#1的接口3 → 交换机#2的接口1 → 接口2 → 交换机#1 的接口4 → 接口3 → 交换机#2的接口1 → ……。这样就无限制地循环兜圈子下去,白白浪费网络资源。
- 解决:IEEE 的 802.1D 标准制定了一个生成树协议 STP:
- 互连在一起的网桥彼此通信后,能找出网络拓扑的一个子集。在该子集中, 整个连通的网络中不存在回路,即在任何两个站之间只有一条路径。
- 考虑到网络拓扑动态变化,生成树需定期更新。
3. 从总线以太网到星形以太网
- 总线以太网使用 CSMA/CD 协议,以半双工方式工作。
- 以太网交换机不使用共享总线,没有碰撞问题,因此不使用 CSMA/CD 协议,而是以全双工方式工作。
- 但由于仍然采用以太网的帧结构,故仍然叫做以太网。
三、虚拟局域网(VLAN)
- VLAN(Virtual LAN),在现有局域网基础上,通过将网络站点分组,构成若干与物理位置无关而逻辑上独立的虚拟局域网,这些网段有某些共同的需求。
- 每个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个 VLAN。
- 注意:
- 帧不会在两个VLAN之间自动转发,包括广播帧
- VLAN的用途:便于管理、控制广播风暴、安全性、…
- 下图是使用了四个交换机的网络拓扑:
- 10台计算机分配在三个楼层中,构成了三个局域网,即 LAN1:(A1, A2, B1, C1), LAN2:(A3, B2, C2), LAN3(A4, B3, C3)。
- 同时也划分为三个虚拟局域网 VLAN,即 VLAN1:(A1, A2, A3, A4), VLAN2:(B1, B2, B3), VLAN3:(C1, C2, C3)。