1. 网络通信的本质与进程间通信
在Linux系统编程中,我们已经掌握了进程管理、信号处理和进程间通信(IPC)等核心概念。但所有这些技术都局限于单机环境下的进程交互。当我们将视角扩展到网络环境时,会发现一个全新的维度——跨设备的进程通信。
1.1 从单机IPC到网络IPC
单机环境下的进程间通信,无论是管道、消息队列还是共享内存,本质上都是通过内核提供的共享资源进行数据交换。例如:
c复制// 典型管道使用示例
int fd[2];
pipe(fd); // 创建管道
if (fork() == 0) { // 子进程
close(fd[0]); // 关闭读端
write(fd[1], "Hello", 6); // 写入数据
} else { // 父进程
close(fd[1]); // 关闭写端
char buf[6];
read(fd[0], buf, 6); // 读取数据
}
当通信双方位于不同设备时,这种直接共享内存的方式不再适用。网络通信需要解决三个核心问题:
- 如何标识目标进程(不再是简单的PID)
- 如何跨越物理介质传输数据
- 如何确保数据传输的可靠性
1.2 网络通信的参与主体
一个典型的网络通信场景包含以下要素:
- 终端设备:运行通信进程的计算机/手机等
- 网络接口:网卡(NIC)负责信号转换
- 传输介质:双绞线、光纤、无线电波等
- 中间设备:交换机、路由器等中继节点
关键理解:网络通信的本质是跨设备的进程间通信,所有硬件设施都是为这个目标服务的传输媒介。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 物理层:信号传输的基础设施
2.1 传输介质比较
| 介质类型 | 传输信号 | 最大带宽 | 传输距离 | 抗干扰性 | 典型应用场景 |
|---|---|---|---|---|---|
| 同轴电缆 | 电信号 | 10 Mbps | 500m | 中等 | 传统有线电视网络 |
| 双绞线 | 电信号 | 10 Gbps | 100m | 较好(尤其STP) | 以太网局域网 |
| 光纤 | 光信号 | 100 Gbps | 40km+ | 极好 | 骨干网络、长距离传输 |
| 无线电波 | 电磁波 | 1 Gbps | 视环境而定 | 较差 | 无线网络、移动通信 |
2.2 信号传输的工程挑战
在实际信号传输中,我们需要解决几个关键问题:
-
信号衰减:随着传输距离增加,信号强度会逐渐减弱。解决方案:
- 使用中继器(Repeater)放大信号
- 选择衰减率低的介质(如光纤的衰减仅0.2dB/km)
-
信号干扰:
- 双绞线通过双线绞合抵消电磁干扰
- 光纤完全不受电磁干扰
- 无线通信采用跳频等技术抗干扰
-
时钟同步:
- 曼彻斯特编码:用电压跳变表示0/1
- 4B/5B编码:每4位数据转换为5位编码,保证足够跳变
3. 数据链路层:局域网通信机制
3.1 以太网帧结构
code复制+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 前导码(7B) | 帧开始符(1B) | 目的MAC(6B) | 源MAC(6B) | 类型(2B) | 数据(46-1500B) | FCS(4B) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- MAC地址:48位硬件地址,如
00:1A:2B:3C:4D:5E - FCS:帧校验序列,使用CRC-32算法检测传输错误
3.2 CSMA/CD协议详解
载波侦听多路访问/冲突检测(CSMA/CD)是以太网的冲突解决机制,其工作流程如下:
- 发送前监听信道:
python复制def send_frame(): whil
