Linux 网络基础入门(上)
网络是计算机协作的基石。在深入 Linux 系统编程之前,理解网络的基本概念、协议机制以及分层模型至关重要。
网络基础概念
网络的发展演进
独立模式
早期计算机相互独立,数据交换依赖物理介质(如磁盘)。A 完成计算后需将存储设备交给 B,B 处理后再转交 C。这种方式效率低下,难以满足大规模协作需求。
网络互联
为解决数据共享问题,多台计算机被连接至服务器。A 上传数据至服务器,B 直接拉取即可,无需人工传递。这标志着网络互联的诞生。
局域网 (LAN) 与广域网 (WAN)
随着计算机数量增加,交换机和路由器被引入以优化连接。局域网覆盖较小范围,而广域网则连接远隔千里的网络。两者是相对概念,广域网可视为更大规模的局域网。
网络发明的核心意义在于提升协作效率。只要人类需要协同工作,网络的存在就是必然的。
初识协议
通信双方必须遵循共同的规则才能交换信息。例如,过去有人约定电话响一声代表平安,两声代表要生活费,三声代表急事。通过这种约定,既传达了意图又节约了成本。这就是协议的雏形:为了节约资源而产生的约定。
计算机间通过光信号或电信号传输 0 和 1。频率和强弱代表不同信息,但仅靠底层信号无法传递复杂数据,必须约定数据格式。
思考: 两台主机约定好协议就能通信吗? 不一定。如果一方用频率表示 0/1,另一方用强弱表示,即便遵守同一套通信规则,语言不通也无法交互。完善的协议需要更细致的规定,且所有参与方(不同厂商的硬件、操作系统)都必须遵守统一标准。
制定标准的组织通常具有行业权威性,例如:
- IEEE:制定电子电气工程领域标准,如 IEEE 802 系列。
- ISO:提出 OSI 七层模型。
- ITU:负责电信领域的国际标准。
- IETF:开发推广互联网协议(TCP/IP 族),发布 RFC 文档。
协议分层
软件设计常采用分层架构以实现解耦。网络协议同样如此。以打电话为例,用户层只需关注通话,底层通讯设备层则遵守各自的通信协议。正是由于都遵守了标准协议,PC 微信与手机微信才能互通。
实际网络通信协议更为复杂,通常分为更多层级。
OSI 七层模型
OSI(开放系统互连参考模型)是一个逻辑定义和规范,将网络分为七层。其优点是将服务、接口和协议明确区分,理论完整。但在工程实践中,会话层和表示层较难落地,因此实际多采用 TCP/IP 模型。
TCP/IP 五层(或四层)模型
TCP/IP 是一组协议的代名词,采用五层结构。每层调用下一层的服务来完成自身需求。
- 物理层:负责光/电信号传递。如网线、光纤、Wi-Fi 电磁波等。集线器 (Hub) 工作在此层。
- 数据链路层:负责设备间数据帧的传送和识别。如网卡驱动、帧同步、冲突检测。交换机 (Switch) 工作在此层。
- 网络层:负责地址管理和路由选择。如 IP 协议,路由器 (Router) 工作在此层。
- 传输层:负责两台主机间的数据传输。如 TCP 协议,确保可靠传输。
- 应用层:负责应用程序间沟通。如 SMTP、FTP、Telnet。网络编程主要针对此层。
注:物理层涉及硬件较多,软件层面常将其合并,故有时也称为 TCP/IP 四层模型。
对于一台主机,操作系统内核实现了从传输层到物理层的内容;路由器实现了网络层及以下;交换机实现了数据链路层及以下。
再识协议
为什么需要 TCP/IP 协议?单机内部也存在协议(如内存协议、SATA 协议),但本地通信成本低。网络通信最大的特点是主机距离变远,通信特征变化带来了新问题,因此需要新的协议来解决。
什么是 TCP/IP 协议?
它本质上是一种解决方案,能分层的前提是问题本身可以分层。
协议的本质
操作系统源码多用 C/C++ 编写。我们可以从代码角度朴素地理解协议。

