1
InternetExplorer 2018-08-08 11:25:02 +08:00 6
所以你真的了解 TCP 吗
|
2
momocraft 2018-08-08 11:26:40 +08:00 1
碰包这个词第一次听说
|
3
Clarencep 2018-08-08 11:27:25 +08:00 1
第一次听说“碰包”……
|
4
cuzfinal 2018-08-08 11:28:33 +08:00
这些低级错误在大佬们设计 tcp 协议的时候早就解决了,还有碰包是什么鬼?
|
5
wxt 2018-08-08 11:28:47 +08:00 via Android 1
好像碰瓷
|
6
wxt 2018-08-08 11:30:38 +08:00 via Android 11
两个包撞上了,形成了一种原子力量,发生了聚变,产生了物理冲撞,爆炸形成了信息宇宙
|
7
opiuy 2018-08-08 11:30:43 +08:00 3
你把我碰倒了,赔我 10 万个包,这件事就算了
|
8
suikator 2018-08-08 11:32:20 +08:00 via Android
恭喜 IT 民科喜提碰包😂
|
9
suikator 2018-08-08 11:33:19 +08:00 via Android 7
粘包:欢迎碰包弟弟加入这个大家庭😂
|
10
elsove812 2018-08-08 11:33:46 +08:00 1
tcp 包这么智能,都会违章了
|
11
CrisTao 2018-08-08 11:35:54 +08:00 1
你是觉得他们会在同一个通道内撞上吗?当这是开车?
|
12
wizardoz 2018-08-08 11:36:09 +08:00
单工、半双工、全双工了解一下。
TCP 是全双工 |
13
misaka19000 2018-08-08 11:38:18 +08:00
今日最佳
|
14
catcn 2018-08-08 11:39:00 +08:00
碰碰包
|
15
catror 2018-08-08 11:40:57 +08:00 via Android
你逆行撞到我了,赔我的包
|
16
glacer 2018-08-08 11:46:20 +08:00
网线可不是单行道,先补补通信基础吧
|
17
towser 2018-08-08 11:46:52 +08:00
TCP 是全双工协议,可以理解为发送路径和接收路径不是一条路,不会 ”碰包“。
|
18
blueskit 2018-08-08 11:49:22 +08:00 via Android
在同轴电缆时代,倒确实会碰包。
|
19
est 2018-08-08 11:49:57 +08:00 1
LZ 的意思是 websocket 不是严格的 请求 - 响应,而是有可能连续请求中,夹杂着响应。
那么答案是:是的。websocket 是一种双向流协议。你得考虑这种情况。 其实原始的 http 也会有这种情况,只不过反向代理和 web 框架帮你把这事儿处理了。 |
20
abcbuzhiming 2018-08-08 11:50:43 +08:00
我还以为说粘包呢,碰包是什么鬼?难道楼主没听说过发送和接收是分开的吗
|
21
ericls 2018-08-08 12:26:52 +08:00 via iPhone
可以保证一边发送的顺序是另一边接收的顺序
|
22
paw 2018-08-08 12:38:20 +08:00
lz 是从以太半双工的年代穿越过来的吧
|
23
e8c47a0d OP 那么我肯定误解了 packet collision 这个概念,不过短时间内为什么这么多回复?这个节点
|
24
e8c47a0d OP @InternetExplorer 不了解,只知道 tcp 可以保证完整性和顺序。
|
25
est 2018-08-08 12:54:11 +08:00 1
|
28
noNOno 2018-08-08 12:57:35 +08:00
哈哈,新词
|
32
e8c47a0d OP 这 sb 帖子竟然飘到了今日最热……
|
33
nobird 2018-08-08 13:15:11 +08:00 via iPhone
我告诉你为啥变成了最热…… by 微博观光团
|
34
changnet 2018-08-08 13:16:33 +08:00 via Android
@est tcp 是有顺序保证的,哪里有异步就可能乱序的说法。异步只是说你程序不阻塞而已,和数据流的顺序有啥关系?
|
36
est 2018-08-08 13:20:25 +08:00 1
@changnet
收到 1 请求,worker 开始处理 1,暂时不返回 收到 2 请求,worker 开始处理 2,立刻返回 worker 返回 1 请求的结果 这个时候如果你是客户端如何区分 2 个返回?仅靠顺序可能嘛? |
37
e8c47a0d OP @abcbuzhiming 粘包我知道,但分开的这件事有点不确定。
|
41
changnet 2018-08-08 13:26:28 +08:00 via Android
@est 咱说的不是同一件事。我说的是发到 tcp 里的数据对方收到的也是按顺序的。你那是具体业务逻辑
|
42
e8c47a0d OP 恭喜本帖荣登 V2EX 首页顶部🎉㊗️
|
43
est 2018-08-08 13:30:14 +08:00
@changnet 也是不一定的。TCP OOB 了解一下。。2333。
国内做技术的就是喜欢瞎 jb 发明名词,然后另一拨人对名词后面的需求又瞎 jb 起哄。 分包 粘包 这个其实是 layer 7 应用层更上面的需求,其实也应该严肃对待。 http 严格的来说属于 OSI 7 层了,websocket 至少 8 层了。websocket 里套业务逻辑应该 9 层了? |
44
allgy 2018-08-08 13:55:23 +08:00
又一个自创名词的..."碰包"自己听起来不别扭吗,人家已经有习惯性的称谓"粘包"就不要瞎造词
|
45
NullException 2018-08-08 14:04:00 +08:00
双击
|
46
paparika 2018-08-08 14:16:33 +08:00
听俺们量子物理和 cs 双学位的老工程师给讲过,碰包和欧洲那边原子对撞机是一个原理的撒,搞不好哪天就碰出黑洞,把地球湮灭了哦
|
47
loveCoding 2018-08-08 14:17:51 +08:00 1
全双工,你可以理解为有两条通道....粘包倒是有...
|
48
pagxir 2018-08-08 14:41:33 +08:00 via Android
我知道现实生活中有碰瓷现象,至于碰包也许是有吧。
|
49
x7395759 2018-08-08 14:50:58 +08:00
多看书啊。
|
50
crab 2018-08-08 14:52:04 +08:00
粘包 碰包 - -!
|
51
pcmid 2018-08-08 14:58:15 +08:00 via Android 2
前几天我了解了粘包,今天我又知道了碰包。。。
|
52
affyun 2018-08-08 15:02:33 +08:00 via Android
坐等肉包豆包
|
53
zhujinliang 2018-08-08 15:03:44 +08:00
发现碰包后,请出示船票,大喊“我可以上船了”
|
56
zhoulouzi 2018-08-08 15:45:02 +08:00 1
贼讨厌 粘包 这种词汇,没有为什么。
|
61
momocraft 2018-08-08 20:43:53 +08:00
把 ws 称为第 8 层感觉有点怪, 毕竟 upgrade 后那个 tcp 连接就完全归 ws 了 (而且 http over http tunnel 这样的用法不知得排到第几层去)
|
62
est 2018-08-08 21:20:47 +08:00
@ericls 这个其实没意义。大规模服务器部署的时候 websocket 不一定命中同一个 service/worker 来处理。
|
63
hacher 2018-08-08 21:23:15 +08:00
在 TCP 专业术语里叫:碰瓷
|
65
jin5354 2018-08-08 21:49:48 +08:00
竞态
|
66
dosmlp 2018-08-08 22:09:12 +08:00
楼主肯定不知道 tcp 是怎么回事,可以说连“了解 TCP ”都达不到
|
68
NUT 2018-08-08 22:15:06 +08:00
火贴留名
|
69
yanaraika 2018-08-08 22:53:44 +08:00
猜楼主想问的是 server onReceive()和 send()方法要不要做同步。答案是当然要做,最简单的就是如果其中共享了数据加把锁
|
70
wcsjtu 2018-08-08 22:54:42 +08:00
@est 网络数据达到顺序,和你应用层代码执行顺序没半毛钱关系。websocket 包并不包含 http 的帧头,所以不存在 websocket 是在 http 之上的说法。json、xml、protobuf 这些姑且可以算作 http 之上的协议。
|
72
fyibmsd 2018-08-09 07:59:47 +08:00
tcp 协议:笔给你,你来写
|
73
Cambrian07 2018-08-09 09:10:30 +08:00 via Android
lz,有问题先 Google,哪怕百度一下也行啊,就不至于闹笑话了。
哈哈哈 |
74
agostop 2018-08-09 09:36:43 +08:00
微博的都来了,V2 的脸往哪搁
|
76
ryuzaki113 2018-08-09 10:24:17 +08:00 1
tcp 没有“包”这个概念
|
77
julyclyde 2018-08-09 10:25:48 +08:00 1
@e8c47a0d packet collision 是数据链路层(协议访问控制子层)的概念
这么多回复,是因为我把这篇转发到微博去了 |
78
julyclyde 2018-08-09 10:28:19 +08:00
|
79
e8c47a0d OP |
80
e8c47a0d OP @dosmlp 是在抱歉,我是搬砖出身的,勉强懂点应用层协议已经很不错了。我没读书,没什么文化,应用层之下的协议看不懂。
|
81
DOLLOR 2018-08-09 11:48:21 +08:00 1
@e8c47a0d
数据包( packet )是网络层(第 3 层)的数据单位,IP 协议就工作在网络层。 TCP 属于传输层(第 4 层),传输层的数据单位是数据段( segment )。 所谓的收发冲突是发生在数据链路层(第 2 层),这里的数据单位是数据帧( Frame )。 HTTP、Websocket 都是应用层(第 7 层)的协议。 从你的回复中可以看出,你的在网络分层方面的知识完全是混乱的,很明显你需要重新学习计算机网络课程,包括 OSI 和 TCP/IP 的概念和原理。 |
82
Cambrian07 2018-08-09 12:37:17 +08:00
@e8c47a0d 我是看完了整个帖子回复的,你至少先搜索一下所谓的”碰包“再来发帖子啊。
|
83
zhzer 2018-08-09 15:04:36 +08:00
真是活到老学到老
|
84
misaka19000 2018-08-09 23:41:10 +08:00
现代交换机都是全双工的,在早期的集线器中是有可能发生从两端同时接收到数据的情况的,不过这已经是链路层的事情了,网络层网上都不需要考虑这个问题,只要单纯的认为网络是全双工的就可以了
|
85
julyclyde 2018-08-10 11:58:37 +08:00
@e8c47a0d TCP 的 segment 是给 TCP 协议栈用的,不是给你用的。你写应用层只能看到“流”
你必须首先树立“ TCP 是流”的概念,然后再去讨论其它事 而不是质疑 TCP 到底是不是流 |
86
yincrow 2019-10-19 11:49:35 +08:00
你应该没有使用过 WebSocket,WebSocket 的服务端只有接收到消息后才能发送,没有办法主动发送消息
|
87
mzDV4TUeHyesLbUQ 2023-08-21 14:14:03 +08:00
@wxt 两个包撞上了,纠缠到了一起,最终实现了量子计算。
|