一、应用场景
如图所示,在商业WIFI场景中,经常需要手机用户下载指定的APP才能进行WIFI的应用认证, 在网关设备,对手机下载app安装文件进行缓存。使客户下载APP速度大大提高,提升了用户体验。原始应用文件存储于文件服务器中,在有手机用户下载安装后,接下来的其它用户直接从设备上获取文件。
手机用户访问下载页面, 再跳转到文件服务器下载,通过此特性,可以对指定的应用进行缓存。
功能:应用缓存是一种针对手机应用下载的缓存功能,可以缓存所有苹果的应用文件,也可以只缓存指定厂家的应用文件。当用户去资源服务器下载资源时,网关设备会将该资源缓存到设备上,当用户再请求获取该资源时,数据将从本地的网关设备上获取,并返回给用户。
资源类型:ipa、apk文件
资源服务器:苹果的应用商店或其他的ipa\apk资源服务器。
二、功能原理
缩略语/术语 |
说明 |
基于域名的TCP代理 |
通过TCP代理功能,把报文送到用户空间,进行处理后再转发报文。通过配置应用文件存储服务器域名或ip,针对性地对访问此服务器的流进行代理。 |
资源服务器 |
苹果的应用商店或其他的ipa\apk资源服务器. |
资源类型 |
ipa、apk文件 |
缓存指定应用 |
手机用户下载应用时,通常是先访问应用提供商的一个跳转(比如portal页)页面,然后点击对应的手机系统跳转到文件服务器或者应用商店进行下载。根据此操作规律,设定了10分钟的窗口时间,如果用户访问了指定应用的url,就把其手机的ip记录,在10分钟内此ip发起的ipa文件进行缓存功能处理,超过10分钟或者没有访问指定应用的url,则不处理。 |
URL |
互联网上标准资源的地址 |
STA |
Station,无线终端工作站,例如PDA,无线笔记本 |
基于域名的TCP代理:通过TCP代理功能,把报文送到用户空间,进行处理后再转发报文。通过配置应用文件存储服务器域名或ip,针对性地对访问此服务器的流进行代理。
应用缓存:手机用户通过HTTP协议下载应用安装文件,在第一次下载时,应用缓存模块识别出URL中含有ipa\apk的下载链接,则对应答的报文进行缓存,在第二次有用户下载同样的应用文件时,缓存命中,就在网关设备上构造应答报文并传给手机。
缓存指定应用:手机用户下载应用时,通常是先访问应用提供商的一个跳转(比如portal页)页面,然后点击对应的手机系统跳转到文件服务器或者应用商店进行下载。根据此操作规律,设定了10分钟的窗口时间,如果用户访问了指定应用的url,就把其手机的ip记录,在10分钟内此ip发起的ipa\apk文件进行缓存功能处理,超过10分钟或者没有访问指定应用的url,则不处理。
整体的交互流程图如上图(以QQ软件为例):
1)手机用户A首次向资源服务器域名发起TCP报文,请求中包含QQ软件的下载链接;
2)EG应用缓存模块通过设置的规则识别出手机用户A的URL中含有QQ(ipa/apk程序)下载链接,判断为QQ文件,再查找本地缓存,缓存模块中里面没有这个文件,则判断没有命中,因此需要由手机用户A自身从资源服务器获取QQ软件;
3)手机用户A,向资源服务器获取QQ软件;从资源服务器取回的文件需要经过EG,EG会主动缓存到本地存储介质。
4)手机用户B再次向资源服务器域名发起TCP报文,请求中包含QQ的下载链接;
5)EG应用缓存模块通过设置的规则识别出手机用户B的URL中含有QQ(ipa/apk程序)下载链接;EG判断命中缓存模块里面的QQ文件
6)EG应用缓存模块构造应答报文并传给手机用户B;
7)手机用户B从EG网关中快速获取到QQ软件,实现应用加速。
三、相关技术原理介绍
获取该URL的方式有两种:
1. EG设备特权模式上面输入:show was http session status ;
2. 使用wireshark软件,过滤关键字:http and ip.addr== 172.18.158.29 //172.18.158.29就是终端用户的IP。
说明:如果客户需要将这个URL设置为缓存指定应用,只需将填写前缀即可,如下所示:http://iosapps.itunes.apple.com/apple-assets-us-std-000001/Purple71/v4/c8/45/bd/c845bd73-fd29-1557-8dc1-082fd088783b/mzps.8603071550842798354.ipa
EG获取到这个URL后,会做出与终端用户一样行为,开始找DNS服务器去解析该URL地址。
工作流程如下:
1. 终端用户第一次去下载的时候,解析出来对端URL--->地址1;
2. 设备同样会有一个动作去解析这个URL--->地址1;
3. EG的DNS解析地址出来的地址必须有一个跟终端用户是一样的。
满足以上条件,设备才会开始进行缓存。
在通常情况下一个URL有可能对应多个地址 URL---->地址 1 2 3 4 ......
设备针对这类URL的处理机制是:30s时间内不停的去针对这个URL解析,此时会将所有解析出来的地址存到EG本地的DNS缓存中,以此保证与PC解析出来的地址一致。在设备上面可以通过show dy ru 查看解析地址,再与终端用户解析出来的地址比对,如果解析地址不一致,可以判断设备因为解析问题无法进行缓存。
具体如下:
EG#show dy ru 这个是设备的dy rule规则,可以用来查看设备解析出来的地址
Rule Type App O Source Addr Source port Dest Addr Dest port Module Aging
1 auto http N 0.0.0.0 0 122.228.84.27 80 1 7158
2 auto http N 0.0.0.0 0 219.238.2.188 80 1 7158
手机解析出来的地址如下图:
1. 设备对TCP报文进行拦截,获取到的报文的目的地址会与本地的规则进行比对,匹配的顺序如下:
先匹配dy rule里的规则,然后再匹配in-path rule里面的规则(确保送往缓存地址的报文都可以匹配到)
EG#show dy rule
Rule Type App O Source Addr Source port Dest Addr Dest port Module Aging
1 auto s-httpN 0.0.0.0 0 106.75.28.106 80 2 7200
2 auto http N 0.0.0.0 0 60.9.1.177 80 1 7200
3 auto http N 0.0.0.0 0 121.30.196.118 80 1 7170
4 auto http N 0.0.0.0 0 221.194.130.171 80 1 5899
was http inpath domain iosapps.itunes.apple.com
EG#show in-path rule
Rule Type O VLAN App Source Addr/Mask Source port Dest Addr/Mask Dest port description
1 pass N all none all port:all all name:Secure Secure(bypass)
2 pass N all none all port:all all name:Interactive Interactive(bypass)
def pass N all none all port:all all port:all any
2.匹配到了以后,送TCP协议栈,进行TCP代理,然后进行与本地看是否命中缓存,如果没有命中缓存,则向资源服务器获取资源,如果命中缓存则由EG本地提供QQ文件。
在没有命中缓存的情况下,终端用户A会向苹果商店获取软件,下载完成后,EG也会将文件存储在本地的存储介质中,存储的文件的查看方式可统一在EG特权模式下查看,具体查看方式为
show was http app da 100
EG#sho was http app da 100
total num: 16
+----------------------------------+----------------------+------------+------------+--------------------------------+--------------------------------+
| key | path | size | hitcount | date |
+----------------------------------+----------------------+------------+------------+--------------------------------+--------------------------------+
|b12697dc17e1fcfb60c86344a8e44eb1 | app_cache/20171207000822 | 87267622 | 0 | 2017-12-08 12:11:32 |
url: iosapps.itunes.apple.com/apple-assets-us-std-000001/Purple118/v4/6d/71/09/6d710967-e8e8-8a4d-c61a-634a7fe34e92/mzps.lc.68085014
|16c7307f1c0b36b1d49b2efc108b8e88 | app_cache/20171207000822 | 51745582 | 0 | 2017-12-07 12:13:17 |
存储的文件所处的路径,由于不同的EG型号,使用的存储介质不同,因此有以下三种存储介质如下:
1. EG2000K使用U盘作为存储介质
2. EG2000F 使用EMMC卡作为存储介质
3. EG2000其他系列使用的是硬盘做为存储介质
每一种介质,存储的路径不同,查看方式如下:
进入run-system-shell模式
1. EG2000F的应用缓存文件在EMMC卡目录如下:
EG#run-system-shell //进入shell模式
~ # cd /var/was_base/cache //进入EMMC缓存存储文件夹
/storage/was_data/cache # ls
app_cache (应用缓存文件夹) file res_acc(资源加速文件夹)
db_version http_prefetch_msg_file web
/storage/was_data/cache # cd app_cache //进入应用缓存文件夹
/storage/was_data/cache/app_cache # ls -R –lt //列举详细的文件内容
2. EG2000K的应用缓存文件在U盘目录如下:
EG#run-system-shell //进入shell模式
~ # cd /mnt/usb0/cache //进入USB缓存存储文件夹
/mnt/usb0/cache # ls
app_cache (应用缓存文件夹) file res_acc(资源加速文件夹)
db_version http_prefetch_msg_file web
/mnt/usb0/cache # cd app_cache //进入应用缓存文件夹
/mnt/usb0/cache /app_cache # ls -R –lt //列举详细的文件内容
3. EG2000其他系列的应用缓存文件在硬盘目录如下:
EG#run-system-shell //进入shell模式
~ # cd /mnt/sata0/cache //进入USB缓存存储文件夹
/mnt/sata0/cache # ls
app_cache (应用缓存文件夹) file res_acc(资源加速文件夹)
db_version http_prefetch_msg_file web
/mnt/sata0/cache # cd app_cache //进入应用缓存文件夹
/mnt/sata0/cache /app_cache # ls -R –lt //列举详细的文件内容
如需删除个别文件,需进入底层删除,建议联系后台人员操作。
如需删除存储中的所有缓存文件,只需进入EG特权模式
EG#clear was http app da //清除所有缓存文件
EG# was http pre web start //缓存模块重启
1. 设备对dy rule规则以及in-path rule里面的规则设置好的TCP报文进行拦截匹配。
2.匹配到了以后,EG会做与对终端用户A相同的动作,送TCP协议栈,进行TCP代理,然后进行与本地看是否命中缓存,判断命中缓存则由EG本地向终端用户B提供QQ文件,提供加速。
如何查看是否命中,可以通过以下命令来查看:
Show was http app data 100 来查看,如下图,第一次下载应用未匹配的情况hitcount为0.第二次下载同一个应用的hitcount为1,达标匹配中1次。
当匹配中后,EG设备将对终端用户B发出应答报文,为终端用户B提供软件,实现加速。