如果只用 Nginx 等现成的 HTTP Server 搭建 HTTP 服务,不自行建立 TCP 连接,是否就不用考虑 TCP 粘包这类传输层的问题?

2025 年 4 月 14 日
 drymonfidelia
5981 次点击
所在节点    程序员
68 条回复
deplives
2025 年 4 月 15 日
都 5202 年了,还搁这粘包呢? tcp 还在字节流层面,都没有所谓数据包的概念,搁这粘啥呢
monkeyWie
2025 年 4 月 15 日
还在粘包,逮捕
strobber16
2025 年 4 月 15 日
v2ex 常态化整治粘包斗争成效显著
mhycy
2025 年 4 月 15 日
暴论!半桶水 java 书籍害人不浅
tangchi695
2025 年 4 月 15 日
TCP 警察出警!
macaodoll
2025 年 4 月 15 日
抓起来抓起来
julyclyde
2025 年 4 月 15 日
你只要别
亲自在 socket 上执行 read 、write 、recv 、send
基本上都没事

你只要 *面向 request 编程* 而不是 *面向 stream 编程* 就可以把 *从 stream 里截出 request* 这个工作外包给 library

需要强调的是:
正常人无法对 TCP 的 segment 进行处理,正常人只能看到 TCP 是一个 stream
hayala
2025 年 4 月 15 日
这个帖子看着很欢乐
Mystery0
2025 年 4 月 15 日
@zhangsanfeng2012 读 nian bao
catamaran
2025 年 4 月 15 日
@Mystery0 虽然我也念 nian bao ,但是应该是 zhan 包,包 zhan 在了一起,动词,指的是一种现象。nian 一般用作形容词,比如粘豆包。再比如:这个胶很 nian ,所以 zhan 的很结实。
maigebaoer
2025 年 4 月 15 日
抓起来!
yolee599
2025 年 4 月 15 日
说 TCP 粘包属于常识性错误,因为 TCP 协议就像一条水管,会源源不断的给你数据,它只负责把数据按先来后到的顺序交给你。
至于你需要一包一包的应用数据,那是应用层该干的事情,应用层需要给 TCP 数据一个边界标识,再通过这个边界标识来解析数据,如果还没检测到边界就暂存到自己开辟的缓冲区中,等检测到了边界就返回缓冲区里的数据,就够成了一个应用包。
xuanbg
2025 年 4 月 15 日
应用层协议譬如 http 不就是用来给你封一个个包的嘛,既然封装好了包,就不会稀里糊涂粘在一起了,你大可以放心使用。至于 TCP 协议么,那是个数据流,并没有包的概念,所以也不存在粘不粘的。

再往下 IP 协议倒是分包的,就像一个个邮包,上面贴着收件人地址,路由器就是靠这个地址来转发数据包的。但路由器只管转发,并不管你包里面装的什么东西。
echoechoin
2025 年 4 月 15 日
@drymonfidelia #9 每个报文都需要一个头部,头部存放长度就行
me1onsoda
2025 年 4 月 15 日
@laikick #4 不就是字节流才会沾吗?
iceheart
2025 年 4 月 15 日
整天粘包,吸管喝饮料,难道吸上来的是一块一块的?
ipwx
2025 年 4 月 15 日
楼主的需求是啥?

如果用 websocket 发送一个 message ,那它天然就是按 message 切分的,没问题。但是,message 有大小上限。如果你需要发送一个超过上限的 message ,你可能需要自己模拟一遍 “拆包”-“组装” 过程,相当于你用 websocket 消息流模拟了 tcp 的无消息流。

如果你想要在读取 post body 的时候期待客户端是一个一个数据包发送的,那不好意思,中间任何一个代理服务器甚至是路由器都可以修改数据包的形式,是可以任意重新组装重新切分的。
xiaomushen
2025 年 4 月 15 日
受不了,这都粘了 30 多年了吧?
liuguang
2025 年 4 月 15 日
根本不存在粘包,粘包都是源于读取方法。
masterclock
2025 年 4 月 15 日
2025 年了,还能出现 tcp 粘包 这词,我是没想到的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1125429

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX