bookmark_borderL2tp over ipsec系列-01-我竟然要学数据链路层编程了!

L2TP(RFC2661)上来就说自己是扩展PPP协议(RFC1661)的,我看我还是先看一遍PPP协议吧。

而PPP协议是一个数据链路层协议,比TCP低两层,比IP协议都低一层。用普通的socket编程不能直接修改包头,所以我需要借助于WinPcap和libpcap库来获得对数据链路层的控制能力。

数据链路层啊,难怪比HTTP难懂,搞这东西要和Sniffer一样用WinPcap,这一点就让我觉得很高端了。

这种超级底层的冷门知识,估计对我的游戏开发工作是没有任何帮助的。不过毕竟工程师,拿这种阳春白雪的东西当业余爱好装个B也是好的。继续看吧。

bookmark_border程序员读RFC,是一件很惬意的事情

RFC是什么,维基上有解释。按我的理解,就是一些通信、网络方面的协议和规则,有人把讨论后的结果整理成格式统一的文档,大家都遵守这个文档的话,各自做的软件之间就可以交流了。

举例来说,我上个月读了一份RFC2616,是HTTP 1.1协议,也就是我们现在最广泛使用着的一版HTTP协议。里面定义了客户端(浏览器之类)应该以什么格式内容发送请求(HTTP  Request)给服务器端,服务器端根据自己的情况,应该返回什么格式内容的响应(HTTP Response)。

最开始读这份RFC是因为我需要写一个HTTP代理程序,又毫无头绪,需要了解一些相关知识。

其实在读RFC之前,我尝试性地让代理把接收到的所有请求内容一字不差地转发给服务器端,再把从服务器端收到的内容全文转发给客户端,心想这就是标准的端口转发了吧,结果是代理运行起来一卡一卡的,而且卡得很有规律,每10秒可以读取一批请求,然后要卡10秒,才能读取下一批请求。因为对HTTP协议一无所知,所以当撞大运编程失败以后,我就只能老老实实的去看协议了。

在我花了20小时读完别人翻译的中文版RFC2616以后,我发现我爱上了RFC这个东西。

 

首先,RFC是第一手资料,非常有价值。

你想和别人探讨问题,他举出某HTTP教材里的内容,你举出RFC里面的内容,那结果肯定是你的证据说服力更强。毕竟写教材的人也是看完RFC去写的教材,教材已经是第二手知识了。

其次,RFC的格式严谨,而且只有干货没有废话,上来就可以大流量地吸收新知识,读起来很痛快。

我至今读过的技术书籍里,都没有任何一本有RFC这样清晰易懂的内容组织。不过拿一群人整理出来的RFC和一两个人写的技术教材来做比较,也是有点欺负人就是了。

 

读完RFC之后,再去写我的HTTP代理程序就如鱼得水了。因为目的明确,省去了很多摸索和撞大运的时间。

这种感觉就好象在游戏公司,程序员进项目组的第一天就被告知“游戏策划和美术音乐素材已经全部就绪,就等着您去编程了”时那种痛快的感觉。虽然我从来没体验过。

现在我的HTTP代理已经可以正常运转。虽然实现很简单很不守规矩,但并不影响使用。等下周把keep-alive也给实现了,在主要功能方面我就没有遗憾了。

 

关于RFC,HTTP代理这件事完成的很不错,接下来就要去找下一个战场了。

正好hacklu同学有一个需要搭建l2tp配ipsec的vpn的需求,而我又一直无法突破拖延心境去找资料设置这个东西。干脆,我自己试着写一个l2tp配ipsec的服务器端吧!

在公司用了这么久的git,这次拿到github上去试试身手。如果这次也能顺利搞定,那我就考虑定期攻克一个RFC文档了。

 

还是老规矩,先通读相关RFC,再设计和编程。

相关RFC有:

1. RFC2661 《Layer Two Tunneling Protocol “L2TP”》

2. RFC3193 《Securing L2TP using IPsec》

3. RFC2402 《IP Authentication Header》

4. RFC2406 《IP Encapsulating Security Payload (ESP)》

5. RFC791 《INTERNET PROTOCOL》

6. RFC2409 《The Internet Key Exchange (IKE)》

7. RFC1661 《The Point-to-Point Protocol (PPP)》

8. RFC1962 《The PPP Compression Control Protocol (CCP)》

卧槽,这个比HTTP代理程序复杂好多啊……依我挖大坑的经验,这种陨石坑我是填不上的。不过难得有一个可以让我学点东西的目标,不试试就放弃,也太可惜了。

hacklu用练字来磨练自己,那我就用啃RFC来磨练自己吧!

还可以趁机写一些RFC阅读笔记当日志,充充数量。毕竟最近几年的日志产量少得我都不好意思了。

bookmark_border百度空间也走了

百度空间关闭
百度空间关闭

又一个我认真待过的日志空间关闭了,上次是msn space。

我虽然很久不用百度空间了,但对他一直很有亲切感。提起百度空间,就会想起我的整个大学生涯,兼一半的留学生涯,我的第一批“网友”,我的一百多幅画,我初学编程时为一点小成就而喜悦,我意志薄弱时任性的吐槽发牢骚。

好东西为什么总是死的早?也许不是他很好,而是我对他产生了感情,感情深到同类产品的优势不足以抵消我对老朋友的留恋。确实,相比探险与开拓,我更倾向于恋家和守旧。

msn space, google reader, baidu空间,还有fileden网络硬盘,大的还可以算上verycd,115,以前的迅雷,我没用过的像google wave,google code,google buzz(…google你是关闭了多少业务= =),delicious书签,等等。现在我还用着的evernote,dropbox,youtube,gmail,weibo,qq,xiami,github… 考虑到现在复杂的大环境,我越来越觉得把所有数据都管理在自己手里是很重要的。

现在我家里有一台synologyNAS(3TB,800MHz,128MB),一台HP小服务器(500G+3TB,2*2.2GHz,4GB),有一个同学的VPS的账号,一个同学的网页服务器的账号。

作为一个业余爱好,我想把我需要的数据都管理在自己手边。新业务出来了,只要把自己的数据导入导出一下就可以用,定期把网络上的数据同步回本地永久保存。嗯,能做到就好了。不过其实这事情本身意义不大,还是玩的成分居多。

不过,等我年纪再大一点,想回顾自己年轻时的足迹时,发现百度已经把日志彻底删除了,微博已经被新社交环境淘汰了,动画漫画已经没地方下了,就该骂现在的我为什么不勤快点把收集做好吧。所以这事情要说有意义呢,也算是有点意义。等闲下来好好计划一下,在github上开一个收集各平台数据的爬虫,和在本地管理各种数据的框架的坑吧^_^