1. 网络编程基础概述
网络编程是现代软件开发中不可或缺的核心技能之一。无论是开发Web应用、移动应用还是物联网设备,理解网络通信原理都是必备的基础知识。网络编程主要涉及不同主机之间的进程通信,这与单机内的进程间通信(IPC)有着本质区别。
在Linux/Unix系统中,网络编程主要通过套接字(Socket)接口实现。Socket可以理解为网络通信的端点,就像水管的两端,负责数据的发送和接收。理解Socket编程需要掌握网络协议栈、数据传输机制以及各种网络编程模型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络协议栈模型
2.1 OSI七层模型
OSI(Open System Interconnection)模型是一个理论上的网络通信框架,它将网络通信划分为七个层次:
- 物理层:负责比特流在物理介质上的传输,定义电气特性和机械特性
- 数据链路层:提供相邻节点间的可靠数据传输,处理MAC地址和帧同步
- 网络层:负责路由选择和逻辑寻址(IP地址)
- 传输层:提供端到端的通信服务(TCP/UDP)
- 会话层:建立、管理和终止会话
- 表示层:处理数据格式转换和加密
- 应用层:为用户提供网络服务接口
虽然OSI模型在实际中并未完全实现,但它为理解网络通信提供了重要的理论框架。
2.2 TCP/IP四层模型
TCP/IP模型是互联网实际使用的协议栈,它比OSI模型更为简洁:
- 网络接口层:对应OSI的物理层和数据链路层
- 网际层:对应OSI的网络层,核心协议是IP
- 传输层:对应OSI的传输层,主要协议是TCP和UDP
- 应用层:对应OSI的会话层、表示层和应用层
TCP/IP模型更贴近实际网络实现,是网络编程的基础框架。
3. 核心网络协议
3.1 IP协议
IP(Internet Protocol)是网络层的核心协议,负责主机间的逻辑寻址和数据包路由。关键特点包括:
- 无连接:每个数据包独立路由
- 不可靠:不保证数据包一定能到达目的地
- 尽力而为:尽最大努力交付数据包
IPv4地址由32位组成,通常表示为点分十进制(如192.168.1.1)。IP地址分为网络部分和主机部分,通过子网掩码区分。
3.2 TCP协议
TCP(Transmission Control Protocol)是面向连接的、可靠的传输层协议:
- 连接导向:通信前需建立连接(三次握手)
- 可靠传输:通过确认、重传、流量控制和拥塞控制保证数据可靠到达
- 全双工:双方可同时发送和接收数据
- 流式传输:数据被视为字节流,无固定边界
TCP适用于要求可靠传输的场景,如文件传输、网页浏览等。
3.3 UDP协议
UDP(User Datagram Protocol)是无连接的、不可靠的传输层协议:
- 无连接:无需预先建立连接
- 不可靠:不保证数据一定能到达
- 低延迟:没有复杂的控制机制
- 数据报:数据有固定边界
UDP适用于实时性要求高、可容忍少量丢失的场景,如视频会议、在线游戏等。
4. Socket编程基础
4.1 Socket概念
Socket是网络通信的端点,本质上是操作系统提供的编程接口。在Linux中,Socket被视为一种特殊的文件描述符。
Socket类型主要分为:
- 流式Socket(SOCK_STREAM):对应TCP
- 数据报Socket(SOCK_DGRAM):对应UDP
- 原始Socket(SOCK_RAW):可直接访问底层协议
4.2 Socket地址结构
网络编程中常用的地址结构:
c复制struct sockaddr {
sa_family_t sa_family; // 地址族
char sa_data[14];
