注:在阅读之前要确认自己会tcpdump和wireshark的基本操作哈~
syn包不回
抓包位置:客户端
现象:客户端发了一个syn包,然后一直在重传,时间间隔按1s、2s、4s...倍数增长,最后断开连接。
过滤命令: tcp.flags.syn==1 and tcp.analysis.retransmission
原因:这种情况一般是服务器没有开放对应的服务,或者你的客户端IP被防火墙加黑了
syn+ack不回
抓包位置:服务器
现象:客户端发来syn包,服务器回应syn+ack,但是客户端一直不回ack。
过滤命令: tcp.flags.syn==1 and tcp.analysis.retransmission
原因:
- 客户端和服务器间网络问题,客户端可以到服务器,服务器无法到客户端,建议排查主机之间的路由
- 客户端在搞鬼了,在进行syn攻击,建议封堵这些攻击IP
SSL握手失败
抓包位置:客户端/服务器
现象:
- windows xp系统下使用ie访问不了https网站
当服务器后端对应多个服务,为了区分https请求是请求哪个服务,设定了扩展字段SNI(Sever Name Indication),里面有请求的Host信息,服务器根据SNI来选择对应的服务。
查看数据包,发现SSL握手时,client hello包里面没有SNI(Sever Name Indication)字段,服务器无法识别,故SSL握手失败。
解决方法:
- 升级客户端操作系统
- 服务器仅对应一个服务
请求没回应
抓包位置:客户端+服务器、代理前后
原因:
- 多层代理下的MSS值协商问题
- 防火墙拦截
MSS协商问题
若通过不同厂家的设备来组建网络,特别是里面有代理转发的设备,需要确认下是否是都支持标准的tcp协议,并根据协商好的MSS值来转发数据。当数据包长度大于协商的MSS值,理应被丢弃。
之前有一个厂家的array设备做了代理,但未按照标准协议,转发了数据包长度异常的数据包(一个请求),后面的设备按照标准协议,丢弃了数据包。
现象:
从客户端看到的现象是请求发过去了,并被接受了,但在服务器上却没有看到请求。
解决方法:
- 换掉不遵循协议的设备
- 在后面的设备上取消对MSS的限制
防火墙拦截
阿里云会对攻击/大流量IP进行自动封锁,并拦截应用层的数据包,同时,会发送一个rst包。
针对https请求,某厂商防火墙会发送一个告警(encrypted alert)数据包,中断连接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。