Shell's Home

goproxy和msocks简介

May 8, 2014 - 1 minute read - Comments

goproxy是我个人写的,和shadowsocks同类的软件。当然,在设计之初我完全不知道shadowsocks的存在,goproxy的最初目标也不是成为shadowsocks的同类。只是我一直无法实现一个可靠的,能够达成目标的系统。最后想,那这样吧,我找一个跳一跳能够够到的苹果。大幅简化的结果就是goproxy——后来我才知道shadowsocks。 shadowsocks的基本原理 shadowsocks的基本概念,就是利用某种不同于SSL的协议,将本地的socks数据流转发到远程。这个协议,在默认版本中是一个凯撒变换,后来有了aes等加密算法。goproxy也采用了类似的做法,同样支持aes等加密算法。在每次连接时,客户端先用加密通道连接服务器端,然后完成整个连接通路。这样的设计鲁棒性相当好,但是作为代价的,也有不少缺陷。 首先,goproxy和shadowsocks不约而同的采用了自己的协议,而非将socks5透明的转发到远程的服务器端。为什么?因为socksv5协议中,握手过程是三次交互。客户发送握手包,服务器响应允许的握手验证方法。客户发送验证报文,服务器端返回是否成功,客户发送要连接的目标,服务器端返回是否成功。细节我记得不是很清楚,但是2-3次往返是必须的。 这种工作机制需要client -> proxy-client -> proxy-server -> server的一个链条,本身就比直连多了两次TCP握手。加上上述的往返过程,更加耗时。而且这个消耗在每次建立链接时都要来一次,而HTTP是一种短连接协议——这就更加无法容忍了。因此改用自有协议,一次交互完成握手,就会更加快速。 更根本的原因在于,这两个系统都需要越过IDS,而三次交互的报文大小是几乎固定的——就算加密也无法改变报文大小。不但大小一样,而且由于用户名密码相同,起始加密过程和IV一致,因此采用socks协议的话,每个链接开始都有相同的来返数据。 我不知道shadowsocks怎么处理的这个问题。qsocks协议(msocks)的前身规定,每次握手时客户端提供一组IV,然后发送一个头部变长的字符串(256字符以内),在远程丢弃同样长度的随机字符。经过这样的处理,每次链接时的报文长度和内容序列都不一样,增加了破译难度。至于多出来的几十个字节,和验证报文在一个报文内,开销相比一次RTO几乎可以忽略不计。 但是还是有一点无法避免的问题。如果你看到某个服务器上有一个端口,频繁的被一个或多个IP链接。每个链接都不长,每次都是客户端吐一堆数据,服务器返回一堆,然后关闭链接。尽管协议无法破解,但是基本可以肯定这就是shadowsocks。根据这个特性,可以有效的阻挡服务——这也是我最近碰到的问题。 而且每个链接都需要验证和TCP握手太慢了。 msocks的改进 所以,我参考SPDY协议,做了msocks。msocks的核心思路和qsocks很类似,主要修改是以下两点: 使用一个可靠链接(这里是经过加密的TCP),在这个链接里面封装多对传输。 每个链接只要一次验证。 这样做,首先减少了一次TCP握手和一次身份验证,工作速度更加快。其次多个传输叠加在一个流里面,流特征更加变化莫测。最后,无论是服务器端还是客户端的开销都小了很多。 当然,这也带来不少问题。例如TCP原本的拥塞控制窗口是为了一对传输序列设计的。当很多传输序列在一对TCP上传递的时候,丢报文造成的影响会作用作用在全体传输序列上。包括丢了一个报文重传的时候,所有序列都必须阻塞。还有基础的TCP被施加了丢包,导致全体序列共享5k带宽。当然,经过评估后,我觉得这些问题比频繁握手更加轻,所以就设计了msocks协议。 协议设计的时候,有几个细节问题。 多对复用 我采用了一个map,来记录某个id是否对应到了一个控制结构。这个映射只能被客户端更改,并且有个专门的函数负责查找空闲的id,每次生成的id都是递增的,如果碰到最大值则绕回。 id的大小是16位,足够容纳65536对同时链接。其实不修改内核的话,500对代理就会导致too many files。 实际上一般到id达到400后,单一的tcp就断线重连了。目前我还没见过上千的数字呢。 连接状态 连接一般情况下可以看到5种状态,连接请求发送,连接请求接收,连接建立,主动关闭连接中,被动关闭连接中。 当客户端请求代理连接一个远程服务器时,进入连接请求发送。代理远程端接受后在连接目标服务器的过程中,进入连接请求接收。当成功后,双方进入连接建立。 当关闭时,主动发起关闭一端进入主动关闭,另一端进入被动关闭。当被动关闭端调用close,或者主动关闭端收到对方关闭,整个链接就销毁。 由于tcp是可靠传输,因此三次握手和四次关闭都是不必须的。 简单吧。 拥塞控制 TCP原本是带有拥塞控制的——借助SSN双序列和窗口机制。但是在多路复用的时候,我们需要自行控制拥塞——而且不能采用会和机制。会和会导致后续已经到达的其他链接的报文被一个没人接收的报文阻挡。所以必须采用带拥塞控制的缓存队列机制。 不过幸好,TCP本身是可靠传输协议,所以我不用担心丢包重发之类的问题。我需要做的,就是把对方读取的字节数传递回来,减在控制器上,即可。 不过,我没有做对应于silly window syndrome的优化,在每次读取小数据量后,这个读取造成的window扩张都会被传回。当然,这么设计是有原因的。我默认采用了8K的buffer进行fd间拷贝,所以一般碰不到SWS。 为了解决tcp链接复用造成的单连接带宽问题,我强烈的建议你做以下的设定: net.ipv4.tcp_congestion_control = htcp net.core.rmem_default = 2621440 net.core.rmem_max = 16777216 net.core.wmem_default = 655360 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 2621440 16777216 net.ipv4.tcp_wmem = 4096 655360 16777216 ip选择算法和DNS 在goproxy中,我沿用了一个做法。通过DNS获得请求的目标IP,和中国IP范围核对。如果在国内则直接访问,否则透过代理。这个方法能够极快的加速访问,而且几乎不依赖于需要更新的列表(中国IP列表相对来说固定)。 问题是DNS解析过程。msocks内置了DNS能力,可以帮助做DNS。但是实践下来发现这样做效果并不很好。而原本是采用直接DNS,丢弃特定的报文。这样可以过滤防火墙污染。 原因很简单。原本的模式会让DNS服务器感知到查询者位于中国,于是给出中国可以访问的最快地址。而新的模式则会将DNS请求者搬到美国——这无故加重了代理的负担。例如www.qq.com,原本只需要请求得到一台深圳的服务器即可,现在则需要让DNS绕出去,再回来。如果不幸,QQ有一台位于美国的服务器,那么我的访问都会通过这台服务器——这可比深圳的服务器慢多了。

CVE-2014-0160(openssl)严重漏洞及其对应

Apr 8, 2014 - 1 minute read - Comments

描述 openssl 1.0.1系列中,1.0.1f以前的版本在实现上存在漏洞,未正确处理Heartbeat扩展,导致攻击者可以窃取服务器端敏感数据。 对应 请立刻升级openssl到1.0.1g版以上,并重启整个系统,以保证不会遗漏某些已经启动的进程。 如果有自行编译的程序使用了openssl。当这些程序静态链接或链接了自定义的openssl时,需要重新编译。 在有问题的设备上使用过的key,需要升级私钥。 openssh不受影响,openvpn受影响。 作为证明,请执行以下语句自行检查。 ldd /usr/sbin/sshd | grep ssl ldd /usr/sbin/openvpn | grep ssl ldd /usr/sbin/nginx | grep ssl for i in $(ps aux | awk '{print $2}'); do echo $i; ldd /proc/$i/exe | grep ssl; done 其他 根据昨晚看到的信息,这个漏洞会泄漏服务器端的通讯数据。因此请将所有session清空,在受影响期间使用过的用户名和密码请务必在3-5天后再修改一次(具体看服务商什么时候补掉漏洞)。 参考 nvd debian ubuntu openssl Is OpenSSH affected by this as well?

安全的几点快速说明

Mar 25, 2014 - 1 minute read - Comments

这篇文章谨献给某些特殊环境下奋斗的人士。其他人参考使用。 物理设备 物理设备上存储着相当多的个人资讯,所以所有的机密资讯要保密这是常识。 物理设备上可能拥有的机密资料: 各大站点的session token。借助这些,虽然不能抢走帐号,但是可以仿冒身份,发出假消息,或者诈骗。 浏览器启用了“保存密码”选项后,所有的密码都半明文存储在硬盘上。这些信息可以被用来抢走帐号。 个人的文档,照片,私密视频。万一笔电丢失就够倒霉了,再变陈老师岂不更痛苦? 浏览某些特别站点的记录。咳咳,大家懂。 之所以要设备加密,是因为有一种破解方法是将你的设备存储拆下来,接到独立的读写设备上,直接读取数据。无论系统密码设定多强,也无法防范。 如果是mac,有一个选项叫做全盘加密。ubuntu有home分区加密的选项。启用这两项可以有效加密你的电脑。windows也有个类似的功能叫做EFS,但是据说不少国家级单位有解密权限。 Windows Mac Linux android上有加密系统的选项。但是要注意,如果启用会消耗大量电力,而且必须擦除整个设备才能解除。iphone我没用过,据一位挺熟悉的朋友说,只要设定了pin码,整个手机就会被加密。 加密只是第一步。对于经常保持开机的系统,如果能够轻易的进入系统,那么磁盘加密也形同虚设。所以,请给你的系统加上一个足够强的登录密码。 最低强度: 磁盘加密8位以上,系统登录6位以上,包含小写和数字。 推荐强度: 磁盘加密10位以上,系统登录8位以上,包含大小写和数字。 网络安全 首先,请把系统的防火墙开到最大: Windows Linux Mac 基本原则是,只许出不许进。如果需要可以开放特定端口。 然后,如果在不安全的环境下使用网络,请使用vpn。这里请允许我广告一把朋友的网站云梯。一般是用来大陆翻墙的,不过要用来绕过不安全的环境也可以。 有时间有条件的朋友可以自行架设vpn服务器,这里给出linux下架设pptp vpn的方法。客户端使用方法可以参考云梯的说明。 How to Setup a VPN (PPTP) Server on Debian Linux PPTP Server linux pptp vpn服务器的架设 Debian系统快速搭建pptp VPN 注意加密一定要使用128位,不要使用56位。 网站访问 如果可以选择,尽量使用https。下面有一些插件,使你可以尽可能的使用https访问站点。当然,如果站点没有https则无效。 Chromium Firefox 在https访问的时候,如果跳出证书是伪造的之类的警告,请千万不要确定。这是有人在man-in-middle的信号。正确的做法是使用vpn,看看问题是否消失。如果消失,上报给工程师。如果没有消失,请找可信的工程师来排查。千万不要轻易认可未经鉴定的证书(实际上不建议自行接受任何证书——除非那是你自己配出来的)。 另外,请关注证书的签署者。在我这里看到的信息如下: google的证书签署者是GeoTrust facebook的签署者是VeriSign twitter的签署者是VeriSign 如果签署者有异,请上报工程师。这可能是有人获得了某个根证书机构的密钥来做的签署(例如CNNIC之类)。原则上这样的man-in-middle可以攻击任何网站。

携程网信用卡泄密问题

Mar 23, 2014 - 1 minute read - Comments

事情经过 2014年3月22日晚上6点多,乌云平台报告了携程平台支付日志泄漏问题,然后信息快速传播。晚上八点左右我就得到消息。 从描述中大致来看,应当是支付过程的各种信息都被打到了日志里面,然后日志泄漏了。 第二天,携程发表声明。简单归纳就是几点: 漏洞系调试所致。 受影响的用户为21-22日的用户,统计仅93人。 因漏洞引起损失,携程将全额赔付。 个人认为,携程的声明基本就是在推卸责任。 过程还原 漏洞细节虽然没有暴露,但是从透露出来的信息仍然可以拼凑出部分过程。 某个时间开始,携程的某个内部人员打开了线上系统的日志,用来做调试。不幸的是,日志里面包含了信用卡所有刷卡信息,而且日志可以被穷举下载。这个人是谁,什么时间开始,不知道。 22日,漏洞发现者(猪猪侠)发现了这个问题,并报告在了乌云上。 携程收到信息后,立刻关闭了调试模式。并且把系统日志拉出来看看,发现里面有一些人。于是携程就发表声明。 问题分析 在整个过程中,暴露出几个问题: 携程未必是故意记录CVV信息。但是根据携程可以让用户仅提供卡号后四位就可以完成刷卡来看,携程一定是记录某些信息的,但是未受到本次漏洞影响。 交易过程所交流的数据属于机密,到底是什么人有权限打开调试日志,又没有经过严格的访问控制?是主管级以上?还是普通员工?无论哪个级别都是严重的问题。如果是普通员工,说明携程对员工的管理不到位,权限分割控制不合理。任何恶意员工可以打开日志得到数据而主管无法察觉。如果是主管以上级别则更加糟糕。说明主管根本不懂技术,也不知道如何保护客户的安全。 时间是否仅限于21-22日?如果是的话,意味着仅仅2天就被攻击者找到了漏洞。如果是偶然的话也太快了,如果是必然的话,则代表携程内部其实还有其他问题。 两天的交易仅仅是93人?没有更多?为什么只是部分用户受影响?携程并没有披露更多细节。要么是这里仍旧隐藏着漏洞,要么是携程的危机公关不到家。 评论 为什么说携程的声明是推卸责任? 首先,对于受到影响的用户,只要能证明是携程的责任,无论携程是否发布声明,都可以打官司获得赔偿。携程的声明仅仅是表达了他必然受到的法律后果。如同驾驶员发表声明:“我喝醉后所撞伤的所有人,我将全额赔付其医疗费”一样,没有任何意义。而如果无法证明是携程的责任,携程当然不会管你。 携程是否隐瞒了更久以前服务器调试开启的事实?这并不好说。个人倾向于善意的揣测携程不会隐瞒,但是在行动上不妨恶意的揣测其实调试信息打开时间更长,受影响的人更多。 为什么只有93人受到影响,携程并没有公布。携程的事后分析,应当都是基于这个漏洞的特性“下载日志”而定的。其赔偿基线也是根据“下载日志就会有日志”而产生。但是是否有可能被擦脚印?或者内部人员打开日志然后关闭而逃过被抓?这些携程并不能回答。从问题分析2来看,这种可能并不能排除。而携程的声明并没有表示对这些情况负责(当然就算想要负责也无能为力)。 由于携程信息的不透明,其声明“只有93人受到影响,其他用户安全不受影响”,换个说法就是,“不接受任何赔偿请求,除非你们有足够证据”。问题是用户怎么可能有证据?证据都在携程的服务器上和拿到信息者手里。当有用户的信用卡被盗刷,如何确认是自己的责任还是携程的责任? 基于上述几点,我认为携程的声明是在推卸责任。 建议 如果你是93人之一,当然,携程应该已经联系你换卡了。 如果你不是93人之一,根据上文分析,携程是不会理你的。基于携程并没有透露更多的信息,也没有第三方机构佐证其说法的事实。你需要自行考量信用卡信息泄漏的风险。因此,我对所有在三年以内在携程使用过信用卡的所有用户的建议是,立刻用各种方法冻结信用卡或额度,并尽快换卡。 我对所有人将来的建议是,远离携程直到其展现出对用户隐私和安全足够的尊重,或者关门。 PS,你可以用下面几种方法冻结信用卡: 打电话给发卡行,要求冻结。发卡行核对一些基本信息后就会帮你冻结。 使用网银将额度改为1元。根据网友反馈,建行的额度是千元为单位设定的,建议建行的用户们尽快弃卡。 信用卡的固有弱点 信用卡消费的几个要素是,卡号,CVV号,还有有效期。如果是线下消费,需要核对签名(理论上如此)。如果有设定密码,需要核对密码。 密码的问题是,如果设定了密码,一旦信用卡被盗刷,而密码一次正确,将被视为用户责任。而且很多发卡行的跨境消费是设定了密码但是没有密码也能成功的。因此信用卡的建议是不打开密码。 在网络使用中,这里有个很严重的不便——卡号,CVV,有效期,都是发行时即固定,不可更换。这导致一旦你将这些信息交给对方,你的安全就全由对方保护,发卡行无法帮你做任何事情。 正常来说,应当使用密码乃至在信用卡上附上电子token来加强安全性需求。这样的话,token信息无法保存,密码可以修改。当出现携程这类问题时(或者更普遍的,当碰到有恶意的商家时),可以通过修改密码来解决问题,不需要换卡。 一个小故事——我和携程打交到的经历,还有我为什么幸运的逃过一劫 我在某年,使用携程订机票的时候,对方业务员让我报出身份证号。我当时就一阵错愕——难道身份证号不是应当使用手机键盘输入么? 两者的区别在于,手机键盘输入,信息是直接输入到VI系统的电脑中,业务员只能看到尾号。而如果是业务员输入,那么他就有我的所有信息——从身份证号到信用卡号。也许我可以相信携程,但是我如何相信业务员?出了问题,我如何证明? 所以我就向携程的客户经理投诉了这个问题。具体经历在网络安全——你需要知道的东西里面已经描述了。这里面甚至我质疑了携程保存信用卡的安全性,几乎和今天的问题类似。 结果没多久,我打给携程的时候,丫的业务员和我说,如果你信不过我,咱们可以走这套系统。 我了个大去,这种系统还允许旁路绕过?那有个毛线的意义? 从此(12年年中吧)我再也没有用过携程的业务——用也是让公司同事帮我用。因此,当去年(13年某个时候)我的老卡到期,我就换用了新卡。新卡还没有在携程上用过。所以本次问题我一点事都没有。

台湾反服贸占领立法院中,网络干了点什么

Mar 21, 2014 - 1 minute read - Comments

短文,直接说吧。今天在facebook上看到,有帮台湾朋友组装了两台大功率的基台,把信号直接打到立法院里面。我在图片上看到了一堆天线,不少Cisco的设备,还有基台车。好像还有朋友拿着易拉罐和炒菜锅不知道是帮忙还是帮倒忙。 简单点说,基本架构就是外面架一个基台(推测使用5G频率),用定向天线和里面的client连通,出口用4G和基台车连接。然后里面的client走有线网和多个AP连接起来,每个AP分散部署,分享基台到client之间的链路。 目前看到的效果,信号已经打到立法院里面了。连警察人墙都可以用网——只是他们没有密码而已。 ——结果今天早上发现立法院内其实有网,而且网速快过4G。所以又反过来架设——内部多个AP分享出去后,向外面打信号,外面又架设多个AP把信号分享给会场的上万人群。 上万?想想都要疯啊。 03-21T14:42: 根据看到的最新消息。3G和WiMax都爆满,而且整个立法院内信号密度过高。因此退回最原始的方案——拉一根超长网线解决。啊啊,这不是白折腾了么? 03-23T12:00: 在会场架网络的朋友,在google plus上分享了细节。细节在这里: https://plus.google.com/+DAVIDLIFUHUANG/posts/WKP2qTDJypA 摘抄如下: 我來解釋一下我在立法院內部遇到的網路問題, 同時也說明這是我看到的問題, 或許 rex 有不一樣的見解, 那就再請 rex 另外闢文說明, 我剛開始進去的時候, 我原來以為 g0v 裡面有人, 不過實際上應該是我搞錯意思, 所以我就傻傻的進去了, 不過我個人是覺得, 我們應該要維持裡外訊息的暢通跟正確性, 所以我應該要做一點事情, 畢竟我只會弄網路, 所以我就真的去想辦法弄網路了 XD 人很多, 3G 全部癱瘓, 所以早就該換 LTE 了, 對吧 XD 3G 全部癱瘓, 所以大家都用 WIMAX, 這次 WIMAX 的表現還不錯, 讓我覺得以後來台北參加活動還是應該花點小錢租 WIMAX, 畢竟正確的訊息傳遞可以避免很多不必要的麻煩發生, 同時沒有人用的服務遇到人多的時候就是好服務, 因為它沒有人用, 但是目前沒有 5G 無線網路的 WIMAX 攜帶型無線網路熱點, 這是一個很嚴重的問題 XD WIMAX 多, 大家都開無線網路熱點來分享 WIMAX 的服務, 所以造成了無線網路封包的的碎片化 立法院本來就有無線網路系統, 在一個會議室裡面有一堆一樣的 ESSID, 同時又分散在不同的頻道上, 然後這些頻道上面又有很多一樣的 ESSID 但是分散在不同的 AP 上面, 這樣會發生什麼事情呢?

台湾服贸协议问题

Mar 19, 2014 - 1 minute read - Comments

这篇东西是简单介绍台湾服贸问题的前世今生的文。其实我早就在关注这个问题,只是作为一个大陆人,这个问题很不合适。毕竟服贸这东西让台湾人很不爽。换言之,某种程度上我是获利一方。作为获利方还指手画脚说三道四未免有点“得了便宜还买乖”的嫌疑。不过近日,服贸问题已经从一个单纯的贸易协商变为政治问题。这里面很多东西非常值得我们学习。 什么是服贸协议 简单来说,就是大陆和台湾的贸易协定。从这个角度来说,这个东西不但没问题,而且必须。出问题的是内容和通过内容的方法。 台湾政府宣称服贸可以提振台湾经济,但是民众始终有疑虑: 大陆人工(薪酬)比台湾便宜,加大开放是否会影响就业 开放不对等,台湾太多领域对大陆开放,而大陆很多领域不对台开放,其中甚至包括影响国家安全的重要领域(例如通讯和传媒) 大陆食品安全问题,台湾的检验检疫是否能保持独立性 老实说,从大陆人眼光看,很多问题颇有点——不知道怎么说的味道。台湾食品安全问题也不轻,而且从就业工资来看,台湾平均起薪大概和上海持平。随着工作年限上涨,反而是上海这里工资更高(至少在IT业)。如果每一条都照着对台湾有利的方向改,对服贸不爽的就是我了。基本一点,协议是双方的东西,即使我们看起来这个协议再合理,对对方再有好处,如果对方本身不同意,就不应当且也无法签署。协议本身,必然是双方讨论,我这里退让一点换取你哪里退让一点,最终得到双方认可——的这么个过程。 参考可以看以下几条: 看过来 看过来 看过来 问题在哪里 问题在于通过的流程。 台湾服贸对不同人群造成的影响不同。对于老板阶级来说,员工工资降低,市场扩大,自然是好到不能再好的好事。对于高阶白领来说,能到大陆打工也不坏。但是对于中低层员工而言,就要面对工资降低,服务品质变差等等问题。因此不同人群对服贸的支持和反对是不一致的。而台湾不是大陆,通过这种东西理论上是要通过内部讨论,人民授权的。问题是服贸这么一大包,这条这帮人不同意,那条那帮人不同意。每个人一个说法,但是总之就是反对你。这样服贸就始终无法通过,政府非常头大。 因此要通过服贸,比较容易的办法就是逐步协议,每次只谈一部分,对少部分人产生不利影响而对多数产生好处。逐步通过逐步调整,减少影响范围,降低抗议人群比例。但是台湾政府不但拿着一大包协议来签,而且想大手笔的一笔就签下去,完全没管民众的反应,也不管是否合规。等民众抗议了,再强行闯关。 呃,是不是来大陆考察多了,一不小心以为自己还在过组织生活呢? 最近怎么回事 本来去年服贸都要签了,结果被人踢爆,叫停回去重新逐条审查,而且要开公听会(听证会)。大陆的同志们想也知道,听证会么,涨价就对了。所以党国官员干脆一周开八场,我讲你听就好,乖乖不要多问。结果引起不满,后面被人排成了两周一场——依然是我讲你听(非常熟悉吧)。党国官员还很不爽,指责这是拖延时间。 然后拖到最后一场,干脆一合本子。好了,三个月已到,审查视为通过。 咳咳,要这么容易,不知道能不能拜托他通过一下大陆人获得“台湾”国籍的法规。只要迁一成大陆人的户籍过去,公投回归大陆就没疑虑了。 参考可以看这里。 所以呢 所以这帮不爽的人就跑去把立法院给“占领”了。 啊然后呢 我也不知道。不过搞成这样,已经完全不是服贸的问题了。服贸本身没什么太大问题,逐条审议逐步通过也可以,阻力大也不会比现在更糟吧。现在已经是手法本身激起的不满比服贸本身还大了,作为政治(尤其是还算民主的地区的政治),这么搞是很不明智的。 从我关注的台湾各大事件的结果来看,往往是雷声大雨点小。运动的时候声势沸反,但是最终结果下来往往是差强人意。但是好在运动是经常的。民众往往是这里一点,那里一点,能够挡住一些太过荒唐的事情。其实这也是民主社会协商的必然结果,指望一次运动就能把所有的问题一并解决的想法,和一次通过整包服贸一样不靠谱。

系统内存有富裕但是syslog中持续报告内存耗尽

Mar 17, 2014 - 11 minute read - Comments

现象 ubuntu12.04,3.5.0-23的内核。在syslog里面持续看到内存耗尽,用free去查看却是内存还有80G左右。检查系统没有cgroup或者ulimit限制。log如下: Mar 11 14:45:34 nb81 kernel: [7352493.081026] swapper/0: page allocation failure: order:4, mode:0x4020 Mar 11 14:45:34 nb81 kernel: [7352493.081035] Pid: 0, comm: swapper/0 Tainted: G W 3.5.0-23-generic #35~precise1-Ubuntu Mar 11 14:45:34 nb81 kernel: [7352493.081038] Call Trace: Mar 11 14:45:34 nb81 kernel: [7352493.081040] <IRQ> [<ffffffff8112d1b6>] warn_alloc_failed+0xf6/0x150 Mar 11 14:45:34 nb81 kernel: [7352493.081065] [<ffffffff81139a51>] ? wakeup_kswapd+0x101/0x160 Mar 11 14:45:34 nb81 kernel: [7352493.081071] [<ffffffff81130ffb>] __alloc_pages_nodemask+0x6db/0x930 Mar 11 14:45:34 nb81 kernel: [7352493.081079] [<ffffffff815c80df>] ?

换了一个服务器

Mar 7, 2014 - 1 minute read - Comments

上一家服务器的质量太差了。价钱贵,响应慢,还经常服务不可用。忍无可忍,换了东哥的虚拟主机。反正我只支持一个blog。 大家可以用新地址访问我的blog: http://shell909090.org/blog 希望没什么别的问题。如果有的话,可以发我email,或者通过twitter联系我。我现在已经不怎么上微薄了,切切。 PS: 不知为何,我这里发出去的同步到twitter没有经过短链接缩短服务,导致twitter上和facebook上的新文章通知都有问题。

移动设备的未来预期

Mar 6, 2014 - 1 minute read - Comments

相机 低端数码相机估计会死绝。高端相机可能会内置一点存储,并配置近程传输和控制能力。 很简单,低端相机能做的,手机能做个八成。但是手机随身携带,低端相机可就不一定了。在对比之下,有多少用户愿意再额外的花个几百大洋弄个专门的相机。还得经常维护电池,存储卡,导入导出照片呢?而且考虑到随着技术进步,手机的照相能力能够越来越接近低端相机。这部分市场利润只会逐年下降。 相比起来,高端相机的成像效果,目前手机还是无能为力的。而且没有重大技术突破的话也做不到。但是高端相机往往有个共同的缺陷——成本太高,更换速度太慢。如果买了一个4000-6000的相机,很少会在一两年的时间内就把他换掉。这导致相机的附设功能落后,软件功能严重脱节。往往好容易在相机里内置了微薄,结果现在用户都想用微信了。 解决这个问题的方案就是用手机作为相机的控制和存储。一般手机的显示屏比相机的更大更好是常识。如果相机可以和手机联动的话,相机可以省掉一块大幅高质量显示屏,改用小屏做一般性的展示。还可以用手机的触控技术提供更好的操作。省掉大容量存储,而且还可以即拍即发,数据同步/分享,而不用导入导出。 看起来最像的是蓝牙,但是2.0的速度太慢了,只有250KB/s多。一副好点的照片最低5M,需要20s传输时间,等不起。3.0的速率上升到2MB/s以上,大约是2s-3s,基本没问题。4.0更快,功耗更小。 无线局域网(wifi)技术的速度很不错,即使是11g也有2.2MB/s的传输速度。手机上虽然普遍不快,但是1M/s-1.5M/s的速度绝对没问题。一张图片3s左右完成传输,也可以接受。而且好处是,目前的手机大多已经支持11n或者开始支持。11n的网络速度可以达到10MB/s,传输40M的原始照片也只需要4s。问题是,wifi为了使得两者可以互相传输,必须将其中一个配置为AP。这样一来手机连接其他AP上网就会受到限制,这大大限制了他的应用。不过随着无线网络技术的发展,AP可能变得不那么重要。 目前从google的搜索结果来看,wifi比蓝牙拥有更多的搜索结果。 存储 从通用性存储卡的价格来看,16G的普卡已经到了百元以内,基本谁都玩的起。再往下怎么玩?加大存储对移动设备来说用处并不大。目前移动设备上面存储最大的无非是音乐和图片。8G可以存储1500多张高质量照片,或者同数量的音乐。我想一般人手机上要再存储这个数量以上的数据,也不大可能。 要说在上面存一堆历史照片或者音乐库什么的,这是拿移动设备当数据库玩的思路,边际收益很低。当年苹果就拿硬盘把mp3做成了音乐库,效果很不错。不过后来历代别人就没这么玩过。既然我们可以把大头保留在电脑上,把热数据放在手机里。在手机里保留所有数据的意义就不大。是个玩法,但是不足以驱动存储卡升级的需求。 移动存储要再玩size,只有等视频技术了。8G的存储只足够20小时的高质量视频,这还是高压缩格式。换算成美剧的话大概刚刚够放下一季的量。加上音乐和照片,差不多够驱动主流存储升级到32G或64G的水平,也就是两三年的功夫。 再往后,存储就没什么玩头了,就算是用录像功能录上三五个小时的视频(这是目前电池的极限),无非也就是2-4G的空间而已。从size上说,32G的卡足够终结一个世代。除非碰上有些极其消耗存储的杀手级应用横空出世(你也知道了什么情况下可以买入这些存储生产商的股票)。 另一个玩法就是速度。目前的吞吐速度在4MB/s-10MB/s之间,而且主流都是4M。对比一下网速,你大概就知道为什么手机的无线速度始终上不去——再快卡的吞吐就是个问题了。未来的存储可能优化到10MB/s的速度,这刚好比11n的普遍网络最高速度(大约9MB/s)更高一些。再高目前传输也解决不了。所以看起来存储暂时不会成为关键。 电源 目前移动设备的核心全部集中在电源上,核心问题在于电池技术不受摩尔效应的控制。 以手机来说。nokia的黑白机一次充电可以用一周,到了android智能机都是论小时的。不是电池没长进。实际上无论是可靠性,单位质量储能比,还是性价比,今天比起当年的电池都有相当提高。但是移动设备的能耗也随之上涨,锂电池已经越来越不敷使用,成为逐步上涨的移动设备电力消耗的瓶颈。 更让人绝望的是,锂离子电池什么时候发明的?1992年实用化,大规模使用大约隔了10年的时间。如果我们今天(2013年)希望使用什么升级技术,那他2003年就应该实用化了。问题是,我们并没有看到有这种技术。 另一项有望得到应用的技术就是快速充电。虽然电池的续航能力无法提高,但是目前的充电功率只有5W。这个功率完全可以提升到50W(比普通笔记本的电源功率略低),或者150W(和低功率的台式机持平)。如果用10倍的充电功率来换取10倍的充电速度,将2小时完成的充电换为6分钟充电50%。或者更激进的,在2分钟内充电50%(150W功率),我想电池的充电就会容易许多。 其中一种解法就是超级电容。目前超级电容事实上是一项颇为成熟的技术,但是成本高,能量密度低,和锂电池相比并没有优势。要能够缓冲锂电池所需能量同量级的水平,缓冲器的大小比锂电池本身还大。所以在大幅改进前用不上。 不过让人燃起希望的是,目前的纳米线锂离子电池的质量能量密度已经达到2.5以上(普通锂电池大约是0.5-1不等),而且可以高速冲放电(比普通锂电池快的多)。这项技术2008年看到的报道,按照预计,有望在五年(2018年)后采用。届时同样质量的电池,续航能力可以高达目前的5倍。android设备有望续航能力重新按天计算。 网络 目前的主流网络还是EDGE/WCDMA技术。TDS-CDMA完全成了个笑话。确实有不少基于他的产品,但是最好的手机生产商完全不考虑这项标准。这导致顶级的手机,顶级的手机用户完全不可能用这种网络。你见过买了Iphone还在用移动卡的么?基本TDS-CDMA就被当作上网卡和合约机用了。 下一代技术基本是4G了。什么概念?静态速率1Gbps,和千兆以太网相当,比wifi还快。问题是中国在4G上又扯淡,用的是LTE-TDD(TD-LTE),而不是LTE-FDD。参与联盟的人倒是不少,可是最终结局如何还是难料。 上面还不是主要问题。主要问题是什么?费率!3G时代忘记关流量还能卖个肾,4G时代忘记关流量卖房都不一定管用了。10多年来,官方明面上的网络费用只是从1k一分(10元1M),降低到1元1M。当然,背地里打折下来,网络费用基本在35元1G,或者更低。而有线网络的费率呢?我们按照1/10的总带宽用量来计算(现在很多人拿网络看电影看视频,平均每天2.4小时的满流量一点不多吧)。每G价格42分。。。 所以,移动网络价格降到5元/G以内前,是不会对有线网络构成冲击的,无论3G/4G。即使有,也是在特定场合,而不是总体上。作为对比,台湾数据流量价格折合人民币大约是8元/G,所以台湾用移动网络的人就多很多。问题是,台湾的有线网络也更便宜。。。 电话 总体趋势上说,电话和短信被软电话和消息替代是常规趋势。说的更通俗点,就是不再打电话和发消息,改用QQ现场通话和发消息。 这很好理解。软电话的成本要比电话更低。一分钟电话大约是10分,换成数据流量的话能够传输2.9M数据,合50KB/s左右。而5-10KB/s就可以提供非常不错的通话质量了。 问题在于两点。首先,编解码,数据传输会比直接传输更加的慢。而且在没有QoS的情况下,软电话的抖动非常大。你说的话到达对方那里的时间可能比以前长,而且可能变动幅度异常的高。 然而大多数情况下(主要是闲聊),对语音质量的邀请并不那么高,反而对价格非常敏感。这种情况下软电话就更有替代普通电话的趋势。我和老妈打过数次语音电话,除了手机耗电量高点,有的时候突然会听不清外,也没有什么特别的感觉。 于是你就大概能猜到移动通讯供应商网络为什么不能降价。10KB/s的速率,35元/G的价格,一分钟大约是2分。而移动通讯的大部分套餐里面,一分钟电话的价格都是10分。所以当网络价格低于175元/G的时候,软电话就有更大的趋势替代电话。如果价格降到17.5元/G的时候,软电话价格只有电话的1/10。移动的台面价格是1000元/G,而台面下价格则远远要低,正是因此。

昆明事件的几点补充(一)

Mar 5, 2014 - 1 minute read - Comments

这绝不是一个悲伤的个人所能做出的事情 因为已经超出了个人能力的极限。 在大陆这些年,看过不少充满凶戾的事件。拿刀冲进政府机关砍杀的人,冲进幼儿园砍杀的人。但是我从未见过,或者听闻过有数人,拿刀在人口密集区域无差别砍杀。一方面这不会给人带来任何的好处,另一方面则是实施太难。 不会给人带来好处,就不大会有人想做。人的本性都是趋利避害的,除非发疯一样的不计损益。一个人可能发疯(我们也听闻过不少这样的疯子),两个人就很难了。一群人同时发疯,还能这么有效率的进行杀戮。你不如说是我疯了算了。 另一方面,大陆现在禁止民众持枪,菜刀已经要实名购买。一群维族人,跑到非聚居区的昆明去,本身就够扎眼了。居然还能有效率的搞到数把凶器,同一时间发起进攻。你觉得这像是某个个人或者小群体能够做的到的事情么?如果任何个人或者小团体可以轻易做到,你真的能说维族被管制和歧视么? 凶手是维族不等于凶手是新疆分裂分子 大陆官方的措辞是,“根据现场的证据”,这是新疆分裂分子所为。这事说的不明不白,颇惹人怀疑。我有位推上的朋友是医生,有同事参与当晚抢救,也听了不少小道消息。当事者的说法很直白,“一看就是新疆人”。当然,我觉得他想说的是维族面孔。所击毙的凶手,将来也是要有照片画像之类证据的。所以我倒是对行凶者是维族没什么怀疑。 但是是不是分裂分子所为,这却不大好说。因为大陆官方拿到消息的第一处理反应肯定是往新疆独立运动的人身上推。一来这帮人确实是维族,二来这帮人明显是有组织有计划。维族里面对政府不满,对汉族不满,有能力实施策划这起事件的,也就那么多人。就算将来有充足的证据说不是,这个推论也不是说不过去。 问题是能不能以此盖棺定论呢?很难说。捉贼捉脏,捉奸成双。没有任何其他旁证的情况下,我们自己心里认定是无妨,拿来要说服他人总是欠了点什么的感觉。常规情况下,案子往下查就是了。偏偏大陆这里的案子又是出了名的不公开透明。自从事件发生后,真相就再也和你没有关系了。后续抓到的犯人?可能是地方为了交差搞来的。本来没联系,可以打出联系来。问题是,大家都知道你会这么搞的时候,明明是真的,却没有人信了——这就是“狼来了”的故事。 无论凶手是谁,必然都是个小人 任何施行袭击的人,恐怖分子也好,心怀恨意的个人也罢。基本的一点是,我的行动是我对某些事情不满的结果。我杀人,是为了达到我的目标,而且我要让你知道这一点。同时,我也承担这一行为的后果。所以你可以看到很多组织宣称对XX事件负责(当然,也有很多事情跟不不是他干的,非往自己身上扯的乌龙事件)。此所谓,不教而殺謂之虐。 问题是没人宣布对此事负责。 世维会发言人说,这事不是我们干的。大陆官方说,就是你们干的。我擦,女王怀孕了,这TM是谁干的? 不知大家有多少人看过“竹林中”这部小说,这部小说出自小说集“罗生门”。后者想必是家喻户晓。多个当事人,每个人都为了自己的利益而描述不同的客观,最后导致无法还原出一个真相来。 好吧,我也不知道谁干的。但无论是谁,从不承担其后果来看,必然是个小人。 个人觉得大陆官方自导自演的可能性不大 确实,这两天正好在搞加强管制。弄这么一出确实非常有利于大陆官方对新闻的管制,军警的运用。从最大的受益者就是第一嫌疑犯的角度说,这么怀疑没错。不,或者我们得说,对官方的阴谋论的怀疑是必要的。只有这样我们才不容易受到愚弄。 但是我个人分析了一下后,基本排除了这点。因为官方的损失大于收益,而且有未知的风险。 维稳固然要靠政府,这确实加大了对政府的依赖,可能给政府更大的权力。可是对政府是否能成功维稳的信心伤害也是很大。目前大陆政府已经做了常态化的国道检查,地铁安检,大规模城管执法,连菜刀都已经实名制了。昆明大屠杀让无数人质疑,大陆警方是否有能力保护民众的安全,那些严苛的条例是否只是针对善良的民众。 如果这个疑惑不解除的话,对官方的统治是很不利的。人人怀疑你是只纸老虎的时候,各种事情就会层出不穷。然后官方就会进一步疲于奔命。 要验证也不难。马上就是两会了。如果这两天有人提案加强对民众的监管(这是照例有的),包括禁止持刀,警察自由调动等。提案严谨,考虑周全,看起来就不像是这两天想的出来的。那值得怀疑的可能性就大大增加了。如果连像样的提案都没有,全是陈词滥调,那只能说官方也被打了个措手不及。 恐怖主义不等于对抗暴政 恐怖主义和对抗暴政的区别在哪里?关键是对对方的职能机关动手还是对平民动手。 军队和警察天然的就是暴力和杀戮机关,因此要对抗对方的暴力机关,杀伤是无法避免的。然而针对没有暴力伤害能力的平民,而且特意只针对对方的平民,这还是让我们很难接受——基于同样理由,杀害投降后的战俘一样是一件不名誉的事情。当然,我说的都是近代的事情了。你要和我讨论成吉思汗当年破城后屠戮三日的事情,我只能说你是在耍流氓。 所以呢?那些举出美国对日本扔原子弹,以及賽德克巴萊例子的人。你们说的没错,这些人是毫无异议的杀人犯。他们知道这一点,而且为了种种理由,也实施了攻击平民的行为,并承担了这一后果——这点是他们和本次幕后主使的决定性差异。 不要以为不对民众动手多么神圣,在战争的时候要不对民众动手着实不大容易——尤其是有人打着游击战的时候。路旁对你笑的孩子,也许下一秒就会拿出火箭筒。这种情况下,要保证不误伤平民着实不大容易。只是打赢了,这些事情就会大事化小。即使上了军事法庭,只要没有确凿的,“只特定针对平民的”的证据,多半也不能如何。可是若打输了,这事情就会小事化大。若不宣而战,躲躲藏藏不敢以真面目示人,不是鼠辈是什么? 另外,特别提出敝政府在新疆作为的朋友——你说对了。虽然我们的政府不承认,但是他确实需要承担群体性的杀人责任。而且这不只是针对少数民族——你以为汉族情况会比较好么?错。汉族的情况多半要更糟。 把人逼疯后,就没法再坐下来好好谈了 很多电影里面,总会有个带头人物,说要让对方知道自己的民族不可轻辱,然后以少打多。当然按照剧情需要会有不同结局,一般来说不带主角光环的大部分都悲剧了。 如果是战争,这样没什么问题。但是如果是屠杀对方平民,这就是抽风了。因为屠杀平民对施行方没有直观的好处。对方的军事力量还在,而且还更痛恨你了。要产生收益,至少要做到白起坑杀赵国四十万人那样,一次性摧毁对方的生产和供给能力。按照大陆的规模,大概要几亿人吧——那会是怎样的一场惊天屠杀啊。而不产生收益,我们就只有认为你疯了。因为只有疯子,才会做一件损人损己的事情。 而一旦被打成疯子,后面就没法再坐下来谈了。没有那个政府针对这种情况还能给出承诺的。就算政府不被愤怒的民众吞掉,对方也不敢相信民众会放过他们。当彼此双方都认同到这一点时,双方除了你死我活外没有什么太好的结局。大部分情况下都是一者输了,然后胜利者安排一场结局。 所以呢?你认为我在说我们一定要坚决打击恐怖分子么? 我是在说不要随便把人逼疯。 关于美国新闻定性的反面声音 这次争论比较大的就是美国主流新闻,对恐怖分子打引号,因而被斥责为阴阳怪气。我这里收集了两个相关的反面声音,说明为什么。 恐怖分子为何加引号 外媒对中外两起事件新闻用词对比