在ISO提出的OSI七层模型中,数据链路层处于第二层。在这一层,我们重点关注点对点之间的通信。关于点对点通信,是指网内任意两个用户之间的信息交换。在这里不过多的搬抄书上的概念,计算机网络的学习应当是以生活中的实践作为基础,来加深理论的理解。
1.数据链路层
首先,如同在概述中提到的一样,我们研究网络应当时刻站在分层的角度去研究,那么两台主机之间的通信,有关数据链路层的通信如下:
如果我们站在数据链路层的角度上,就可以简单的将上图的通信过程简化如下:
在上图中,我们就只考虑数据链路层的数据通信。将主机H1到主机H2之间的所有的通信认为是所有设备在数据链路层间的通信,不用去理睬上层和下层之间的关系和各层所做的功能。
与此同时,我们需要知道数据链路层在做什么,能干什么。数据链路层的一个作用是帧的封装,而另一个作用则是寻址。先说说寻址,在网络层有一个寻址很接近的功能–寻路,要区分也不难,寻址是将物理地址和IP地址进行对应,而寻路则是分组的路由转发时使用的规则。再说帧的封装,网络层将IP数据报交给数据链路层,然后在数据链路层经过封装之后才能在物理链路上以比特串进行传输。
这里要区分两个概念:链路和数据链路,听名字也就很好区分,链路是两相邻节点之间的一段物理链路,而数据链路则是物理链路以及该链路的协议、传输的数据组合而成的。
在数据链路层,我们将PDU(协议数据单元)称之为帧。帧是数据报文的封装,是将网络层的数据进一步封装的结果,也就是给IP数据包添加首部和尾部之后的结果。
点对点信道的数据链路层通信时的步骤如下:
- 帧封装:将IP数据包添加首部和尾部封装成帧
- 发送:将封装好的帧发送给另一台主机
- 检错:如果收到的帧无差错则上交上面的网络层,否则丢弃该帧
帧的格式如下:
一个帧包含三个部分:分别是帧首部、帧尾部以及帧的数据部分,各种数据链路层协议都规定了帧的数据部分的最大长度——最大传送单元(MTU)。
帧首部和帧尾部的作用在于定界,由于在物理层传输只有比特1和0,为了区分一整个帧的位置添加了特有的标志来表示帧头和帧尾,当要在数据中传输该特有的标志时,如同在C语言中的转义符一样,在帧中也有一个特有的转义字段用来转义在数据部分表示的帧首和帧尾的标志,表示该转义标志也是使用同样的方式。
在数据链路层的数据交换被认为是透明传输的,关于透明传输,可以理解为就是不需要关心传输的过程,任意数据只要交给数据链路层,那么由该层传数出去就可以了,我们并不用去关心细节问题,实际上当网络层的IP数据报传送到数据链路层之后,就要进行帧的封装、定界、加入转义标志、字符填充、添加帧校验序列(FCS)等等一系列处理,但是在透明传输的驱使下,这些我们都不需要去关系,毕竟是透明的。
上面我们也说到了在帧中要添加帧校验序列,帧校验序列是使用各种检错方法得到的一串用来检错的一串连续bit。常用的检错方法是CRC。可自行搜索计算方法。
帧校验是为了检查帧的bit差错,即就是我们接收到的帧若发现校验不正确则直接丢弃,并不会再交给网络层去处理,所以无法处理帧丢失、重复、乱序等问题,当然,我们可以增加帧编号、确认、重传机制来解决这些问题,但是实际上并没有进行应用,而是交给了上层协议去处理这些问题(如TCP/IP协议中的三次握手这些机制保证传输的可靠性)。
2.PPP协议
PPP协议满足如下需求:
- 简单
- 封装成帧:将特殊字符作为帧定界符,用来区分帧的开始和结束位置
- 透明性:要保证数据传输的透明性
- 多种网络层协议:要保证在同一链路上支持多种网络层协议的运行
- 多种类型链路:要保证能够在多种类型的链路上运行,如串行、并行,同步或异步等。
- 差错检测:必须保证能够立即丢弃有差错的帧
- 检测连接状态
- 最大传输单元
- 网络层地址协商:必须提供协商网络层地址(IP)的机制
- 数据压缩协商
PPP协议不需要如下功能:
- 纠错
- 流量控制
- 序号
- 多点链路:只支持点对点的链路通信
- 半双工或单工链路
PPP协议不需要的功能大部分也为数据链路层不需要具备的功能,因为这些功能的实现在高层(网络层、应用层)能够做到。
有关PPP协议,与生活较为相关的PPPoE,就是PPP over Ethernet,也就是我们常用的PPPoE拨号(宽带拨号)经常使用的协议,这个协议把PPP帧再封装到以太网帧中,该协议就能从ISP经过网络地址协商拿到IP地址共本地计算机使用。
PPP协议的三个组成部分:
- 将IP数据报封装到串行链路的方法
- 用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)
- 一套网络控制协议NCP(Network Control Protocol),用来支持不同的网络层协议
PPP帧的格式如下:
其中首部和尾部的F为标志字段,作为定界符使用,首部中的A为地址字段,C为控制字段,但这两个字段并未携带PPP帧的信息。
这里的PPP帧和前面说到的数据链路层的帧有着一些相似的地方,知识细节不同,比如定界符、转义的字段填充、零比特填充(保证了透明传输,防止出现连续6个1,01111110是定界符)等。
3.CSMA/CD协议
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)即带冲突检测的载波监听多路访问技术(载波监听多点接入/碰撞检测)
首先,多点接入说明是总线型网络,载波监听就是发送前先监听,而碰撞检测就是边发送边监听。
在总线型网络中,多台主机共享总线资源,当两台或两台以上的主机同时或者先后在同一信道上进行数据的传输的时候就有可能发送数据叠加,信道上的信号就会失真,而无法恢复,所以此时适配器就应当立即停止发送数据,避免进一步的浪费网络资源,而CSMA/CD就是来处理这个问题的。
首先,我们需要了解,在信道上的数据传输是有时延的,因而当在站点A发送了数据之后,可能在B站点并没有检测到信道上有数据传输,此时当B再次往信道上发送数据之后,就可能会在信道的中途产生碰撞。
关于碰撞的退避算法,以太网使用的是截断二进制指数退避算法,可自行查看。与此同时,以太网还会采用称作强化碰撞的措施,该措施会发送认为干扰信号,以便让所有用户都知道现在已经发生了碰撞。
数据链路层的知识包含了很多,这里就不在搬抄书本的知识,有关PPP协议和CSMA/CD协议可以进一步查看其它的相关知识,后面网络层的协议将会以实例的方式总结。