网络通信

返回 计算机网络

网络通信是计算机之间通过网络传递信息的过程,涵盖通信模式、数据传输方式和编码格式。


通信模式

模式说明典型场景
单播(Unicast)一对一,点对点HTTP 请求、TCP 连接
广播(Broadcast)一对所有(同一网段)ARP 请求、DHCP 发现
多播(Multicast)一对一组视频会议、IPTV
任播(Anycast)一对最近的一个DNS 根服务器、CDN

同步 vs 异步通信

特性同步异步
调用方式发起请求后等待响应发起请求后立即返回
代表协议/模式HTTP 请求-响应消息队列、WebSocket 推送
优点简单直观,结果即时可用高吞吐,不阻塞调用方
缺点调用方阻塞,超时风险流程复杂,状态追踪难

序列化与编码

数据在网络传输前需序列化为字节流:

格式特点适用场景
JSON文本,可读性好,体积较大REST API,前后端交互
XML文本,冗余标签,体积大传统 Web Service(SOAP)
Protobuf二进制,体积小,需 schemagRPC,高性能微服务
MessagePack二进制,JSON 的紧凑版实时系统
Avro二进制,支持 schema 演化Kafka 消息

长连接 vs 短连接

类型说明适用场景
短连接每次请求新建 TCP,用完断开HTTP/1.0
长连接(Keep-Alive)复用 TCP 连接,减少握手开销HTTP/1.1 默认
持久全双工连接保持,双向推送WebSocket、gRPC 流

推送方式对比

方式原理优缺点
短轮询客户端每隔固定时间请求一次实现简单,但延迟高、浪费带宽
长轮询请求挂起直到有数据或超时延迟低,但连接数多
SSE(Server-Sent Events)HTTP 单向流,服务端持续推送简单,仅服务端→客户端
WebSocketTCP 全双工持久连接双向低延迟,需专门支持

网络字节序

网络传输使用大端序(Big-Endian):高位字节存低地址。不同 CPU 架构(x86 小端)在网络编程时需转换:

uint32_t net_val = htonl(host_val);  // host to network long
uint32_t back    = ntohl(net_val);   // network to host long

内容协商

HTTP 客户端通过请求头告知服务端偏好,服务端选择最合适的格式响应:

请求头作用示例
Accept期望的响应 MIME 类型application/json, text/html;q=0.9
Accept-Encoding期望的压缩格式gzip, br, deflate
Accept-Language期望的语言zh-CN,zh;q=0.9,en;q=0.8
Content-Type请求体的格式application/json; charset=utf-8

传输压缩

服务端响应时可压缩 Body,减少传输体积:

算法压缩率速度适用场景
gzip通用文本(HTML/JS/CSS/JSON)
br(Brotli)更高(比 gzip 约 20%)较慢(压缩端)静态资源,CDN 推荐
deflate兼容旧系统
zstd新兴场景,Nginx/Caddy 支持

压缩对已压缩二进制(图片、视频)效果极差,应跳过。


连接管理

连接池

高频 TCP 建连开销大(三次握手 + TLS 握手),连接池复用已建立连接:

应用层  →  连接池  →  空闲连接  →  服务端
              ↑
         有连接归还时复用,无则新建,超出上限则排队/拒绝

常见配置参数:maxPoolSizeminIdleconnectionTimeoutidleTimeout

HTTP/2 多路复用

单一 TCP 连接承载多条并发 Stream,替代 HTTP/1.x 的多连接并发:

TCP 连接
├── Stream 1  → GET /api/user
├── Stream 3  → GET /api/posts
└── Stream 5  → POST /api/comment

帧(Frame)是最小传输单元,每帧携带所属 Stream ID,可乱序到达后重组。


NAT 与穿透

NAT(网络地址转换):路由器将私网 IP:Port 映射为公网 IP:Port,是 IPv4 地址稀缺的核心解法。

NAT 类型说明P2P 穿透难度
Full Cone公网端口开放,任意外部均可发入
Restricted Cone只有曾发包的 IP 可发入
Port Restricted Cone只有曾发包的 IP:Port 可发入
Symmetric每个目标映射不同公网端口难,通常需 TURN 中继

STUN:客户端向公网 STUN 服务器发包,获知自己的公网 IP:Port。
TURN:无法穿透时,通过中继服务器转发,保证连通但增加延迟。


流量控制与拥塞控制

TCP 流量控制

接收方通过滑动窗口(rwnd)告知发送方可接收的数据量,防止接收缓冲区溢出。

TCP 拥塞控制(四阶段)

慢启动  → 拥塞避免  → 快速重传  → 快速恢复
cwnd 指数增长 → 线性增长 → 检测到丢包 → 减半后线性恢复

常见算法:RenoCUBIC(Linux 默认)、BBR(基于带宽和 RTT,Google 开发)。

UDP 无流控

UDP 不提供任何流量控制,应用层需自行实现(如 QUIC、WebRTC 的 RTCP 反馈)。


QoS(服务质量)

网络资源有限时,对不同流量优先级排队:

指标说明
带宽(Bandwidth)单位时间内可传输的最大数据量
延迟(Latency / RTT)数据从源到目标的往返时间
抖动(Jitter)延迟的变化幅度,实时音视频敏感
丢包率(Packet Loss)丢弃包占总包的比例

实时音视频要求低延迟低抖动,可牺牲少量带宽;文件传输要求带宽大,延迟不敏感。


相关