C++八股——网络通信

1. OSI参考模型

开放式系统互联(Open System Interconnect ,OSI)是网络通信的基础模型。

img

(来源:参考1)

每一层的职能如下图所示:

image-20250428152316880

(来源:参考2)

在设计OSI 参考模型时,各层遵循以下设计原则:

  • 各个层之间有清晰的边界,并且相互独立,实现特定的功能,以避免各个层功能重复。
  • 每一层需要有足够的灵活性;
  • 各层之间完全解耦。

2. TCP/IP 四层模型

传输控制协议/网际协议(transfer control protocol/internet protocol,TCP/IC):由于OSI模型比较复杂,并没有得到广泛应用;TCP/IP 模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP 协议栈也成为互联网的主流协议。

TCP/IP模型各个层次分别对应于不同的协议,TCP/IP协议栈是数据通信协议的集合 ,包含许多协议,它规定了信息如何在网络中传输,负责确保网络设备之间能够通信。

OSI七层模型-TCP/IP四层、五层模型

其中五层模型仅用于网络原理介绍,实际使用的还是四层模型。

image-20250428153131758

3. Socket与WebSocket

Socket是传输层的编程接口,提供更底层的网络通信能力;

WebSocket是建立在HTTP之上的应用层协议,支持双向实时通信。

1.1 Socket(套接字)

定义

  • Socket 是网络通信的底层编程接口,可以看作是操作系统提供的一组 API。
  • 它工作在传输层(TCP/UDP),是网络通信的基础工具,允许应用程序通过 IP 地址和端口与其他设备交换数据。

特点

  • 协议无关性:可用于 TCP(可靠、面向连接)或 UDP(不可靠、无连接)等协议。
  • 双向通信:支持全双工通信(双方可同时收发数据)。
  • 灵活但复杂:开发者需要自行处理数据格式、粘包、错误重试等问题。

典型应用场景

  • 传统客户端-服务器应用(如 SSH、FTP)。
  • 游戏服务器、IoT 设备通信。
  • 任何需要直接控制底层网络细节的场景。

示例

# 服务端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 8080))
s.listen()
conn, addr = s.accept()
conn.send(b'Hello from server!')

# 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8080))
print(client.recv(1024))  # 输出: b'Hello from server!'
1.2 WebSocket

定义

  • WebSocket 是一种基于 TCP 的应用层协议,属于 HTML5 规范的一部分。
  • 它通过 HTTP 协议升级(Upgrade: websocket)建立连接,之后转为全双工通信,专为 Web 实时通信设计

特点

  • 基于 HTTP 握手:连接初始阶段使用 HTTP 协议,之后升级为 WebSocket。
  • 全双工实时通信:服务器可主动推送数据,无需客户端轮询。
  • 轻量级协议:数据帧头部开销小(仅 2-10 字节),适合高频交互。
  • 内置消息分帧:自动处理大数据分块传输。

典型应用场景

  • 实时聊天应用(如 Slack、Discord)。
  • 在线协作工具(如 Google Docs)。
  • 实时数据监控(如股票行情、游戏状态同步)。

示例

// 客户端
const ws = new WebSocket('wss://example.com/socket');

ws.onopen = () => {
  ws.send('Hello from client!');
};

ws.onmessage = (event) => {
  console.log('Received:', event.data);
};

4. TCP和UDP

TCP/UDP在四层模型的第三层传输层,它提供了应用程序间的通信,负责数据能够从发送端传输到接收端。

4.1 TCP(传输控制协议)

详细参考:TCP 协议详解_tcp协议-CSDN博客

TCP(Transmission Control Protocol)是一种面向连接可靠的传输层协议,确保数据按顺序、完整地传输。其核心机制包括:

  • 三次握手建立连接

    TCP 三次握手意义及为什么是三次握手_tcp三次握手的意义-CSDN博客

    1. 客户端发送SYN(同步)报文。
    2. 服务端返回SYN-ACK(同步确认)。
    3. 客户端回复ACK(确认),连接建立。
  • 可靠传输机制

    • 序列号与确认应答:每个数据包分配唯一序列号,接收方需返回确认(ACK)。
    • 超时重传:未收到ACK时,发送方重传数据。
    • 流量控制:通过滑动窗口动态调整发送速率,避免接收方缓冲区溢出。
    • 拥塞控制:使用慢启动、拥塞避免、快速重传等算法防止网络过载。
  • 四次挥手释放连接

    1. 一方发送FIN(终止)报文。
    2. 另一方回复ACK确认。
    3. 另一方发送自己的FIN
    4. 原发送方回复ACK,连接关闭。

应用场景

  • 需要高可靠性的服务:HTTP网页访问、文件传输(FTP)、电子邮件(SMTP)。
  • 对数据完整性敏感的场景:数据库同步、远程登录(SSH)。
4.2 UDP(用户数据报协议)

UDP(User Datagram Protocol)是一种无连接不可靠的传输层协议,强调低延迟和高效传输。其特点包括:

  • 无连接通信:直接发送数据,无需握手或释放连接。
  • 尽最大努力交付:不保证数据到达顺序或是否丢失。
  • 简单首部:仅8字节头部(源端口、目的端口、长度、校验和),开销极小。
  • 无流量和拥塞控制:发送速率由应用层决定,可能引发网络拥塞。

应用场景

  • 实时性要求高的应用:视频会议(Zoom)、在线游戏(UDP+自定义重传)、流媒体(直播)。
  • 轻量级通信:DNS查询、SNMP网络监控。
  • 多播/广播:如IoT设备群发指令。
4.3 补充说明
  • UDP的可靠性增强:某些应用在UDP基础上实现自定义重传和校验(如WebRTC)。
  • TCP的开销问题:在弱网环境下,TCP的重传可能导致延迟波动,UDP更稳定

待续。。。

参考

  1. 一文看懂网络七层协议/OSI七层模型 - 知乎
  2. 计算机网络:OSI 七层模型、TCP/IP 四层模型、协议图_网络层-CSDN博客
  3. WebSocket(看这一篇就够了)-CSDN博客
  4. 带你彻底掌握 WebSocket 用法-CSDN博客
  5. 一文讲透TCP/IP协议 | 图解+秒懂+史上最全_tcpip协议-CSDN博客
  6. DeepSeek
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值