数据链路层
该层也是MAC层。MAC 的全称是Medium Access Control
,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。
需要解决几个问题:
- 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
- 这个包是发给谁的?谁应该接收?
- 如果发送的时候出现了错误,怎么办?
谁先发?谁后发?
这个问题中的规则,学名叫多路访问
。有很多算法可以解决这个问题。
主要有这三种方式:
- 信道划分:分多个信道,各不干扰
- 轮流协议:轮流交替进行传输
- 随机接入协议:错峰传输,用于以太网
发给谁的?谁应该接收?
MAC层规定了一个网络包的格式。
用到了一个物理地址,叫做链路层地址
,通常我们称为MAC地址
。
类型大部分都是IP数据包,包含了TCP、UDP、HTTP等内容。
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡就能发现,哪个包属于自己。
这里还有一个没有解决的问题,源机器如果不知道目标MAC地址,它如何获得目标IP地址的MAC地址呢?
这就需要ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。
ARP协议
当包发到一个局域网里,知道IP地址,此时就会发一个广播包,问所有机器,谁的IP地址是目的地址,我需要你的MAC地址。具体的报文格式如下:
当目标主机接收到广播报文时,就会回应一个ARP应答报文。
为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。
这里又涉及到传输中介设备:
传输中介
集线器
这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。 这是第一层物理层联通的方案。
交换机
当主机数一多,就容易发生冲突了,而且把不需要的包转出去纯属浪费。
此时就需要一个“更智能”的中介,来管理报文的转发。因为每个口都只连接一台电脑,这台电脑又不怎么换 IP 和 MAC 地址,只要记住这台电脑的 MAC 地址,如果目标 MAC 地址不是这台电脑的,这个口就不用转发了。
一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个口之外的其他所有的口。
但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。
过了一段时间之后,就有了整个网络的一个结构了,这个时候,基本上不用广播了,全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为转发表
,是有一个过期时间的。
在二层中我们讲了 ARP 协议,即已知 IP 地址求 MAC;还有一种 RARP 协议,即已知 MAC 求 IP 的,你知道它可以用来干什么吗?
如果一个局域网里面有多个交换机,ARP 广播的模式会出现什么问题呢?
发送的时候出现了错误,怎么办?
网络包中有一个CRC
的部分,是循环冗余检测
,通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。