Press
esc
to close
请输入并搜索
子昂日记
本站居然运行了
子昂日记
Press
Ctrl
+
and
K
to search
Explore
分类导航
8 项
当前分类 · 网络协议
Linux
其他
golang
pyhton
leetcode算法
网络协议
AI
Mysql
Explore
分类导航
8 项
当前分类 · 网络协议
Linux
其他
golang
pyhton
leetcode算法
网络协议
AI
Mysql
导航
目录
短连接
长连接
WebSocket (全双工长连接)
tcp time_wait的作用
tcp粘包
拆包
IPC常见方式
网络相关知识总结
2026-01-15
0
相关信息
本章节主要学习网络知识
短连接
模式:建立连接 -> 发送数据 -> 关闭连接。
背景:早期的 HTTP/1.0。每请求一个网页上的图片或 CSS,都要经历一次 TCP 三次握手和四次挥手。
缺点:开销极大。频繁地创建和销毁连接非常耗费 CPU 和内存资源。
长连接
模式:建立连接 -> 发送数据 -> 保持连接 -> 发送数据 -> ... -> 关闭连接。
背景:HTTP/1.1 默认开启。在 HTTP Header 中加入 Connection: keep-alive。
特点:
复用:同一个 TCP 连接可以发送多个 HTTP 请求。
半双工:虽然连接没断,但依然是“请求-响应”模式。必须客户端先问,服务端才能答。
阻塞:前面的请求没处理完,后面的请求就得排队(Head-of-line blocking)
WebSocket (全双工长连接)
模式:HTTP 握手升级 -> 建立持久 TCP 连接 -> 双向实时传输。
背景:为了解决“服务端主动推送到客户端”的问题(如聊天、实时股票)。
特点:
全双工:客户端和服务器可以同时给对方发消息,不需要等对方回应。
协议升级:它开始时借用 HTTP 的 80/443 端口进行握手,握手成功后就“脱离” HTTP,转为 WebSocket 协议。
轻量:数据头非常小,适合频繁发送短消息。
tcp time_wait的作用
确保旧连接的所有报文都消失
大白话:防止之前连接的被动关闭方的延迟数据被错认为新链接的数据
防止被动关闭方没有收到最后的ACK引起报错
大白话: 被动关闭方发送的fin一直收不到ack
tcp粘包
tcp本身是面向流的协议,是没有消息边界的
TCP 为了效率,会把多个小的数据包合并成一个大的发出去(Nagle 算法);
接收方处理不够快,多个包积压在接收缓冲区里,一次性读出来了
拆包
数据包太大,超过了 MSS(最大报文段长度),
IP 层进行了分片,导致一个完整的消息被切断成两半发送。
解决方案
包设置固定长度
增加分隔符
消息头带长度(Length Field Based)(把包分成“头”和“体”)
自定义序列化协议
使用 Protobuf、JSON 等。虽然它们本身不解决粘包,但通常配合方案3使用
IPC常见方式
ipc的常见方式有信号量、pipe(管道)、消息队列、共享内存、套接字等
不同ipc方式的优缺点和场景
pipe : 优点是简单, 缺点是半双工,只能单向传输
共享内存:
本文作者:
曹子昂
本文链接:
版权声明:
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
< 堆栈的区别
算法学习-二分查找 >