两台计算机间通信的示意图如下:
此次学习,主要是针对上图中的数据链路层细化学习,了解数据链路层如何识别帧头、帧尾,以及一些重要问题是如何解决的。
1. 链路(link):指一条点到点的物理线路段,中间没有其他的点。
* 注意:一条链路只是一条通路的一个组成部分
2. 数据链路(data link):除了物理线以外,还必须有通信协议来控制这些数据的传输。而实现这些协议的硬件和软件加到链路上,就构成了数据链路。
* 实现这些协议硬件和软件:现在最常见的方法是使用适配器(即网卡)
* 一般的适配器都包括了数据链路层和物理层
3. 数据链路层传输的是帧。
1. 封装成帧:就是在一段数据的前后分别添加帧头、帧尾就构成了一个帧。
* 注意:一段数据是指一定长度内的数据,并不是无限长的。一般最大是1500Byte
2. 帧头、帧尾
* 实现:采用一些ASCII码为不可打印字符做帧头帧尾,比如控制字符
* 作用:对帧进行定界。
3. 接受方:接受方在接受帧时,只有接受到帧头帧尾的帧才会获取,其他的都会舍弃。
上述的封装成帧存在一个问题:帧的数据部分可能出现非打印字符,甚至可能与帧头(SOH)帧尾(EOT)一样。这样会导致只有前半截的数据被接受,后半截的数据被舍弃,如下图所见。如何避免?
解决方案:在帧的数据部分,且出现非打印字符时,在前面加一个转义字符,来标识其是帧的数据部分,不是帧头或帧尾。如下图所示:
发送端的数据链路层会为数据包添加帧头、帧尾和转义字符。
在接受端的数据链路层会自动的去掉帧头、帧尾和转义字符。
这整个过程用户并不知道,用户知道数据被传输过去,所以叫透明传输。
问题:其实,除了上面这个问题,还存在一个问题:在数据的传输过程中,信号衰落或者受到噪音的干扰,会出现一些比特位的数据由0变为1或者由1变为0,从而出现差错。如何解决?
解决方法:一般会将数据分组,每一组数据后面都加上帧检查序列(FCS),接受端的数据链路层会根据**帧检查序列(FCS)**来判断数据是否出错。
帧检查序列(FCS)如何得到?方法有很多,下面介绍其中一种方法:循环冗余检验(CRC)
接受端如何判断数据是否出错?同样的在接收端的数据链路层对数据帧进行循环冗余检验(CRC)计算。如果余数是0,则认为没有出错;反之则出错,但是无法纠错,会舍弃该数据。
无差错接受:凡是接受的帧,我们以非常接近于1的概率认为这些帧在传输过程中没有产生差错。 |
---|
可靠传输:发送什么就收到什么。(通过确认和帧的重传机制) |
小结:CRC差错技术是一种无比特差错,而不是可靠传输。因为通过CRC计算出的FCS可能为0,且除数越大,概率越接近1 |
现在全世界使用最多的数据链路层协议是点对点协议的(Point-to-Point,简称PPP协议)。拨号上网一般都是采用的PPP协议,可见PPP协议有身份验证的功能。
* 帧格式:
* 标志 | 地址 | 控制 | 信息 | 校验 | 标志
* 标志(01111110, 1Bit) | 地址(>=1Bit) | 控制(1B) | 信息(>=0B) | 校验(2B或4B,校验范围:地址、控制、信息) | 标志(01111110, 1Bit)
(1)以字节流的形式传输数据。
(2)以比特流的形式传输数据。
1. 局域网
* 特点:自己通过网线,网卡等将计算机相连,构成的网络
* 优点:具有广播信道的功能。从一个站点可以方便的访问全网。
* 拓扑结构:总线形,环形,星性,树形
2. 广域网:花钱买服务。比如两台计算机都通过电信网络进行聊天,尽管他们距离很近,不足100m,但是还是属于广域网。
3. 以太网:以太网是局域网的一种,采用的是总线形结构,属于总线形局域网,所以他也具有广播信道的功能。
* 优点:即插即用
* 缺点:
1. 同一时间只允许一台计算机发送信号,一台计算机接受。属于半双工模式。
2. 数据传输不安全
3. 以太网连接距离短,100m内
下面介绍以以太网为代表的用广播信道的数据链路层:
载波监听多点接入/碰撞检测 协议, 简称CSMA/CD协议
1. 多点接入:许多计算机可以在总线上的任意点接入
2. 载波监听:每一个站在发送数据之前,先要检测一下总线上是否有其他的计算机在发送数据,如果有,则暂时不要发送数据,以免发送碰撞。
3. 碰撞检测:
1. 碰撞如何检测:计算机边发送数据边检测信道上的信号电压大小。如果电压大于一定的值,则说明数据发送了碰撞,即冲突。
2. 发现碰撞后:舍弃此次发送的数据,立即停止发送数据,等待一段随机时间后再发送。
发送碰撞后,一段时间后再发送数据,暂停的这一段时间用二进制指数类型退避算法确定:
为了使数据链路层更好的适应多种局域网,将以太网的数据链路层拆分成了两个子层:
1. 逻辑链路控制 LLC
* 特点:与传输媒体无关,与各种协议无关
2. 媒体接入控制 MAC
* 特点:与接入到传输媒体有关的内容都放在MAC子层
* 注意:现在很多厂商生产的适配器上就只装有MAC协议而没有LLC协议
因为以太网是总线型局域网的一种,局域网是以广播的形式进行通信的,是半双工模式,会发生碰撞,所以以太网也会发生碰撞。最典型的是用集线器连接计算机构成以太网,此时集线器是一个冲突域。
提高信道利用率:
1. τ越小时(即传输距离越短),占用期所占的比例越大,信道利用率越大。
2. T0越大时(传输的帧越长),占用期所占的比例越大,信道利用率越大。
* T0 是帧的发送时间
* 故有参数:a = τ/T0
1. a-->0, 表示一出现碰撞就能检测出来
2. a越大,争用期占的比例越大,信道利用率就越低
3. 理想情况下(没有碰撞)的信道利用率:
Smax = T0/(T0+τ) = 1/(1+a)
1. MAC地址:“MAC地址”实际上就是适配器地址或适配器标识符,且每个MAC地址在全球是唯一的。
2. 在局域网中,硬件地址又称为物理地址,或MAC地址,通常是用48位表示,即6个字节。
3. 适配器检查MAC地址,如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧舍弃,不再进行其他的处理。
假设有如上6台计算机,现在想让这6台计算机间可以相互通信,该怎么做?
如果再用一台集线器将这三台集线器连接起来,虽然能解决问题,但是这样会使得冲突域变得更大,信道利用率会急速降低。那么有没有什么方法能够让其连接,但是不产生更大的冲突域?网桥就是为了解决这个问题。
使用网桥扩展以太网
* 优点:
1. 过滤通信量
2. 扩大了物理范围
3. 提高了可靠性
* 缺点:
1. 存储转发增加了时延
2. 在MAC子层并没有流量控制功能
3. 具有不同MAC子层的网桥接在一起时时延更大。
4. 网桥只适用于用户不多的情况下(不超过100个)
目前使用的最多的网桥是透明网桥。
1. 透明网桥:指互联网上的站点并不知道所发送的帧将经过几个网桥,因为网桥对各站来说是看不见的
2. 透明网桥是一种即插即用的设备。
其实现在网桥使用的很少,使用更多的是交换机。交换机是由网桥演变而来的。
上述网桥连接的是多个冲突域,假设有一台网桥的插口足够多,多的所有计算机都能直接连在网桥上,那么连接的所有计算机也能通信。这种设备就是交换机。
从上面可以看出交换机的优点:高效、安全。
注意:中继器和集线器都属于物理层设备,网桥和局域网交换机属于数据链路层设备。
透明网桥和交换机都会出现一个问题,计算机将一个消息发送出去后,消息一直在几个网桥或者交换机之间循环转发,而不能发送给接收端,白白的浪费资源。
解决方法:采用生成树算法,因为树形结构是没有环路的。
生成树算法:
1. 取优先级最高的网桥或者交换机为根结点;如果有多个,则取MAC地址小的为根结点。
2. 下一优先级的设备中,每一个设备中离端口进的为指定端口,其他的为非指定端口。(远近以要经过的设备数和带宽决定)
3. 重复2过程,直到没有设备
生成树算法示意图:
LAN是局域网的简称,VLAN是虚拟局域网的简称。虚拟局域网能够将一个局域网划分为几个子局域网,且子局域网间不能通信。在软件层面实现。
示意图如下: