上一大节,咱们通过一个虚构的协定,初步意识了数据链路层的工作原理。数据链路层次要解决由若干主机组成的本地网络的通信问题,寻址 和 复用分用 思维在其中施展着关键作用。
数据链路层有一个十分重要的协定—— 以太网协定。接下来,咱们一起来揭开它的神秘面纱!
应用以太网协定进行通信的主机间,必须通过某种介质间接相连。通信介质能够是实在的物理设施,如网线、网卡等;也能够是通过虚拟化技术实现的虚构设施。
以太网帧
在以太网中,数据通信的根本单位是 以太网帧 (_frame_),由 头部 (header )、 数据 (data ) 以及 校验和 (checksum ) 三局部形成:
请留神,这图中的单位为字节,而不是比特了。
头部
以太网帧头部蕴含 3 个字段,顺次是:
- 目标地址,长度是 6 字节,用于标记数据由哪台机器接管;
- 源地址,长度也是 6 字节,用于标记数据由哪台机器发送;
- 类型,长度是 2 字节,用于标记数据该如何解决,
0x0800
示意该帧数据是一个 IP 包(后续章节介绍)。
除了字段长度有所拓展之外,以太网帧跟咱们虚构进去的协定一模一样。对了,咱们留神到一点小差别——在以太网帧中,目标地址 放在最后面。这其中有什么非凡思考吗?
的确是有的。接管方收到一个以太网帧后,最先解决 目标地址 字段。如果发现该帧不是发给本人的,前面的字段以及数据就不须要解决了。根底网络协议影响方方面面,设计时解决效率也是一个十分重要的考量。
数据
数据 能够是任何须要发送的信息,长度可变,46 至 1500 字节均可。
下层协定报文,例如 IP 包,能够作为数据封装在以太网帧中,在数据链路层中传输。因而,数据还有另一个更形象的称呼,即 负荷 (payload )。请自行脑补数据 搭载 在以太网帧这个交通工具上旅行的画面。
校验和
因为物理信号可能受到环境的烦扰,网络设备传输的比特流可能会出错。一个以太网帧从一台主机传输到另一台主机的过程中,也可能因各种因素而出错。那么当主机收到以太网帧时,如何确定它是完整无缺的呢?
答案是:校验和 。咱们能够用诸如 循环冗余校验 (CRC ) 算法,为以太网帧计算校验和。如果以太网帧在传输的过程出错,校验和将产生扭转。
留神到,以太网帧最初面有一个 4 字节字段,用于保留校验和。发送者负责为每个以太网帧计算校验和,并将计算结果填写在校验和字段中;接收者接到以太网帧后,从新计算校验和并与校验和字段进行比照;如果两个校验和不统一,阐明该帧在传输时出错了。
【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: