数据链路层协议–以太网协议
链路层解决的问题
同一物理网络内的直接通信即负责在 直接相连的节点(如交换机、相邻设备) 之间传输数据帧
将数据链路层与网络层进行以下对比:
维度 | 数据链路层 | 网络层 |
---|---|---|
通信范围 | 同一物理网络(如局域网) | 跨网络(如互联网) |
寻址方式 | MAC地址(物理地址) | IP地址(逻辑地址) |
核心功能 | 帧传输、错误检测、介质访问控制 | 路由选择、逻辑寻址、分片与重组 |
数据单元 | 帧(Frame) | 数据包(Packet) |
典型设备 | 交换机、网桥 | 路由器、三层交换机 |
协议示例 | 以太网、Wi-Fi、PPP | IP、ICMP、OSPF、BGP |
以太网协议
局域网技术
以太网:以太网是一种计算机局域网技术,一种应用最普遍的局域网技术
令牌环网:令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包
无线LAN/WAN:无线局域网是有线网络的补充和扩展,现在已经是计算机网络的一个重要组织部分
虽然网络中各个局域网所采用的通信技术可能的不同的,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP层及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术
- 数据在发送之前会先进行数据封装,此时链路层会给数据封装上对应的局域网的报头
- 如果数据要进行跨网络传输,那么就需要经过路由器转发
- 当数据在路由器进行向上交付时,会将该数据对应的局域网报头去掉
- 而当路由器该数据转发给下一跳之前,又会给该数据封装上下一跳网络所对应的局域网报头
也就是说,网络中的路由器会不断去掉数据旧的局域网报头,并添加上新的局域网报头,因此数据在进行跨网络传输时,就算所需跨越的网络采用的是不同的局域网技术,最终也能够正确实现跨越
以太网通信原理
“以太网”不是一种具体的网络,而是一种技术标准,它既包含了数据链路层的内容,也包含了一些物理层的内容。例如,以太网规定了网络拓扑结构,访问控制方式,传输速率等
以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据
当局域网中的主机A想要发送数据给主机B时,其实局域网当中的每一台主机都能收到主机A发出去的数据,只不过最终只有主机B会将主机A发来的数据向上进行交付
局域网当中的其他主机虽然也收到了主机A发出的数据,但经过识别后发现这个数据不是发送给自己的,于是就会直接将该数据丢弃而不会向上进行交付
避免碰撞算法
由于以太网中的所有的主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰。站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。
- 以太网的做法是先不限制各个主机发送数据的能力,局域网中的每个主机想发数据的时候直接发就,但是只要发送出去的数据与其他主机发送的数据产生了碰撞,那就得执行碰撞避免算法。
- 所谓的碰撞避免算法就是,当主机发送出去的数据产生碰撞时,该主机需要等待一段时间后再进行数据重发,在主机等待的时候就能够就能够尽可能让局域网当中的数据消散
以太网帧格式
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,网卡出厂时固化
- 帧协议类型字段有三种值,分别对应IP协议、ARP协议和RARP协议。
- 帧末尾是CRC校验码
MAC帧如何将报头与有效载荷进行分离
以太网MAC帧的帧头和帧尾都是固定长度的,因此当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了
MAC帧如何决定将有效载荷交付给上层的哪一个协议
以太网MAC帧对应的上层协议不止一种,因此在将MAC帧的报头和有效载荷分离后,还需要确定应该将分离出来的有效载荷交付给上层的哪一个协议
在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可
认识MAC地址
MAC地址用来识别数据链路层中相连的节点
长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示,例如:08:00:27:03:fb:19
在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址
可以通过ifconfig
命令来查看我们的MAC地址
MAC地址 VS IP地址
对比项 | MAC地址 | IP地址 |
---|---|---|
作用 | 唯一标识网络设备(如网卡) | 标识设备在网络中的逻辑位置 |
所属层 | 数据链路层 | 网络层 |
地址长度 | 48位(6字节,十六进制表示) | IPv4:32位(4字节) IPv6:128位 |
表示格式 | 00:1A:2B:3C:4D:5E 或 00-1A-2B-3C-4D-5E |
IPv4:192.168.1.1 IPv6:2001:0db8:85a3::8a2e:0370:7334 |
唯一性 | 全球唯一(由厂商分配) | 可动态分配或重复使用(如私有IP) |
分配方式 | 固化在硬件中(部分可修改) | 动态分配(DHCP)或静态配置 |
用途 | 局域网内直接通信(如交换机转发) | 跨网络路由(如互联网通信) |
是否可变 | 通常固定(可软件修改) | 动态或静态(随网络环境变化) |
示例 | 00:0A:95:9D:68:16 |
IPv4:8.8.8.8 (Google DNS) |
MTU
MTU(Maximum Transmission Unit,最大传输单元)描述的是底层数据帧一次最多可以发送的数据量,这个限制是不同的数据链路层对应的物理层产生的
- 以太网对应MTU的值一般是1500字节,不同的网络类型有不同的MTU,如果一次要发送的数据超过了MTU,则需要在IP层对数据进行分片(fragmentation)
- 此外,以太网规定MAC帧中数据的最小长度为46字节,如果发送数据量小于46字节,则需要在数据后面补填充位,比如ARP数据包的长度就是不够46字节的
因为数据链路层规定了最大传输单元MTU,所以如果IP层一次要发送的数据量超过了MTU,此时IP层就需要先对该数据进行分片,然后才能将分片后的数据向下交付
数据跨网络传输的过程
以主机A将数据跨网络传输给主机B为例,数据路由的过程如下:
主机A要想将数据跨网络传输给主机B,需要先将数据交给同局域网当中的路由器A,因此主机A需要将封装好的MAC帧发送到当前局域网当中,此时MAC帧当中的源MAC地址和目的MAC地址,对应就是主机A的MAC地址和路由器A的MAC地址
此时主机A所在局域网当中的所有主机都能收到这个MAC帧,但最终只有路由器A发现该MAC帧当中的目的MAC地址与自己的MAC地址相同,于是才会对该MAC帧进行解包,并将解包后剩下的IP数据报交付给IP层
路由器A的IP层拿到解包后的IP数据报后,会提取出IP报头当中的目的IP地址,然后通过查询路由表后确定需要将该数据转发给路由器B,于是路由器A再将数据向下进行交付,重新封装MAC帧的帧头和帧尾,但此时封装后的MAC帧当中的源MAC地址和目的MAC地址,就变成了路由器A的MAC地址和路由器B的MAC地址
与路由器A直接相连的主机虽然也可能有很多,但最终只有路由器B发现该MAC帧当中的目的MAC地址与自己的MAC地址相同,于是才会对该MAC帧进行解包,并将解包后剩下的IP数据报交付给IP层
路由器B的IP层拿到解包后的IP数据报后,同样会提取出IP报头当中的目的IP地址,并通过查询路由表后确定需要将该数据转发给路由器C,于是路由器B再将数据向下进行交付,重新封装MAC帧的帧头和帧尾,但此时封装后的MAC帧当中的源MAC地址和目的MAC地址又变了,变成了路由器B的MAC地址和路由器C的MAC地址
…
不断重复上述过程,直到最终数据转发至主机B