计网(一)、数据链路层
数据链路层
一、基本概念
链路:一条无源的点到点的物理线路段,中间没有任何其它的交换节点;
数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输;把这些协议的硬件和软件加到链路上,就构成了数据链路;
最常用的方法是:适配器(网卡)来实现软件和硬件,网卡一般都包括了数据链路层和物理层这两层;
数据链路层传送的是帧。网络层将 ip数据报传入数据链路层封装成帧,数据链路层再将帧传送给物理层转换为比特流的形式发送给对方机器,对方机器接收后再反过来进行转换。
二、三个基本问题
- 封装成帧;
- 透明传输;
- 差错控制;
(1) 封装成帧
在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。首部和尾部的重要作用就是对帧进行定界。
MTU
:Maximum Transfer Unit 最大传输单元,规定了链路层所能传输帧的数据部分的长度上限。
SOH
:Start Of Header 控制字符,放在帧的最前端,表示帧的首部开始;
EOT
:End Of Tail ,表示帧的尾部结束部分。
(2) 透明传输
当帧的首尾部分出现在帧的数据部分可能会造成数据的误识别,因此需要采用一些措施来使得这些问题好像没有发生过一样。
- 解决办法:
字节填充(byte stuffing)、字符填充(character stuffing)。
在当数据部分出现帧的控制符时,在其前面插入一个转义字符以便接收方接收识别。
- 字符填充(同步传输时使用):

- 零比特传输:

*
(3) 差错检测
传送过程中可能会出现比特差错,1 变成 0 而 0 也可能变成 1
循环冗余检测:
- 在要发送的数M后边添加 n个0;
- 将得到的数除以收发双方事先商定的长度为(n+1) 位的除数P,得出的商是Q而余数是R;
- 将R拼接在M后边一起发送给接收端;
- 接收端接收到数据后再除以P,如果余数为0则表明没有出错,否则传输过程中出现了错误。
循环冗余检测只能用于检错不能用于纠错,数据链路层使用 CRC 检验,能够实现无比特差错传输,但是不是可靠传输。
三、点对点协议PPP
目前数据链路层使用的最多的协议是点对点协议
PPP协议应该满足的需求:
- 简单—首要要求;
- 封装成帧;
- 透明传输;
- 差错检测;
- 在同一链路上支持多种网络层协议;能够在多种链路上运行(既需要满足上层又需要满足下层);
PPP协议不需要的功能:
- 纠错;
- 流量控制;
- 给帧添加序号,判断帧的重复、失序、丢失;
- 多点线路;
- 半双工或单工链路;
PPP协议的组成部分:
- 一个将 IP 数据报封装到串行链路的方法;
- 链路控制协议 LCP(Link Control Protocol):用来建立、检测链路连接的协议;
- 网络控制协议 NCP(Network Control Protocol):用来支持多种网络层协议;
四、以太网
适配器:计算机与外界局域网的连接是通过通信适配器(网卡)进行的。
1. 适配器的主要功能如下:
- 数据串行传输和并行传输的转换; 适配器和局域网之间的通信是通过双绞线或电缆进行串行传输的,适配器和计算机之间的通信则是通过主板上的IO总线的方式进行传输的。
- 对数据进行缓存;局域网的数据传输率和计算机的数据传输率不一致,需要缓存调整;
- 在计算机操作系统中安装设备;在主板安装适配器时必须将管理适配器的设备驱动程序安装在计算机操作系统中;
- 实现以太网协议;
2. 以太网 MAC网帧
MAC地址:媒体接入层上使用的地址,也叫做物理地址、硬件地址或者链路地址,由网络设备制造商生产时写在硬件内部。MAC地址与网络无关,也即无论将带有这个地址的硬件设备接入到网络的何处,都有相同的MAC地址。现在一般采用 6字节(48位)的MAC地址。前24位由 IEEE 注册,后24位由厂家指定。
在OSI 模型中,第三层网络层负责 IP 地址,第二层数据链路层则负责 MAC 地址。因此一个主机会有一个唯一的MAC地址,而每个网络位置会有一个唯一的IP地址。工作在数据链路层的交换机维护着 计算机MAC地址和MAC地址表,交换机根据接收到的数据帧中的 “目的MAC地址” 字段来转发数据帧。
以太网 MAC帧的格式:
组成:
- 6字节长的目的地址和源地址;
- 2字节的类型字段;用来标志上一层使用的是什么协议,以便把接收到的MAC帧的数据上交给上一层;
- 数据字段(46~1500字节长度),46是通过最小长度64字节减去18字节的首部和尾部;
- 4字节的帧检验序列FCS(使用CRC冗余检验);
注意:
当数据字段小于46字节时,会在尾部进行填充。但是这样上层协议如何知道填充字段的长度呢?
当上层使用 ip 协议时,其首部会有一个总长度字段,总长度字段长度+填充字段长度=MAC帧数据部分长度
在传输媒体上实际传输的要比MAC帧还多8个字节,这是因为当一个站刚开始接收MAC帧时,由于适配器的时钟没有与到达的比特流形成同步,因此MAC帧最前面的若干位就会无法接收,这个帧就会被丢弃。因此从MAC 子层向下传输到物理层时还要再帧的前面加上8个字节(7字节前同步码:使接收端的适配器在接受MAC帧时能够迅速调整其时钟频率;1字节的帧开始定界符:前6位与前同步码作用相同,后2位都是1为了提示适配器接收MAC帧);
以太网帧在传输时,接收端只需要找到它的开始定界符,后续到达的比特流都属于一个MAC帧。它不使用帧结束定界符也不需要使用字节插入来保证透明传输。
3. 以太网独特的工作方式
(1)较灵活的无连接工作方式—-采用广播的形式,尽最大努力交付,不可靠交付;
(2)曼彻斯特编码:方便发送方、接收方进行同步,缺点是跳变太多,频带宽度比原始基带信号增加一倍;
(3)CSMA/CD 协议,载波监听多点接入/碰撞检测:计算机边发送数据边检测信道上的信号电压大小。在发送期间进行碰撞检测,以检测冲突。使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
4. CSMA/CD 协议:
A 和 B分别双向发送数据,那么一定会在某一时刻两列电磁波相遇,相遇后的电磁波会被叠加,那么在两个接收端接收到的信号数据都将被废弃。

解决方法:

二进制指数类型退避算法:
发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再次发送数据。
基本退避时间为争用期 2t,从整数集合 [0,1,2,3,….,(2^k-1)] 中随机选择一个值 r。重传所需的时延就是 r 倍的基本退避时间;参数 k 的计算: k = min[重传次数,10]
。当 k ≤ 10时,参数 k 等于重传次数。如果重传达到16次都不成功,向上层报告。
可以发现,重传次数越多,每个站等待时间相同的几率就越小,那么就能够避开彼此正常传输了。
由此得出结论,在 10 M/s 以太网取 51.2us 为争用期的长度。对于 10M/s 以太网,在争用期内最多可以发送 512bit 即 64字节的数据。
如果这64字节的数据没有发生冲突,那么说明后续的数据就不会发生冲突。
因此 64字节就变成了有效帧的最短长度,如果小于这个值说明这个帧的数据不完整,在传送过程中可能发生了冲突,因此会被丢弃。
因为发送过程总可能会发生冲突,为了保证信道利用率,就必须增加帧的长度,因此最短帧长就是争用期内能够发送的数据量。

总结:**先听后发 → 边听边发 → 冲突停止 → 延迟后发 **
五、集线器
集线器仅仅将计算机之间的连接由总线方式改变为星型结构;在逻辑上仍然是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。是一个物理层的设备。
集线器和交换机的区别:
工作层次:
集线器工作在物理层,采用广播的方式发送数据,因此网络性能会受到限制;
交换机工作在数据链路层,通过学习后每个端口形成一张 MAC地址转发表,根据数据包的 MAC地址转发数据,而不是广播形式;
转发方式:
集线器工作原理是广播形式,无论哪个端口收到数据之后,都要广播到所有的端口,当接入设备比较多时,网络性能就会受到影响;
交换机根据 MAC地址转发数据,受到数据包之后,检查报文的目的MAC地址,找到对应的端口进行转发;
传输模式:
集线器内部采用总线型拓扑结构,各个节点公用一条总线通信,数据包的发送和接收采用 CSMA/CD 协议,在同一时间必须是单向的,只能维持在半双工模式下。
交换机上两个端口进行通信时,它们之间的通道是相互独立的,可以进行全双工通信。

六、交换机
1.交换机使用了生成树协议
(1) 存在的问题:
当增加了冗余链路时,交换机自学习的过程就可能导致以太网帧在网络的某个环路中无限制地兜圈子。这样就在网络中产生了环路;
例如 主机A的数据帧的目的地址为1号端口,那么就会通过交换机一的3号端口转发给交换机二的1号端口;
同时交换机二接收到数据帧后发现目的MAC地址为4号端口,那么又会通过交换机二的2号端口发送给交换机一的4号端口,这样就形成了回路。数据帧会在交换机一和交换机二之间来回不停地传输,这样就消耗掉了很多资源。

(2) 解决方案:
IEEE 802.1 标准制定了一个生成树协议 STP(Spanning Tree Protocol)。
在不改变网络拓扑结构的前提下,在逻辑上切断某些链路,使得一台主机到其他所有主机的路径是无环路的树状结构,从而消除了兜圈子的现象。
2. 虚拟局域网
当多个主机处在不同的局域网环境中,它们是不能直接进行数据交换的;但是通过连接在同一个虚拟局域网环境下,多个主机之间能够通过广播的形式交换数据。

如图,A1、A2、A3、A4处于同一虚拟局域网 VLAN1中,它们虽然没有连接在同一以太网交换机上但是仍然能够交换数据信息;
A1、A2、B1、C1虽然连接在同一交换机下,但是所处的虚拟局域网不同,因此不能交换数据。