在计算机网络中,物理层负责将光电信号转化为 0、1 比特流用来表示信息,数据链路层把这些信息集合为一个叫做「帧」的块,再进行传输。
TCP/IP 未对数据链路层及以下部分(物理层)做定义,因为 TCP/IP 以这两层的功能是透明的为前提,但是,数据链路层的知识对于深入理解 TCP/IP 与网络起着至关重要的作用,所以这一篇我们重点来介绍数据链路层,物理层主要是物理介质,比如光缆、电缆、双绞线等,更多的是硬件结构,不在我们重点论述范围。
MAC地址
介绍数据链路层,离不开 MAC 地址,MAC 地址用于识别数据链路中互连的节点,在使用网卡的情况下,MAC 地址一般在出厂的时候就被烧到 ROM 中,不可更改,而且全球唯一。
我们见到的 MAC 地址都是通过十六进制树来表示:
在计算机内部,则是通过 48 位二进制数来表示,对应结构及区间含义如下:
MAC 地址的全局唯一性通过厂商识别码和产品识别码(厂商内识别码)共同保证,就好比咱们 PHP 通过 Composer 安装的扩展包也是通过厂商名/产品名确定全局唯一一样。
在同一个数据链路里(比如同一个局域网),互连的主机之间通过 MAC 地址即可实现相互通信。
以太网
在数据链路中最著名,使用最广泛的莫过于以太网(Ethernet),现在我们的计算机联网基本都是借助以太网来实现的,如果你在命令行通过运行 ifconfig(Windows下是ipconfig)查看网卡信息,即可窥见端倪:
以 en 开头的都是基于以太网的网卡,是 Ethernet 的简写。如果是在 Windows 下则更加直白:
早期,以太网通过同一根同轴电缆将多台终端设备连接起来,这种共享介质的连接方式有一个显著的缺点,就是发送和接收信号不能同时进行,只能实现半双工通信,并且多台设备也不能同时通信,需要争夺对通信介质的控制,如果同时通信,容易出现信道冲突。
为了提高通信效率和速度,随着技术的不断发展,现在的以太网一般都采用终端与交换机直连独占电缆的方式,实现了全双工通信,并且不同终端也可以同时发送信息,因为通信介质都是独占的,不存在控制权和冲突问题:
以太网根据线缆介质的不同,分为多种类型,对应的带宽也不同,所有这些不同类型的以太网都是遵循 IEEE802.3 标准:
这些不同类型的以太网前面的数字代表带宽(传输速度),比如10代表10Mbps(比特每秒),1000代表1000Mbps等,后面的5、T、TX等代表传输介质。传输速度相同传输介质不同的以太网需要通过中继器或集线器连接,传输速度不同的以太网需要通过网桥、交换集线器或路由器进行连接。通过这种连接,最终构成了大大小小的计算机网络。
数据帧格式
以以太网为例,在数据链路层中,传输的数据帧主体格式如下:
其中,有6个字节的目标MAC地址,6个字节的源MAC地址,2个字节的上层协议类型,剩下的是传输数据,对以太网来说,数据大小是1500字节,还有最后4位是帧检验序列(FCS),用于检测帧是否损坏。
无线通信
无线通信不需要借助任何可见的线缆和网线,一般通过电磁波、红外线、激光进行数据传播,无线通信标准由 IEEE802.11 定义,常见的种类如下:
关于无线通信的细节在前面网络协议不定期分享之 WiFi 的由来中已经介绍过了,这里就不再赘述了。
小结
以上就是数据链路层常见实现所使用到的技术基础知识,单单靠物理层与数据链路层还是无法实现网络通信的,因为在互联网中,还需要 IP 地址才能实现主机节点之间的通信,而 IP 地址归属于 IP 协议,IP 协议则是网络层的协议,下一篇就来给大家介绍网络层的相关技术。