无知的 tonyseek

Yet Another Seeker

计算机网络学习笔记——以太网

这学期修读了“计算机网络”这门培养方案中开设得比较晚的基础必修课。这也是继上学期修读软件需求课程之后,我再次修读尹剑飞老师开设的课,实在受益良多——尹剑飞老师的讲解总是一语击中要点。今天特此将入门一周的知识总结记录下来,以后还会不断更新续篇。一方面如 phppan 哥所说整理知识是对自己负责,另一方面我也希望能记录下学习的脚步。

计算机网络的发展史

其实知道一下发展史还是挺有用的,至少对于我来说,我知道了一点——最早的计算机网络都是区域性的,也就是今天我们所说的“局域网”。在这些网络中又有很多分类,如以太网、令牌环网等。现今比较普遍见到的是以太网(Ethernet) [0]

“互联网” [1] 最初被提出来的目的,是将不同的网络连接起来。所谓不同,就是不管局域网使用的是以太网协议还是令牌环网协议,都能以隐藏内部通信细节的方式连接。如果要咬文嚼字的话,我们平时说的“因特网”是对互联网的一个实现(貌似也是目前唯一的一个实现)。

以太网通信方式

以太网本身是链路层协议,以帧(Frame) [2] 的方式传送数据。由于以太网有 802.3 和 DIX Ethernet 2 两种标准,所一个“帧”是可以有不同的数据结构的。我们着重了解的是 DIX Ethernet 2 标准,在该标准中一个帧由目的地址、源地址、帧类型、数据、校验码组成。

随手笔记图片

其实真正在物理层传输的数据,还有一个前导同步码,用于确定帧的顺序。因为一份完整的数据可能是被切分成多个帧传送的,而网络传输的特性决定了帧不一定会按照预期顺序到达,所以网卡(物理层)会添加同步码解决这个问题。真正链路层处理的,是按顺序将地址和应用层带来的数据组合,并添加校验码。

同步码(8 bytes) | 目的地址(6 bytes) | 源地址(6 bytes) | 帧类型(2 bytes) | 数据(46~1500 bytes) | 校验码(4 bytes)

如果通过校验码得知帧损坏,链路层直接将该帧丢弃。具体如何重发由上层决定。

对于帧中的地址,DIX 以太网使用的是“物理地址”,也就是烧录在我们网卡上的 MAC 地址。源地址一般就填写发送帧的计算机的地址,而目标地址还可以选择一些有特殊意义的虚拟地址。一般选择以下三者之一:

  • 单播地址:即目的计算机的物理地址,这种情况下帧传送到指定单台计算机
  • 多播地址:分配给某个“多播组”的虚拟地址,并非物理地址,指定帧传送到多播组中所有计算机
  • 广播地址:保留的一个虚拟地址 FF:FF:FF:FF:FF:FF ,表示将帧传送给子网中所有计算机

计算机网络的本质

我们常说程序的本质就是算法加数据结构。对于计算机网络,尹剑飞老师却有相似的结论。

计算机网络的本质是算法加数据结构。 ——尹剑飞

从以太网的帧可以看出,计算机网络划分了细致的层次,本质却是将期望的数据以一定的数据结构传输,而计算机或其他网络设备则以相关的算法解析这些数据结构。

我认为这是太贴切不过的总结。

[0]以太网
[1]Internet
[2]以太网的“帧”

Ethernet

Comments