http cookie,tcp syncookie 和 tcp fastopen 杂谈

syncookie 和 fastopen 的应用场景不赘述。它们均使用了 cookie 机制,返回给 client,再由 client 带回来用作识别。

说到它们的具体实现时,只要涉及 “识别” 机制,很多人都默认该机制需要 “解码 cookie”,“以 key 查 value 来定位用户”,大致就是 http cookie 那套逻辑,然而 tcp 的 syncookie 恰恰是不想在 server 保存任何可供识别的信息,而 fastopen server 在收到 client 携带的 cookie 建立连接之前,连接并不存在,何谈信息识别。这里有人要说了,连接虽没有建立,也不妨碍 server 端有一张 key-value 表,用 cookie 查询到 value,直接创建连接岂不是更帅?

还是得从现实的世界去理解,而不是老在协议技术范畴绕圈圈。我问如何理解 tcp 的各种 cookie,上来就拿 http cookie 说事,其实 cookie 这个词都有点不达意,把 cookie 叫 ticket 才更合适。

http cookie,就是现实世界的会员卡,一次消费用不完预充值的钱,下次过来店员看你会员卡就能自动关联到余额,实际上也就是一个 key 查 value 的操作,背后也没摆脱电脑。更朴素的例子,在饭店吃饭买了一瓶酒,临走时没有喝完,顾客会把酒存在店家,店家开个小票写上酒被存放的位置以及一些其它信息,下次顾客再来消费时,可以拿这张小票取出存放的酒继续喝,这就在无状态的单次消费中关联了状态。

tcp syncookie 在现实世界也容易理解,高峰旺季时期的饭店,酒店一般都会取消预订,目标是最小化顾客等待和最小化浪费,防止有人预订来不来或来得太晚,占着茅坑不拉屎的时间段内资源无法被利用。

在现实世界,当然还有更好的方案,比如预订交押金,实际到达后打折冲消费或原价返还,如果违约未到,扣除部分甚至全部押金,作为对资源闲置的补偿。 此外,对于预付费预订业务,比如机票,火车票,如果后续退票,收取大额手续费是合理的,这笔费用其实就是时间压缩成本,因为从你购票到退票,距离飞机起飞或火车开车肯定越来越近,售票方将退票再次卖出的难度越来越大,而退票者显然要为此买单。

从现实世界反射回 tcp/ip。恰恰 tcp 无法采用预订押金或退票收费这种方式缓解 ddos。按照 tcp/ip 互联网早期的假设,互联互通是免费且随时进行的,原则上,任何 ip 地址在任何地方都能访问任何别的 ip 地址,这注定了互联网上所有的连接请求都是不速之客,这是互联网安全问题的根源。

如果我们的现实世界也如此,所有的收费服务,熟人关系,票务服务均将消失,这种环境下,所有的恶意事件只能事后追查而无法事前抑制。

再来看看 fastopen,它实际上就是现实世界的 “记名不挂失的门票”,比如 “不限次数的月卡,季卡,年卡”,过期后自动作废,但在有效期内不限次数。理解了这一点就知道它和 key-value 毫无关系,server 需要做的只是一个 verify 操作,首先它要 verify 这张票是它签发的,其次它要 verify 这张票属于持票的人,这些都很容易,票上只要写上用户信息并加盖场所公章即可,检票员通过公章识别是自己签发,通过比对用户身份证和票面信息确认持票人权限。在 tcp fastopen 涉及的 coockie 中,server 通过一个密钥加密 client 的 ip 等信息作为记名门票,当 client 再次前来建立连接,server 通过解密其携带的 cookie(只有它能解密),比对 coockie 解密后包含的 ip 地址和 client syn 报文的 ip 地址,即可确认 client 是否有 fastopen 权限。

理发店会员卡,小饭店存酒等 cookie 行为具体会在会员卡和小票上存储什么信息全由商家自主决定,可记名也可不记名,可能只要有那张纸条,就可以去饭店喝掉别人存的酒。这种行为确实完全没必要标准化,因为 cookie 行为的波及半径仅限于商家,而商家又是如此之多。http cookie 于此类似,早期的网站,只要拿到 cookie 并拼接在 url 后面,就能直接登录别人的账户,这问题只能网站自己负责,如果网站不希望这种事发生,开发者可以很容易加入一些更严格的认证逻辑,将更多信息编入 cookie。

但机票,火车票,大型酒店的各种卡几乎都是记名的,且拥有统一标准,因为它们提供的是 “基础服务” 而不是 “最终服务”,引号内的词是 传输层 和 应用层 的区别。最后,我们发现,tcp 的 cookie 生成相比 http 的 cookie 生成更加标准化,因为 tcp 提供基础运输服务,http 提供最终服务。

协议设计要从现实世界学习,绝大多数问题在现实世界都被解决过,如果只在技术范畴比划概念,你的设计大概率不光更复杂,更可能引入新问题。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c 枚举与字符串对 的几个方法

c使用枚举与字符串对的几种方法,供参考。 一 enum name { Zero, One, Two } ; const char* name[] {"Zero", "One", "Two"};//遍历 int size sizeof(name)/ sizeof(name[0]); //或字符串数组后加个空指针。 const char** ptr ; …

中国联通云技术,有哪些产品

中国联通国际公司,作为中国联通集团对外拓展国际市场的重要窗口与平台,已在国际电信领域取得了显著成就,其产品线涵盖了从基础联接到云端服务的多个层面,旨在为全球用户提供一体化、端到端的高品质信息服务解决方案。 大联接产品…

Mybatis-Plus——06,CRUD查

CRUD查 一、普通查询1.1、通过id查询单个用户1.2、通过id查询多个用户1.3、条件查询 通过map封装 二、分页查询2.1、配置分页插件2.2、运行方法 三、通过wrapper条件构造器查询3.1、查询name不为空,email不为空,age大于18的用户3.2、查询nameJone的用户3…

2024普通商家如何通过短视频矩阵快速破圈?

一个账号发1条作品,每条作品1000曝光覆盖1000人 十个账号发10条作品,每条作品1000播放量覆盖100000人 一百个账号发100条作品,每条作品1000播放量覆盖10000000人...... 如果我们有300个、500个账号甚至更多呢?自然每天能够覆盖到…

哪款洗地机值得买?希亦、追觅、米博、美的谁才是行业标杆?

在家庭清洁中,最让我们苦恼的便是厨房垃圾了,油渍跟食物残渣,用扫把扫了后,要反反复复的湿拖五六次,期间不停的手洗拖把,这套流程下来,往往容易腰酸背痛,手指皱巴巴的,这…

[数据集][图像分类]黄瓜叶子病害分类数据集172张3类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):172 分类类别数:3 类别名称:["nitrogen_and_potassium_def…

SAP MM学习笔记43 - 特殊调达流程 - 支付计划

以前学习了特殊调达流程 受托品和外注,中断了一阵儿去复习了PP了,咱继续回来研究MM。 SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)-CSDN博客 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 本章讲SAP 特殊调达流程…

Get了!原来朋友圈定时发布如此简单!

你是不是也有这样的烦恼?微信号太多,有时候会顾不上发朋友圈? 别担心!微信管理系统来帮你解决这个问题,实现朋友圈定时发布!让我们一起来看看如何利用微信管理系统的强大功能来提升我们的社交媒体效率吧。…

Interceptor拦截器+JWT令牌实现登陆验证

一、背景 与过滤器的作用类似,不过拦截器是spring中的组件,只能拦截进入spring的请求;过滤器则可以拦截所有从前端页面发送来的请求。 *拦截器和过滤器选一就可以实现登陆验证,过滤器的实现在以下这篇博客中,有需要可…

在Exchange中启用/禁用搜索索引

默认情况下,所有的新邮箱数据都是启用Exchange搜索,仅当多个邮箱迁移到该Exchange Server时,才禁用搜索索引。 获取数据库的Exchange搜索索引 使用Get-MailboxDatabase 来获取数据库的搜索索引 Get-MailboxDatabase | Select-Object Name,…

蚂蚁SEO泛程序什么用?

蚂蚁SEO泛目录程序是一种常见的网站优化方法,其核心原理是利用高权重的网站继承目录,进而达到快速收录与排名的效果。具体表现形式分为网站、目录以及文章单页,通过目录文件的方式,利用关键词优化布局提升网站排名和流量。 这种技…

【自动驾驶系列丛书学习】2.《自动驾驶汽车环境感知》学习笔记

《自动驾驶技术概论》学习笔记 致谢:作者:甄先通、黄坚、王亮、夏添 -------------------------------------------------------------------------------------------------------- 笔记目录 -----------------------------------------------------…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中,遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结: 哪些情况会触发HTTP preflight preflight属于cors规范的一部分,在有跨域的时候,在一定情况下会触发preflig…

设计模式-原型模式实践案例

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新的实例,而不是通过初始化过程。在 Java 中,这通常是通过实现 Cloneable 接口并定义 clone() 方法来实现的。原型模式适用于创建复制对象…

linux 文件权限

仅仅记录一下,怎么添加文件权限 r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute) 读、写、运行三项权限可以用数字表示,就是r4,w2,x1,777就是rwxrwxrwx 你可能不懂什么意思 举个例吧! 如上图有一个文件,它…

arm系统构建的三部分

1.boot/loader 启动 uboot引导程序 uboot启动之前要明确内核文件位置(服务器-和网线连着的机器或SD卡),uboot设置参数,寻找文件位置(放服务器上,需要IP地址路径,通过网线下载到开发板上。&…

跨界探险:出海与网络安全的奇幻之旅

在这个全球化的时代,"出海"已经成为了众多企业家和技术爱好者的热门话题。不论是跨界电商、游戏产业,还是技术开发,所有的这些都离不开一个看似晦涩却又极为重要的技术——SOCKS5代理以及代理IP的应用。让我们一起踏上这场结合网络…

利用auto-py-to-exe库的简单图形界面实现.py到.exe的转换

文章目录 1. auto-py-to-exe 简介2. 安装与使用3. 配置项介绍4. 打包完成 1. auto-py-to-exe 简介 运行 .py 文件需要配套相应的 Python 解释器和相关的依赖项,而很多时候我们会面临光有待演示的 .py 程序,而没有支持演示的环境的尴尬。一种解决办法就是…

仪酷LabVIEW OD实战(4)——Object Detection+OpenVINO工具包快速实现yolo目标检测

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW目标检测工具包实战』 📑上期文章:『仪酷LabVIEW OD实战(3)——Object Detectiononnx工具包快速…