网络基础知识(二) Data Link层详解

系列回顾

Ethernet 与 MAC 地址

目前, 用于网络之间通信的最常用协议, 叫 Ethernet. Data Link层抽象了 Physical层, 模型中更高级的层可以获取他们需要的Physical层的信息. 对于Data Link层来说, 它的责任是保证模型中的 Network层, Transport层和Application层, 可以同时工作, 而不用关心设备于网络是怎样连接的.

历史

Ethernet 首次被提出是在1980年, 到1983年完成标准化流程. 在这之后, Ethernet标准被修改了数次, 目的都是为了提高带宽. 对于1983年的Ethernet标准和今天的Ethernet标准来说, 最大的区别在于当今的Ethernet标准包含的 SwitchHub 的内容, 因为在1983年, 这两件网络设备还没有被发明出来. 这意味着, 在1983年的版本当中, 所有在网络中的设备共享一个 collision domain. Collision Domain - Wiki. 简单来说, collision domain 是一个网段, 在这个网段当中, 每次只能有 一个 设备在通信, 因为在这个网络当中的数据, 是会发送到当前网段当中的 所有 节点. 如果两个设备同时通信, 数据就会冲突.

Ethernet

Ethernet的出现解决了这个问题. 这个手段叫做 CSMA/CD, 它主要的功能是用来确定通信频道是否通畅和设备是否可以传输数据. 工作原理也特别简单, 如果当前网段当中没有数据在传输, 那么任意网络节点都可以发送数据; 如果当前网络中两个设备试图发送数据, 那么发送的动作将会被终止, 所有试图发送数据的设备将会随机等待一段时候后在重试.

MAC 地址

由于在collision domain中, 所有网络节点都可以收到在网段中传送的所有数据, 这意味着我们需要一个手段来弄明白, 这些数据的目标节点是什么. 这就是 MAC地址 的意义. MAC地址是网络接口的唯一编号, 它是一个48-bit的数字, 这个数字分成6组16进制的数字. 一个MAC地址被分成两段, 前三个octet代表着OUI, OUI可以简单理解成”厂商编号”. 后三个octet将由设备制造商执行分配. 有了MAC地址, Ethernet就可以通过MAC地址判断出, 网段中的数据由谁发送, 接受者应该是谁.

Unicat, Multicast 和 Broadcast

Unicast

unicast 指的是数据在网络中传播的时候, 目标地址为单一目标的传播方式. 在Ethernet Level来说, unicast 靠的是MAC地址中的一个特别的字节在完成. 如果MAC地址中第一个octet中最后一个字节为0, 那么意味着在进行unicast transmision. 简单来说, 数据会发送到整个网络, 但是只有相应的地址的设备会接受信息. 如果最后一个字节是1, 那么这个传播方式被称为 Multicast

Multicast

与 Unicast 不同的是, 每个设备根据自己硬件的MAC地址来决定是否接受传播的信息

Broadcast

Broadcast 会把数据发送给网络中所有节点. 完成Broadcast, 需要一个特殊的地址, 这个地址被称为 Broadcast address. 在Ethernet中规定了, Broadcast Address是 FF:FF:FF:FF:FF:FF.

Ethernet Frame

Data packet

Data packet 指的是在网络中进行穿破的数据包. Data packet这个词并不是指具体哪一层的数据, 而是只节点A到节点B的数据. 在Ethernet, data packet被称作 Ethernet Frame. 它是一种有着特殊格式的数据包. 有了这个格式, 在physical层的网络接口就可以将一串bits转化, 然后在网络中传播.

Preamble

对于Ethernet Frame来说, 几乎所有字节都是固定大小的. Ethernet Fram第一部分, 叫做preamble. Preamble的长度为8个bytes, 64个bits. 每个preamble可以被分为两部分. 前七个byte是由0和1组成. 最后一个bytes是SFD, start frame delimiter. 这个byte告知数据接收的设备, 这是preamble的最后一个byte, Ethernet Fram的内容将在这个byte之后出现.

在preamble之后, 就是发送者的MAC地址, 然后是接受者MAC地址.

VLAN Tag

如果这个tag存在的话, 这个fram叫做 VLAN FRAME. VLAN 是virtual LAN的缩写, 是一种可以在同一个网络设备上运行多个LAN的技术.

EthernetType

在两个Mac地址后结束后, 或者VLAN Tag结束后是EthernetType. 它的长度为2个bytes, 16bits. 用来描述Ethernet Frame内容的协议.

Payload

Payload就是实际要传输的数据. 在一个Ethernet Frame里面, 只要不是header, 它就是payload. 长度可以从46个bytes到1500个bytes. 里面包含了Network层, Transport层和Application层所需要传输的所有数据.

FCS

FCS是 frame check sequence的缩写. 它的长度为4个bytes, 32个bit. 内容就是整个ethernet frame的checksum. 关于checksum, 可以在这里了解. 接受信息的设备在接受到ethernet frame之后会计算整个frame的checksum, 如果和FCS不一致, 那么这个frame会被丢弃.