⭐小白苦学IT的博客主页⭐
⭐初学者必看:Linux操作系统入门⭐
⭐代码仓库:Linux代码仓库⭐
❤关注我一起讨论和学习Linux系统❤
前言
在网络通信的宏伟世界中,数据链路层扮演着至关重要的角色。它位于物理层和网络层之间,不仅直接处理与物理媒介的交互,还负责将数据帧从一个节点可靠地传输到另一个节点。本文将带您领略数据链路层的魅力,探讨其工作原理、关键技术以及在实际网络中的应用。
在数据通信的旅程中,数据链路层是第一个对原始数据进行处理的层次。它接收来自网络层的数据包,并为其添加必要的帧头和帧尾,形成可以在物理媒介上传输的数据帧。同时,数据链路层还负责处理传输过程中的差错检测与纠正、流量控制以及媒体访问控制等关键任务。
本文将详细介绍数据链路层的主要功能和协议,包括帧同步、差错控制、流量控制以及常见的媒体访问控制方法(如以太网、令牌环和无线局域网)。我们将探讨这些技术和协议如何协同工作,确保数据在复杂的网络环境中高效、准确地传输。
此外,本文还将分析数据链路层在网络安全、网络优化以及新技术融合等方面的应用和挑战。通过深入理解数据链路层的工作原理和关键技术,读者将能够更好地把握网络通信的底层机制,为构建高效、稳定的网络系统提供有力支持。
让我们一同踏上这段探索之旅,揭开数据链路层的神秘面纱,领略网络通信的奥秘。
对比理解 "数据链路层" 和 "网络层"
1.功能定位:
- 数据链路层:主要负责在物理层提供的服务基础上,建立相邻节点之间的数据链路,并通过差错控制提供数据帧在信道上的“透明”传输。其最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。这包括数据封装、透明传输和差错控制等功能。
- 网络层:主要负责“传送”,即通过通信网络进行信息传输。它作为纽带连接着感知层和应用层,由各种私有网络、互联网、有线和无线通信网等组成。它的主要功能是负责将感知层获取的信息,安全可靠地传输到应用层,然后根据不同的应用需求进行信息处理。
2.侧重点:
- 数据链路层:更侧重于每个小区间上的传递,即用于两个设备(同一种数据链路节点)之间进行传递。例如,手机通过路由器上外网时,手机与路由器之间通过无线网WiFi的方式进行传输,这就是一种数据链路。
- 网络层:更侧重于整体一个点到另一个点之间的一条路径,即数据是如何到达的。它关注的是如何在复杂的网络环境中找到最优的传输路径。
3.协议和组成:
- 数据链路层:数据链路层协议又被分为两个子层:逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。常见的数据链路包括以太网线、WiFi和蓝牙等。
- 网络层:在物联网中,网络层包含接入网和传输网,分别实现接入功能和传输功能。传输网由公网与专网组成,典型传输网络包括电信网(固网、移动通信网)、广电网、互联网、电力通信网、专用网(数字集群)。接入网则包括光纤接入、无线接入、以太网接入、卫星接入等各类接入方式。
认识以太网
以太网(Ethernet)是一种广泛使用的计算机局域网技术,它基于IEEE(电气和电子工程师协会)制定的标准,主要用于实现计算机之间的数据传输。以下是关于以太网的一些基本认识:
- 定义:以太网是一种计算机局域网技术,用于在局域网(LAN)内连接设备(如计算机、打印机、服务器等)并允许它们共享数据和资源。
- 标准:以太网基于IEEE 802.3标准,这是一个由IEEE定义的关于局域网和城域网的一系列标准。
- 传输介质:以太网可以使用多种传输介质,包括同轴电缆、双绞线(如CAT5、CAT6)和光纤。不同的传输介质支持不同的速度和距离。
- 速度:以太网的速度从最初的10 Mbps发展到现在的10 Gbps、40 Gbps甚至更高。常见的以太网速度包括10 Mbps、100 Mbps、1 Gbps和10 Gbps。
- 帧结构:以太网使用帧(Frame)作为数据传输的基本单位。以太网帧包含帧头(Header)、数据(Data)和帧尾(Footer)三个部分。帧头包含目的地址、源地址、帧类型等信息,数据部分包含要传输的数据,帧尾则用于帧的校验和错误检测。
- CSMA/CD:以太网采用带冲突检测的载波侦听多路访问(CSMA/CD)作为访问控制协议。这意味着在发送数据之前,设备会侦听网络是否空闲,如果空闲则发送数据,并在发送过程中检测是否有冲突(即其他设备同时发送数据)。如果检测到冲突,设备会停止发送并等待一段时间后重试。
- 交换机:在现代以太网中,交换机(Switch)取代了早期的集线器(Hub)。交换机能够识别数据帧中的目的地址,并将数据帧直接发送到目的设备,而不是广播到所有设备。这大大提高了网络性能和带宽利用率。
- 应用:以太网广泛应用于各种场景,包括企业网络、数据中心、校园网、家庭网络等。此外,以太网还与其他网络技术(如无线局域网WLAN、广域网WAN等)相结合,形成了更加复杂的网络架构。
- 安全性:以太网的安全性是一个重要的问题。为了保护网络免受未经授权的访问和攻击,可以采用各种安全措施,如访问控制列表(ACL)、虚拟局域网(VLAN)、加密技术(如IPSec)等。
- 未来趋势:随着云计算、大数据、物联网等新兴技术的发展,以太网将继续发挥重要作用。未来的以太网可能会支持更高的速度、更低的延迟和更智能的管理功能。
以太网帧格式
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
- 帧末尾是CRC校验码。
认识MAC地址
MAC地址(Media Access Control Address)是媒体访问控制地址,也称为物理地址或硬件地址。它用于在网络中唯一标识一个网络接口控制器(Network Interface Controller,NIC),也就是网络接口卡(Network Interface Card,NIC)或其他网络接口设备。
以下是关于MAC地址的一些重要点:
唯一性:MAC地址是全球唯一的,每个网络适配器(如网卡)都有一个唯一的MAC地址。这确保了在网络通信中,数据包能够准确地被发送到目标设备。
组成:MAC地址通常由48位二进制数表示,通常分为6组,每组包含8位(即一个字节),组与组之间用冒号或连字符分隔。例如:
00:1A:2B:3C:4D:5E
或00-1A-2B-3C-4D-5E
。厂商标识:MAC地址的前24位(即前三组)通常用于标识网络适配器的制造商。这被称为组织唯一标识符(Organizationally Unique Identifier,OUI),由IEEE(电气和电子工程师协会)分配给每个制造商。
用途:MAC地址在网络通信中扮演着重要角色,特别是在数据链路层(OSI模型中的第二层)。当数据包在物理网络中传输时,网络设备(如交换机、路由器)会使用MAC地址来确定数据包应该被发送到哪里。
广播和组播:在以太网中,MAC地址有两种特殊类型:广播地址(FF:FF:FF:FF:FF:FF)和组播地址(范围从01:00:00:00:00:00到01:FF:FF:FF:FF:FF)。广播地址用于向网络中的所有设备发送数据包,而组播地址用于向一组特定的设备发送数据包。
可变性:虽然大多数网络适配器的MAC地址是固定的,但有些设备允许用户更改其MAC地址。这通常用于隐私保护、网络隔离或绕过某些网络限制。
封装和解封装:在数据传输过程中,数据链路层会将MAC地址封装在数据包的头部,以便网络设备能够识别和处理。当数据包到达目的地时,数据链路层会解封装MAC地址,并将数据包传递给网络层进行进一步处理。
对比理解MAC地址和IP地址
MAC地址和IP地址在网络通信中各自扮演着重要的角色,但它们在性质、工作层次、长度和分配依据等方面存在明显的区别。以下是对这两种地址的对比理解:
1.地址性质:
- MAC地址是物理地址,具有唯一性。每个硬件设备在出厂时都会被分配一个唯一的MAC地址,通常存储在设备的网络适配器中,不可更改(但部分设备支持用户更改)。
- IP地址是逻辑地址,可以根据需要进行更改。它是根据网络拓扑结构分配的,用于在网络中唯一标识一个设备或网络。
2.工作层次:
- MAC地址工作在OSI模型的数据链路层(第二层),用于唯一标识网络设备,并确保它们可以正确地通信。
- IP地址工作在OSI模型的网络层(第三层),用于标识网络中的不同设备,使它们能够相互通信。
3.长度和表示方式:
- MAC地址是48位的(6个字节),通常用12个十六进制数表示,每两个十六进制数之间用冒号或连字符分隔,如“00:1A:2B:3C:4D:5E”。
- IP地址的长度根据版本不同而有所差异。IPv4地址是32位的,通常表示为四个用点分隔的十进制数,如“192.168.1.1”。IPv6地址则是128位的,采用十六进制表示法,并引入了冒号分隔符来缩短长度。
4.分配依据:
- MAC地址的分配是基于制造商的。每个网络适配器在出厂时都会被分配一个唯一的MAC地址,由IEEE(电气和电子工程师协会)负责管理和分配。
- IP地址的分配是基于网络拓扑结构的。它可以根据网络的需求和规划进行自动分配或手动配置。在IPv4中,由于地址资源的有限性,IP地址的分配和管理变得尤为重要。而在IPv6中,由于地址空间的极大扩展,IP地址的分配和管理相对更加灵活和简单。
5.作用范围:
- MAC地址主要用于局域网内的设备识别和通信。在同一个局域网内,设备通过MAC地址进行通信和数据传输。
- IP地址则用于整个互联网范围内的设备识别和通信。通过IP地址,设备可以在全球范围内的互联网上进行通信和数据交换。
认识MTU
MTU(Maximum Transmission Unit)是最大传输单元的缩写,它在网络通信中起着关键作用。
- 定义:MTU用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。它表示的是包或帧的最大长度,通常以字节为单位。
- 作用:MTU的设定对于网络通信的效率和性能具有重要影响。通过调整MTU的大小,可以使网络设备在一次传输中承载更多的数据量,从而提高传输效率。较大的MTU可以减少传输的分组数量,降低传输的开销和延迟,提高数据传输的速度。此外,合适的MTU设置还可以减少网络拥塞,提高网络的吞吐量,并帮助网络设备适应不同的网络环境。
- 影响因素:MTU的大小设置需要考虑到网络的实际情况。如果MTU设置得过大,可能会导致数据包在传输过程中被丢弃或需要被拆分,增加了传输的复杂性和开销。如果MTU设置得过小,则可能导致网络带宽的利用率降低,影响传输效率。
- 确定合适的MTU:确定合适的MTU值需要根据具体的网络环境和应用需求进行调整。在某些情况下,可能需要进行一些试验来确定最佳的MTU值。另外,不同的网络设备和操作系统可能会有不同的MTU默认值,用户需要根据实际情况进行配置。
- 实际应用:在实际应用中,MTU的设置对于各种网络设备和协议都有影响。例如,在以太网中,通常使用的MTU值是1500字节。而在某些广域网(WAN)连接中,MTU值可能会更小。另外,当两台主机之间的通信需要通过多个网络时,每个网络的链路层可能有不同的MTU值,这时重要的是两台主机通信路径中的最小MTU值,称为路径MTU(Path MTU,PMTU)。
MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
- 不同的数据链路层标准的MTU是不同的;
MTU对IP协议的影响
由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.
- 将较大的IP包分成多个小包, 并给每个小包打上标签;
- 每个小包IP协议头的 16位标识(id) 都是相同的;
- 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
- 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
- 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
- 数据包分片:当UDP数据包的大小超过链路的MTU时,数据包需要在网络层进行分片。与IP协议类似,UDP协议本身不会进行分片,而是依赖网络层(如IP层)来处理。网络层会将过大的UDP数据包分割成多个较小的片段(或称为分片),每个分片都包含原始UDP数据包的部分内容,并且具有相应的头部信息以便在目标主机上重新组装。
然而,与TCP协议不同,UDP协议不提供数据包的重传机制。因此,如果某个UDP数据包的某个分片在传输过程中丢失或损坏,整个UDP数据包都会被丢弃,而接收端不会收到任何通知或重传请求。这可能导致数据丢失或应用程序错误。
2.传输效率:MTU的大小对UDP协议的传输效率有重要影响。如果MTU设置得太小,会导致更多的UDP数据包被分片,从而增加传输的复杂性和开销。每个分片都需要单独的头部信息,这会增加数据包的总体积,并可能导致传输延迟和带宽浪费。
另一方面,如果MTU设置得过大,可能会导致数据包在传输过程中被丢弃或需要被拆分。当UDP数据包的大小超过链路的MTU时,它会被丢弃,导致传输失败。为了避免这种情况,网络设备通常会根据链路的MTU大小来限制UDP数据包的大小。但是,这可能会限制应用程序可以发送的数据量,从而降低传输效率。
因此,为了获得最佳的传输效率,需要根据网络环境和应用程序的需求来合理配置MTU的大小。在实际应用中,通常会通过一些工具和协议(如PMTUD,即路径MTU发现)来动态检测和调整MTU的大小,以确保UDP数据包的正常传输和高效传输。
MTU对TCP协议的影响
让我们再回顾一下TCP协议:
- TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
- TCP在建立连接的过程中, 通信双方会进行MSS协商.
- 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).
- 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
- 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
- MSS的值就是在TCP首部的40字节变长选项中(kind=2);
- TCP分片和重组:当TCP报文段(Segment)的大小超过链路的MTU时,它需要在IP层进行分片。每个分片都会被封装成一个独立的IP数据包进行传输。在接收端,这些分片会被重新组合成原始的TCP报文段。这个分片和重组的过程由IP层负责,但TCP层需要知道分片的最大尺寸(即MSS,最大段大小),以便正确地构建TCP报文段。
- MSS的计算:MSS(Maximum Segment Size)是TCP协议中的一个重要参数,它表示TCP能够接收的最大报文段大小。MSS的值通常根据链路的MTU来计算,以确保TCP报文段在传输过程中不会被分片。具体来说,MSS通常等于MTU减去IP头和TCP头的长度。在以太网环境下,常见的MTU值为1500字节,因此MSS值一般为1460字节(1500字节减去20字节的IP头和20字节的TCP头)。
- 传输效率:MTU的大小对TCP协议的传输效率有重要影响。如果MTU设置得太小,会导致TCP报文段在传输过程中被频繁地分片,从而增加了传输的复杂性和开销。每个分片都需要单独的IP头和TCP头,这会增加数据包的总体积,并可能导致传输延迟和带宽浪费。另一方面,如果MTU设置得过大,可能会超过某些链路的MTU限制,导致数据包在传输过程中被丢弃或需要被拆分。这同样会降低传输效率并增加丢包的风险。
- 拥塞控制:TCP协议具有拥塞控制机制,以避免网络拥塞和数据丢失。MTU的大小可以影响TCP拥塞控制的效果。较小的MTU可能导致更多的数据包被丢弃或需要重传,从而增加拥塞控制算法的复杂度。而较大的MTU可以减少数据包的数量和传输开销,有助于改善网络性能和减少拥塞。
MSS和MTU的关系
使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;
ARP协议
ARP协议,全称Address Resolution Protocol(地址解析协议),是一个用于将IP地址解析为MAC地址的TCP/IP协议。在局域网中,当主机需要与其他主机进行通信时,由于数据链路层使用MAC地址进行通信,而网络层使用IP地址进行通信,因此需要在数据链路层和网络层之间进行地址转换。ARP协议就承担了这一任务,它可以将目标主机的IP地址转换为MAC地址,以便在局域网中进行通信。
ARP协议工作原理:
- 当一个主机需要将IP地址转换为物理地址时,它会首先检查自己的ARP缓存表。ARP缓存表记录了IP地址和对应的物理地址的映射关系。如果缓存表中已经有该IP地址的对应物理地址,则主机可以直接使用该物理地址进行通信。
- 如果主机在ARP缓存表中没有找到所需的物理地址,它会发送一个ARP请求广播消息到本地网络中的所有主机。ARP请求中包含了目标主机的IP地址。
- 接收到ARP请求消息的主机会检查请求中包含的IP地址是否与自己的IP地址相匹配。如果匹配,则将自己的物理地址作为ARP响应消息发送回去。
- 发送方主机收到ARP响应消息后,会将源IP地址和物理地址的映射关系存储在ARP缓存表中,以便下次通信时直接使用。
用一个案例进行详细解释:
- 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
ARP数据报的格式
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节;
- 协议地址长度对于和IP地址为4字节;
- op字段为1表示ARP请求,op字段为2表示ARP应答。
想一想,为什么要有缓存表? 为什么表项要有过期时间而不是一直有效?
缓存表的存在主要是为了提高数据访问的速度和效率。在网络通信和数据处理中,缓存表可以存储最近访问过的数据或资源的位置信息,当再次需要访问这些数据或资源时,可以直接从缓存表中获取位置信息,而不需要重新进行查找或计算,从而减少了访问时间和计算开销。
缓存表中的表项设置过期时间是为了避免缓存数据过期或失效后仍然被使用,导致数据错误或不一致。由于网络环境和数据状态可能会发生变化,缓存数据可能会失去有效性。如果缓存表项一直有效,那么即使缓存数据已经失效,系统仍然可能会使用这些数据,从而导致错误或不可预测的结果。因此,设置过期时间可以确保缓存数据在有效期内被使用,过期后被自动删除或更新,以保持数据的准确性和一致性。