网络编程基础
OSI 七层模型与 TCP/IP 四层模型
OSI(Open Systems Interconnection)七层模型是理论上的通信框架,由 ISO 提出。它将网络通信分为七个层次,每一层都有特定的功能和协议。
- 物理层:负责传输原始比特流,定义物理介质特性。
- 数据链路层:将比特流组织成帧,管理 MAC 地址。
- 网络层:负责数据包的路由和转发,使用 IP 地址标识设备。
- 传输层:提供端到端的数据传输服务,如 TCP 和 UDP。
- 会话层:管理通信会话的建立、维护和终止。
- 表示层:处理数据的格式转换,如加密、压缩。
- 应用层:直接为用户应用程序提供网络服务,如 HTTP、FTP。
实际应用中广泛使用的是 TCP/IP 四层模型,它更贴近工程实践:
- 网络接口层:对应 OSI 的物理层和数据链路层。
- 网络层:对应 OSI 的网络层,处理路由和寻址。
- 传输层:对应 OSI 的传输层,提供可靠或不可靠传输。
- 应用层:对应 OSI 的应用层、表示层和会话层。
核心协议概述
HTTP (Hypertext Transfer Protocol)
HTTP 是应用层协议,用于客户端和服务器之间传输超文本。它是无状态的,基于请求 - 响应模型。常用方法包括 GET、POST、PUT、DELETE。默认端口为 80(HTTP)和 443(HTTPS)。
TCP (Transmission Control Protocol)
TCP 是传输层协议,提供可靠的、面向连接的字节流传输服务。通过确认应答、超时重传、流量控制等机制保证数据不丢失、不重复、有序。适用于文件传输、网页浏览等场景。
IP (Internet Protocol)
IP 是网络层协议,负责将数据包从源主机路由到目标主机。它是无连接且不可靠的,依赖上层协议纠错。支持 IPv4(32 位)和 IPv6(128 位)。
Socket 编程基础
Socket 概念与类型
Socket(套接字)是网络通信的基本操作单元,是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字由一个 IP 地址和一个端口号唯一标识。
- 流式套接字 (SOCK_STREAM):基于 TCP,提供面向连接的可靠数据传输,数据无差错、无重复且按序接收。
- 数据报套接字 (SOCK_DGRAM):基于 UDP,提供无连接的服务,不保证可靠性,适合实时性要求高的应用。
Socket 地址结构
在 C++ 网络编程中,最常用的是 sockaddr 及其相关结构。
struct sockaddr {
unsigned short sa_family; // 地址家族,如 AF_INET
char sa_data[14]; // 协议地址
};
对于 IPv4,更常用 sockaddr_in:


