Calendar
Placard
Category
Latest Entries
Latest Comments
Last Messages
User Login
Links
Information
Search
Other


Welcome to my blog!
  IPVS & NAT 小结 
 

看完这两个东西后,觉得有些意思,本质上差不多,但表现形式差别很大,所以放在一起小结一下。通俗一点,都是做包头地址转换,都是基于Netfilter来开发的。只是IPVS依靠负载平衡做转发策略,而NAT更多靠静态配置。

IPVS其实可以内嵌NAT,并完成NAT的一定功能。当然IPVS有多种形式的转换和平衡策略,比如NAT模式,IP隧道模式,直接路由模式。而NAT一样,分别提供Full cone,Restricted cone,Port restricted cone和Symmetric四种模式。

对IPVS的理解,从设计上看,关键在于它的8种负载平衡算法:

1. 轮循调度(Round-Robin),它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于RS处理性能相差不大的情况。
2. 加权轮循调度(Weighted Round-Robin),它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数。
3. 目的地址哈希调度(Destination Hashing),以目的地址为关键字查找一个静态hash表来获得需要的RS。
4. 源地址哈希调度(Source Hashing),以源地址为关键字查找一个静态hash表来获得需要的RS。
5. 最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把新的连接请求发送到当前连接数最小的RS。
6. 加权最小连接数调度(Weighted Least-Connection),假设各台RS的权值依次为Wi(I = 1..n),当前的TCP连接数依次为Ti(I=1..n),依次选取Ti/Wi为最小的RS作为下一个分配的RS。
7. 基于地址的最小连接数调度(Locality-Based Least-Connection),将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
8. 基于地址的带重复最小连接数调度(Locality-Based Least-Connection with Replication),对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除。

NAT的基本思想是,内网机器共享一个外网可见的IP,所有内网出去的消息都被伪装成这个IP去发,同时NAT会创建一个session,以记录内网主机到NAT,NAT到外网主机的IP/Port映射。实际上,这就相当于一个打洞操作,内网主机即是动作发起人。当回应消息返回到NAT时,NAT会根据不同的模式(上述4种),进行匹配,符合条件的消息才会被转发到相应的内网主机上去。

从NAT的四种模式来看,他们有依次包含、逐渐严格的关系,可以看成是:Full Cone->Restricted Cone->Port Restricted Cone->Symmetric。相对而言,Full Cone是一种全开放的模式,任何外网主机都可以和内网主机联系,当然前提是,内部主机之前已经有打洞操作。而对其他两种Cone模式,必须是有特定的IP和PORT的外网主机才能通过,而且相应的IP和PORT必须是事先按此打好洞的。对Symmetric模式,和Port Restricted Cone的区别是,即使是消息来自同一内网主机,但如果外网主机不同,NAT也会使用不同的session,并用不同的PORT来标识。

RFC 1631  - The IP Network Address Translator (NAT)

RFC  3489 - STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)

RFC  3235 - Network Address Translator (NAT)-Friendly Application Design Guidelines

http://zh.linuxvirtualserver.org/node/98

[ 阅读全文 | 回复(0) | 引用通告 | 编辑

  Post  by  Moreframe 发表于 2006-10-22 17:17:00
  • 标签:Linux 
  • 发表评论:
    Powered by Oblog.