文章目录
1. OSI参考模型
开放式系统互联(Open System Interconnect ,OSI)是网络通信的基础模型。
(来源:参考1)
每一层的职能如下图所示:
(来源:参考2)
在设计OSI 参考模型时,各层遵循以下设计原则:
- 各个层之间有清晰的边界,并且相互独立,实现特定的功能,以避免各个层功能重复。
- 每一层需要有足够的灵活性;
- 各层之间完全解耦。
2. TCP/IP 四层模型
传输控制协议/网际协议(transfer control protocol/internet protocol,TCP/IC):由于OSI模型比较复杂,并没有得到广泛应用;TCP/IP 模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP 协议栈也成为互联网的主流协议。
TCP/IP模型各个层次分别对应于不同的协议,TCP/IP协议栈是数据通信协议的集合 ,包含许多协议,它规定了信息如何在网络中传输,负责确保网络设备之间能够通信。
OSI七层模型-TCP/IP四层、五层模型
其中五层模型仅用于网络原理介绍,实际使用的还是四层模型。
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(Transmission Control Protocol)是一种面向连接、可靠的传输层协议,确保数据按顺序、完整地传输。其核心机制包括:
-
三次握手建立连接:
TCP 三次握手意义及为什么是三次握手_tcp三次握手的意义-CSDN博客
- 客户端发送
SYN
(同步)报文。 - 服务端返回
SYN-ACK
(同步确认)。 - 客户端回复
ACK
(确认),连接建立。
- 客户端发送
-
可靠传输机制:
- 序列号与确认应答:每个数据包分配唯一序列号,接收方需返回确认(ACK)。
- 超时重传:未收到ACK时,发送方重传数据。
- 流量控制:通过滑动窗口动态调整发送速率,避免接收方缓冲区溢出。
- 拥塞控制:使用慢启动、拥塞避免、快速重传等算法防止网络过载。
-
四次挥手释放连接:
- 一方发送
FIN
(终止)报文。 - 另一方回复
ACK
确认。 - 另一方发送自己的
FIN
。 - 原发送方回复
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更稳定
待续。。。
参考: