![]() | 1 InternetExplorer 2018-08-08 11:25:02 +08:00 ![]() 所以你真的了解 TCP 吗 |
![]() | 2 momocraft 2018-08-08 11:26:40 +08:00 ![]() 碰包这个词第一次听说 |
![]() | 3 Clarencep 2018-08-08 11:27:25 +08:00 ![]() 第一次听说“碰包”…… |
![]() | 4 cuzfinal 2018-08-08 11:28:33 +08:00 这些低级错误在大佬们设计 tcp 协议的时候早就解决了,还有碰包是什么鬼? |
5 wxt 2018-08-08 11:28:47 +08:00 via Android ![]() 好像碰瓷 |
6 wxt 2018-08-08 11:30:38 +08:00 via Android ![]() 两个包撞上了,形成了一种原子力量,发生了聚变,产生了物理冲撞,爆炸形成了信息宇宙 |
7 opiuy 2018-08-08 11:30:43 +08:00 ![]() 你把我碰倒了,赔我 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 ![]() 粘包:欢迎碰包弟弟加入这个大家庭 |
![]() | 10 elsove812 2018-08-08 11:33:46 +08:00 ![]() tcp 包这么智能,都会违章了 |
![]() | 11 CrisTao 2018-08-08 11:35:54 +08:00 ![]() ![]() |
![]() | 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 ![]() 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 ![]() |
![]() | 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 ![]() @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 ![]() 全双工,你可以理解为有两条通道....粘包倒是有... |
![]() | 48 pagxir 2018-08-08 14:41:33 +08:00 via Android 我知道现实生活中有碰瓷现象,至于碰包也许是有吧。 |
![]() | 49 quickma 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 ![]() 前几天我了解了粘包,今天我又知道了碰包。。。 |
![]() | 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 ![]() 贼讨厌 粘包 这种词汇,没有为什么。 |
![]() | 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 ![]() tcp 没有“包”这个概念 |
77 julyclyde 2018-08-09 10:25:48 +08:00 ![]() @e8c47a0d packet collision 是数据链路层(协议访问控制子层)的概念 这么多回复,是因为我把这篇转发到微博去了 |
78 julyclyde 2018-08-09 10:28:19 +08:00 |
![]() | 79 e8c47a0d OP |
![]() | 80 e8c47a0d OP @dosmlp 是在抱歉,我是搬砖出身的,勉强懂点应用层协议已经很不错了。我没读书,没什么文化,应用层之下的协议看不懂。 |
![]() | 81 AV1 2018-08-09 11:48:21 +08:00 ![]() @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 两个包撞上了,纠缠到了一起,最终实现了量子计算。 |