提示
X
本案例来自tskb,请前往tskb修改源内容:立即前往
'>

【AD】TCP 零窗口导致客户端上传附件时,浏览器卡死

|

问题描述

某客户发布了四层虚拟服务,访问业务都正常,但客户端在IE浏览器office插件里打开在线文档时,浏览器会出现卡死现象。  客户端直接访问服务器一切正常!

有效排查步骤

客户端出现异常时,同时在客户端电脑、AD上抓取了前后端的数据包,具体分析如下:
1、通过数据包,大致可以看到服务器的接收窗口win=0,客户端和服务器之间一直在发送零窗口探测,连接无数据传输导致浏览器卡住。


2、服务器接收窗口为什么会出现win=0? 从TCP三次握手可以看出客户端发送的syn包没有窗口缩放因子选项(窗口缩放因子决定能够接收的数据多少)即ws选项,导致服务器也同样的不回应ws选项。从负载上抓到的前端数据包可以看到客户端发送的syn包win=14600,没有ws选项,服务器回应的syn+ack包win=8192,同样没有ws选项。


3、同时前端数据包中看到PC终端给服务器POST上传了一个1.4M的文件,而服务器的接收窗口win=8192,所以出现上面的零窗口卡住现象。从User-Agent字段可以看出,该POST请求为WebOffice插件发起的。


4、继续查看在异常终端上抓到的数据包,可以看到终端实际发出的包win=8192,并且有携带窗口缩放因子ws=4


5、对比异常终端上和负载上抓的前端数据包,可以发现,PC终端发出的syn包和AD实际接收的syn包根本不是一个包,说明终端和负载之间有代理代理了这条连接。


6、对比终端直接访问服务器不过负载的包,同样可以看到服务器和客户端都有ws选项,服务器ws=256,所以也不会卡住。


根因

通过上面的对比抓包分析,可以确认终端访问负载卡住,是因为终端发出的连接被代理,代理发出的syn包没有ws选项,导致服务器同样不应答ws选项,服务器接收窗口较小,此时终端的WebOffice插件POST上传大文件给服务器,服务器接收窗口不足导致零窗口卡住。

解决方案

1、检查PC和AD之间的网络环境,是否存在代理设备。
2、检测PC终端本地是否安装了代理软件。

排查内容

最终确认,是因为PC和AD之间存在WAF设备,放开策略拦截后访问正常,为了进一步理解,再次抓了正常交互的数据包。可以看到终端发出的syn包序列号seq和负载实际收到syn包seq是一致的,并且都有ws选项。此时服务器ws=256,总接收窗口=8192*256,所以不会出现零窗口卡住现象。



我要分享
文档编号: 200389
作者: admin
更新时间: 2023-04-04 09:17
适用版本: