Skip navigation.
主页

技术看点

droplet 的图片

Digging Deeper Into Deep Packet Inspection

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,动态端口,加密等等。如果是明文的话,还好说一点,大不了

就是解析内容,如果是加密的,就不好办了。那只有通过协议的流量特征:比如包大小,特殊字段之类的方法去识别,

这个做起来还是有难度的。

droplet 的图片

Distributed Systems: Concepts and Design

一些ppt,作者没找到,不知道是哪个大牛。

有几个问题需要考虑一下:

1)Distributed system是多个node协同工作,还是多个node用起来就像是一个node。如果是多个node协同工作,node之间如何相互发现,如何调用?如果看做是一个node,是不是相当于资源扩展了,那资源又如何命名?

2)虽然计算和存储是分布的,但是如何调度计算,如何分配和定位资源却需要集中处理。比如DNS系统,root DNS是必须的,否则没有最终的仲裁者,有些地址可能找不到,本地的DNS可以就近响应,无法响应的,需要向上反映,这是一个layered结构,应该也是无法避免的。

在分布式平台里面,corba是一个非常重要的标准,下面是几个开源的实现;

ACE and TAO:
http://www.cs.wustl.edu/~schmidt/TAO.html

ICE:
http://www.zeroc.com/index.html, 简化版本的CORBA,corba的协议太复杂了,需要一个精简的。

OSGi:
http://www.osgi.org/Main/HomePage,这个是做插件的一个标准,和分布式关系不大。

有很多与分布式相关的协议或者标准,比如RMI,RPC,以及SOA,不过这些远程调用的机制,能不能用在realtime system还需要考察一下。定制的调用机制,效率高;但是如果有通用的机制,编程方便,还能重用。

http://en.wikipedia.org/wiki/Distributed_computing
http://en.wikipedia.org/wiki/Grid_computing

droplet 的图片

What is signature?

Signature是application security里面一个非常重要的概念,IDP, AV, Application identification, ips等等,都需要用signature来过滤相应的威胁。

但是,什么是signature。

常见的,比如destination port是80,可以认为是HTTP协议。最简单的,当然是通过protocol, port来定义相应的协议。当这些不够用时,需要从内容里面来发现某个协议的特征,也就是signature。signature就是特征,同一个协议可能有多个signature。就像人也可以通过多种途径去识别,比如通过姓名,身份证号码,户口本,指纹,虹膜,脸型等等。

signature需要具有唯一性,不能一个signature可以标识多个人;signature也应该是稳定的,如果不稳定,就没法正确识别一个人。在这一点上,网络协议的signature就稍差一点,协议改动很容易,但是发现和定义signature却不太容易。有些协议,大家遵守相同的规定,signature相对稳定,有些私有协议,本身就是为了规避检查的,signature就非常不稳定。所以二代身份证要比一代身份证安全很多,因为它可以通过中央服务器来认证。signature应该是可以验证的,如果不能正确标识一个协议,signature也没有意义。

有很多版本的协议,也有很多版本的signature,所以signature也应该是进化的,没有一个signature是万能的。

如果给所有接入网络的主机都发放证书,做为signature,是不是就可以杜绝攻击哪?理论上应该是这样,这也就是为什么有可信计算平台的原因,还有网络实名制也是这个理由。当然,在虚拟世界里,人总有一些不想让人发现和知道的东西,这个和真实世界是一样的。所以security所做的工作就是在不可信的网络环境里面,建立相对可信的边界。这个难度可不小。

kernelchina 的图片

TCP window的一点理解

TCP有两个window:
sliding window: 这是对方接收buffer的大小,对方在buffer大小变化的时候更新这个window。
congest window: 本方的发送窗口,控制本方的发送速率。虽然可以发送最多sliding window大小的data,但是在网络拥塞的情况下,发送越多越会加剧拥塞的程度。所以用congest window再加一层控制。congest window在RTT和ACK retransmission时变化。
如何调整sliding window和congest window,在TCP协议里面有很多技巧。因为这两个window是决定TCP的传输性能。
这里有一个很好的文档,可以看看。

droplet 的图片

Network layers

网络是分层次的,不管是协议的定义,还是设备的部署,都会分成多个层次。比如在enterprise network里面,交换机就会分为:

access ---> aggregate ---> core

而Internet也有一下几个层次

access---> Edge ---> core

access是用户接入层。占用的端口数量最多,但速度相对是最慢的。Aggregate负责access直接的转发。在同一个交换机,或者比较小的网络里面,转发可以直接在access交换机上。但是对大型网络里面,就需要很多aggregate交换机来把流量汇聚上来。Core层负责最终的转发。Layer的设计,目的是为了隔离不同层次的需求,简化设计。

如何简化层次?access是比不可少的,如果能把aggregate和core合并,问题就会简单很多。这需要交换机有足够的容量和端口数目。这是未来努力的方向。

droplet 的图片

MPLS overview [转载]

MPLS入门可以看看。

MPLS-overview.pdf

droplet 的图片

Reliable and performance

Performance和reliable有时候是两个相互矛盾的特性。比如UDP和TCP,在相同的介质上,UDP的传输性能肯定比TCP要高,这里只考虑相同包大小。至于差距有多大,现在还看到有数据描述这个。TCP提供了可靠的包传输,对于上层应用来说,就非常方便。Reliable和performance这两个目标是无法兼顾的,如何取舍就要看应用环境了。

在packet switch的网络里面,可靠并不单指收发,也需要考虑处理的速度。因为packet buffer的大小是有限的,如果没有flow control,两端的处理速度不匹配时,就会出现丢包。TCP的flow control是端到端的,所以中间的网络处理就必须足够的快,因为中间的网络没有flow control的措施。

当resource是动态的时候(包括CPU, memory,IO等),丢包就是随机的事件。在这种情况下,unreliable的传输协议就无法胜任了,需要考虑使用reliable的传输协议。

Reliable在HA的应用里面非常重要,具体如何取舍,就看HA能够保证的可靠性到底有多高了。

droplet 的图片

VPN技术比较

VPN(virtual private network)是指在共享介质上创建私有网络。这个和VLAN有点类似,VLAN是在物理网络里面创建虚拟的网络;而VPN也是这个用途。

VPN可以分为两大类:

1)security vpn。这一般指具有加密、认证功能的VPN。数据在虚拟通道里传输时是加密和认证的。这类VPN包括,IPSEC, L2TP, SSL等。安全通道两端是用户的私有网络,用户数据在通道里传输时受保护。

2)trust vpn。这一般指虚拟通道,比如Layer 3 MPLS,或者是Layer 2 MPLS,或者是VPLS。这个通道只是隔离了不同用户的数据,而没有提供保护的功能。

VPN的目的是在公共网络上传输私有数据,比如在internet上。为保证服务质量,基于MPLS的VPN在大型公司骨干网上比较流行。而IPSEC一般会用在分支机构直接。VPN需要对客户隐藏公共网络细节,用户不会感知本地和远程的区别。

http://www.vpnc.org/

droplet 的图片

The concept of random number

有关random number的概念,可以看一下这个网站:

www.random.org

比如一个函数 output = f (input),假设input是时间,output是输出的随机数。如果这个数字是不可预测的,那就是一个随机数,也就是说output是不依赖于input和f的。有两种随机数:真随机数和伪随机数。真随机数都是来自自然界的一些物理现象,比如无线噪声等;伪随机数是由机器生成的,同样的input,会输出相同的output。

随机数并不是不可重复的,这可能会有一些问题。所以在伪随机数生成器里面,会要求不同的input不会产生相同的值,只要input不是重复的,output就不会重复。对有些应用来说,这一点很重要。

随机数在加密解密里面用的很多,在彩票里面也有应用。上面的网站里面就有用真随机数选彩票的程序。可以试试。

droplet 的图片

TCP state machine for host and gateway

对Host来说,TCP state machine是这样的:

connection-fsm

但是对Gateway来说,它不会主动发包,所以Gateway的state machine会不一样。简单的画一个Gateway的state machine如下:

Slide1

Slide2

Gateway不能假设Host将会发出什么packet,所以需要处理的情况会

更多一点。在half-open/half-close情况下,需要考虑超时的问题,不同state对应

的超时时间应该不同。这在以前的文章中已经提到过。

Syndicate content