Bojie Li (李博杰)
2014-03-05
我们所用的网站,数据大多以明文形式存储在服务器上,服务器端程序鉴别用户的身份、授予用户访问权限。不过业务逻辑复杂了,百密一疏,程序总是有这样那样的漏洞,连支付宝这么敏感的应用都不例外。此外,现在越来越多的网站搭建在公共云平台上,一个很大的顾虑是:云平台的所有者会不会窃取我的机密数据?
因此,数据在服务器上最好是加密存储,解密密钥在用户手里,也就是只有用户自己能看到明文,而网站所有者、云服务提供商、可能的服务器入侵者都只能看到密文。即将发表在网络领域顶级会议 NSDI 2014 的 Building web applications on top of encrypted data using Mylar 就是这样一种解决方案。
2014-03-03
前几天做了个内部技术分享,各位同学的看法莫衷一是,因此拿出来跟大家聊聊。本文将讨论 Google 的网络基础设施计划——Google Fiber 和 Google Loon,以及 Google 在网络协议方面的探索——QUIC,其野心在于把互联网变成自家的数据中心。
有线网络基础设施——Google Fiber
Google Fiber 的目标是让千兆互联网走进千家万户。以千兆的速度,下载一部 7G 的电影只需一分钟(如果你还在用机械硬盘的话估计还来不及存呢)。目前这个项目仅在美国 Kansas 和 Provo 两个城市试点。这两个城市的 Google Fiber 都提供了三种套餐,以 Kansas 为例:[1]
- 千兆网络 + Google TV:120 美元/月
- 千兆网络:70 美元/月
- 免月租网络:5Mbps 下载,1Mbps 上传,免月租,但要交 300 美元初装费。
其中第三种方案还不如美国大部分电信运营商提供的服务快,而大多数家庭已经购买了有线电视运营商的电视服务,因此对经济上能承受得起的家庭来说,三种套餐的对比突出了第二种套餐(70 美元/月的千兆网络)的“实惠”。
这里有两个值得争论的地方:
- 每人都有千兆这么快的网络,技术上可以实现吗?
- 70 美元/月的收费能收回 Google 搭建千兆网络的成本吗?
2014-02-26
今天抢了个极路由,用了一个小时才抢到,之前一直都在“人山人海”地排队。不禁想起去年给美丽邂逅做的抢票系统,有人问,我写了个脚本怎么抢不到票呢?谜底将在本文中揭开。
抢票系统要满足的条件是:
- 一人一票,一个人不能拿到两张票;
- 每天欲发行的票必须一张不多一张不少(假定来抢票的人足够多)地发出去;
- 用程序抢票成功的概率不能明显高于人工抢票成功的概率。
2014-02-24
DNS 服务是互联网的重要基础服务,不过它的重要性往往被低估。例如,2013年8月,.cn 根域名服务器遭到 DDoS 攻击,导致 .cn 域名无法访问;2014年1月21日,根域名服务器遭到某著名防火墙污染,导致所有国际域名无法访问。很多国际知名网站在中国大陆无法访问,部分原因就是遭受了 DNS 污染,也就是对域名返回了错误的 IP 地址。
要搭建一个抗污染的 DNS,并不是使用 VPN 解析所有域名这么简单。主要有两个问题:
2014-02-23
帮朋友做个端口映射,由于几个月没碰 iptables 了,遇到两个坑,与大家分享。
2014-02-15
网络虚拟化(Network Virtualization)就是搭建一个与物理网络拓扑结构不同的虚拟网络。例如公司在世界各地有多个办事处,但希望公司的内部网络是一个整体,就需要网络虚拟化技术。
从 NAT 说起
2014-02-10
随着计算机处理能力的提高和软件复杂程度的上升,性能往往并不是衡量软件的最重要标准。但有时我们确实需要把计算机的性能榨干。尤其是做研究的时候,为了让性能指标超过对手,不仅要优化算法(渐进复杂度),还要优化实现(复杂度中的常数)。本文试图总结一些规律,望与大家讨论:
不要使用开源软件
开源软件往往考虑的是一个通用问题,因此有很多几乎永远也用不到的配置参数和条件判断;开源软件对代码可读性、可维护性的要求往往高于对性能的要求,因此一般不使用所谓的“奇技淫巧”。
2014-02-10
比特币经历了去年4月和11月的两次暴涨暴跌,已经不仅仅是 IT 男的玩物,而成为社会各界争论的焦点。不过关于比特币技术原理的文章大多是蜻蜓点水。过年与好基友们聊天时,大家提出了这些问题,希望读完这篇文章后能弄明白:
- 如何证实一次比特币交易,使其不可抵赖?
- 如何避免一个比特币花两次?
- 如果我一个人拥有全网的 10% 算力,是否有可能改写历史?
- 比特币交易为什么要等几十分钟?
- 比特币是如何保证数量有限(2100 万个)的?
- 如何保证每 10 分钟恰好挖出一个比特币?
- 一次挖出 0.1 个比特币是怎么回事?
- 一次交易 10000 个比特币,需要生成 10000 条交易信息吗?
- 比特币这么大的交易量,交易记录如何传输、保存?
2014-02-09
智能手机、路由器等很多嵌入式设备都有“恢复出厂设置”的功能。按照PC机上大家习惯的“备份”做法,似乎需要把出厂时的整个系统备份在只读的 ROM 里。如果是这样,每次恢复出厂设置,ROM 里的内容都要拷贝到 Flash 存储里,浪费大量存储空间,而且恢复出厂设置需要比较长的时间。但事实上,恢复出厂设置只是重启一下就完成了,而且刚恢复的系统里 Flash 存储基本是空的。
(感谢 BW 的评论,Android 系统的恢复出厂设置不是使用差分技术,而是简单清空数据分区,对 /system 分区的修改没有被还原,我弄错了)
2013-11-22
有时要远程访问路由器 Web 控制面板等只能从服务器所在网络访问的网站。在服务器上用 links 显然是不靠谱的。我们可以在本机与服务器间用 ssh 打通隧道,让本地浏览器通过隧道访问受限的网站。
首先用 ssh -D 在本机与服务器间建立 socks5 隧道:(60000 是一个任意的大于 1024、小于 65536 的整数)
1 | ssh -C2qTnN -D 60000 user@remote-host |
然后就是让 Chrome 通过 socks5 隧道访问了。Chrome 插件 ProxySwitchy 由于 Chrome 不再支持 NPAPI 已经不 work,而 ProxySwitchySharp 有时也不 work。网上有些文章说 chrome –proxy-server 就行,事实上在你开着另外一个 Chrome 实例时是不 work 的,因为 Chrome 会自动寻找已经打开的实例。
比较靠谱的办法是,开 Incognito 匿名模式,并使用不存在的 Chrome 用户数据目录,断绝其寻找已打开实例的可能。用完之后,最好把新建的用户数据目录(下例中是 C:\Temp\Chrome)删除。注意,下面的 socks5 不可替换为 http,这是不同的协议。
1 | PS C:\Program Files (x86)\Google\Chrome\Application> .\chrome.exe --proxy-server="socks5://127.0.0.1:60000" -incognito -user-data-dir=C:\Temp\Chrome |