既然 WebSocket 基于 tcp,那么这里大概能确定的是,在一条连接内,如果服务器或客户端的任意一端连续发消息,另一端也能按顺序收到。但如果,服务器和客户端几乎同时发出一连串消息,那么这些消息的顺序和完整性还能被保证吗?
|
1
所以你真的了解 TCP 吗
|
|
2
碰包这个词第一次听说
|
|
3
第一次听说“碰包”……
|
|
cuzfinalAug 8, 2018
4
这些低级错误在大佬们设计 tcp 协议的时候早就解决了,还有碰包是什么鬼?
|
|
5
好像碰瓷
|
|
6
两个包撞上了,形成了一种原子力量,发生了聚变,产生了物理冲撞,爆炸形成了信息宇宙
|
|
7
你把我碰倒了,赔我 10 万个包,这件事就算了
|
|
suikatorAug 8, 2018 via Android
8
恭喜 IT 民科喜提碰包😂
|
|
9
粘包:欢迎碰包弟弟加入这个大家庭😂
|
|
10
tcp 包这么智能,都会违章了
|
|
11
你是觉得他们会在同一个通道内撞上吗?当这是开车? |
|
wizardozAug 8, 2018
12
单工、半双工、全双工了解一下。
TCP 是全双工 |
|
misaka19000Aug 8, 2018
13
今日最佳
|
|
catcnAug 8, 2018
14
碰碰包
|
|
catrorAug 8, 2018 via Android
15
你逆行撞到我了,赔我的包
|
|
glacerAug 8, 2018
16
网线可不是单行道,先补补通信基础吧
|
|
towserAug 8, 2018
17
TCP 是全双工协议,可以理解为发送路径和接收路径不是一条路,不会 ”碰包“。
|
|
blueskitAug 8, 2018 via Android
18
在同轴电缆时代,倒确实会碰包。
|
|
19
LZ 的意思是 websocket 不是严格的 请求 - 响应,而是有可能连续请求中,夹杂着响应。
那么答案是:是的。websocket 是一种双向流协议。你得考虑这种情况。 其实原始的 http 也会有这种情况,只不过反向代理和 web 框架帮你把这事儿处理了。 |
|
abcbuzhimingAug 8, 2018
20
我还以为说粘包呢,碰包是什么鬼?难道楼主没听说过发送和接收是分开的吗
|
|
ericlsAug 8, 2018 via iPhone
21
可以保证一边发送的顺序是另一边接收的顺序
|
|
pawAug 8, 2018
22
lz 是从以太半双工的年代穿越过来的吧
|
|
23
那么我肯定误解了 packet collision 这个概念,不过短时间内为什么这么多回复?这个节点
|
|
24
@InternetExplorer 不了解,只知道 tcp 可以保证完整性和顺序。
|
|
25
|
|
noNOnoAug 8, 2018
28
哈哈,新词
|
|
32
这 sb 帖子竟然飘到了今日最热……
|
|
nobirdAug 8, 2018 via iPhone
33
我告诉你为啥变成了最热…… by 微博观光团
|
|
36
@changnet
收到 1 请求,worker 开始处理 1,暂时不返回 收到 2 请求,worker 开始处理 2,立刻返回 worker 返回 1 请求的结果 这个时候如果你是客户端如何区分 2 个返回?仅靠顺序可能嘛? |
|
37
@abcbuzhiming 粘包我知道,但分开的这件事有点不确定。
|
|
42
恭喜本帖荣登 V2EX 首页顶部🎉㊗️
|
|
estAug 8, 2018
43
@changnet 也是不一定的。TCP OOB 了解一下。。2333。
国内做技术的就是喜欢瞎 jb 发明名词,然后另一拨人对名词后面的需求又瞎 jb 起哄。 分包 粘包 这个其实是 layer 7 应用层更上面的需求,其实也应该严肃对待。 http 严格的来说属于 OSI 7 层了,websocket 至少 8 层了。websocket 里套业务逻辑应该 9 层了? |
|
allgyAug 8, 2018
44
又一个自创名词的..."碰包"自己听起来不别扭吗,人家已经有习惯性的称谓"粘包"就不要瞎造词
|
|
NullExceptionAug 8, 2018
45
双击
|
|
paparikaAug 8, 2018
46
听俺们量子物理和 cs 双学位的老工程师给讲过,碰包和欧洲那边原子对撞机是一个原理的撒,搞不好哪天就碰出黑洞,把地球湮灭了哦
|
|
47
全双工,你可以理解为有两条通道....粘包倒是有...
|
|
pagxirAug 8, 2018 via Android
48
我知道现实生活中有碰瓷现象,至于碰包也许是有吧。
|
|
quickmaAug 8, 2018
49
多看书啊。
|
|
crabAug 8, 2018
50
粘包 碰包 - -!
|
|
51
前几天我了解了粘包,今天我又知道了碰包。。。
|
|
affyunAug 8, 2018 via Android
52
坐等肉包豆包
|
|
zhujinliangAug 8, 2018
53
发现碰包后,请出示船票,大喊“我可以上船了”
|
|
56
贼讨厌 粘包 这种词汇,没有为什么。
|
|
momocraftAug 8, 2018
61
把 ws 称为第 8 层感觉有点怪, 毕竟 upgrade 后那个 tcp 连接就完全归 ws 了 (而且 http over http tunnel 这样的用法不知得排到第几层去)
|
|
hacherAug 8, 2018
63
在 TCP 专业术语里叫:碰瓷
|
|
jin5354Aug 8, 2018
65
竞态
|
|
dosmlpAug 8, 2018
66
楼主肯定不知道 tcp 是怎么回事,可以说连“了解 TCP ”都达不到
|
|
NUTAug 8, 2018
68
火贴留名
|
|
yanaraikaAug 8, 2018
69
猜楼主想问的是 server onReceive()和 send()方法要不要做同步。答案是当然要做,最简单的就是如果其中共享了数据加把锁
|
|
wcsjtuAug 8, 2018
70
@est 网络数据达到顺序,和你应用层代码执行顺序没半毛钱关系。websocket 包并不包含 http 的帧头,所以不存在 websocket 是在 http 之上的说法。json、xml、protobuf 这些姑且可以算作 http 之上的协议。
|
|
fyibmsdAug 9, 2018
72
tcp 协议:笔给你,你来写
|
|
Cambrian07Aug 9, 2018 via Android
73
lz,有问题先 Google,哪怕百度一下也行啊,就不至于闹笑话了。
哈哈哈 |
|
agostopAug 9, 2018
74
微博的都来了,V2 的脸往哪搁
|
|
76
tcp 没有“包”这个概念
|
|
julyclydeAug 9, 2018
78
|
|
79
|
|
81
@e8c47a0d
数据包( packet )是网络层(第 3 层)的数据单位,IP 协议就工作在网络层。 TCP 属于传输层(第 4 层),传输层的数据单位是数据段( segment )。 所谓的收发冲突是发生在数据链路层(第 2 层),这里的数据单位是数据帧( Frame )。 HTTP、Websocket 都是应用层(第 7 层)的协议。 从你的回复中可以看出,你的在网络分层方面的知识完全是混乱的,很明显你需要重新学习计算机网络课程,包括 OSI 和 TCP/IP 的概念和原理。 |
|
Cambrian07Aug 9, 2018
82
@e8c47a0d 我是看完了整个帖子回复的,你至少先搜索一下所谓的”碰包“再来发帖子啊。
|
|
zhzerAug 9, 2018
83
真是活到老学到老
|
|
misaka19000Aug 9, 2018
84
现代交换机都是全双工的,在早期的集线器中是有可能发生从两端同时接收到数据的情况的,不过这已经是链路层的事情了,网络层网上都不需要考虑这个问题,只要单纯的认为网络是全双工的就可以了
|
|
julyclydeAug 10, 2018
85
@e8c47a0d TCP 的 segment 是给 TCP 协议栈用的,不是给你用的。你写应用层只能看到“流”
你必须首先树立“ TCP 是流”的概念,然后再去讨论其它事 而不是质疑 TCP 到底是不是流 |
|
yincrowOct 19, 2019
86
你应该没有使用过 WebSocket,WebSocket 的服务端只有接收到消息后才能发送,没有办法主动发送消息
|
|
mzDV4TUeHyesLbUQAug 21, 2023
87
@wxt 两个包撞上了,纠缠到了一起,最终实现了量子计算。
|