《计算机网络基础》(第四章: 数据链路层)
·
数据链路层功能
- 概念
- 数据链路层是OSI(开放系统互连)模型中的第二层,介于物理层和网络层之间。它主要负责将物理层接收到的原始比特流转换为逻辑链路,使得网络层能够将数据包发送到目标节点。数据链路层的基本单位是帧,帧是包含数据和控制信息的数据包。其主要功能包括链路管理、帧定界、流量控制、差错控制等。
- 例如,在以太网中,数据链路层将网络层的IP数据包封装成以太网帧,添加源和目的MAC地址等控制信息,以确保数据在局域网中的正确传输。
- 过程
- 帧封装:
- 从网络层接收数据包,在数据包的前后添加特定的帧头和帧尾,形成帧。帧头包含源MAC地址、目的MAC地址、帧类型等信息。帧尾通常包含用于差错检测的循环冗余校验(CRC)码。
- 例如,在发送一个IP数据包时,数据链路层会查找本地的MAC地址表,获取目的MAC地址(如果是在本地局域网内通信),然后将IP数据包封装成帧,在帧头写入源和目的MAC地址。
- 介质访问控制(MAC):
- 当多个设备共享同一传输介质(如以太网中的双绞线)时,需要一种机制来协调设备对介质的访问。常见的MAC方法有CSMA/CD(带有冲突检测的载波监听多路访问,用于以太网)和CSMA/CA(带有冲突避免的载波监听多路访问,用于无线局域网)。
- 以CSMA/CD为例,在发送数据前,设备先监听介质是否空闲。如果空闲,则开始发送数据;如果介质忙,则等待一段时间后再尝试。在发送过程中,同时检测是否发生冲突。如果检测到冲突,立即停止发送,并发送一个拥塞信号,等待一段随机时间后再重新尝试发送。
- 帧传输与接收:
- 帧通过物理介质(如电缆、光纤或无线信号)进行传输。接收端的数据链路层在收到信号后,首先检查帧的完整性,通过CRC校验等方式判断是否有传输错误。
- 如果帧正确无误,就去除帧头和帧尾,提取出其中的数据包并传递给网络层;如果发现错误,则丢弃该帧,并可能向发送端请求重发(取决于所采用的差错控制机制)。
- 帧封装:
- 原理
- 链路管理原理:
- 建立和维护数据链路连接。在链路建立阶段,两端的数据链路层需要进行一些初始化操作,如协商通信参数(如传输速率、双工模式等)。在链路维护阶段,要监测链路的状态,及时发现链路故障并进行恢复或重新建立连接。
- 例如,在PPP(点到点协议)连接中,链路建立时双方会通过一系列的LCP(链路控制协议)报文来协商链路参数,如最大接收单元(MRU)大小等。
- 帧定界原理:
- 通过特定的帧起始和结束标志来区分不同的帧。这样接收端就能准确地识别出每一帧的开始和结束位置,从而正确地提取帧中的数据。
- 比如,在HDLC(高级数据链路控制)协议中,使用特定的位模式“01111110”作为帧的起始和结束标志,为了避免数据中出现同样的位模式而导致误判,发送端会在数据部分遇到连续的5个“1”后插入一个“0”,接收端在收到数据后再将这个插入的“0”去掉。
- 流量控制原理:
- 防止发送端发送数据的速度过快,导致接收端来不及处理。主要通过反馈机制,接收端向发送端发送信号,告知其自己的接收能力。
- 例如,在滑动窗口机制中,接收端会告诉发送端自己的接收窗口大小。发送端根据这个窗口大小来控制发送的数据量。如果接收窗口大小为0,发送端就会暂停发送,直到接收端通知窗口大小不为0。
- 差错控制原理:
- 通过检错和纠错机制来确保数据的准确性。检错主要是使用校验码(如CRC),在发送端计算帧的校验码并添加到帧尾,接收端重新计算校验码并与收到的校验码进行比较。如果不一致,则表示帧出错。
- 纠错方法有多种,如前向纠错(FEC),它在发送的数据中添加额外的冗余信息,使得接收端在一定程度上能够自动纠正错误。不过,FEC会增加数据传输的开销。
- 链路管理原理:
- 实例
- 以太网(Ethernet):
- 以太网是最常见的数据链路层技术之一。在一个办公室局域网中,多台计算机通过以太网交换机连接。当计算机A要向计算机B发送数据时,数据链路层首先获取计算机B的MAC地址(通过ARP协议)。然后将网络层的IP数据包封装成以太网帧,帧头包含计算机A的MAC地址(源MAC)和计算机B的MAC地址(目的MAC),帧尾包含CRC校验码。
- 计算机A将帧发送到交换机,交换机根据目的MAC地址将帧转发到计算机B所在的端口。计算机B的数据链路层收到帧后,进行CRC校验,若无误则提取IP数据包并传递给网络层。
- 无线局域网(Wi - Fi):
- 以家庭Wi - Fi网络为例,智能手机要连接到无线路由器发送数据。在数据链路层,Wi - Fi采用CSMA/CA机制。智能手机在发送数据前先监听无线信道是否空闲。
- 由于无线信号容易受到干扰,为了确保数据传输的准确性,Wi - Fi还采用了更复杂的差错控制机制。发送的数据帧包含多个子字段用于错误检测和纠正,并且会进行多次握手确认来保证数据接收成功。
- 以太网(Ethernet):
- 分类
- 按传输介质分类:
- 有线数据链路层协议:如以太网(Ethernet)、令牌环(Token Ring)等。以太网使用双绞线、光纤等有线介质,通过MAC协议实现多设备共享介质通信;令牌环则是一种环形拓扑结构的网络,设备通过获取令牌来发送数据。
- 无线数据链路层协议:如Wi - Fi(IEEE 802.11标准)、蓝牙(Bluetooth)等。Wi - Fi用于实现无线局域网通信,覆盖范围相对较大,适合室内外的网络接入;蓝牙主要用于短距离设备之间的无线连接,如手机与蓝牙耳机之间的连接。
- 按链路管理方式分类:
- 面向连接的数据链路层协议:例如,PPP(点到点协议)用于在两个节点之间建立可靠的点到点连接。在数据传输前,需要先建立连接,传输过程中进行流量控制和差错控制,传输结束后释放连接。
- 无连接的数据链路层协议:像以太网在一定程度上是无连接的,它不保证数据一定能被目的设备接收,而是依赖上层协议(如TCP)来处理可能出现的传输问题。
- 按传输介质分类:
- 发展
- 早期的数据链路层技术主要是为了解决简单的本地网络连接问题。例如,早期的以太网技术(如10Base - T)传输速率较低,只有10Mbps,随着技术的发展,出现了高速以太网(如100Base - T、1000Base - T,传输速率分别达到100Mbps和1000Mbps)。
- 无线数据链路层技术的发展更是日新月异。从早期的低速、短距离无线通信技术,到现在广泛应用的Wi - Fi技术,其传输速率和覆盖范围不断提高。同时,为了满足物联网等新兴应用的需求,低功耗、短距离的数据链路层协议(如ZigBee、LoRa等)也在不断发展,这些协议可以使传感器等设备以较低的功耗实现长距离的数据传输和通信。
- 功能
- 链路管理功能:包括链路的建立、维护和释放。例如,在网络设备开机时,数据链路层要与相邻设备建立连接,在通信过程中监测链路状态,当通信结束或链路出现故障时,及时释放或修复链路。
- 帧封装与解封装功能:将网络层传来的数据包封装成帧,添加帧头和帧尾信息,在接收端则去除这些信息,提取出数据包传递给网络层。这就像给包裹添加收件人和寄件人地址(帧头)以及包裹的完整性校验码(帧尾)一样。
- 介质访问控制功能:协调多个设备对共享传输介质的访问。在共享式以太网中,通过CSMA/CD机制防止设备之间的数据冲突,确保每个设备都有公平的机会使用介质传输数据。
- 流量控制功能:确保发送端的发送速度与接收端的接收能力相匹配。如采用滑动窗口机制,接收端根据自己的缓存大小和处理能力调整接收窗口大小,发送端根据这个窗口大小控制发送数据量,避免接收端缓存溢出。
- 差错控制功能:通过检错和纠错机制保证数据传输的准确性。如CRC校验用于检测传输过程中的数据错误,当检测到错误时,接收端可以要求发送端重发数据,或者在采用前向纠错机制的情况下,直接纠正错误。
成帧
-
概念
- 定义:数据链路层位于物理层和网络层之间,成帧是数据链路层的重要功能之一。成帧是指将物理层接收的原始比特流按照一定的规则划分成一个个数据帧,每个数据帧都包含了发送方和接收方的地址信息、控制信息、数据信息以及用于差错检测的校验信息等部分。数据帧是数据链路层进行数据传输的基本单位,就像包裹一样,将网络层的数据打包后进行传输。
-
过程
- 帧定界:首先要确定每一帧的开始和结束位置,这就是帧定界的过程。常见的帧定界方法有字符填充法和比特填充法。
- 字符填充法:在数据帧的开头和结尾使用特定的字符作为帧定界符。例如,在面向字符型的数据链路协议中,使用ASCII码中的DLE(数据链路转义)字符作为帧开始和结束的标志。当数据部分出现与帧定界符相同的字符时,需要在该字符前面插入一个DLE字符进行转义,以避免接收方将数据中的字符误认为是帧定界符。
- 比特填充法:主要用于面向比特型的数据链路协议。它在数据帧的开头和结尾使用特定的比特模式作为帧定界符。以HDLC(高级数据链路控制)协议为例,它使用“01111110”作为帧定界符。在数据部分,如果出现连续的5个“1”,则在其后插入一个“0”,以避免数据部分出现与帧定界符相同的比特模式。接收方在接收数据时,会将插入的“0”删除,恢复原始数据。
- 帧首部和尾部添加:在确定了帧的边界后,需要在帧的开头添加首部,在结尾添加尾部。首部通常包含源地址、目的地址、帧类型(如数据帧、控制帧等)、帧编号等信息,这些信息有助于接收方正确地接收和处理数据帧。尾部主要包含用于差错检测的校验和(如CRC,循环冗余校验)等信息,用于接收方验证数据帧在传输过程中是否出现错误。
- 数据封装:将网络层传递下来的数据按照一定的格式封装到帧的数据部分。这个过程涉及到数据的分段(如果网络层数据长度超过帧的数据部分允许的最大长度)和填充(如果网络层数据长度小于帧的数据部分允许的最大长度,则需要进行填充以达到最小长度要求)等操作。
- 帧定界:首先要确定每一帧的开始和结束位置,这就是帧定界的过程。常见的帧定界方法有字符填充法和比特填充法。
-
原理
- 差错检测原理(以CRC为例):CRC校验是数据链路层常用的差错检测方法。其原理是基于多项式除法。发送方在生成数据帧时,会将帧的数据部分看作一个多项式的系数序列。然后,用这个多项式除以一个预先约定的生成多项式(例如CRC - 32使用的生成多项式),得到的余数就是CRC校验码。将校验码添加到数据帧的尾部发送给接收方。接收方收到数据帧后,用同样的生成多项式对包括数据部分和校验码在内的整个帧进行除法运算。如果余数为0,则说明数据帧在传输过程中没有出现错误;否则,就认为数据帧出现了差错,接收方会丢弃该帧,并可能请求发送方重新发送。
- 流量控制原理(以滑动窗口机制为例):滑动窗口机制用于控制发送方的发送速率,避免接收方来不及接收而导致数据丢失。发送方和接收方都维护一个窗口,窗口大小表示可以连续发送或接收的数据帧数。发送方根据接收方反馈的窗口大小来调整自己的发送行为。例如,接收方的窗口大小为3,发送方就可以连续发送3个数据帧,然后等待接收方的确认。接收方在成功接收并处理一个数据帧后,会向发送方发送确认信息,并将窗口向前滑动一个位置,表示可以接收下一个数据帧。发送方收到确认后,也会将自己的窗口向前滑动,继续发送数据帧。
-
示例
- 以太网中的成帧:在以太网中,数据链路层采用IEEE 802.3标准进行成帧。以太网帧的首部包含目的MAC地址(6字节)、源MAC地址(6字节)、帧类型(2字节)等信息。数据部分长度可变,范围在46 - 1500字节之间。尾部包含4字节的CRC校验码。当计算机A要向计算机B发送数据时,数据链路层会将网络层的IP数据包封装到以太网帧的数据部分,添加首部和尾部后,通过物理层的双绞线或光纤发送出去。接收方计算机B的数据链路层收到以太网帧后,首先检查MAC地址是否是自己的地址,然后进行CRC校验。如果校验通过,就将数据部分提取出来传递给网络层。
- PPP协议中的成帧:PPP(点到点协议)常用于广域网中连接两个节点,如通过拨号上网连接用户计算机和ISP(互联网服务提供商)的服务器。PPP帧的首部和尾部各有一个字节的标志字段(值为0x7E)用于帧定界。首部还包含地址字段(值为0xFF)、控制字段(值为0x03),数据部分长度可变,最大为1500字节左右,尾部包含2字节的FCS(帧校验序列)用于差错检测。在拨号上网过程中,用户计算机和ISP服务器之间的数据就是通过PPP帧进行传输的。
-
分类
- 面向字符的帧格式:这种帧格式主要用于早期的通信协议,数据是以字符为单位进行传输和处理的。帧的格式通常是由一系列字符组成,包括帧开始字符、地址字符、控制字符、数据字符和帧结束字符等。例如,IBM的二进制同步通信(BSC)协议就是一种面向字符的协议,它的帧格式中使用特定的ASCII码字符来表示不同的功能部分。
- 面向比特的帧格式:在现代网络通信中,面向比特的帧格式更为常见。这种格式以比特为单位来构建帧,帧的结构更加灵活,能够更好地适应各种不同的数据类型和通信需求。例如,HDLC协议和PPP协议都是面向比特的协议,它们的帧定界、数据封装和差错检测等操作都是基于比特进行的。
-
发展
- 早期简单协议阶段:在计算机网络发展的早期,数据链路层协议相对简单,主要是为了满足简单的数据传输需求。例如,早期的ALOHA协议是一种用于无线通信的随机接入协议,它的数据链路层成帧比较简单,没有复杂的差错控制和流量控制机制,主要关注数据的发送和接收。
- 标准化和功能增强阶段:随着网络技术的发展,数据链路层协议逐渐标准化。例如,IEEE 802系列标准的出现,使得局域网的数据链路层协议(如以太网)得到了统一和规范。这些协议在成帧方面增加了更完善的差错检测(如CRC校验)和流量控制(如以太网中的CSMA/CD结合滑动窗口机制)功能,以提高数据传输的可靠性和效率。
- 适应新环境和新技术阶段:近年来,随着物联网、高速宽带网络等新兴技术的发展,数据链路层成帧也在不断适应新的需求。例如,在物联网环境下,一些低功耗、短距离通信协议(如ZigBee、蓝牙等)的数据链路层在成帧时会考虑到设备的低功耗特性和小数据包传输的特点,采用更简洁的帧格式和高效的差错控制方法,以实现节能和高效的数据传输。
-
功能
- 数据封装和传输:将网络层的数据封装成帧,为网络层数据提供了一个传输的载体,使得数据能够在物理介质上以帧为单位进行传输,确保数据从一个节点准确地传输到另一个节点。
- 差错控制:通过在帧的尾部添加校验信息(如CRC校验码),可以检测数据帧在传输过程中是否出现错误。如果接收方发现错误,可以采取相应的措施,如丢弃错误帧、请求发送方重新发送等,从而保证数据传输的准确性。
- 流量控制:利用滑动窗口等机制来控制发送方和接收方之间的数据传输速率,防止发送方发送数据过快而导致接收方无法及时处理,避免数据丢失,提高数据链路的传输效率。
- 链路管理:包括建立、维护和拆除数据链路。在链路建立阶段,双方会协商一些参数,如帧格式、传输速率等;在链路维护阶段,通过交换控制帧等方式来确保链路的正常运行;在链路拆除阶段,释放相关的资源。
差错控制
- 差错控制概念
- 差错控制是指在数据通信过程中,检测和纠正数据传输错误的技术和方法。数据在传输过程中可能会受到各种干扰,如电磁干扰、噪声等,导致数据出现错误。例如,在计算机网络中,从一台服务器向另一台客户端传输文件时,文件的二进制数据可能会因为网络线路质量差而发生改变。差错控制的目的就是确保数据的准确性和完整性,使接收方能够正确地接收发送方发送的数据。
-
差错控制过程
- 差错检测:
- 发送方在发送数据之前,使用特定的算法对数据进行处理,生成一些附加信息,如校验和、循环冗余校验(CRC)码等。例如,在简单的奇偶校验中,发送方会统计数据中“1”的个数,然后在数据后面添加一个奇偶校验位,使整个数据(包括校验位)中“1”的个数为偶数(偶校验)或奇数(奇校验)。
- 接收方收到数据后,使用相同的算法对收到的数据进行计算,然后将计算结果与发送方发送的附加信息进行比较。如果不一致,就说明数据在传输过程中出现了错误。
- 差错纠正(如果支持):
- 对于一些具有纠错能力的编码方式,当检测到错误后,接收方可以根据编码规则和错误情况进行纠正。例如,汉明码可以纠正一位错误。接收方通过计算校验位和数据位之间的关系,确定错误位的位置,然后将错误位进行翻转,从而纠正错误。
- 差错检测:
-
差错控制原理
- 冗余原理:通过在数据中添加冗余信息来实现差错控制。这些冗余信息是根据原始数据按照一定的规则生成的。例如,CRC编码是一种多项式编码,发送方将数据看作是一个多项式的系数,然后用一个生成多项式去除这个多项式,得到的余数作为冗余信息(CRC码)添加到数据后面。接收方用相同的生成多项式去除接收到的数据(包括CRC码),如果余数为0,则认为数据正确,否则认为数据有错误。
- 距离度量原理:在编码理论中,码距是衡量编码纠错和检错能力的一个重要指标。码距是指两个合法编码之间不同比特位的数目。例如,对于一个码距为3的编码,如果在传输过程中出现了一位错误,那么接收方收到的编码会与正确的编码距离为1,而与其他合法编码的距离至少为2,这样接收方就可以检测到错误。如果出现两位错误,接收方可能无法正确判断是哪两个位出错,但是可以知道数据有错误,即可以检测出两位错误;如果码距足够大,还可以纠正错误,如汉明码就是通过合理设计码距来实现纠错的。
-
差错控制实例
- 计算机网络中的TCP协议差错控制:
- TCP协议是一种可靠的传输协议,它使用了序列号和确认号来实现差错控制。发送方在发送数据段时,会给每个数据段加上一个序列号。接收方收到数据段后,会发送一个确认号,确认号表示期望收到的下一个数据段的序列号。如果发送方在一定时间内没有收到确认号,它会认为数据段丢失,然后重新发送数据段。这是一种基于反馈的差错控制方式,通过接收方的确认来检测数据是否正确传输。
- 同时,TCP还使用校验和来检测数据是否在传输过程中出现错误。发送方在发送数据段时,计算数据段的校验和并添加到数据段头部。接收方收到数据段后,重新计算校验和,如果与发送方发送的校验和不一致,就认为数据段出现错误,然后丢弃该数据段,并通过不发送确认号来通知发送方重新发送。
- 存储系统中的差错控制:
- 在硬盘存储数据时,也会采用差错控制技术。例如,硬盘使用纠错码(ECC)来检测和纠正数据错误。当硬盘写入数据时,会根据数据生成ECC码并存储在硬盘的特定区域。当读取数据时,会重新计算ECC码,并与存储的ECC码进行比较。如果出现错误,ECC码可以纠正一定数量的错误位,确保数据的准确性。这种差错控制技术可以防止因硬盘磁道损坏等原因导致的数据错误。
- 计算机网络中的TCP协议差错控制:
-
差错控制分类
- 检错码和纠错码:
- 检错码:只能检测出数据传输过程中是否出现错误,但不能纠正错误。例如,奇偶校验码就是一种简单的检错码。它通过在数据后面添加一个奇偶校验位,使整个数据(包括校验位)的奇偶性符合一定的规则。接收方可以通过检查数据的奇偶性来判断数据是否出现错误。如果出现错误,接收方只能要求发送方重新发送数据。
- 纠错码:不仅能够检测出数据传输过程中出现的错误,还能够纠正错误。如前面提到的汉明码和ECC码。汉明码通过在数据位之间插入校验位,根据校验位和数据位之间的关系来检测和纠正一位错误。ECC码在存储系统等领域广泛应用,可以纠正多位错误。
- 前向纠错(FEC)和自动重传请求(ARQ):
- 前向纠错(FEC):发送方在发送数据时,对数据进行编码,添加足够的冗余信息,使接收方能够在不请求发送方重新发送的情况下,自行纠正数据传输过程中出现的错误。这种方式适用于实时性要求较高的场合,如卫星通信、视频广播等。因为在这些场合,重新发送数据可能会导致延迟,影响服务质量。
- 自动重传请求(ARQ):接收方在检测到数据错误后,通过反馈机制通知发送方重新发送数据。这是一种基于反馈的差错控制方式,如前面提到的TCP协议中的差错控制就属于ARQ方式。它的优点是简单有效,缺点是可能会因为频繁的重传请求而导致网络拥塞和延迟增加。
- 检错码和纠错码:
-
差错控制发展
- 早期的差错控制技术比较简单,如奇偶校验码,它只能检测出奇数个错误,并且不能纠正错误。随着通信技术和计算机技术的发展,对数据准确性的要求越来越高,差错控制技术也不断发展。
- CRC编码的出现是差错控制技术的一个重要进步。CRC码具有较强的检错能力,可以检测出多位错误,并且实现相对简单,被广泛应用于计算机网络、存储系统等领域。
- 后来,为了满足一些对实时性要求较高的场合的需求,前向纠错(FEC)技术得到了发展。FEC技术通过添加更多的冗余信息,使接收方能够自行纠正错误,减少了对反馈重传的依赖。同时,纠错码的种类也不断增加,纠错能力也不断提高,如低密度奇偶校验(LDPC)码等新型纠错码的出现,为高速数据通信和存储提供了更好的差错控制解决方案。
-
差错控制功能
- 错误检测功能:能够检测出数据在传输或存储过程中是否出现错误。这是差错控制的最基本功能,通过各种检测算法,如奇偶校验、CRC校验等,及时发现数据中的错误,为后续的纠错或重传提供依据。
- 错误纠正功能:对于一些支持纠错的编码方式,能够纠正数据中的错误。这可以减少数据重传的次数,提高数据传输和存储的效率,特别是在一些对实时性要求较高或者重传成本较高的场合,如卫星通信和一些大型存储系统中,错误纠正功能显得尤为重要。
- 保证数据完整性和可靠性:通过检测和纠正错误,确保接收方接收到的数据与发送方发送的数据一致,从而保证数据的完整性和可靠性。这对于各种数据通信和存储应用,如文件传输、数据库存储、视频广播等,都是至关重要的。
流量控制
-
概念
- 流量控制是计算机网络中的一种机制,用于协调发送端和接收端之间的数据传输速率。其主要目的是确保发送端发送数据的速度不会超过接收端能够处理和接收数据的速度,从而防止接收端因为来不及接收数据而导致数据丢失。这就好比在一个流水线上,要确保上游的产品输送速度不会超过下游的加工处理速度。
-
过程
- 基于反馈的流量控制过程(以TCP为例)
- 接收端在接收到数据后,会在确认(ACK)消息中告知发送端自己当前的接收窗口大小。接收窗口大小表示接收端当前还能够接收的数据量。例如,接收端的接收缓冲区大小为1000字节,当前已经接收并尚未处理的字节数为400字节,那么接收窗口大小就是600字节。
- 发送端根据接收到的接收窗口大小来调整自己的发送速率。如果接收窗口大小为0,表示接收端暂时无法接收新的数据,发送端就会停止发送,等待接收端重新通告一个非零的接收窗口大小。
- 发送端会持续跟踪已发送但尚未收到确认的数据量。一旦这个量接近接收窗口大小,发送端就会放慢发送速度。例如,接收窗口大小为800字节,发送端已经发送了600字节尚未收到确认,那么发送端就会谨慎地发送下一批数据,避免超过接收窗口大小。
- 基于反馈的流量控制过程(以TCP为例)
-
原理
- 滑动窗口原理(以TCP为例)
- TCP使用滑动窗口机制来实现流量控制。发送端和接收端都维护一个窗口。发送窗口用于记录可以发送的数据范围,接收窗口用于记录可以接收的数据范围。
- 发送窗口的大小由接收端通告的接收窗口大小决定。例如,接收端通告接收窗口大小为1000字节,发送端就会将自己的发送窗口设置为1000字节左右(考虑到已经发送但尚未确认的数据)。
- 随着数据的发送和接收,窗口会向前滑动。当发送端收到接收端对部分数据的确认后,发送窗口就可以向前滑动,允许发送新的数据。同样,当接收端处理完部分数据后,接收窗口也会向前滑动,并且在发送确认消息时通告新的接收窗口大小。
- 这种滑动窗口机制可以动态地调整发送端的发送速率,使其能够根据接收端的接收能力进行自适应变化。
- 滑动窗口原理(以TCP为例)
-
示例
- 文件传输场景
- 假设主机A向主机B传输一个大文件。主机B的接收缓冲区大小为2048字节,初始时接收窗口大小也为2048字节。
- 主机A开始发送数据,每次发送1024字节的数据报文段。在发送了两个报文段后,主机A已经发送了2048字节的数据,但尚未收到主机B的确认。此时,主机A暂停发送,等待确认。
- 主机B收到这两个报文段后,开始处理数据。假设主机B在处理了1024字节的数据后,接收缓冲区腾出了空间,就会在确认消息中通告新的接收窗口大小为1024字节。
- 主机A收到这个通告后,就会继续发送1024字节的数据,然后再次等待确认。这样就通过流量控制机制,保证了主机A发送数据的速度与主机B接收和处理数据的速度相匹配。
- 文件传输场景
-
分类
- 基于协议的流量控制分类
- TCP流量控制:这是一种可靠的、面向连接的流量控制方式。通过滑动窗口和接收窗口通告机制,在保证数据可靠传输的同时,有效地控制发送端的发送速率。
- UDP流量控制(应用层实现):UDP本身没有像TCP那样内置的流量控制机制。但是在一些基于UDP的应用中,应用程序会自己实现流量控制。例如,在实时视频流应用中,接收端可能会根据自己的播放速度和缓冲区状态,向发送端发送反馈信息,要求发送端调整发送速率。这种流量控制是在应用层实现的,灵活性较大,但需要应用程序开发者自己设计和维护。
- 基于网络设备的流量控制分类
- 交换机流量控制:以太网交换机可以通过端口的流量控制功能来防止数据帧的丢失。当交换机检测到某个端口接收缓冲区即将溢出时,会向连接在该端口的设备发送暂停帧(Pause Frame),通知对方暂停发送数据。这种流量控制方式主要是在数据链路层进行的,用于缓解局域网内的数据拥塞。
- 路由器流量控制:路由器可以通过队列管理等技术来实现流量控制。当路由器的输入端口接收到的数据流量超过其转发能力时,会将数据放入队列中等待转发。路由器可以根据队列的长度和拥塞程度,采用不同的策略(如丢弃部分数据、延迟发送等)来控制流量。这种流量控制方式主要是在网络层进行的,用于管理网络间的流量。
- 基于协议的流量控制分类
-
发展
- 早期网络阶段:在早期的计算机网络中,流量控制机制相对简单。例如,在早期的X.25网络中,主要采用基于窗口的流量控制方法,但窗口大小的调整相对固定,不能很好地适应网络流量的动态变化。
- 随着TCP/IP的发展:TCP协议中的流量控制机制不断完善。从最初简单的滑动窗口模型,发展到能够更加精细地调整发送速率,并且与拥塞控制机制相结合。例如,在TCP Reno和TCP NewReno版本中,对流量控制和拥塞控制的协同工作进行了优化,使得网络在高负载和复杂环境下能够更加稳定地运行。
- 现代网络和应用需求的推动:随着云计算、大数据、视频流媒体等应用的兴起,网络流量呈现出多样化和高动态的特点。流量控制技术也在不断发展,以适应这些新的应用需求。例如,软件定义网络(SDN)中的流量控制可以通过集中式的控制器来动态地调整网络中的流量路径和速率,实现更加灵活和高效的流量管理。
-
功能
- 防止数据丢失:最主要的功能是确保接收端能够跟上发送端的发送速度,避免接收端缓冲区溢出而导致数据丢失。这对于保证数据的完整性和正确性非常重要,特别是在传输重要数据(如文件传输、数据库同步等)时。
- 提高网络资源利用率:通过合理地控制数据发送速率,可以避免网络资源(如带宽、缓存等)的浪费。例如,在一个共享网络环境中,如果没有流量控制,某个发送端可能会占用过多的带宽,导致其他设备无法正常通信。流量控制可以使网络中的数据流量更加均衡,提高整个网络的资源利用率。
- 优化用户体验(对于应用层):在一些应用中,如网页浏览、视频播放等,流量控制可以使数据按照合适的速度传输到用户端,避免因为数据传输过快或过慢而影响用户体验。例如,在视频播放应用中,适当的流量控制可以保证视频能够流畅地播放,既不会因为缓冲不足而卡顿,也不会因为缓冲过多而占用过多的存储空间。
数据链路层协议
- 概念
- 数据链路层是OSI(开放系统互连)模型中的第二层,介于物理层和网络层之间。它负责将物理层接收到的原始信号转换为网络层能够理解的帧(Frame),并提供可靠的节点到节点的数据传输服务。数据链路层主要处理物理地址(如MAC地址)、帧同步、流量控制、差错控制等功能。例如,在以太网中,数据链路层协议规定了如何将数据封装成以太网帧,以及如何在局域网中的设备之间传输这些帧。
- 过程
- 帧封装:从网络层接收数据包(Packet),在数据包的前后添加帧头(Header)和帧尾(Trailer)来形成帧。帧头包含了目的MAC地址、源MAC地址、帧类型等信息,帧尾通常包含用于差错检测的循环冗余校验(CRC)码。例如,在以太网中,帧头长度为14字节,帧尾为4字节的CRC码。
- 介质访问控制:当多个设备共享同一物理介质(如局域网中的双绞线)时,需要通过介质访问控制(MAC)协议来协调设备对介质的访问。例如,以太网采用带有冲突检测的载波监听多路访问(CSMA/CD)协议。设备在发送数据之前,先监听介质是否空闲,如果空闲则发送;如果忙则等待,并且在发送过程中继续监听,一旦检测到冲突,就停止发送,等待一段随机时间后再尝试发送。
- 帧传输和接收:将封装好的帧通过物理介质发送出去。接收方在物理层接收到信号后,数据链路层对信号进行解码,检查帧头中的目的MAC地址是否与自己的MAC地址匹配。如果匹配,则接收该帧,并进行CRC校验等差错检测。如果帧没有错误,则去除帧头和帧尾,将数据包上传给网络层;如果帧有错误,则根据差错控制机制决定是丢弃还是请求重发。
- 原理
- 物理地址识别:基于每个网络接口的唯一物理地址(MAC地址)来进行通信。MAC地址是一个48位的二进制数,通常表示为12个十六进制数,如00 - 1B - 21 - 12 - 34 - 56。发送方通过目的MAC地址来指定帧的接收者,接收方通过比较帧头中的目的MAC地址和自己的MAC地址来判断是否接收该帧。
- 差错检测与纠正:通过在帧尾添加CRC码来检测传输过程中的错误。CRC是一种基于多项式运算的校验方法。发送方根据帧的内容计算CRC码,并将其附加在帧尾。接收方按照相同的算法计算接收到的帧的CRC码,并与帧尾的CRC码进行比较。如果两者一致,则认为帧没有错误;否则,认为帧在传输过程中出现了错误。部分协议还支持差错纠正机制,如通过汉明码等方式对少量错误进行纠正。
- 流量控制:为了防止发送方发送数据的速度超过接收方的处理能力,数据链路层采用流量控制机制。例如,采用滑动窗口协议,接收方通过向发送方发送确认(ACK)信号和窗口大小信息,告知发送方自己能够接收的数据量。发送方根据接收方的窗口大小来调整发送速度,从而实现流量控制。
- 实例
- 以太网(Ethernet):是最常见的数据链路层协议,广泛应用于局域网(LAN)中。例如,在一个办公室的局域网中,计算机通过以太网卡连接到交换机。当计算机A要向计算机B发送数据时,数据链路层将网络层的数据包封装成以太网帧,在帧头填写计算机B的MAC地址作为目的MAC地址,计算机A自己的MAC地址作为源MAC地址,然后通过CSMA/CD协议将帧发送到交换机。交换机根据帧头中的目的MAC地址将帧转发给计算机B。
- 点对点协议(PPP):常用于广域网(WAN)连接,如通过电话线或光纤连接的两个网络节点之间。例如,用户通过拨号上网与互联网服务提供商(ISP)建立连接时,在用户计算机和ISP的接入服务器之间采用PPP协议。PPP协议负责在点对点链路上封装和传输网络层数据包,并且支持身份验证、链路质量监测等功能。
- 分类
- 基于介质访问控制方式分类
- 争用型协议:如CSMA/CD(以太网)和CSMA/CA(无线局域网)。在这些协议中,多个设备竞争使用共享介质,通过监听介质状态和一定的冲突检测或避免机制来发送数据。
- 令牌传递协议:例如令牌环(Token Ring)和光纤分布式数据接口(FDDI)。在这种协议中,一个称为“令牌”的特殊帧在网络节点之间循环传递,只有拥有令牌的节点才能发送数据,这样可以避免冲突。
- 基于网络拓扑结构分类
- 总线型协议:适用于总线型网络拓扑,如早期的以太网。所有设备连接到一条共享的总线上,数据在总线上广播式传输,各设备通过MAC地址识别自己是否为接收者。
- 星型协议:像现代以太网通过交换机连接的方式,以交换机为中心,各个设备通过独立的链路连接到交换机。交换机根据MAC地址转发帧,这种结构更灵活,便于管理和故障排除。
- 环型协议:如令牌环协议,设备连接成一个环形,数据在环中单向传输,通过令牌来控制数据的发送。
- 基于介质访问控制方式分类
- 发展
- 早期的数据链路层协议主要是为了适应简单的局域网和广域网环境。例如,以太网最初是在20世纪70年代开发的,它的速度较慢,最初的以太网标准是10Mbps(兆比特每秒),采用粗同轴电缆,并且使用CSMA/CD协议来处理冲突。随着技术的发展,以太网的速度不断提高,出现了100Mbps的快速以太网、1000Mbps(1Gbps)的千兆以太网和10Gbps及以上的高速以太网。同时,介质也从同轴电缆发展到双绞线和光纤。
- 在无线通信领域,数据链路层协议也在不断发展。最初的无线局域网协议主要是基于IEEE 802.11标准的早期版本,传输速度和稳定性有限。随着后续版本的推出,如802.11n、802.11ac和802.11ax(Wi - Fi 6),无线数据传输速度大幅提高,并且在频段使用、多天线技术、信道带宽等方面都有了很大的改进,同时也增强了对高密度用户环境的支持。
- 功能
- 帧同步:确保接收方能够正确地识别帧的开始和结束位置。通过特殊的帧起始和结束标志,或者通过帧长度等信息来实现帧同步。例如,以太网帧通过前导码(Preamble)和帧起始定界符(SFD)来帮助接收方同步并确定帧的开始。
- 物理寻址:使用MAC地址来识别网络中的不同设备,从而实现数据的准确传输。每个网络接口都有一个唯一的MAC地址,发送方通过在帧头中填写目的MAC地址来指定接收者。
- 差错控制:检测和纠正传输过程中的错误,保证数据的准确性。如前面提到的CRC校验用于检测错误,对于一些要求更高可靠性的应用,还可以采用更复杂的差错纠正机制。
- 流量控制:协调发送方和接收方的数据传输速度,防止接收方被过多的数据淹没。这有助于提高数据传输的效率和可靠性,避免因接收方缓冲区溢出而导致的数据丢失。
- 链路管理:包括链路的建立、维护和拆除。例如,在PPP协议中,在通信开始时需要进行链路建立过程,包括身份验证等步骤;在通信过程中要对链路质量进行监测;在通信结束时要进行链路拆除。
数据链路层设备
-
概念
- 定义:数据链路层是计算机网络体系结构中的第二层,介于物理层和网络层之间。它负责将物理层接收到的原始信号转换为网络层能够理解的帧(frame)格式的数据单元,并进行差错检测和纠正、流量控制等操作,以确保物理链路的可靠传输。
- 帧的概念:帧是数据链路层的基本数据单元,它包含了数据部分(来自网络层的分组)和控制信息部分(如源和目的MAC地址、帧校验序列等)。帧就像是一个包裹,数据是包裹里的内容,而控制信息则是包裹上的标签和说明,用于在链路中正确地传输和处理这个包裹。
-
工作过程
- 帧封装过程
- 网络层将数据包(packet)传递给数据链路层后,数据链路层首先会添加帧头(header)和帧尾(trailer)来封装这个数据包,形成帧。帧头通常包含源MAC地址和目的MAC地址,用于在局域网中标识发送方和接收方的网络接口。帧尾一般包含帧校验序列(FCS),用于检测帧在传输过程中是否出现错误。
- 例如,当一台计算机(主机A)要发送数据给同一局域网中的另一台计算机(主机B)时,主机A的数据链路层会将从网络层接收到的IP数据包封装成以太网帧。在帧头中写入主机A的MAC地址作为源MAC地址,通过地址解析协议(ARP)获取主机B的MAC地址并写入帧头的目的MAC地址字段。
- 帧传输过程
- 封装好的帧通过物理层提供的物理介质(如双绞线、光纤等)进行传输。在局域网环境中,如以太网,帧以广播或单播的方式发送。如果是广播方式,帧会被发送到局域网中的所有设备,但只有目的MAC地址匹配的设备才会接收并处理这个帧;如果是单播方式,帧会直接发送到指定的目的设备。
- 例如,在一个使用集线器(hub)连接的以太网环境中,当一个设备发送帧时,集线器会将这个帧向所有连接的设备进行广播。而在使用交换机(switch)的以太网环境中,交换机可以根据帧头中的目的MAC地址,将帧准确地转发到目的设备,实现单播传输。
- 帧接收与处理过程
- 目的设备的数据链路层接收到帧后,首先会检查帧的完整性,通过验证帧尾的帧校验序列来判断帧在传输过程中是否出现错误。如果帧没有错误,则会去除帧头和帧尾,将其中的数据部分(即网络层的数据包)传递给网络层进行后续处理。如果帧出现错误,根据数据链路层协议的规定,可能会丢弃这个帧,并可能向发送方发送错误通知。
- 例如,当主机B接收到主机A发送的以太网帧后,其数据链路层会计算收到帧的校验和,并与帧尾的校验和进行对比。如果两者一致,说明帧传输正确,就会提取其中的IP数据包交给网络层;如果不一致,则丢弃该帧。
- 帧封装过程
-
原理
- 介质访问控制(MAC)原理
- 在共享介质的网络环境(如传统以太网)中,多个设备需要共享同一物理介质进行通信。介质访问控制机制就是用于协调这些设备对介质的访问,避免冲突。例如,早期以太网采用的是带有冲突检测的载波监听多路访问(CSMA/CD)机制。
- 其原理是,设备在发送数据之前,会先监听介质上是否有其他设备正在发送数据(载波监听)。如果介质空闲,设备就可以发送数据;如果介质忙,则设备会等待。在发送数据过程中,设备还会持续检测是否发生冲突(冲突检测)。如果发生冲突,发送设备会立即停止发送,并发送一个拥塞信号,然后等待一段随机时间后再尝试发送。
- 差错检测与纠正原理
- 通过帧校验序列(FCS)来检测帧中的错误。FCS是基于帧的内容通过特定的算法(如循环冗余校验CRC)计算得到的一个数值。发送方在发送帧时,会计算并将FCS附加在帧尾。接收方收到帧后,使用相同的算法重新计算FCS,并与接收到的FCS进行比较。
- 如果两者不同,说明帧在传输过程中出现了错误。对于一些简单的数据链路层协议,可能只是简单地丢弃错误帧;而对于一些更复杂的协议,可能具有一定的差错纠正能力,例如通过冗余信息来纠正部分错误。
- 流量控制原理
- 数据链路层的流量控制主要是为了确保发送方的发送速度不会超过接收方的接收能力。一种常见的流量控制方法是基于滑动窗口机制。接收方会向发送方通告一个接收窗口大小,这个窗口大小表示接收方当前能够接收的帧的数量。
- 发送方根据接收窗口的大小来调整自己的发送策略。例如,如果接收窗口大小为5,发送方最多只能发送5个未被确认的帧。当发送方收到接收方对某个帧的确认后,发送窗口可以向前滑动,允许发送更多的帧。
- 介质访问控制(MAC)原理
-
示例
- 以太网环境下的数据传输
- 在一个办公室的局域网中,有若干台计算机通过交换机连接。当用户在计算机A上通过文件共享服务向计算机B发送一个文件时,计算机A的网络层将文件数据分成多个IP数据包。数据链路层将这些IP数据包封装成以太网帧,在帧头写入计算机A的MAC地址和计算机B的MAC地址。
- 交换机根据帧头中的目的MAC地址将帧转发给计算机B。计算机B的数据链路层收到帧后,检查帧的完整性,确认无误后将其中的IP数据包提取出来交给网络层,网络层再将这些数据包组装成文件数据,完成文件传输。
- 无线局域网(Wi - Fi)中的数据链路层操作
- 当移动设备(如智能手机)连接到家庭Wi - Fi网络并访问互联网时,在数据链路层,Wi - Fi协议(如IEEE 802.11标准)发挥作用。移动设备与无线路由器之间通过无线信号传输数据帧。
- 首先,移动设备的数据链路层会将从网络层接收到的数据包封装成Wi - Fi帧,添加Wi - Fi帧头和帧尾,其中帧头包含源和目的MAC地址等信息。然后通过无线介质发送给无线路由器。无线路由器接收到帧后,进行类似以太网的处理过程,检查帧的完整性,提取数据包并转发给上层网络层,最终实现移动设备与互联网的通信。
- 以太网环境下的数据传输
-
分类
- 网桥(Bridge)
- 概念:网桥是早期的数据链路层设备,用于连接两个或多个局域网网段,它可以将一个大的局域网划分为多个较小的网段,减少网络中的冲突,提高网络性能。
- 工作原理:网桥会学习连接到它的各个端口的设备的MAC地址。当收到一个帧时,它会检查帧头中的目的MAC地址,并根据自己学到的MAC地址表将帧转发到相应的端口。如果目的MAC地址不在自己的MAC地址表中,网桥会将帧转发到除接收端口之外的所有其他端口(广播)。
- 交换机(Switch)
- 概念:交换机是现代局域网中最常用的数据链路层设备,它实际上是一种多端口网桥。交换机的每个端口都可以连接一个设备或一个网段,能够同时支持多个通信会话。
- 工作原理:交换机和网桥类似,也会学习连接设备的MAC地址。但交换机具有更高的性能和更多的功能,如全双工通信、虚拟局域网(VLAN)支持等。全双工通信允许设备在同一时间进行发送和接收操作,提高了网络的带宽利用率;VLAN可以将一个物理交换机划分成多个虚拟的局域网,增强了网络的安全性和管理灵活性。
- 网桥(Bridge)
-
发展
- 早期简单连接设备到复杂交换设备的演变
- 早期的数据链路层设备主要是简单的中继器和网桥。中继器的功能比较单一,只是对物理信号进行放大和整形,以延长传输距离。网桥则开始具有一定的智能,能够对帧进行转发,但转发效率和功能相对有限。随着网络技术的发展,交换机逐渐取代了网桥,它具有更高的端口密度、更快的转发速度和更复杂的功能。
- 功能扩展和性能提升
- 交换机从最初只能支持基本的MAC地址学习和帧转发,发展到能够支持虚拟局域网(VLAN)、链路聚合、流量控制等多种高级功能。VLAN技术的出现使得网络管理员可以更加灵活地划分和管理网络,提高网络的安全性和效率。链路聚合技术允许将多个物理链路捆绑成一个逻辑链路,增加了链路的带宽和冗余性。同时,交换机的性能也在不断提升,端口速度从早期的10Mbps、100Mbps发展到现在的1Gbps、10Gbps甚至更高。
- 适应新的网络技术和应用场景
- 随着无线技术的发展,无线接入点(AP)作为一种特殊的数据链路层设备也得到了广泛应用。无线接入点不仅要完成数据链路层的帧处理和转发功能,还要处理无线信号的收发、与有线网络的连接等复杂任务。此外,数据链路层设备也在适应物联网等新兴应用场景,需要支持更多类型的设备接入和低功耗通信模式。
- 早期简单连接设备到复杂交换设备的演变
-
功能
- 物理链路连接功能:提供物理端口,用于连接不同的网络设备,如计算机、服务器、打印机等,通过网线、光纤等物理介质建立物理链路。
- 帧转发功能:根据帧头中的目的MAC地址,将接收到的帧准确地转发到目的设备所在的端口,实现数据在局域网内的传输。
- MAC地址学习功能:自动学习连接到设备端口的设备的MAC地址,构建MAC地址表,以便更高效地进行帧转发。
- 差错检测功能:通过帧校验序列(FCS)检测帧在传输过程中是否出现错误,对于有错误的帧可以采取丢弃或通知发送方等措施。
- 流量控制功能:通过滑动窗口等机制控制发送方的发送速度,确保接收方能够正常接收帧,避免接收方因来不及接收而导致数据丢失。
- 隔离冲突域功能:在局域网中,交换机等设备可以将不同的端口划分成不同的冲突域,减少冲突的发生,提高网络性能。例如,在使用交换机连接的局域网中,每个端口连接的设备形成一个单独的冲突域,不同端口之间的设备同时发送数据不会产生冲突。
更多推荐
所有评论(0)