序言:众所周知,现代互联网上大多数的的门户网站使用较多的Web服务器架构是基于CDN(内容分发网络)开发的。那什么是CDN呢?我们通过下面这张图来简单了解一下:
CND架构下,各个地区的IDC机房里最重要的设施就是代理服务器和智能DNS解析,而最常用的代理服务器就是Squid,其最重要的功能就是缓存功能。在Windows上使用较多的代理服务器如:WinGate、SyGate、WinRoute、Proxy(现已发展成为ISA防火墙);Linux上的使用较多的代理服务器就是Squid.
【Squid & NAT】
网络中大部分应用都是支持NAT的,NAT转换是工作在网络层的,可以基于网络层的来源地址和目的地址进行转换;也可以基于传输层的协议(tcp/udp)和端口(来源端口、目的端口)进行NAT。Squid代理服务器,因其功能也称作代理服务器防火墙。quid只支持少量的应用,支持web上的http、ftp代理,邮件上的smtp、pop3、imap的代理。但其安全性确实非常高的,不仅可以基于网络成的来源地址和目的地址进行代理,还可以基于传输层的协议(tcp/udp)和端口(来源端口、目的端口)进行代理服务,最重要就是Squid可以基于应用层的账号、内容、域名等进行代理,这是NAT所做不到的,这也是Squid的最大优势所在。
我们来通过几张图来简单看一下NAT和Squid的工作机制:
【NAT的工作机制】
当内网用户访问Internet时,在网络出口路由器上进行SNAT,在进行SNAT时,因为内网的私有IP在Internet上是不能传输的,所以在发往Internet时,数据包的源地址已经被SNAT成了路由器的外口公网IP发往了ISP;当进行内部服务器发布时,要进行DNAT,为了内部服务器的安全,隐藏IP,要进行DNAT,在DNAT过程中,内网服务器相对于外部网络就是Destination了,所以当外部访问内部服务器时,内网IP是私有地址,在经过内网出口路由器时,要进行DNAT,将来源数据包的目的地址(出口路由器的外口公网地址)转成内网服务器私有地址,然后进行服务。
【Squid的工作机制】
当内部的用户访问Internet时,将数据包发往代理服务器Squid,代理服务查询自身的缓存信息,如果缓存命中(Hit),就将数据直接送往用户,如果缓存未命中(Missing),就向兄弟代理服务器发送请求,如果兄弟代理服务器有请求页面,就将数据返回,如果兄弟也没有,那么代理服务器就以自己的地址作为源地址,父级服务器地址作为目的地址,将数据包发往父亲服务器,进行请求。可能我们会奇怪的发现Squid和NAT不是一样的吗?其实不然,Squid在进行代理时,是不会对原始的数据包进行任何的修改的,整个过程中,数据包的源地址和目的地址都没有发生改变。如果缓存命中,直接返回,未命中,以自己地址去查询了,这样就显得非常的高效。