1 重定向协议
1.1 报文->(重定向)->服务器
- 1 HTTP重定向:客户端访问A,A发回一条到B的HTTP重定向,客户端重新请求B
- 服务端发回302 Redirect 响应
- 2 DNS重定向:nslookup命令返回的多个IP地址,每次顺序都不同
- DNS轮转,每次nslookup返回的IP顺序不同
- 基于DNS的重定向算法:负载均衡算法;邻接路由算法;故障屏蔽算法。
- 3 任播寻址:几台服务器共享IP,每台服务器伪装成骨干路由器,其它路由器共享IP地址分组并发给最近的路由器(服务器)
- 4 IP MAC转发:交换机来做,服务器或代理的跳距必须是1
- 5 IP地址转发:第4层交换机评估分组目的端口并重定向分组的IP地址到代理/镜像服务器
- 对称路由:从客户端接受输入TCP连接的交换机管理连接,交换机必须通过该连接将响应回送给客户端
- 完全NAT:交换机将分组的源IP改成交换机的IP地址
- 半NAT:
- NECT:Network Elemnent Control Protocol 网元控制协议,允许网元与服务器元素进行交互。
1.2 报文->(重定向)->代理服务器
- 1 显式浏览器配置:配置浏览器,使其将报文发给附近的一个代理/缓存
- 2 代理自动配置PAC:Web浏览器从配置服务器解析PAC文件,其告诉浏览器每个URL使用什么代理
- 目前一些主要ISP都在使用PAC
- 3 Wep Proxy代理自动发现协议WPAD:Web浏览器向配置服务器查询一个PAC文件的URL,目的是自动发现附近的代理服务器。
- 4 Web缓存协调协议WCCP:路由器评估分组目的地址,用代理/镜像服务器IP地址将重定向分组封装起来
- 5 因特网缓存协议ICP:代理缓存会在一组兄弟代理缓存中查询请求内容
- 6 缓存分组路由协议CARP:代理缓存散列协议,允许缓存将请求发给父缓存。
- 7 超文本缓存协议HTCP:代理缓存可以向一组兄弟缓存查询请求的内容。
2 WPAD 代理自动发现协议
2.1 PAC文件
- WPAD不能直接确定代理服务器的名字,而是发现PAC文件其中的URL,称为CURL。
- 根据这个CURL,获取PAC文件;
- PAC文件执行javascrpt程序,返回合适的代理服务器地址。
2.2 WPAD算法
WPAD使用了一系列资源发现技术确定适当的PAC文件的CURL,按照以下技术依次尝试发现:
- DHCP 动态主机配置协议
- SLP 服务定位协议
- DNS 知名主机名
- DNS SRV 记录
- DNS TXT记录中提供的服务URL
强制要求WPAD客户端支持DHCP和DNS两种技术。
客户端会在DNS SRV、知名主机、DNS TXT记录等方法中循环多次。每次查询的名字QNAME越来越不具体,提高发现几率。
2.3 获取PAC文件
客户端向CURL发送GET请求,请求的Accept首部必须CFILE格式,比如:
Accept:application/x-ns-proxy-autoconfig
以下情况进行WPAD:
- 客户端启动时
- 收到来自网络栈的通知
3 缓存重定向 WCCP
Cisco公司开发,负责路由器和缓存服务器之间的通信,使路由器将WEB流量重定向到代理缓存中去。
3.1 工作过程
- 启动网络,含有WCCP服务组,即一组路由器+目标缓存;
- 如果服务器配置为重定向HTTP流量,服务组中的路由器就将HTTP请求发送给服务组中的缓存;
- HTTP请求抵达服务组中的路由时,路由器会选择服务组中的某个缓存提供服务;
- 路由器向该缓存发起请求,可用缓存的IP地址来封装分组,也可通过IP MAC转发来实现;
- 服务组成员间交互心跳报文,如果某缓存不能提供服务,则将分组返回给路由器进行普通的转发。
3.2 WCCP2报文
分类:
- WCCP2_HERE_I_AM:缓存->路由器,告诉路由器我在这儿~
- WCCP2_I_SEE_YOU:路由器->缓存,针对WCCP2_HERE_I_AM报文的响应
- WCCP2_REDIRECT_ASSIGN:指定的缓存->路由器,为负载均衡分配任务
- WCCP2_REMOVAL_QUERY:路由器->坏缓存(2.5xWCCP2_HERE_I_AM秒内没有发送过WCCP2_HERE_I_AM报文的缓存)
组成:
- 首部
- 一些组件
3.3 分组封装
WCCP路由器会用服务器IP将HTTP分组封装起来,将其重定向到特定的服务器上去。封装中有IP首部的proto字段,用来说明通用路由器封装GRE。
proto告诉接收代理,它有封装分组,里面有原始的客户端IP。
3.4 负载均衡
WCCP路由器和接收服务器交换心跳报文heartbeat message,如果某特定接受服务器停发,则路由器将请求流量直接发送到因特网上。
4 因特网缓存协议 ICP
允许缓存在其兄弟缓存中查找命中内容
可视作一个缓存集群协议,HTTP请求报文最终目的地可通过一系列ICP查询确定,因此是重定向
过程:
- ICP同时询问附近多个缓存,看其是否有特定的URL,
- 附近缓存有返回一个简短报文HIT,没有返回MISS;
- 当前缓存打开一条到拥有此对象的邻居缓存的HTTP连接
5 缓存阵列路由协议 CARP
为了降低代理服务器自身的超载,CARP管理一组代理服务器
与ICP不同的是,ICP不同代理服务器之间是镜像关系,完全复制;而CARP每个组件服务器只包含缓存文档的一部分,通过对某个Web对象URL散列,将该对象映射到特定代理服务器。
过程:
- 保存一个活跃的CARP代理服务器列表,并周期检查;
- 为每个代理服务器计算一个散列函数,返回值考虑了此代理负载量;
- 定义一个独立的URL散列函数,根据请求对象URL返回一个数字;
- 将URL散列函数结果存入代理服务器散列函数,得到一个数字阵列。这些数字中最大值表示为该URL提供服务的代理服务器。
特点:
- 避免了重复存储
- 任一代理故障,都要重写现存代理的部分缓存内容
6 超文本缓存协议 HTCP
ICP的更新版,运行兄弟缓存间相互查询,还允许兄弟缓存监视或请求对方缓存中变动的文档。