V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 1 页 / 共 63 页
回复总数  1246
1  2  3  4  5  6  7  8  9  10 ... 63  
个人感觉感觉好多人把概念和用途都搞混了,说说我的浅见总结


什么是重放?
用你的原始请求数据原封不动地再发一次或者多次,别人只需要知道原始请求数据、再次发送即可,不需要猜测 nonce 不需要破解加密算法等


防止重放攻击的主要维度:
1. 幂等
比如金融或者其他涉及资金之类的业务,订单 ID 本身的幂等性是最基础的,已经实现了幂等的功能即使被重放也只是消耗算力
2. 时间
如果服务端对访问的时间有效期不做限制,那么任何一个请求数据被保存下来之后,任何时间都可以再次用这个数据进行请求;
所以,防范重访攻击的基础,是对请求时间有效性进行限制和校验:每个请求应该带上时间戳,服务端对时间戳与服务器时间做有效性校验,比如时差超过 30 秒认为请求不合法。


以上两点以外的其他防范,例如猜 nonce 算法、破解加密算法之类的来伪造请求内容,本身已经是生成新的请求了、跟重放的字面含义就已经不符了。
所以,严格来讲这些不应该归纳为重放,而是应该属于密码学范畴的攻防扩展了,例如:
1. crypto ,内容加密,对称非对称不同等级
2. sign ,不同 hash 算法验签
3. nonce ,加盐
@nexo #47
1. 我没有下定论, 也没有否定色弱考驾照这件事
2. 帖子偏向庆祝与鼓励的气氛, 但并没有首先明确自身分辨信号灯是否完全没问题
3. `色弱中的很多人可以分辨也可以考驾照` 不等于 `每个色弱的人都适合考驾照`, 仍有一定比例严重色弱的人不适合考驾照

我只是建议 OP 先把自身情况说明, 基于自身分辨信号灯没影响的前提下, 庆祝和批评官方机制不合理都没问题, 并且也不会导致每个色弱的人都盲目跟风去考驾照.
看到帖子内容, 第一感觉是对于色弱人群不分青红皂白的鼓动/鼓励, 毕竟别人卡得严也是为了大家尽量更安全一点

个人觉得应该先重点讲自己对交通信号灯分辨能力没问题, 以这个为基础再用这种帖子鼓励类似的朋友比较好
性教育也是教育, 只是有点突然罢了
十几年来研究了好几次什么是依赖注入, 今天又研究了下, 至今没搞明白到底什么是依赖注入...
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@charles0 #152 叫 goroutine 没毛病, 但是打字中文的时候协程比 goroutine 快, 而且很多人约定俗称都这么叫了, 日常讨论, 何必搞得学术氛围甚至法庭审判那样? 你们好几位出来说这个, 我反向建议下你们在实际生活中要灵活, 否则方言俗语一切约定俗成的谬误的词汇就都不能说出口了, 这样的活法, 会很累而且并不会对交流效率带来提升, 反倒会因为这种死板给更多遵循约定俗成的人带来麻烦, 让大家交流效率更低
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@lesismal #151

甚至, golang 的 GMP, 我都忘记了, 要说 10 年 8 年 5 年甚至 3 年前, 应该都还记得, 但是现在都不记得了, 刚才回复 @Kauruus 也是临时搜了下 GMP 才又知道了个大概.
而且这几年自己可见的速度在记忆力下降, 每次看到 golang 面试题的帖子, 很多也是不会, 只剩下一些实践的套路经验了, 上年纪了也没体力重新读这些书了, 不是不想, 而是真的力不从心了
幸好工作上也不太需要这些概念了

华山派剑宗风清扬我做不到, 但是像他一样的风格还是适合工程实践的, 什么这个气那个气的内力之类的, 先能把工程搞定并且搞好才是好
21 天前
回复了 mikewang 创建的主题 程序员 14 岁的我,注册了 V2EX。
早早入行, 未来可期, 加油加油!
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@Kauruus
@CRVV

补充一点, 工作久了也不是钻研学术的, 很多概念定义也早忘光了, 我更多的是专注于实践, 所以有说的不对的地方是我不懂, 说错了我就认, 不会赖账的

另外, 就像我前面说的没必要咬文嚼字, 聊具体的代码问题, 不需要纠结严格定义的, 咱就少点学术氛围, 免得搞半天也搞不出个成果来
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@ykrank

> 等你技术进步到和它“一个层次”了

你这个"它"很会用啊, 你技术强的话可以输出技术观点, 技术的观点一点没有, 有话都不敢直接说, 阴阳最有一套是吧?
你咋不上天呢?
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@Kauruus #145

> “这组线程”就是内核线程,有对应内核调度实体,Goroutine 才是“用户态线程”。

在对线程的细分定义上讲, 用户线程你说的对, @CRVV 说的也对.
我之前没有深究过用户线程这个细分概念, 把它理解成非内核创建的线程了, 是我的错.

不论严格定义如何, 把 goroutine 叫成协程已经是大家的惯用叫法, 日常讨论说线程用于代表严格意义的内核线程多些, 除非涉及细分定义, 否则也不会去区分用户线程还是内核线程.
但是如果把 goroutine 叫成线程, 是更让人混淆的, 把 goroutine 叫成用户线程是严格定义上正确但在日常交流上更多也是会带来麻烦
各种细分的严格定义, 例如说线程的时候不叫线程而是叫轻量进程, 也是给非学术交流带来沟通障碍, 约定俗成的叫法可能会更适合日常讨论.

> 按照你的说法,就变成 M:N:O 三层了。

我只是想表达: 线程 -> go runtime -> goroutine, 没有想表达是几层, 具体到 goroutine 的调度就是 go runtime 的 GMP,

而且几层也得看怎么划分:
如果按照调度实体分类, 那就是两层: 线程被内核调度, goroutine 被 runtime GMP 调度
如果是按这些抽象角色分类, M/P/G 也可以说是三层
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@CRVV #140

自己在那不 at 别人偷塔断言别人不懂说别人错了还理直气壮, 然后老夫硬刚你, 技术和逻辑都说不过就飙脏话是吗?
既要又要, 又 x 又 x 的, 当别人眼瞎好欺负呢?

谢谢你 Block 我, 免的以后再来浪费我时间
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@CRVV 刚又搜了下, 你说的"用户态线程"可能是指"纤程"吧? 对不起, 这玩意好像是 Windows 的, Windows 开发相关的知识我确实是不熟悉, 我说的主要是*nix 的
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@CRVV #128

你真逗, 社区里大家都叫协程, 你为了严谨, 非要叫"线程"或者"用户态线程".

而且, 你让我用 "线程或者说用户态线程" 就更扯了:
1. 线程比协程更具有辨识度, 通常是操作系统内核进行调度的, 比如 CSAPP 里这样讲:
https://cs50mu.github.io/post/2016/08/29/csapp-concurrent-programming/

Threads. Threads are logical flows that run in the context of a single process and are scheduled by the kernel. You can think of threads as a hybrid of the other two approaches, scheduled by the kernel like process flows, and sharing the same virtual address space like I/O multiplexing flows.

2. 用户态线程通常是对应内核线程, 而一个 golang 进程首先是进程自己有一组(1-N 个)用户态线程, goroutine 是基于用户态线程之上的应用层语言 runtime 自己进行调度的, 最大的区别, goroutine 可不是由内核调度的

你要是说 goroutine 是"类似线程的东西"这种模糊的定义还凑合, 但是直接把 goroutine 叫做线程或者用户态线程, 你可以做个问卷调查看看, 是我们把它叫做协程容易让人懵逼还是你的叫法更容易让人懵逼.

> 技术词汇和 “那可不是嘛” 是两码事

方言, 约定俗成这些事你如果不认同, 那咱们不用讨论这个了, 但是也请尽量弄清楚你自己的技术词汇是否真的准确, 比如 goroutine 线程.


> 但你说的最后一段就是纯扯蛋,不要论断人。

如果不想自己被他人断, 就不要自己先乱断他人.
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@kneo #122

> 如果还是因为 goroutine 本身的性能原因而使用 pool ,我认为就语言实现层面还是差点意思。

是单个 runtime 的阈值. 我日常 4c8g vm 跑个压测, 10w 协程这种级别, 调度/内存/gc 都没什么压力的. 但是 50w 以上, 压力就大了起来, 1M 级别的压力就更大了, 耗费非常高的硬件仍然稳定性艰难.
标准库是满足了绝大多数人的需求, 因为没这么大量, 足够好的性能, 但少量业务还是需要海量的, 能稳定高性能低消耗就能省很多硬件成本.

> 回到这个帖子所引用的原文,我认为它至少从一个方面回答了到底在哪还差了点。

不同的业务 golang 有不同的应对方案, 我前面也说过了, blog 作者用这种方式测这个并发任务属于错误用法, 而其他场景, 也会有对应的优化 goroutine 数量的方案.

但有些场景确实目前还没有海量 goroutine 的优化方案, 例如 HTTP2.0 QUIC/HTTP3.0, 暂时还是一个连接至少一个协程的方案, 因为目前的 2.0 3.0 实现都还是基于标准库的 net.Conn 都还是阻塞的 IO 接口.
我想把 nbio 做更多支持这些, 但是工程量太大了, 年纪也大了体力跟不上, 而且是业余时间为爱发电不是全职搞, 个人的精力消耗实在承受不起.
我希望以后能有人继续把 HTTP2.0/3.0 以及更多协议也搞成类似 nbio 的这种方案, 然后就不用再担忧这些瓶颈了
21 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@CRVV

> 不过错的就是错的,别理直气壮地用错误词汇。

我想问下, 如果想用中文, 用什么词翻译 goroutine?
约定俗称的事情你也是一点不提啊? 我十几年前就写 lua 用 coroutine, 刚开始用 go 也是看了一些人讨论的定义, 但是照样, 大家中文叫法就是协程, 因为即使讨论了说了 goroutine 不是协程, 也没人给它个正确的中文翻译并且流行起来, 所以大家继续这样叫.
然后你就这么断言觉得别人就是不知道 goroutine 不是协程定义的那个协程并且错了还理直气壮是吗?

这么自信吗? 普通话里"那可不是嘛", 这里用"不是"但意思是"是", 要不要也去给大众纠正批判下, 让大家平时说话不要这么讲错就错至少不要这么大声面的看上去犯了错还太过理直气壮?
这种谬误和约定俗成的事情多了去了, 好几个人跑这卖弄贬低还不敢直接 at 人, 显得你们能是吧?
1  2  3  4  5  6  7  8  9  10 ... 63  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 13:47 · PVG 21:47 · LAX 05:47 · JFK 08:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.