世界远不是完美的!
造物主设计我们丰富又复杂的系统时,其考量仅仅是可用性,因此上帝远不是哲学家,而是类似于理工科偏工科方向硕士或者工程师那样的being。
食管和气管为何要有个交叉,这是一个重大BUG,类似这样的BUG还有很多。上帝既然都不是完美主义者,我们自己就更不是了,很多东西只要脱离了设计图纸,几乎就不会再被重新设计了,这就是事实,可能唯一的例外就是减数分裂带来的有性生殖了,所有的个体都是从一个受精卵开始有丝分裂,从减数分裂到整个成长的过程就是一个重新设计的过程,除此之外,再也没有什么是可以重新设计的了,你知道自己的产品有缺陷,但是你不会重新设计,你做的仅仅是小修小补罢了...
不合理的设计-Linux的tcp_tw_recycle
Linux中有一个tcp_tw_recycle参数,意在不保持tw状态的TCP连接,直接在一个重传间隔后释放。我相信这个机制绝不仅仅是为了节省内存,更大的意义在于可以实现tw状态的连接的快速重用,而不必非要等到tw状态过期,只要能保证不会发生由于不等待tw状态而发生的事故。
悲剧就在于,tw状态的连接还真TMD回收了,完全被释放掉了,留下了一个仅由IP地址标识的peer,也就是说,在有时间戳的情况下,一个来自IP地址A的到端口P1的连接会影响到来自同样IP地址的到端口P2的连接。我们设想,有一个机器N开启了NAT,将所有数据包的源地址转换成了addr1,它后面有两台机器M1,M2,它前面连接一个服务器S开启端口P1,P2,这么简单个拓扑就能说明问题。M1和M2肯定有一台机器的时间戳偏低,假设是M2。
现在假设M1连接S的P1,连接成功后,S主动断开到M1的连接,此时M2连接S的P2,悲剧发生了,S不再回复SYN/ACK,Why?因为由于NAT,显然,两次连接来自同一个peer,但是后来者的时间戳小于前面连接P1的时间戳,tw重用逻辑不认可后来者是一个正常的连接。可是,着明显是误判,虽然NAT确实会导致一系列的TW问题,但是目标端口明显是不同的,所有的问题最根本的就是保持五元组的唯一性,目的端口不同就已经保证了五元组不会冲突!
如果仅仅为了TW快速重用,何必将TW状态的连接直接释放呢?何必不继续保持其数据结构,只是在冲突的新连接到来后判断时间戳或者初始序列号呢?等到tw到期后再释放,这样就可以精确比对协议元数据,最小化误判。可是这样的话,tcp_tw_recycle这个参数就失去了意义,万一短期(tw超时范围内)内没有冲突连接到来呢?我为何要保持一个根本不会用到的数据结构呢?快速回收意味着什么?仅仅意味着reuse么?引入一个仅由IP标识的peer是个多么不好的开端。因此,我冒犯地认为,tcp_tw_recycle这个参数根本就不该存在!
不合理的设计-OpenVPN的两类通道
OpenVPN创建了两个通道,一个是控制通道,一个是数据通道,两个通道共享一个底层socket,这基本就是一个大环境了。
OpenVPN的manual中,明确指出除非万不得已不要使用TCP,因为会出现重传叠加的问题,事实上,TCP在传输纯粹的数据方面毫无优势,即使丢包或者乱序,第七层也会处理,但凡直接使用TCP的,都是有着严格的控制逻辑,比如协议处理等,而直接在第四层处理重传和按序要比第七层处理快捷得多。
在OpenVPN中,其实本应该创建两个独立的socket,一个用TCP,一个用UDP,TCP处理控制通道,UDP处理数据通道,我相信,TCP处理SSL一定比UDP的可信层要好得多吧。
分享到:
相关推荐
用JAVA写的登陆界面.界面很一般,设计很一般 真的是为了积分 原来如此
生活中的不合理设计和改进演示文稿共18页.pdf.zip
数据库的设计和设计合理性检验 数据库的设计和设计合理性检验 以下是学习笔记: ⼀,数据库的设计 ...不合理的情况: 数据库三范事式原则: 1,第⼀范式: 2,第⼆范式: 经过分析后: 3,第三范式: 分析后最后: 总结:
司炉工操作方式不正确防爆门设计不合理导致锅炉炉膛爆炸-平安管理网.docx
作为一个C++的程序员,构造函数是否早已经用得出神入化了。但是,构造函数的设计并不完美。比如说,限定构造函数名称与类的名称相同的条件。这里给出一些解决方案。
司炉工操作方式不正确防爆门设计不合理导致锅炉炉膛爆炸-事故案例-案例分析-锅炉事故.docx
司炉工操作方式不正确防爆门设计不合理导致锅炉炉膛爆炸事故-事故案例-案例分析-锅炉事故.docx
绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer、Share Pool、Redo Log Buffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上。所以除非是面对一个...
但是对于器件引脚间距非常小的器件,由于 PCB 助焊焊盘设计和 PCB 阻焊焊盘设计不合理,将会提升 SMT 焊接工艺难度,增加 PCBA 表面贴装加工质量风险。鉴于这种 PCB 助焊和阻焊焊盘设计的不合理带来的可制造性和可靠...
主要根据校园网的需求分析及总体设计、网络总体方案设计及其关键技术、设备的选择与配置、建设方案的实现与评估等几个方向的内容进行有关讨论,使并将IPsec VPN技术应用在校园网络的构建,通过VPN技术,可以实现校区...
该系统能对土地的温湿度变化进行即时监测,并对盆花实施及时合理的洒水。其内核为单片机设计、由温湿度收集、自动显示集成电路和浇水控制驱动电路等组成的监测与控制系统组成部分。重点研究了土地温湿和洒水间的相互...
构设计方面,不合理的设计会影响雾化量的 大小,雾化效果,使得存在不能正常生成雾 气,雾气不能顺利吹出等情况。本文从水位 高度、风道、出风口等结构关键点入手,提 出了合理的结构设计要点。
合理设置桥、涵构造物,形成完整的线型,尽可能减少居民迁移,避免破坏原有农田、水利系统而产生各种污染等。因此,在设计的各个阶段都将社会环境、自然环境保护放在重要位置,选线时尽量避开房屋以减少拆迁,合理...
灯光的设计应该符合会所的各种功能要求;在现代休闲娱 乐 会所,灯光的装修设计方案里应尽可能添加新的元素,灯光的布置尽可能有所创新和突 破。 很多KTV灯光设计采用的都是一些比较节能环保的LED光纤照明。这种灯光...
针对给水管网设计过程中常出现的管径设计不合理、数据录入量大且容易出错等问题,提出利用EPANET进行管网水力计算,然后采用MATLAB对水力计算结果进行绘图分析,在此基础上对管段进行调整与逐步优化;结合使用Excel对...
拿到题目后首先进行电路分析设计,在满足设计要求后,再进行硬件电路搭建(在面包板上实现),实验结果不满足要求,则修改设计,直到满足要求为止。 设计要求 按题目要求的逻辑功能进行设计,电路各个组成部分须有...
反之,如果元器件布局不合理,它将影响到电路板的工作性能,乃至不能工作。尤其是在广泛采用集成器件的今天,如果集成电路仍用接线板的方式进行安装,那么,不仅电路的体积庞大,而且无法稳定的进行工作。因此,在...
但随着锚喷技术的广泛应用,因锚杆设计参数不合理、施工质量不达标而出现万分之五的巷道支护不足,出现冒顶事故,大于60%的巷道支护过剩,使支护材料大量浪费。通过对锚杆支护动态设计研究,既达到支护设计的强度要求,又...
近距离多煤层条带开采在工作面布置不合理时易造成相互叠加影响和煤柱的失稳,进而影响条带开采的减沉效果。在多煤层条带开采设计时需要充分考虑煤层间距等地质采矿条件,尽可能减小上下煤层之间的影响,确保设计方案...