
源代码分析工具
由 droplet 在 周一, 2010-07-26 16:54 提交 编程实践有没有一个工具,可以统计函数或变量引用的次数,在下面几种情况下,这个统计工具就很重要
1)inline函数统计。每个inline的调用次数,inline函数的长度等等。inline函数在编译时会被展开,这样会增加obj的大小。所以在
使用inline的时候,一定要控制inline函数的大小,10多行代码还可以接受,再多就不行了。如果inline在很多地方引用,展开之后的
规模也是很可观。obj文件增大,一个直接的后果就是增加了cache miss的机会,因为不可能把代码都load到cache里面。
2)宏的统计。最好是不要使用宏。如果一定要使用,最好不要用宏定义函数。宏的长度和引用计数也非常重要,它的影响与inline函数
类似。
3)函数的长度统计。每个函数有多少行代码。这个可能没有从obj文件里得到的代码长度有用,但是从源代码分析更方便一点,不用每次
都编译代码。
如果能从代码或者是obj文件里面发现重复的代码,这样对代码优化就很有帮助。尽量避免重复。这样对维护也有好处。

基于遥控器,电视的操作界面
由 droplet 在 周日, 2010-07-25 16:04 提交 创业灵感如果把电视变成家庭娱乐中心,哪种操作方式会成为主流哪?
电脑用鼠标,键盘。
手机用触摸屏。
电视用的是遥控器。
在电视上用触摸屏,这个好像不太可取。因为一般都会教育小孩离电视远一点,而且触摸屏会把画面搞得很脏,用触摸屏也复杂了一点。
键盘,鼠标更是不适合远程操作,而且老人也不适应。
如果用遥控器来操作,那么用电脑或者手机的操作方式就不合适了。遥控器的操作界面应该比较简单,分类也很明确。polycom的视频会议系统就是用遥控器操作的,可以做为一个借鉴。

HTML5, video
由 droplet 在 周日, 2010-07-25 15:55 提交 创业灵感女儿最近送到宁夏避暑去了,但是又想看看她最近的变化,只能通过网络视频来看。没有别的手段,必须通过QQ视频。但是感觉QQ视频用起来不方便。它主要是为聊天设计的,并不是以视频通话为主,通话双方的窗口调整,摄像头的调整等等,都比较麻烦。如果能够提供基于WEB的视频通话,只要是注册用户,直接可以通过在web上点击就可以通话,这样用起来是不是更简单一点?
HTML5已经可以支持原生的video了,不需要插件支持,在这上面开发新的应用,会更方便。目前web2.0的互动还只是文字的互动,如果能够加入video/audio的互动,将会是一个新的应用。QQ这种即时通讯工具可以直接在web上实现,一个浏览器就可以搞定所有的东西。在未来三网合一的趋势下,把web直接在电视上用,应该是个很好的方向。

云计算的是与否?
由 droplet 在 周二, 2010-07-13 11:46 提交 业界评论什么是云计算,在网上可以搜索到很多定义。我们参考这个来看看云计算的特性
http://csrc.nist.gov/groups/SNS/cloud-computing/cloud-def-v15.doc
1)On-demand self-service:提供给用户扩展服务的接口
2)Broad network access:多种接入手段(这个有什么意义?)
3)Resource pooling:虚拟资源,包括计算,存储,网络,平台等等,支持多租户(不是多用户,这个要注意)
4)Rapid elasticity:弹性,可扩展
5)Measured Service:服务可计量(为了收钱:))
再加一条 6)Internet based(天生是为全球用户服务?)
在现实世界里,也有很多云计算的服务提供商,但是,云计算和我们目前所用的服务,有哪些区别哪?
以SaaS(software as a service)为例。现有的一些服务,比如
1)Webmail。有很多Webmail提供商,但是他们提供的是云计算服务吗? 这是多用户,而不是多租户。因为一个租户
需要的是独立的域名,而不是诸如hotmail.com或者是gmail.com的帐号。就算是有vip.sina.com也不行。一个租户需要
对自己管理的用户有控制权,否则SaaS就不成立。这么说来,SaaS只是为企业用户服务的吗?对于个人用户怎么办?是不是
所有的软件都能SaaS化哪?常见的例子,比如CRM(salesforce.com)一般都是企业用户用。但是Google docs哪?这个对
个人用户是免费的,对企业用户是收费的。Google docs对个人用户的功能和企业用户是一样的吗?如果一样,企业用户有必要
买这个服务吗?

DPI (Deep Packet Inspection) 抛砖引玉
由 droplet 在 周五, 2010-07-02 14:32 提交首先申明这是一篇抛砖引玉的文章,不是深入地介绍和分析DPI技术文章。里面会有一些DPI技术
的介绍,主要内容都是来自这篇文章https://www.dpacket.org/articles/digging-deeper-deep-packet-inspection-dpi
DPI技术我只是正在关注,没有实际动手操作过,所以没有太多发言权。
DPI(Deep Packet Inspection)总的来说就是一个协议识别技术,是要增加网络的visibility。一般用的的技术有以下几类:
1)Signature
这是最基本的技术。如何定义一个协议的signature?开始大家都是用port来定义(这是指udp或者tcp的port,ip层可以用
协议号来标识)。一些常见的port,比如21,80之类的,是由协议规定的。如果大家都守规矩,用port来标识还是比较准确的。
如果协议是跑在http之上,用80端口就无法标识。这就需要定义更复杂的signature,比如:
在payload这个层面,需要对包reassemble之后(这是tcp reassemble,当然之前需要做ip reassemble)才能match,问题是
需要reassemble多少包?match可以用正则表达式,也可以用DFA engine。match可以是协议无关的,但是reassemble却不能,
不同的协议,需要reassemble的包多少不同。如果不需要reassemble,直接把packet输入到状态机,那么这些包是发走,还是

Digging Deeper Into Deep Packet Inspection
由 droplet 在 周五, 2010-06-25 17:44 提交 技术看点https://www.dpacket.org/articles/digging-deeper-deep-packet-inspection-dpi
看看这篇文章,了解一下什么是DPI。
DPI的用途和IDP不一样,DPI的目的是识别,而IDP的目的是防护。在传统的根据端口来定义协议已经
不好使的情况下,就需要其他的方法来标识协议。DPI不是给终端用的,终端不存在协议识别的问题,如果
终端不认识协议,那协议也没有意义(当然不排除伪装的可能,就像变形病毒一样)。DPI是在gateway上使用的,
而是应该是stream based,标识单个包是没有意义的,在标识一个stream的协议之后,就可以放上面加一些
控制,比如带宽管理,比如访问控制等等。
DPI需要实时,因为网络流量是实时的,如果不能in-line工作,DPI就没有意义。DPI是运营商非常希望要的一个
功能。因为现在的协议都学会了伪装:httptunnel,动态端口,加密等等。如果是明文的话,还好说一点,大不了
就是解析内容,如果是加密的,就不好办了。那只有通过协议的流量特征:比如包大小,特殊字段之类的方法去识别,
这个做起来还是有难度的。

TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery
由 droplet 在 周三, 2010-06-23 19:11 提交 编程实践
什么情况下,可以认为网络丢包了?
1:重传定时器超时,需要重传包。
2:收到重复的ACK。ACK是由packet触发的,如果后面的包收到了,而前面的包没收到,就会发重复的ACK,这种情况下,有可能中间的包丢了(也有可能是没到),所以ACK时就需要有个选择,是每个包都ACK,还是延迟ACK。
如果是重传定时器超时,就需要slow start。TCP connect刚开始发送数据的时候,也是slow start,这里面有几个参数。
1:rwnd:receiving window,就是接收方通告给发送方的window,告诉发送方本方能收多少字节。
2:cwnd: congest window, 发送方为避免引起拥塞而引入的window,控制发送方的速率。
3: ssthresh: slow start threshold size,slow start到达这个threshold后进入congest avoidance状态。
发送方的窗口取rwnd和cwnd里面的小的那个。
slow start:每个ACK都会cwnd都会加ACK的segment的大小,所以slow start增加是很快的,所以引入congest avoid,避免cwnd过快增长。
如果重传定时器超时,cwnd减到1个MSS,ssthreshold减到原来cwnd的一半,开始slow start。
如果是收到三个重复的ACK:
1:fast retransmit,快速重传,不要等重传定时器超时。
2:减小cwnd,ssthreshold,但不是进入slow start状态,而是有所保留。这应该是根据实际情况优化的,提高tcp的throughput。
3:如果重传包被ACK,则进入congest avoid状态。

High performance ager
由 droplet 在 周三, 2010-06-23 10:57 提交 编程实践在一个session based的device里面,一个high performance ager是必须的,试想一下,现在的高性能防火墙,动辄session数目都是百万级或者千万级,如果每个session同时都在有packet通过,每个packet都需要refresh session,那么在这个ager上将有多少remove/insert操作?如此巨大的工作量,对CPU,内存都是巨大的考验。如果再加上多线程环境,这个ager的设计,会影响系统性能。
www.cse.wustl.edu/~cdgill/courses/cs6874/TimingWheels.ppt

Use UML sequence diagram analyzing Multi threading program
由 droplet 在 周四, 2010-06-10 14:29 提交 编程实践用UML的时序图分析多线程程序,个人感觉是非常实用,也很有帮助。时序图本意就是分析多个并发实体之间的消息传递,或者对象调用。对很多异步执行的消息传递,在多线程环境下,消息有哪个线程处理是不确定的。所以需要辅助工具来分析。MT环境下,最常见的问题:1,执行顺序的问题; 2,互斥。有时候从代码上去分析比较困难,画个图就简单多了。
贴一个自己画的一个草图,看看什么样子。


网络软件工程师的N种境界
由 droplet 在 周二, 2010-06-08 18:19 提交 IT人生之所以说网络软件开发,是因为本人以前,以及目前的工作是这个,做网络软件开发。如果说其他领域的软件开发,由于
对领域知识不是很熟悉,评价有可能不太客观。所以还是在自己的本行发发议论最好。
做网络软件开发,就我所做的这个领域,缩小一下范围:是网络安全方面,再缩小一下范围,是防火墙,VPN之类的东西。
本人在N个做安全的公司从业过,基本上一直做到就是网络协议栈,以及filter,routing等等。更高级的安全话题,比如
web firewall, ids/ips等等。没有做过。以前见过,都是拿snort改的,加上界面,估计设计到engine以及signature开发的
也少。以前在国产安全公司工作,基本上就是ipchains, iptables, netfilter等等。虽然有现成的东西,但是在上面做产品,需要
做的事情也很多。最起码需要一个好的用户界面WEBUI/CLI之类的需要考虑,做好了也不容易。再者就是功能的集成,把许多
东西集成到一起,能跑起来,不出错,不crash,这个还是需要一些技术的。在这个层次,需要了解的知识包括:
a) 内核。由于ipchains/iptables/netfilter都是在内核空间里实现的。所以要对内核提供的机制和api需要了解。这是一个基本
的要求。因为不能指望什么事情都是ready,所以很多时候需要亲自动手。Get hands dirty,从open source做东西,基本
都是这样。
b) RFC。需要对网络协议很熟,最起码的要求,ip/tcp/udp要熟。但是这个相对简单的要求,很多从业人员是达不到的,很多人可能
没有仔细看过RFC,对一些细节的定义模糊,导致做产品不能符合要求。

最新评论
22 分钟 10 秒 前
7 周 4 天 前
10 周 3 天 前
10 周 3 天 前
10 周 3 天 前
11 周 5 小时 前
11 周 12 小时 前
11 周 2 天 前
11 周 2 天 前
11 周 3 天 前