部分域名无法正常弹出portal问题解析
2016-11-24 00:40
183 查看
1. 问题现象
前几天线上设备出现奇怪的现象,部分终端使用UC浏览器访问部分网站无法弹出portal或弹出portal比较慢,但是其他大部分终端访问却可以正常弹出portal,真是莫名其妙,到底是怎么回事?2. 现象分析
刚开始本地尝试复现,但是一直没有出来,线上又不好分析,一度陷入了死局。后来想起之前有遇到过浏览器云端加速导致访问异常的情况,所以就怀疑是浏览器云端加速导致的,所以立即进行测试
a. 使用UC浏览器,开启云端加速,果然portal无法弹出或弹出很慢,关闭后正常。通过抓包发现开启时,打开网站时,浏览器会主动向某些地址发送请求,端口是8081(我们是监控80端口进行弹portal的,8081请求,如果访问的域名或IP不在白名单中直接丢弃)。
b. 开启云端加速,将浏览器主动请求的地址加入白名单中,弹出portal正常。
这应该就确定跟云端加速时,主动访问其他域名非80端口时,报文被丢弃了,所以就让测试去搜集不同浏览器云端加速的域名了。
难道真的是这个原因吗?,如果你也这么想,那我们都是too young了!
另外一个同事,一直觉得不是这么简单,所以他后来又进行了深度的测试,详细分析了portal弹出失败时的报文,果然发现真的不是那么简单!
通过分析报文发现有两种情况: 1)将云端加速访问的域名加入白名单后,访问时直接可以上网,不会弹portal 2)关闭云端加速时,访问某个网站时,死活不弹portal
3. 解决方案
看到这里,你应该也会纳闷,怎么回事?第一种情况:
之前我们测试只是加了一个IP,可能这个IP就只是用来探测连接的,真正数据通信使用的是另外的IP,所以加入后可以正常弹portal(这个需要具体分析下,Mark)。当把域名加进去后,域名对应的所有IP都正常访问,当你访问某个域名时,浏览器先向云服务器请求,云服务器再向这个域名请求,然后将返回的数据,返回给浏览器。因为云服务器都放行了,这时云服务器就像代理一样,你虽然没有认证过,但是数据都是走云服务器代理出去的,所以你就可以直接上网了。
针对这种情况该怎么做呢,这个暂时还没有方案,待详细分析下浏览器云端加速原理再说吧!
第二种情况:
通过仔细分析报文,终于发现原来是请求报文分片了,并且第一片数据是在ACK报文中的!代码中没有针对ACK携带数据进行处理,因为一般都是PUSH中才会携带数据。真是涨了见识,不过也暴露了自己对网络协议这块的生疏。
这种情况就比较好解决了,只需要添加针对ACK报文的处理了,但是总不能所有的ACK都处理吧!如果ACK没有携带数据,根本就没必要处理。 那怎么判断ACK中有没有数据呢?
其实很简单,暴力点,就判断ip头总长度是不是大于40,如果是,就判断ACK携带有数据,如果不是,那肯定没有携带数据。修改后,测试,完美解决,搞定!
if (1==tcph->psh || (1==tcph->ack && iph->tot_len > 40)) //判断IP头大于40,就断定ACK中携带有数据 { int ret = -1; struct httphdr* http=NULL; DCINFO("Reply ack.\n"); dc_reply_ack(skb,iph,tcph); http = kmalloc(sizeof(struct httphdr),GFP_ATOMIC); if(!http) { DCERR("Malloc failed."); return NF_ACCEPT; } ... }
至于第一种情况,后面详细分析下,再好好谈论下方案!
这种情况下不解决,会严重影响使用云端加速浏览器的用户体验!
相关文章推荐
- 如何解决Linux无法解析域名问题
- 无法发送(退信)邮件到部分域名的问题
- 移动端某些网络下域名无法解析的DNS问题
- 关于解决jsp页面无法正常解析EL表达式的问题
- 嵌入式linux系统下无法解析域名问题
- 如何解决Linux无法解析域名问题
- 阿里云 Linux 服务器内部无法解析域名问题解决方法
- springmvc 4.3,RequestParamMethodArgumentResolver无法正常解析String参数问题解决
- 解决树莓派连载路由器上后无法解析域名导致无法上网的问题
- 使用腾讯企业邮箱,部分邮箱无法正常接收邮件问题
- ie6因为编码问题无法正常解析css文件和js文件
- 关于real210开发板linux系统可能无法解析域名的问题解决方法
- vCenter Server 5 的安装问题:无法使用nslookup解析此完全限定域名
- IIS无法正常运行解析.net4.0的错误问题
- 解决vista系统部分CHM打不开,“无法正常显示”的问题
- 关于PHP mail函数无法正常解析HTML邮件问题
- 关于内网或者本机域名解析导致服务无法正常运行
- 解决域名无法解析的网址问题
- 阿里云域名解析完成后仍然无法通过域名正常访问网站
- ubuntu无法正常解析php5 的问题