基本问题
数据链路层的协议有很多,但是都有三个基本问题:封装成帧,透明传输和差错检测。
封装成帧
封装成帧(Framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。帧是数据链路层的传送单元,它包括一定数量的数据和一些必要的控制信息(如同步信息、地址信息、差错控制等)。首部和尾部的一个重要作用就是进行帧定界。
在接收端,数据链路层可以从物理层接收到的比特流中准确地识别出一个个帧的开始和结束位置,这样就能够将比特流恢复成原始的数据。
透明传输
透明传输(Transparent Transmission)是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
为了实现透明传输,可以采取字节计数法、字符填充法或零比特填充法等。这些方法都是在数据部分的前后加上一些特殊的标记,以便在接收端能够准确地识别出数据的开始和结束位置。
差错检测
差错检测(Error Detection)是数据链路层的一个重要功能,用于检测传输过程中是否出现了差错。由于信道噪声的干扰,数据在传输过程中可能会出现错误。为了降低数据传输的差错率,数据链路层通常会对传输的数据进行差错检测。
常用的差错检测方法有循环冗余校验(CRC)和奇偶校验等。其中,CRC是一种基于二进制除法运算的校验方法,它能够检测出数据在传输过程中是否出现了多位错误。而奇偶校验则是一种简单的校验方法,它只能检测出数据在传输过程中是否出现了奇数位或偶数位的错误。
在数据链路层中,通常会将CRC校验码添加到帧的尾部,以便在接收端进行差错检测。如果接收端检测到CRC校验码与发送端不一致,则说明数据在传输过程中出现了错误,接收端会要求发送端重新发送该帧。
适配器
计算机和外界局域网的接口是通过适配器(adapter),就是我们常说的网卡NIC。
以太网
以太网这个术语一般是指数字设备公司(Digital Equipment Corp)、英特尔公司(IntelCorp.)和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率为10 Mb/s,地址为48 bit。
IEEE802后面又定义了多个标准,把数据链路层拆分成LLC(逻辑链路控制)和MAC(媒体接入控制),再后面发展就只剩下DIX Ethernet V2也就是常说的以太网,仅只有MAC协议。
CSMA/CD
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)是一种用于局域网(LAN)的介质访问控制(MAC)协议,特别是在以太网(Ethernet)中。这个协议确保当多个设备同时尝试发送数据时,它们可以高效地共享单一传输介质(如双绞线、同轴电缆或光纤)。以下是CSMA/CD的详细解析:
工作原理
CSMA/CD的工作原理可以分为四个主要步骤:
- 载波侦听(Carrier Sense)在发送数据之前,设备会监听传输介质是否空闲。如果介质空闲,设备会等待一个随机时间(称为"退避时间")后发送数据,以减少多个设备同时发送数据导致的冲突。
- 多路访问(Multiple Access)当设备确定介质空闲并且退避时间结束后,它会开始发送数据。多个设备可以同时监听并尝试访问传输介质。
- 冲突检测(Collision Detection)在发送数据的同时,设备也会监听传输介质以检测是否有其他设备同时发送数据。如果检测到冲突(即有其他设备同时发送数据),设备会立即停止发送当前数据帧,并发送一个特殊的信号来通知其他设备发生了冲突。
- 冲突后行为(Post-Collision Behavior)一旦检测到冲突,发送数据的设备会等待一个随机时间(通常是退避时间的两倍或更多)后重试发送。这个随机等待时间基于二进制指数退避算法,旨在减少冲突发生的概率。
特点
- 简单性:CSMA/CD协议相对简单,易于实现。
- 效率:通过载波侦听和冲突检测,CSMA/CD协议能够高效地共享传输介质。
- 可靠性:在冲突发生时,设备会重试发送数据,确保数据的可靠传输。
- 公平性:通过二进制指数退避算法,CSMA/CD协议能够在一定程度上保证各个设备公平地访问传输介质。
- 不适合高负载网络:在高负载网络环境下,冲突可能会变得频繁,导致网络性能下降。
- 不适用于无线环境:CSMA/CD依赖于物理介质上的信号检测来发现冲突,这在无线环境中难以实现。
- 无法完全避免冲突:尽管CSMA/CD可以减少冲突的发生,但在某些情况下仍然无法完全避免冲突。
PPP协议
PPP协议,全称为Point-to-Point Protocol,是一种数据链路层协议,它提供了在两个节点之间进行数据封装和传输的标准方法。
PPP协议广泛应用于需要点对点连接和数据传输的场合,如拨号上网、VPN连接、专线连接等,但不适用于广域网和提供加密等。
特点:
- 动态IP地址分配:PPP具有动态分配IP地址的能力,允许在连接时刻协商IP地址。
- 多网络协议支持:PPP支持多种网络协议,如TCP/IP、NetBEUI、NWLINK等。
- 错误检测:PPP具有错误检测能力,但不具备纠错能力,因此被归类为不可靠传输协议。
- 网络开销小:由于无重传机制,PPP在数据传输时网络开销小,速度快。
- 身份验证功能:PPP提供了强大的身份验证功能,如CHAP(Challenge Handshake Authentication Protocol)和PAP(Password Authentication Protocol)。
MAC帧
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改。
MAC由5个字段组成。MAC帧的帧头和帧尾包含必要的控制信息,如同步信息、地址信息、差错控制信息等。
第三个字段类型表示上一层用什么协议,以便把收到的MAC帧数据交给上一层这个协议。例如:0x0800:IPv4协议、0x86DD:IPv6协议。
数据字段是要传输的实际数据,长度在46-1500字节之间,长度不足46字节时,会用填充字节(Padding)补足。
CRC用于检验帧的完整性,采用循环冗余校验(CRC)算法。接收端通过计算和比较FCS来确定数据是否在传输过程中损坏。
无效帧
- 帧长度不正确:长度不在46-1500字节之间。
- 帧校验序列(FCS)错误:FCS用于检验帧的完整性。如果接收端计算出的FCS与帧中的FCS不匹配,说明帧在传输过程中发生了错误,因此该帧被视为无效帧。
- 地址错误:如果帧的目的地址或源地址不正确(如全零或全一地址),该帧可能被视为无效帧。
- 帧的长度不是整数个字节
对于无效帧就直接丢弃了,以太网不负责重传。
MTU
数据帧有一个最大的长度限制是1500叫MTU,如果 I P层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。
MTU对UDP协议的影响
当UDP数据包的大小超过链路的MTU时,数据包在发送前需要进行分片。分片发生在IP层,由发送端的网络接口根据链路的MTU将过大的数据包拆分成多个较小的数据包进行传输。
UDP协议本身不提供数据包的确认和重传机制,因此数据包的丢失率相对较高。当数据包的大小超过链路的MTU并导致分片时,这些分片需要被重新组装成原始的数据包。这个过程需要消耗额外的CPU资源,并且可能增加数据包的丢失率(如果分片在传输过程中丢失)。
MTU对于TCP协议的影响
当TCP数据包(实际上是IP数据包,因为TCP是传输层协议,封装在IP数据包中)的大小超过链路的MTU时,数据包会在发送端被分片。这些分片的数据包会在网络中进行独立的路由传输,最后在接收端被重新组装成原始的TCP数据包。
分片与重组过程会增加网络延迟和CPU开销,因为每个数据包都需要被单独处理。如果数据包在传输过程中丢失了某个分片,那么整个TCP数据包都需要被重传,这会进一步降低传输效率。
TCP也使用PMTUD来动态发现路径上的最小MTU。与UDP不同的是,TCP在收到ICMP"数据包过大"错误时,会减小数据包的大小并重试,而不是简单地丢弃数据包。PMTUD有助于TCP在复杂的网络环境中选择最佳的数据包大小,以提高传输效率并减少数据包丢失。
TCP协议具有流量控制和拥塞控制机制,可以根据网络状况动态调整发送速率和接收窗口大小。这些机制与MTU密切相关,因为数据包的大小直接影响到网络的拥塞程度和传输效率。当MTU设置得过大时,可能会导致网络拥塞加剧,从而影响TCP的流量控制和拥塞控制机制的效果。