以太网之总线形以太网

什么是以太网(Ethernet)

互联网是由不同类型的传输网络互联而成的网际网,按照作用范围可以将网络分为

  • 个人局域网
  • 局域网
  • 城域网
  • 广域网

以太网是一种网络技术,广泛运用于局域网中,之所以叫以太,是因为古代的一种理论:“以太”通过电磁波充满了整个空间。

以太网的发展

  • 传输媒体从采用同轴电缆到双绞线缆和光纤
  • 从共享式以太网发展到交换式以太网
  • 出现VLAN和三层交换技术
  • 从低速以太网发展到高速以太网

总线形以太网

最初的以太网就是总线形以太网,它简单、便宜,在最初得到了广泛的运用

总线形以太网拓扑结构

总线形以太网终端接入网络只需要将终端与总线相连接即可,发送信号时,信号在总线的两端分别发送,在总线的两端分别有一个匹配阻抗,防止两端信号的反射。

中继器

信号在信道传播时会衰减甚至失真,如果两个终端之间距离太远,就会面临信号的失真,我们可以在总线的一定位置安装一个中继器,它的功能就是完成信号的再生,因此只要适当的增加中继器,两个终端之间的距离就可以无限长(文末会反驳)

需要完成的功能

距离的问题解决了,现在就需要实现以太网的功能了,以太网要完成的功能主要有以下内容:

网络接口层

上面的这些功能都需要以太网中的网络接口层来实现,在以太网中,又将网络接口层分成了MAC层和物理层,他们各自完成自己的功能:

MAC层的功能

  • 寻址
  • 公平竞争总线
  • 数据封装

物理层的功能

  • 帧对界
  • 数据与信号的转换
  • 检查总线的状态

发什么和收什么:MAC帧

信道中传输的是信号,首先我们需要将我们的数据转换为信号,而这个数据必须准守一定的规则,才可以在接收端被准确的接受,而在数据转换成信号之前,我们的数据是以帧为单位的,我们称它为MAC帧,为什么称为MAC帧呢,因为在以太网中,MAC帧的封装是在以太网网络接口层中的MAC子层完成的,MAC帧需要这些数据:

  • 先导码
  • 帧开始分解符
  • 目标地址
  • 源地址
  • 类型
  • 数据
  • FCS(检错码)

先导码和帧开始分解符

在我们发送数据时,我们需要让我们的接收端知道信号中的哪一段为一个帧,所以我们需要在每一个MAC帧的最前面加一个先导码和帧开始分解符,让接收端知道MAC帧范围。先导码是固定的7字节10101010,而帧开始分解符是固定的1字节10101011,也就是先导码和帧开始分解符一共是8个字节,64位

目标地址和源地址

我们的每个终端都一个MAC地址,它是唯一的,它的作用就是标识我们的每一个终端,在总线形以太网中,一个终端发送的数据能被总线上的每一个终端接收到,所以,目标地址的作用就是让接收到的终端判断这个数据是否是发送给它的,如果是,就接收,如果不是则丢弃。当然,我们也可以将我们的数据发送给一组终端或者总线上的所有终端,那么目标地址就为组播地址或者广播地址(48位全为1,即FF:FF:FF:FF:FF:FF)

类型

表示该数据的数据类型

数据

需要接收端接收的数据,除了该段,MAC帧的其他段都是为了不同目的的标识该数据。数据长度规定为46B~1500B,规定上限是因为如果长度太长,失败后重传的成本过高,而为什么有下限,后面会解释

FCS(检错码)

用于检验数据是否正确,防止信号在物理层传输过程中失真

怎么发和怎么收

数据需要转换成信号后才能被信道传输,所以需要将数据转为信号,以太网是将数据编码为基带信号后在信道里面传输的,所以需要决定基带信号的幅度和宽度,幅度很好确定,比如可以用一个+0.7伏表示1,-0.7伏表示0,那么宽度呢,也就是如何确定码元的长度,基带信号中,码元就是一个二进制位。在一个数据传输速率为10Mbps的以太网中,每秒产生10M个二进制位,也就是10M个码元,产生一个码元的时间就是1/10^6秒,这就是码元的长度,也就是我们基带信号的宽度,在1/10^6s里我们需要发送一个码元,所以在我们的发送端和接收端设置一个时钟,这个时钟的周期就是1/10^6s,一个时钟周期我们就发送一个码元,而在接收端,这个时钟周期里接收到的信号就是一个码元,这里有一个潜在的问题,如果我们接收端和发送端的这个时钟不同步,那么接收端可能会在它自己的周期接收到一个错误的码元,怎么避免这个问题呢,问题的本质就是让接收端和发送端的时钟始终是同步的,这时候我们就需要用曼切斯特编码

曼切斯特编码

曼切斯特编码的编码就是用一个高电平和一个低电平表示0,一个低电平加一个高电平便是1,于是我们的100101就被编码成了这样的信号:

这样的信号有什么好处呢,就是我们的每一个码元必须有一次跳变,当接收端接收到以后,就可以根据跳变来同步自己的时钟,也可以将信号转成正确的二进制位流了,而这个过程就是帧对界,它是我们以太网物理子层的功能

什么时候发和什么时候收

在总线形以太网中,我们所有的终端都连接在总线上,总线一般使用的是同轴电缆,同轴电缆是采用的单双工通信,也就是说,在同一个时刻,总线上只允许一个设备发送信号,于是对于某一个终端就面临两个问题:

  1. 怎么确定总线是否是忙碌状态
  2. 如果不是忙碌状态我们是否应该可以发送数据了(有可能其他终端也同时会发,就会造成冲突,冲突必须解决)

第一个问题很好解决,我们的终端可以检查总线是否有信号,上面我们说了,信号中间都有跳变,如果终端检测到总线没有跳变信号,则说明总线处于空闲状态,我们将总线上的有跳变信号的信号称为载波。但是此刻我们并不能马上就发送数据,我们需要等待一个时间再发送,这个时间被称为帧间最小间隔,帧间最小间隔的目的是:

  • 留出时间让接收终端腾出缓冲空间
  • 避免一个终端连续发送多个MAC帧
  • 让终端正确监测到先导码和帧开始分界符

等待帧间最小间隔后,我们就可以开始发送数据了,这个时候可能会发生冲突,因为其他终端也在这个帧间最小间隔后开始发送了,发送冲突以后,我们就不能继续发送了,什么时候能再发呢?这里就需要一个算法,它叫着后退算法,发送冲突以后,我们的终端需要等待一个时间后再发送,而这个时间是终端自己生成的,这个算法的要求是:

  1. 每一个终端生成的延迟时间都是随机的,且相互独立
  2. 最小的延迟时间最好为0,而且只有一个为0
  3. 所有终端的平均延迟时间尽可能小

后退算法的详细过程为:

  1. K为冲突次数。初始时K=0,每发生一次冲突,K就加1,但K不能超过10,因此,K=MIN[冲突次数,10]
  2. 从整数集合[0,1,…,2^k-1]中随机选择某个整数r
  3. 根据r,计算出后退时间T=r×t(t:协议规定的时间,不同传输速率t不同)
  4. 如果某个终端连续重传了16次都检测到冲突发生,则终止传输,并向高层协议报告。

后退算法实例:

这整个载波监听、多点接入和冲突检测的过程称为CSMA/CD(Carrie Sense Multiple Access with Collision Detection)工作步骤,它的详细过程如图所示:

后退算法的缺陷

  • 网络负荷:某一时间段内连接在总线上的终端需要通过总线发送的数据总量

如果网络的负荷较大,经过后退算法后,不同终端延迟时间可能相同,那么再次冲突的概率还是很大。所以后退算法是适合轻负荷的网络

  • 捕获效应:一个终端长时间内一直争到总线发送数据,另一个终端长时间内一直争不到总线发送数据

如果A、B两个终端发生冲突,A终端在第一次冲突后,经过后退算法选出的r为0,而B选出的为1,则A竞争到总线,下一次A和B又继续发送,此时A的K为1,而B的K为2了,A从[0, 1]中选择一个数,而B需要从[0, 1, 2, 3]中选择一个数,B选择的数比A大的概率大得多,因此A又竞争到中线,导致B的冲突数K再次增加,这就是捕获效应,这个问题是在以太网的运用过程中发现的,如果不解决,就会严重影响到以太网的发展

由谁来收

这个问题很好解决,在我们把信号转换成MAC帧以后,我们可以根据目标地址来判断是否是自己,如果是则处理,不是则丢弃

总线形以太网的尽头

在总线形以太网总线上的终端任何一个时刻只能有一台终端发送数据,如果有多台终端发送数据,那么一定发生冲突,把具有这种传输特性的网络所覆盖的范围称为冲突域,而在这个冲突域里面,相距最远的两个终端之间距离称为冲突域直径。刚才我们介绍了中继器,它告诉我们总线形以太网可以无限长,那么是真的可以无限长吗?

如图,如果A向B发送数据,B接收到的时间为t,如果B在刚刚接收到数据后,B也开始发送数据,那么就发生冲突了,这是B需要告诉A冲突发生了,但是告诉A也需要t时间,因此终端A每一帧的发送时间必须大于等于2t,于是就有:

A发送的最短帧长L = 2t * s

在10Mbps以太网标准规定:t = 25.6μs,于是我们的最短帧长就为

2 * 25.6 * 10^6 * 10^7 = 64B

刚才我们提到了MAC帧数据的最短长度帧长为46B,就是这个最短帧长减去MAC帧中其他的标识数据得出来的。如果我们要增加我们的以太网两个终端的距离限制,那么我们的t就会更大,这时候最短帧长也会更长,如果最短帧长减少,那么t就会减少,t减少以后,两终端的冲突域直径就会减少。最短帧长和冲突域直径之间的相互制约使以太网必须有一场技术革命,否则,面临淘汰!

坚持原创分享,您的支持将鼓励我不断前行!