1. 数据链路层的基本概念
数据链路层讨论的是在同一个局域网中,分组怎样从一台主机传送到另外一台主机,这个过程中不会涉及到中间路由器。
数据链路层的作用:数据链路层在物理层提供服务的基础
上向网络层提供服务
,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的网络层
。其主要作用是加强物理层传输原始比特流的功能
,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路
,使之对网络层表现为一条无差错的链路。
- 结点:主机或者路由器
- 链路:网络中从一节点到相邻节点的
物理通道
,链路的传输介质主要有双绞线、光纤和微波。分为有线链路和无线链路。一条无源的点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个部分。 - 数据链路:网络中两个结点之间的
逻辑通道
,把实现控制数据传输协议的硬件和软件加到链路上就构成了数据链路
- 帧:链路层的协议数据单元,封装网络层数据报
数据链路层中所说的帧和物理层中所说的帧有什么区别?
在物理层中,我们在时分复用和统计时分复用的时候通常会说
TDM帧
和STDM帧
,在这个情景下,指的是在物理层传送比特的时候所划分的帧。而在数据链路层中则是数据链路层的PDU,用来对网络层下发下来的IP数据报进行封装
数据链路层:负责通过一条链路
从一个结点
向另一个物理链路
直接相连的相邻结点
传输数据报。它把网络层交下来的数据封装成帧发送到链路上,以及把接收到的帧中的数据取出来并且上交到网络层。
在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报或者包)
。数据链路层封装的帧,在物理层编程数字信号链路上传输。
数据链路层的信道类型
- 点对点通信:使用一对一的点对点的通信方式
- 广播信道:使用
一对多
的广播通信方式,必须使用专用的共享信道协议
来协调这些主机的数据发送
2. 数据链路层的三个基本功能
2.1 封装成帧
封装成帧:就是将在网络层
的IP数据报的前后分别添加其首部
和尾部
,这样就构成了一个帧
- 不同的数据链路层协议的帧的首部和尾部包含的信息有明确的规则,帧的首部和尾部有帧开始符合帧结束符。这些符号称为帧定界符。发送帧的时候是从帧的首部开始发送的
- 接收端收到物理层传过来的比特流后,就可以根据首部和尾部的标记,从收到的比特流中识别到帧的开始和结束
- 一个帧的帧长等于帧的数据部分长度加上帧首部和尾部的长度
- 在数据传输中出现差错的时候,帧定界符的作用就会更加明显
假设发送端在尚未发送完一个帧的时候突然出了故障,中断了发送,但随后很快恢复了正常,于是重新从头开始发送刚才没有发送完的帧,由于使用了帧定界符,接收端就知道前面接收到的数据是一个不完整的帧
(只有首部开始符SOH而没有传输结束符EOT),
这时候必须丢弃掉这个帧,而后面接收的数据有明确的帧定界符SOH和EOT
,所以是一个完整的帧
- 每一种数据链路层协议都规定了所能传送的帧的数据部分长度的上限
- 也就是最大传输单元
MTU(Maximum Transfer Unit)
,以太网的MTU是1500个字节
2.2 透明传输
由于帧的开始和结束的标记使用专门指明的控制字符,因此所传输的数据中的任何8bit的组合一定是不允许和用作帧定界的控制字符的比特编码一样
**透明传输 **:表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层,因此,对于所传送的数据来说,这些数据就看不见
数据链路层存在有什么因素是影响数据传输的。
- 透明:某一个实际存在的事物看起来却好像不存在一样,
帧开始符和帧结束符最好是不会出现在帧的数据部分的字符。
通常我们电脑键盘能够输入的字符是ASCII
代码表中打印的字符,在ASCII
字符代码表中,还有非打印控制字符,在非打印控制字符中有两个字符专门用来做帧定界符,代码SOH(start Of Header)
作为帧开始定界符,对应的二进制编码为0000 0001
,代码EOT(End Of Transmission)
作为帧结束定界符
如下图所示,当数据部分是非ASCII字符代码表的文本文件的时候(比如二进制代码的计算机程序或者图像),情况就不同了。如果数据中的某一段二进制代码正好和SOH或者EOT帧定界符编码一样,接收端就会误认为这就是帧的边界。
为了解决透明传输的问题,就必须设法使得数据中可能出现的控制字符SOH
和EOT
在接收端不被解释为控制字符。
一般来说,有两种方法,字节填充或者字符填充
具体的解决办法是:在SOH
或者EOT
的前面插入一个转义字符ESC
,而在接收端的数据链路层将数据上交到网络层之前,将这个转义字符从数据流中删除,如果传输的数据也出现了这样的转义字符,那么解决办法就是在这个数据之前也加上一个转义字符,当接收端收到连续的两个转义字符的时候就会删除其中的一个
注意:字节填充这个事情是数据链路层做的
2.3 差错检验
现实中的通信链路都不会是理想的,这就是说,比特在传输过程可能会产生差错。
比如说1可能变成0,0也有可能变成1,这种差错叫做
比特差错
传输错误的比特占所传输比特总数的比率叫做
误码率(Bit Error Rate)
误码率与信噪比有很大的关系,如果设法提高信噪比,就可以使得误码率降低,但是不可能降低为0
为了保证数据传输的可靠性,在计算机网络传输数据的时候,必须采用各种差错检测措施,目前在数据链路层广泛使用了循环冗余检验CRC
的差错检验技术
要想让接收端能够判断帧在传输过程是否出现差错,这就需要在传输帧中包含用于检测错误的信息,这部分信息就被称为帧校验序列FCS
,注意,FCS检验的是数据报和帧首部的数据是否有差错。
- 除数:只要发送端和接收端都使用一个除数即可,可以自行选择
- 同时要注意,数据报补全数据的选择是,在后边加上(除数的位数-1)位的零
流程简述:首先发送端在原始数据后面加上n
位的冗余码发送给接收端,接收端拿到这个数据之后,直接拿这个数据去处于那个他们双方约定好的除数,其中比较关键的就是这n位的冗余码,这冗余码是通过接收方的数据去除于他们规定的除数得到的余数。
如果得出来的余数=0,那么就判断这个帧没有差错,就接收
如果余数不等于0,那么这个帧就出现了差错。
如果在数据链路层上要进行差错检验,那么就必须把数据划分为帧,每一帧都加上一个冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。
如果仅仅采用的是循环冗余检验技术,那么就只能做到无差错的接受
,也就是说对于有差错的帧是是只能够被丢弃的,在这种情况下,凡是接收端数据链路层接受的帧都没有差错
一类差错是最基本的比特差错,但是还有一类差错就会更复杂一些,也就是说帧中的数据是正确的,能够通过检验但是:
帧丢失
:收到[#1]、[#3],丢失掉了[#2]帧重复
:收到[#1]、[#2]、[#2]、[#3]帧失序
:收到序列为[#1]、#[3]、#[2]
以上三种情况都是属于出现传输差错的
3. 点到点信道数据链路层
点到点信道是指一条链路上就一个发送端和接收端的信道,通常用在广域网的链路
3.1 PPP协议的特点(Point-to-Point Protocol点对点协议)
仅支持全双工链路
简单:不提供可靠传输,有错误则直接丢失而不是纠正
封装成帧:封装帧的首部和帧尾部,关键是帧开始符和帧结束符
透明传输:如果传输的数据里面有帧定界符,则会在传输的时候进行转移,在接收后取出
差错检测:CRC计算FCS
支持多种网络层协议:在同一条物理链路上支持IP或者IPX等网络层协议,如果点对点链路上所连接的是局域网或者路由器的时候,PPP协议必须支持所在链路所连接的局域网或者路由器上运行的各种网络层协议
多种类型链路(物理意义):光纤、铜线、同步、异步、串行、并行
检测链接状态:自动检测链路是否处于正常工作的状态
最大传送单元:设置MTU的标准值,默认的值是1500Byte,值得注意的是MTU指的是帧的数据部分的最大长度,一旦超过这个长度就必须丢弃这样的帧并且返回差错。
网络层地址协商:提供一种机制使得通信的两个网络层的实体能够通过协商知道或者能够配置彼此的网络地址。
数据压缩协商:协商使用数据压缩算法
关于PPP协议不需要的功能
- 不需要纠错,只需要检查
- 不需要流量控制
- 不需要序号机制
- 不需要多点线路
(只需要点对点的功能)
- 不需要考虑半双工或者单工链路
3.2 PPP协议的组成
在广域网中通常使用串行,短距离使用并行
PPP协议的组成部分
- 将
IP数据报
封装到串行链路的方法,PPP支持异步链路(无奇偶校验的8比特数据)
,也支持面向比特的同步链路,IP
数据报在PPP帧
中是信息部分,这个信息部分的长度受MTU
的限制 - 一个用来建立、配置和测试数据链路连接的链路控制协议
LCP(Link Control Protocol)
,通信的双方可以协商一些选项 - 一套网络控制协议
NCP(Network Control Protocol)
:其中的每一个协议支持不同的网络层协议,如IP
、OSI的网络层
、DECnet
和AppleTalk
3.3 PPP协议帧的格式
首部:4个字段
- 标志字段F:表示帧的开始,标志字段就PPP帧的定界符,连续两帧之间只需要用一个标志字段,如果出现了两个连续的标志字段,那么就证明这个帧是空帧,应该被丢弃x
- 地址字段A:0xFF实际上不起作用
- 控制字段C:通常设置为0x03
- 协议字段
- 当协议字段为0x0021的时候,信息字段存储的就是IP数据报
- 当协议字段为0xC021的时候,信息字段就是PPP链路控制协议
LCP
的数据 - 当协议字段为0x8021的时候,表示这是网络层的控制数据
尾部:两个字段
- FCS:CRC帧检验序列
- F:标志字段,用来标志帧的结束
3.4 同步传输和异步传输(透明传输)(了解)
同步(synchronous Transmission)传输:以比特为单位传输数据(但是是连续的比特),可以采用字符形式或者位组合的形式帧同步信号。在短距离的高速传输中,该时钟信号可以由专门的时钟线路来传输,由发送端或者接收端提供专用于同步的时钟信号。计算机网络采用同步传输方式时,常将时钟同步信号(前同步码)
植入数据帧中,以实现接收端和发送端的时钟同步。以比特为单位进行传输
实际上读取同步码的过程就是一个获取码元边界的过程,避免读取的码元不完整。
异步(Asynchronous Transmission)传输:传输的是字符,发送端和接收端具有独立的时钟(频率不能够差太多),并且两者中任一方都不向对象提供时钟同步信号,以字节为单位进行传输
- 异步传输使用字节填充
当PPP使用异步传输的时候,数据传输以字节为单位,PPP帧的转义符定义为0X7D
,使用字节填充,如图
执行流程如下
- 把信息字段中出现的每一个
0x7E
转变为两字节序列(0x7D,0x7E)
- 如果信息字段中出现了
0x7E
的字节,那么就把0x7D
转变成(0x7D,0x5D)
- 如果信息字段中出现了一个
ASCII
码的控制字符,也就是说是数值小于0x20
的字符,那么就在该字符的前面加入一个0x7D
,同时把这根字符的编码加以改变,比如说出现了0x03
,在规定的A(控制字段)
是传输结束的意思,就要把它转变为2字节序列的(0x7D,0x23)
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,但是在接收端接收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息
- 同步传输使用0比特填充
在同步传输的链路上,一连串的比特连续传送而不是异步传输,PPP协议使用零比特填的方法来实现透明传输。大家把PPP协议定界符0x7E
写成二进制的0111 1110
,可以看到中间有连续的6个1,只要想办法在数据部分不要出现连续的6个1,就肯定不会出现这种界定符,具体的办法就是0比特填充。
零比特填充的执行流程:
在发送端,先扫描整个信息字段
,只要发现有5个连续的1,那么就会立即填入一个0。
在接收端,先找到标志字段F
以确定一个帧的边界,接着用硬件对其中的比特流进行扫描,每当发现5个连续的1的时候,就把这5个连续1后的一个0删除,注意,扫描的应该也只是扫描的是信息字段而非全部,因为发送端只在信息字段做了处理,这样就可以还原成原来的信息比特流了。
3.5 PPP协议的工作状态
PPP链路初始化状态:
用户拨号接入ISP
后,就建立了一条从用户个人电脑到ISP
的物理连接
用户个人电脑向ISP
发送一系列的链路控制协议LCP分组,封装成多个PPP帧,以便建立LCP连接
之后进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配一个临时的IP地址
当用户通信完毕后,NCP释放网络层连接,收回原来分配出去的地址。LCP释放数据链路层的连接,最后释放物理层连接
PPP链路的起始和终止状态永远都是链路静止状态,这时候在用户个人电脑和ISP路由器之间并不存在物理层的连接
当用户个人电脑通过调制解调器呼叫路由器的时候,路由器就能够检测到调制解调器发出的载波信号,在双方建立了物理层连接之后,PPP
就进入了链路建立(Link Establish)的状态,其目的是建立链路层的LCP
连接
这时候LCP
开始协商一些配置选择,也就是发送LCP
的配置请求帧Configure-Request
。这是一个PPP帧
,其协议字段字段设置为LCP
对应的代码,而信息字段包含特定的配置请求,链路的另一端
可以发送以下几种响应中的一种
配置确认帧(Configure-Ack)
:所有的选项都接受配置否认帧(Configure-Nak)
:所有选项都理解但是不能接受配置拒绝帧(Configure-Reject)
:选项有的无法识别或者不能接受,需要协商
LCP配置选项包括连链路上的最大帧长,所使用的
鉴别协议
,以及不使用PPP
帧中的地址和控制字段(这两个字段的值是固定的,没有任何的信息量,可以在PPP帧的首部省略这两个字节)
协商结束后就建立了LCP链路
(这里始终要记得LCP是PPP的组成部分之一,是用来协商链路的连接等相关事项的一个协议),然后就进入了鉴别(Authenticate)状态
在这个状态下,只允许传送LCP协议的分组
、鉴别协议的分组
以及监测链路质量的分组
如果使用口令鉴别协议PAP(Password Authentication Protocol)
,那么就需要发起通信的一方发送身份标识符和口令,系统允许用户重试若干次,还可以使用口令握手鉴别协议CHAP
,如果鉴别身份失败了,那么就应该转到链路终止(Link Terminate)
的状态,如果鉴别成功,那么进入到了网络层协议(Network-Layer Protocol)
理解:LCP链路是为了更好的进行后面的帧的传输,在初始过程中需要规定好帧是怎么传的,在做好这个工作的基础上,才能进行后面的权限认证等工作,因为这些工作也都需要基于链路完好的基础上进行,否则无从谈起
进入到网络层协议
状态的时候,PPP链路两端的网络控制协议NCP
根据网络层的不同协议互相交换网络层特定的网络控制分组。PPP协议两端的网络层可以运行不同的网络层协议,但是仍然可以使用同一个PPP
协议进行通信
这个怎么理解呢,就是说两个节点内部的网络层,运行的网络层协议可以是不同的,但是双方交换信息的链路,要采用同一个
NCP
协议进行通信
如果在PPP
链路上运行的是IP
协议,那么对于PPP
链路的每一端配置IP
协议模块时就要使用NCP
中支持IP
的协议–IP控制协议(IP Control Protocol)
,IPCP
分组也封装为PPP
帧在PPP
链路上进行传送。
当网络层配置完毕之后,链路就进入到了可进行数据通信的链路打开(Link Open)
状态,链路的两个PPP
端点可以彼此向对方发送分组,两个PPP
端点还可以发送回送请求LCP分组(Echo-Request)
和回送回答LCP分组(Echo-Replay)
以检查链路的状态
数据传输结束后,可以由链路的一段发出终止请求LCP分组(Terminate-Request)
请求终止链路的连接,在收到对方发来的终止确认LCP分组(Terminate-Ack)
之后,就会转到链路中放置的状态
,当调制解调器的载波停止之后,就会回到链路静止
的状态
4. 广播信道的数据链路层
4.1 局域网结构及其特点
局域网的特点:网络是一个单位所拥有的,而且地理范围和站点数目都是有限的
- 具有广播功能,从一个站点可以很方便地访问全网
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和生存性
关于局域网的分类
局域网可以按照网络拓扑结构进行分类,如下图所示
- 星形网:由于
集线器(hub)
的出现和双绞线
大量应用于局域网中。 - 环形网
- 总线网:各站点直接连接在总线上,总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射
目前为止,以太网已经成为了局域网的同义词。
4.2 共享信道技术
静态划分信道技术
- 如使用频分复用、码分复用、时分复用、波分腹痛
用户只要分配到了信道就不会和其他用户发生冲突,但是这种划分信道的方法代价很高,不适用于局域网
动态媒体接入控制
又叫做多点接入(multiple access)
,特点是信道并不是在用户通信时的固定分配给用户的,可以分成两类
- 随机接入:随机接入技术的特点是所有的用户可以随机地发送信息,但是如果恰巧有两个或者更多的用户在同一时刻发送信息,那么在共享的媒体上就会产生碰撞,也就是发生
冲突
,使得这些用户的发送都失败,在这个假设下,必须设计出关于解决碰撞的可用的网络协议 - 受控接入:受控接入的特点是用户不能随机地发送信息而必须服从一定的控制,这类典型代表有分散控制的令牌环局域网和集中控制的多点线路探询或者称为轮询
适配器的作用
硬件地址是存在适配器的ROM
中的,而IP地址则是存储在计算机的存储器之中的。
4.3 带冲突检测的载波侦听多路访问技术(CSMA/CD)
总线的特点:当一台计算机发送数据的时候,总线上的所有计算机都能检测到这个数据,这种就是广播通信的方式。
为了在总线上实现一对一的通信,可以使得每一台计算机的适配器都拥有一个与其他适配器都不同的地址,为了在总线上实现一对一的通信,可以使得每一台计算机的适配器都拥有一个与其他适配器都不同的地址。在发送数据帧的时候,在帧的首部写明接收站的地址,仅当数据帧中的目的地址与适配器ROM
中存放的硬件地址一致的时候,这个适配器才能接收这个数据帧,如果这个数据帧不是发送给自己的就丢弃。
为了通信的简便,以太网采取了下面的措施
- 采用了较为灵活的
无连接
的工作方式,不需要先建立连接就可以直接发数据,适配器对发送的数据帧不进行编号,也不要求对方进行回应,以太网提供的服务是尽最大努力进行交付的,也就是不可靠的交付,然而对差错帧是否需要重传那么需要高层进行决策,如果需要重传,传输层->网络层交付下来的数据重新传递给以太网进行重传,然而以太网对于这个帧是当做新的数据帧来发送的 - 在同一时间只能允许一台计算机发送数据,使用载波监听多点接入/碰撞检测的协议(CSMA/CD)
- 以太网发送的数据都是使用曼彻斯特编码的信号
CSMA/CD
协议的要点
- 多点接入:说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上,协议的本质是
载波监听
和碰撞检测
- 载波监听:这里书上说其实载波的翻译是不对的,翻译成媒体或者载体应该更加合适一些,因为其本质是
不管在想要发送数据之前,还是在发送数据之中,每个站点都必须不停地检测信道
,因此侦听的对象是传输信号的载体
,这样理解起来比较通畅。 - 碰撞检测:是适配器边发送数据边检测信道上的信号电压的变化情况,当两个或者几个站同时在总线上发送数据的时候,总线上的信号电压的变化幅度将会增大,当超过一定的门限之后,就认为总线上至少有两个站在同时发送数据。一旦发生碰撞,那么适配器就要立即停止发送数据,避免无效的数据发送使得网络资源被浪费。
既然每一个站在发送数据之前已经监听到信道为空闲,那么为什么还会出现数据在总线上发生碰撞呢?
这是因为电磁波在总线上总是以有限的速率进行传播的,因此即使两个站点在发送数据之前发现信道是空闲的,但是电磁波在信道上进行传输也是需要时间的,如果数据没有完全被接收方所接收,而这时候电磁波相遇了,这时候的数据也产生失真,也是无效的。
电磁波在1km电缆的传播时延约为5us
使用CSMA/CD
协议的网络就是以太网。点到点链路就不用冲突检测,因此不需要使用CSMA/CD,与之对应的,每个设备都需要有MAC
以太网的标准:以太网是一种计算机局域网技术。它给出了以太网介质访问控制协议(CSMA/CD)
以及物理层技术规范
总线型网络使用CSMA/CD
协议进行通信,即带冲突检测的载波侦听多路访问技术
- 即便检测出总线上没有信号,开始发送数据后也有可能和迎面而来的信号在链路上发生碰撞
- 显然地,一个站点不可能同时进行发送和接收,但是必须边发送边监听信道,使用
CSMA/CD
协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)
关于CSMA/CD中的一些重要时刻的解读
在局域网的分析中通常把总线上的单程端到端的传播时延叫做τ
如果A发送数据后,最迟要经过多长的时间才能知道自己发送的数据是否和其他站发送的数据有没有发生碰撞?这个时间最多是两倍的总线端到端的传播时延
(2τ)
为什么是
2τ
?我们假设一下,如果电磁波从总线的最左端出发,在中间某点就发生了碰撞,那么从发送数据到发生碰撞所经历的时间是不是肯定小于τ?然后这个碰撞的信号传回去的时间是不是肯定小于τ
那么如果在中间发生碰撞,A从发送数据到检测到发生碰撞所用的时间肯定是小于2τ
的。极端的,我们假设要从最左边发送数据到最右边,然后当最左边刚到达最右边的时候,最右边的节点突然发送数据,这时候肯定会发生碰撞,然后这个时候要把碰撞的信息传回去给最左端,这时候所用的时间近似于
2τ
因此,最多的时长肯定是2τ
,因为这个考虑了一种最为极端的远程传输数据的情况。下面给出了一个比较严谨的数学证明方式
当t=0
的时候,A发送数据,B检测到信道为空闲
当t=τ-δ(τ>δ>0)
的时候,A发送的数据还没有到达B的时候,由于B检测到信道是空闲的,因此B发送数据
当当经过了δ/2
之后,也就是在t=τ-δ/2
的时候,A发送的数据和B发送的数据发生了碰撞,但是这时候A
和B
都不知道发生了碰撞
这里解读一下为什么是经过
δ/2
之后肯定发生碰撞,我们知道在τ-δ
的时候,距离A发送的数据到达B还有δ
的时间,然后这时候B
发送数据,我们假设在信道中传输的信号的功率是一样的,那么也就是说信号是以相同的速度在信道中进行传输的。相当于两个人同时面对面跑步,他们的距离是S,原本如果B不动的话,只有A在跑,那么要花
δ
的时间,但是现在A
和B
同时面对面跑,而且速度是一样的,那么他们撞到一起的时间就是一半了δ/2
在经过δ/2
之后,也就是t=τ
的时候,碰撞之后的信息回传到了B
,B检测到了碰撞
在t=2τ-δ
的时候,A也检测到了碰撞,因此也停止发送数据。
当δ->0
的时候,此时tA=2τ
通过之前的计算,我们知道A如果想要检测到碰撞的最长的时间是2τ
,如果在2τ
内都没有检测到碰撞,那么肯定就没有碰撞,我们将这个2τ
称作争用期,碰撞窗口
- 为了能够检测到正在发送的帧在总线上是否产生冲突,以太网的帧不能够太短,如果太短就有可能检测不到自己发送的帧产生了冲突。
在这里首先纠正我自己一直以来的一个误区,就是我一直认为CSMA/CD协议在数据全部发送出去还在监听,直到到了窗口期才结束监听的,这个观点是错误的,我们回到原本的定义,
CSMA/CD
协议的工作核心是边发送边监听,也就是说当发送端将数据全部发送出去之后,它就认为大功告成了,是这样一个意思。因此在这个前提下,为了使得在数据发送完毕之前能够度过这个争用期,产生了这样一个以太网最短帧
如果帧太短,那么就无法感知到是否发生了碰撞,也就是说发生了碰撞后,信号继续在线路上传输,而设备之间无法感知到这次碰撞,依然在接收碰撞产生的数据,碰撞回传的信号依然在路上,当碰撞回传的信号回来的时候,计算机A认为在整个发送过程中,整个数据包都送出去了,都没有发生碰撞,那就是发送成功了,后来传回来的这个信号,他认为是其他设备发生的碰撞,这样就导致了错误发生。
如何避免这个问题呢?
挑选一个合适的帧长度,这个帧长度能够确保在回收到碰撞信号的时候,设备依然在发送数据。
解释一下这个公式,
10Mb/S*51.2us
,首先这个往返时延是指一个比特从最左端发送出去又回到最左边所用的时间,然后用因此在第一个比特返回到最左端的时候,这个时候刚好经历过一个2τ
,然后我们要的功能就是,在这个第一个比特回来我们左端的时候,左端依然在发送数据,根据发送的速率是10Mb/s
,就可以计算出我们要发送多长的数据了
- 解决冲突的方法:退避算法
每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定,它取决于另一个发送数据的站到本站的距离,因此,以太网不能保证在检测到信道空闲后的某一时间内,一定能够将自己的数据帧成功地发送出去,因为存在产生碰撞的可能,以太网的这一特点称为发送的不确定性
总线型网络中的计算机数量越多,在链路上发送数据产生冲突的可能性就越大
以太网使用截断二进制指数退避算法来确定重传的时机,这种算法的核心是让发生碰撞的站在停止发送数据后,不是等待数据变为空闲后立即再发送数据,而是退避
与一个随机的时间。
退避算法的具体规定
- 基本退避时间初始化为
争用期2τ
具体的争用时间为51.2us
,对于10Mbit/s
以太网而言,在争用期可以发送512比特
,也就是64个字节
,也可以说争用期是512比特时间
(1比特时间就是发送1个比特所需要的时间),也可以直接使用比特作为争用期的单位。 - 从离散的整数集合
[0,1,...,(2^k-1)]
中随机取出一个数,记作为r
,重传应该推后的时间就是r*争用期
,上面的参数k
按照下面的公式来进行计算,k=min(重传次数,10)
可见当重传的次数不超过10的时候,参数k就等于重传的次数,而重传次数最多等于10
- 当重传达到16次依然不能够成功的时候,这表明以太网内打算同时发送数据的站太多了,导致一致产生冲突,那么就丢弃这个帧并且向高层报告
例如,在第一次重传的时候,k=1,随机数列表是[0,1,...,(2^k-1)]=[0,1]
,这时候可以选的重传的推迟时间是0
或者是2τ
如果再发生碰撞,那么随机数列表就是[0,1,2,3]
如果多次发生冲突,那么就表明了可能有很多的站参与信道的占用,但是这种动态退避机制需要推迟平均时间随着重传次数而增大,这也叫做动态退避,因而减小发生碰撞的概率。
我们还应该注意到,适配器每发送一个新的帧,就要执行一次
CSMA/CD
算法,适配器对过去发生过的碰撞是没有记忆功能的,因此,可能出现这样的情况,当好几个适配器正在执行指数退避算法的时候,很有可能有一个新发送的帧能够碰巧成功地插入到信道中,得到了发送权,而退避了几次发送的站可能还要执行退避算法。
强化碰撞
当发送的数据站一旦发现发生了碰撞的时候,除了要立即停止发生数据,还要继续发送32bit
或者48bit
的人为干扰信号,以便让所有用户都知道现在发生了碰撞
从图可以看出,A站从发送数据开始到发现碰撞并停止发送的时间间隔是
TB
A站得知碰撞已经发生时所发送强化碰撞的干扰信号的持续时间
TJ
图中的B站在得知发生碰撞之后,也要发送强化碰撞的干扰信号,但图中并没有画出
发生碰撞使得A要浪费
TB+TJ
,可是对于整个信道上的机器来说,还要增加一个τ
,因为信号的传播也需要时延,因此总线被占用的时间就是TB+TJ+τ
此外,以太网还规定了帧间最小间隔是9.6us
总结:CSMA/CD协议要点
(1) 准备发送
:适配器接收从网络下来的一个分组,加上以太网的首部和尾部(CRC和F)
,然后组装成以太网,放入适配器的缓存中,在发送信号需要确认信道是否空闲。
(2)检测信道
:如果检测到信道正忙,那么就需要不断轮询,等到信道转为空闲,然后在这个时刻,计时96个比特时间
,如果达成了这两个条件,那么就发送这个帧(前者是为了保证信道空闲,后者是为了保证帧间的最小间隔)。
(3)边发送边监听
:在发送过程中不断监听信道是否有碰撞
(3-1)发送成功:在争用期内一直没有检测到碰撞,那么就认为发送成功,如果接收方收到了差错的帧就丢弃
(3-2)发送失败:在争用期内检测到碰撞,立即停止发送数据,并且按规定发送干扰信号,执行指数退避算法,等待r倍的512比特时间后,返回到步骤2,重传16次不成功向高层报告
以太网每发送完一帧,一定要把已发送的帧暂时保存一下,如果在争用期内检测到了碰撞,那么还要推迟一段时间后再重传这个帧。
- 使用集线器的星型拓扑
这种以太网采用星型拓扑,在星型的中心则增加了一种可用性非常高的设备,称作为集线器(hub)
,双绞线以太网总是和集线器配合使用的,每个站需要两对无屏蔽双绞线,分别用于发送和接收。
集线器的一些特点:
(1)整个系统仍然像传统的以太网那样运行,使用集线器的以太网在逻辑上依然是一个总线网,各站点共享逻辑上的总线,使用的还是CSMA/CD
协议,更具体的说,是各站点中的适配器执行CSMA/CD
协议,网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据
(2)集线器有许多端口,很像一个多端口的转发器
(3)集线器工作在物理层,每个端口仅仅简单地转发比特而不进行碰撞检测
(4)采用了专门的芯片,进行自适应音回波抵消。
10BASE-T
:10
代表速率是10Mbit/s
,BASE
代表传递基带信号,T
:代表双绞线
可以看到,每一个端口与其他端口都能够相连,从而达到能够转发到其他任意适配器的目的。
- 以太网信道利用率
利用率是指发送数据的时间占整个时间的比例。
如图所示,平均发送一帧所需要的时间,经历了n倍的争用期,T0为发送该帧所需的时间,τ为该帧的传播时延
$$S = \frac{T_{0}}{n2τ+t0+τ }$$
从公式可以看出,要想提高信道利用率,最好的情况下是不发生冲突,而且只要总线一有空闲就发送数据,也就是n=0,这种情况算出来的信道利用率就是极限信道利用率
$$S_{max} = \frac{T_0}{T_0+τ} = \frac{1}{1+\frac{τ}{T_0}}$$
这个式子的意义是:当参数a远小于1才能得到尽可能高的极限信道利用率,反而当参数远大于1的时候极限信道利用率就非常低。
要想提高极限信道利用率,就要降低公式中
$$a=\frac{τ}{T_0}$$
当a->0
的时候,表示只要一发生碰撞,就可以立即检测出来并且停止发送,反之,当参数a
越大,这时候代表信道资源被浪费地越严重,信道利用率就会明显降低。
当数据率一定的时候,以太网的连线的长度就会受到限制,否则τ的数值会太大,同时以太网的帧长不能太短,否则会使得
T0
太小,使得信道的利用率很低。
τ值和以太网连线的长度有关,这就以太网网线的长度就不能太长。
一定情况下的T0和帧的长度有关,这就意味着以太网的帧不能太短
4.4 以太网的MAC层
名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们应该如何到达该处
- 名字应该和系统的所在地无关
严格地讲,局域网的地址指的是每一个站的名字或者标识符
硬件地址又称为物理地址,或者MAC地址,这种48位的地址应当是某个接口的标识符
这里指的是如果主机上有多个接口连接了多个适配器,那么适配器中ROM中固化的地址就是这个接口的标识符
IEEE注册管理机构RA负责向厂商指派前3个字节,后面3个字节由厂家自行指派,称为扩展标识符
- 组织唯一标识符
OUI(Organizationally Unique Identifier)
,由IEEE注册管理机构分配- 扩展唯一标识符
EUI(extended identifier)
,由厂商自行指派
- 网卡的作用
网卡是工作在链路层和物理层的网络组件,是局域网中连接计算机和传输截止的接口。
不仅能实现与局域网传输截止之间的物理连接和电信号的匹配,还涉及帧的发送与接收,帧的封装与拆封,帧的查错校验,介质访问控制等(以太网使用CSMA/CD协议)、数据的编码与解码以及数据缓存的功能
- 单站地址,组地址,广播地址
IEEE规定地址字段的第1字节的最低位是I/G
单站地址I/G=0
组地址I/G=1,组地址用来进行多播
广播地址:所有48位都为1,只能作为目的地址来使用
IEEE 把地址字段第 1 字节的最低第 2 位规定为 G/L (Global / Local) 位。
全球管理:G/L 位 = 0。厂商向 IEEE 购买的 OUI 都属于全球管理。
本地管理:G/L 位 = 1。 这时用户可任意分配网络上的地址。
适配器具有过滤功能
每收到一个MAC帧,先用硬件检查帧中的MAC地址
如果是发往本站的则收下,否则就将此帧丢弃
发往本站的帧包括以下三种帧
- 单播
(unica)
:也就是收到的帧的MAC地址和本站的MAC地址相同 - 广播
(broadcast)
帧(一对全体):也就是发送给本地局域网上的所有站点的帧,地址全为1 - 多播
(multicast)
(一对多):也就是发送给本地局域网上一部分站点的帧
所有的适配器应该至少能够识别前两种帧,也就是能够识别并且接收单播和广播地址,有的适配器可以通过编程的方式来识别多播地址。
以混杂方式工作
以太网适配器可以设置为一种特殊的称为混杂方式的工作模式,只要听到有帧在以太网上进行传输就都悄悄地接收下来,而不管这些帧发往哪个站。
- MAC的帧格式
常用的以太网MAC帧格式有两种标准,一种是EthernetV2标准(也就是以太网V2标准),另一种是IEEE的802.3标准,使用得最多的是以太网V2的MAC帧格式
以太网的V2的MAC帧
比较简单,由五个字段组成,前面两个字段分别是6个字节长度的目的地址和源地址字段,第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,比如0x0800代表的是IP数据报协议
,第四个字段叫做数据字段,其长度是46~1500
个字节之间
关于数据字段的长度首先MAC帧的首部具有6+6+2=14个字节的信息,然后尾部还要插入一个4字节的
FCS(帧检验序列)
,那么一共就是14+4=18
个必要字节,而我们前面已经推算过了,为了执行CSMA/CD
协议,那么帧的长度必须是64
个字节,首部和尾部共站18
个字节,那么数据字段就需要64-18=46
个字节。
FCS
检验的范围就是整个MAC
帧,是从目的地址到最后的FCS(帧检验序列)
,而没有包括物理层插入的8字节的前同步码和帧开始界定符。这8个字节包括7个字节前同步码,能够手机的接收端的适配器在接收
MAC
帧的时候迅速调整其时钟频率,实现位同步,第二个字段是帧开始定界符
,定义为10101011
,前六位依然是前同步码的作用,11
的作用就是告诉适配器注意接收
以太网传送数据的时候是以帧
为单位进行传送的,以太网在传送帧的时候,每个帧之间必须有一定的间隙,这样的话接收端只要找到帧开始定界符,其后面连续到达的比特流肯定就都属于同一个MAC
帧。
因此
- 以太网不需要使用帧结束定界符
- 不需要使用字节插入来保证透明传输
无效的MAC帧
- 帧的长度不是整数个字节
- 用收到的帧检验序列
FCS
检测发现错误 - 收到的
MAC
客户数据字段的长度不在46~1500
字节之间,可以知道有效的MAC帧
长度是64~1518
个字节
IEEE规定的MAC帧和V2MAC的区别
IEEE
规定的MAC
帧的第三个字段是长度/类型
- 当
长度/类型
的字段值大于0x0600
的时候,表示类型这样的话就和V2MAC
完全一样
- 当
- 而
长度/类型
的字段小于0x0600
的时候,也就是数据部分的长度,这时候数据字段必须装入逻辑控制LLC
子层的LLC
帧 MAC
帧格式还包含了8字节的前同步码和帧定界符
4.5 扩展的以太网
4.5.1在物理层扩展以太网
使用光纤进行扩展
- 光纤调制解调器:电信号和光信号的转换
- 光纤:提供更低的时延,高带宽
集线器
传统以太网最初是使用同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和灵活的双绞线
集线器和网卡一样工作在物理层
可以将多个集线器连接在一起形成一个更大的以太网,这不仅可以扩大以太网中计算机的数量,还可以扩展以太网的覆盖范围,使用主干集线器连接教室中的集线器,形成一个大的以太网。
好处:
- 原本属于不同以太网的以太网之间主机能够通信了
- 扩大了以太网覆盖的地理范围
碰撞域:称为冲突域,指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或者冲突的那部分网络
在上图中,在三个系的以太网连接起来之前,每个系的10BASE-T
以太网是一个独立的碰撞域,也就是在任意的时刻,每一个碰撞域中只能有一个站点在发送数据,每一个系的以太网的最大吞吐量是10Mbit/s
,在没有用集线器将这三个系的以太网连接起来之前,这三个系的总的吞吐量就是3*10Mbit/s
,但是在合并之后,这三个系合并为一个系之后,同一时刻只能有一个站点发送数据。
这是因为当某个系的两个站在通信的时候所传送的数据会通过所有的集线器进行转发,使得其他系的内部在这时候都不能通信,一旦发送数据就会产生碰撞
如果不同的系使用的是不同的以太网技术(数据率不同),那么就不可能用集线器将它们互联起来,这是因为集线器不能对帧进行缓存,所以这些主机只能以较低的数据率进行工作,同时还有一个比较重要的原因就是采用的CSMA/CD
协议中的最短帧和争用期等核心概念都是基于发送速率计算出来的,为了统一标准,那么只能够迁就最低速率的主机
4.5.2 在数据链路层扩展以太网
- 使用网桥优化以太网
网桥可以对收到的MAC帧
的目的地址进行转发
和过滤
。
网桥收到一个帧的时候,并不是向所有的端口转发此帧,而是根据MAC
帧的目的地址进行转发
和过滤
,它会先查找网桥中的地址表,然后确定将该帧转发到哪一个端口,或者是将它丢弃掉,也就是过滤。
交换式集线器(以太网交换机(switch))或者第二层交换机,强调这种交换机工作在数据链路层,淘汰了网桥
网桥能够基于MAC地址表,查找转发端口,从而减少了碰撞域
- 网桥自动构建MAC表
使用网桥优化以太网,对于网络中的计算机是没有感觉的,也就是说以太网中的计算机是不知道网络中有网桥存在的,也不需要网络管理员配置网桥的MAC地址表,因此我们称网桥是透明桥接
网桥接入以太网的时候,MAC地址表示为空,网桥会在计算机通信的过程中自动构建MAC地址表,这种称为自学习
- 自学习
网桥的接口收到一个帧,就要检查MAC地址表中收到的帧源MAC地址有无匹配的项目,如果没有匹配的项目,就在MAC地址表中添加该接口和该帧的源MAC地址对应关系以及进入接口的时间,如果有,则把原有的项目进行更新
- 转发帧
网桥接口收到一个帧,就检查地址表中有没有该帧目标MAC地址对应的端口,如果有,就会将该帧转发到对应的端口,如果没有,则会将该帧广播到全部端口,除了它自己
广播域(broadcast domain :指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
- 多接口的网桥(以太网交换机)
以太网交换机本质上就是一个多端口的网桥。以太网交换机的每个端口都直接与一个单台主机或者另一个以太网交换机相连,并且一般都工作在全双工方式
除此之外还具有并行性,可以同时连通多对端口,使得多对主机能够同时通信,相互通信的主机都独占传输媒体,无碰撞地传递数据,每一个端口和连接到端口的主机构成一个碰撞域,具有N个端口的以太网的交换机的碰撞域有N
个
以太网交换机的端口具有存储器,当检测到端口正忙的时候,可以先将到来的帧进行缓存
,比如说连接在以太网交换机上的两台主机,同时向另外一台主机发送帧,那么当这台主机的端口繁忙的时候,发送帧的主机的端口会先把上层交付下来的帧进行缓存,在合适的时机发送出去。
内部有帧交换表(地址表)
,通过自学习算法自动地建立起来。
- 存储转发模式:先把整个数据帧缓存后再处理
- 直通方式
- 接收帧的同时立即按照数据帧的目的
MAC
地址决定该帧的转发接口 - 不检查差错就直接把帧转发出去,有可能转发无效帧
- 接收帧的同时立即按照数据帧的目的
以太网交换的自学习功能
如图所示,以太网交换机中一共有4个端口,各自连接一台计算机,MAC地址假设为ABCD
,还有一张空交换表,这张表中有两个项目目的MAC地址
和转发端口
,以及附加的有效时间
假设A要向B发送一帧,这时候从A出来的数据帧经过端口1到了交换机中,第一步,交换机先检查交换表中有没有这个B的地址,发现没有,然后这时候会将帧的源地址A和端口1
写入到交换表中,向除1以外的端口广播这个帧(因为这个帧是从A中出来的,那么转发的目的地址肯定不是1)
广播发送可以保证让B收到这个帧,而对于CD
而言,因为目的地址和适配器的MAC
地址不同,最终导致CD
收到帧后丢弃
由于在交换表中写入了项目(A,1)
因此以后当交换机收到帧之后,只要其目的地址是A
,那么就会把收到的帧从端口1转发出去送交A。
然后假定B通过端口3向A发送一个帧,交换机查找交换表,发现交换表中的MAC
地址有A
,然后直接通过端口1
将刚才收到的帧发送到端口1
经过一段时间以后,只要主机C和D也向其他主机发送帧,以太网交换机中的交换表就会记录下C和D
对应的端口号,这样的话,交换表中的项目就增多了,以后就可以直接从交换表中查找到转发的端口,而不必广播
考虑到有可能要在交换机的端口更换主机,或者主机要更换网络适配器,这就需要及时更改交换表中的项目,为此,在交换表中的每个项目都设定有一定的有效时间,过期的项目就自动被删除
这种自学习的方法使得以太网能够即插即用,而不必进行配置
有时为了增加网络的可靠性,往往会增加一些冗余的链路,自学习的过程可能导致以太网帧在网络的某个环路中无限制地兜圈子。
如图所示,如果主机A向主机B发送一帧(通过端口交换机)
由于初始情况下交换表是空的,那么就需要广播除了1
端口以外的全部端口,填表(A,1)
然后我们追踪广播出去的A->E
的帧
首先从1端口转发出去的,那么除了1以外的端口都会转发出去,然后会通过5
这个端口转发到交换机S2
当到达端口,然后这时候会查找关于E
的项目,然后发现没有这个项目,于是在交换机内部端口施行广播,这时候会记录下(A,5)
,这时候转发的端口是S2
的2346
我们追踪那个转发到6
的帧,这时候回到交换机S1
,这时候S1
还是没有关于E
的项目,然后继续广播,然后还会通过端口5
进行转发,然后我们发现,这时候这个广播的数据帧就会一直在交换机之间来回跳跃,也就是#S1(5)->#S2(5)->#S2(6)->#S1(6)->#S1(5)
白白消费了网络的资源,这种情况用广播风暴
进行描述
生成树协议STP(Spanning Tree Protocol):不改变网络的实际拓扑结构,但是在逻辑上切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构。
4.5.3 从总线以太网到星形以太网
5. 虚拟局域网
5.1 传统以太网存在的问题
以太网存在的主要问题主要有:广播风暴、安全问题、管理困难
首先一个以太网就是一个广播域,经常使用的ARP
协议和DHCP
协议需要在网络中传送很多的广播帧,当以太网中形成冗余链路(回路)的时候就会形成广播风暴
广播域:指这样一部分网络,其中任何一台设备发出的广播通道都能被该部分网络中的所有其他设备所接收
交换机每个接口都处于一个独立的碰撞域中,但所有计算机都处于一个广播域中,指的是交换机互相直连的情况下,这种情况无法隔离不同部门的通信
虚拟局域网技术能够使得广播域的范围缩小,提高局域网的安全性。
5.2 虚拟局域网简介
虚拟局域网其实只是局域网用户提供的一种服务,并不是一种新型的局域网
它是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求,每一个VLAN
的帧都有一个明确的标识符,指明发送这个帧得出计算机是属于哪个VLAN的
这每个虚拟局域网都是一个广播域,例如 VLAN1,VLAN2,VLAN3是三个不同的广播域
- 当B1向VLA12工作内成员发送数据的时候,工作站B2、B3将会收到其广播的信息
B1发送数据的时候,VLAN1和VLAN3组内成员都不会收到广播消息
虚拟局域网限制了接收广播信息的工作站的数目,使得网络不会因为传播过多的广播信息(“广播风暴”)而引起性能的恶化
5.3 划分虚拟局域网的方法
- 基于交换机端口的方法
最简单,也是最常用的方法
属于在第1层划分虚拟局域网的方法,其缺点是不允许用户进行移动
- 基于计算机网卡的MAC地址的方法
根据用户计算机的MAC
地址划分虚拟局域网
属于在第2层划分虚拟局域网的方法
允许用户进行移动
其缺点是需要输入和管理大量的MAC地址,如果用户的MAC地址改变了,那么就需要管理员重新配置VLAN
- 基于协议类型的方法
根据以太网帧的第三个字段”类型”确定该类型的协议属于哪一个虚拟局域网
- 基于子网IP地址的方法
根据以太网帧的第三个字段”类型”和IP分组首部中的源IP地址字段确定该IP分组属于哪一个虚拟局域网
- 基于高层服务的方法
根据高层应用的服务、或者它们的组合划分虚拟局域网
5.4 虚拟局域网使用的以太网帧格式
VLAN标签的后两个字节中,前面4位实际上并没有什么作用,后面12位是该虚拟局域网VLAN
标识符VID
,唯一地表示这个帧属于哪一个VLAN
,那么以太网最长帧也就设定为1522
注意,这时候的最短帧变成了42个Byte
疑问:如果虚拟局域网是基于交换机实现的,而交换机是不需要CSMA/CD协议的,那为什么又要最短帧呢?
这是因为局域网内可能存在这样一种拓扑:
交换机下连接了若干个集线器,在集线器下依然是存在碰撞域,还是需要运行
CSMA/CD
协议的,因此在这种情况下,为了最大程度地兼容以太网内的通信,保留了帧长的设定。
- 接入链路:计算机通过接入链路接入到以太网交换机
- 汇聚链路:交换机端口之间的连接
5.5 使用VLAN的例子
交换机1连接了7台计算机,组成了一个广播域,现在把局域网划分为两个虚拟局域网VLAN-10
和VLAN-20
,这里的10和20是虚拟局域网的编号
- 不同交换机,相同VLAN
选择假定A
向E
发送帧,交换机并没有查询到E
连接到本交换机,那么必须通过汇聚链路
将帧交换到交换机2
,但是在转发之前,必须插入VLAN
的标签,不插入VLAN
的标签,交换机就不知道将帧转发给哪个VLAN
,交换机2在向E端口
转发帧之前,要拿走VLAN
的标签,因此E
收到的帧
就是标准的以太网帧
- 相同交换机,相同VLAN
这时候A和B处于不同网络相同交换机上,这时候的通信取决于高层(网络层设备)路由器了。
不过有的交换机中嵌入了一个专用于芯片构成的转发模块,用来在不同的VLAN
之间转发帧,这样就可以不需要额外的路由器了,这种交换机称为三层交换机。
6. 高速以太网(不考)
6.1 100M以太网
100BASE-T是在双绞线上传送100Mb/s系基带信号的星型拓扑的以太网,使用的是CSMA/CD协议,它又称为快速以太网
使用交换机组建的100BASE-T以太网,可以在全双工的方式下工作而无冲突发生。因此CSMA/CD协议对于基于交换机组建的以太网是不起作用的。因为其帧格式和以太网一样,因此称交换机组件的网络为以太网。
以太网的最短帧的带框和链路长度有关,100M以太网比10M以太网速率提高了10倍,要想和10M以太网兼容,就要确保最短帧也是64字节,那就将电缆最大长度由1000M降到100m,因此以太网的争用期依然是5.12us。最短帧依然是64字节
6.2 吉比特以太网
- 允许在1Gbits/s下以全双工和半双工2种方式进行工作
- 使用 IEEE 802.3 协议规定的 MAC 帧格式。
- 在半双工方式下使用 CSMA/CD 协议,而在全双工方式不使用 CSMA/CD 协议。
- 与 10BASE-T 和 100BASE-T 技术向后兼容。
半双工方式工作的吉比特以太网
半双工时采用 CSMA/CD,必须进行碰撞检测。
为保持64字节最小帧,以及100米网段的最大长度,增加了2个功能
- 载波延迟:将争用时间增 b 大为 512 字节。凡发送的 MAC 帧长不足 512 字节时,就用一些特殊字符填充在帧的后面。
- 分组延迟
当很多短帧发送时,第一个短帧采用载波延伸的方法进行填充,随后一些短帧可一个接一个地发送,只需要留有必要的帧间最小间隔即可。这样就形成一串分组的突发,直到达到1500字节或者稍多一些
全双工方式工作的吉比特以太网不使用载波延伸和分组突发
它只工作在全双工模式下,因此不存在争用的问题,也不使用CDMA/CD协议。
6.3 端到端的以太网传输
以太网的工作范围已经扩大到了城域网和广域网,实现了端到端的以太网传输
6.4 使用以太网进行宽带的接入
以太网宽带接入具有以下特点:
- 可以提供双向的宽带通信。
- 可以根据用户对带宽的需求灵活地进行带宽升级。
- 可以实现端到端的以太网传输,中间不需要再进行帧格式的转换。
- 但不支持用户身份鉴别。
7. 练习题
3-07
要发送的数据为1101011011。采用CRC的生成多项式是P(X)=X4+X+1。试求应添加在数据后面的余数。数据在传输过程中最后一个1变成了0,问接收端能否发现?若数据在传输过程中最后两个1都变成了0,问接收端能否发现?采用CRC检验后,数据链路层的传输是否就变成了可靠的传输?
这道题考察的CRC冗余检测技术的应用。解题步骤如下:
- 求除数:首先由CRC的生成多项式
P(X) = X4+X+1
,那么以多项式表示出来就是1*X^4+0*X^3+0*X^2+1*X^1+1*X^0
,用位表示出来就是10011
,这个的话就是除数 - 求被除数:注意到除数具有5位,则被除数需要向左移(5-1)位,也就是加四个0,那么被除数就是
1101 0110 1100 00
- 开始运算除法,用被除数除于除数,计算方法是每个位做异或,不足5位的要将被除数上的数拉下来补足。
- 计算得余数为
1110
,这个余数应该添加到数据的后面。 - 开始模拟,当数据最后一位1变成0之后,那么除数就变成了
11010 11010 1110
,同理计算得到其余数0011
,不为0,是可以发现的 - 当数据最后两位1都变成0之后,那么除数就变成了
1101 0110 00 1110
,计算得到其余数为101
,其余数不为0,可以发现
数据链路层的传输是尽最大努力的交付,也就是实现的是不可靠的传输,尽管数据链路层采用了CRC
冗余检测技术,但是其收到一个不合法的帧的时候,接收方只是简单地丢弃这个帧而已,并不能保证接收的和发送的完全一致。
3-20
这道题考察了CSMA/CD
中的关于边检测边监听
的理解
回忆一下,关于
10Mbit/s
的以太网我们是如何计算的我们要求在极端情况下,也就是从线路的一段发送数据,然后接收到回传的数据的这段时间,发送端是在不断发送数据的,根据这一点,写出相关的公式。
对于1km
长的线路,那么往返时延就是Tc=2*1km/(200000km/s)=10^(-5)s
那么在过程中,如果发送端一直发送数据,那么发送的数据的帧长是10^(-5)s*1Gbit/s=10bit/s=10000bit
因此最短的帧长就是10000bit(1250Byte)
3-25
这道题考察了关于CSMA/CD
工作的有限状态自动机,我们以关键时间点为例,进行工作的分析
当t=0
的时候,A和B同时发送了数据帧
当t=225
的时候,监听到了碰撞,这时候A和B都同时停止发送数据,然后开始传输干扰信号
当t=273
的时候,干扰信号传输完毕(发送),启动截断二进制指数算法
A需要退避的时间是0(0*τ)个比特时间
、B需要退避的时间是512(1*τ)个比特时间
也就是说B至少需要在273+512+96=881
个比特时间的时候才能开始执行重传帧
然后这时候关注A,由于只是数据发送完毕,但是信道上依然有信号在传输,所以依然要等待信号不会影响A和B之间的通信的时机
所以这时候的关键就是推算信号什么时候不会影响A和B传输的信道?
突破口在t=225
的时候监听到了碰撞, 我们假设A和B的距离是S
,假设A和B同时发送数据,信道上电磁波的传输速率是一样的,那么信号发生碰撞的时候,A出发的信号走了S/2
,B出发的信号走了S/2
,然后冲突的信号回传,A出发的信号走了S/2(总S)
,B同理,这时候A和B都监听到了碰撞,这时候的比特时间就是225
通过以上分析可以知道,225比特时间是B发送的一个比特从B传输到A所用的时间
那么在干扰信号传输完毕之后,这时候B关于这个干扰信号的最后一个bit从B出发,经过225
比特时间之后,到达B,自此之后,A和B之间的信道完全空闲下来。
当t=273+225=498
比特时间时,A检测到信道为空,开始等待96
个比特时间(以太网帧间最小间隔)
(1)当t=498+96=594
,A开始重传数据帧
当t=881
的时候,B预定开始重传数据帧
(2)由t=594+225=819
,这时候A重传的数据帧到达B
对B而言,它在t=273+512=785
的时候开始监听96
个比特内信道是否空闲,如果空闲则发送信号
而785<819<881
,因此B在此刻监听到信道为忙,因此在预定的881
比特时间不会发送数据,需要等待信道空闲下来之后再等待96个比特时间才能继续发送
接下来是有歧义的地方,具体的歧义就是A发送的帧是否沿用3-24的帧,如果沿用的话就有下面的推断
由上图所说,A发送的数据帧是以太网规定的最短的数据帧,也就是说长度是64Byte=512bit
那么当经过t=819+512+64=1395
的时候,这时候B接收到了A
的全部数据,64是8个字节(7字节的前同步码,1个字节的帧定界符)
然后B
开始监听96个比特时间,也就是
当t=1395+96=1491
的时候,这时候B检测到信道为空,开始重传帧,而B什么时候传完,要根据B的帧的长度来说
3-30
如图所示,ABC是这以太网交换机,因此可以以全双工的方式工作,也就是说这些主机在任意时刻都能够同时手法数据,那么吞吐量就是这些主机的台数+服务器台数*吞吐量
也就是1100Mbit/s
如果是ABC是集线器呢?
如果是集线器,那么就是碰撞域,只能有一台主机工作,也就是300+200=500Mbit/s
3-33
动作 | 交换表的状态 | 向哪些接口转发帧 | 说明 |
---|---|---|---|
A发送帧给D | 写入(1,A) | 2,3,4,5,6 | 一开始表为空,主机A可以通过端口1转发到达,由于此时表为空,需要在以太网交换机中广播帧 |
D发送帧给A | 写入(4,D) | 1 | 交换表中存在关于A的端口信息(1,A),因此直接转发到1端口,而交换表中没有D的端口信息,因此写入(4,D) |
E发送帧给A | 写入(5,E) | 1 | 交换表中存在关于A的端口信息(1,A),因此直接转发到1端口,而交换表中没有E的端口信息,因此写入(5,E) |
A发送帧给E | / | 5 | 交换表中存在关于E的端口信息(5,E),因此直接转发到5端口 |