使用wireshark分析一下数据包

注:在阅读之前要确认自己会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

原因:

  1. 客户端和服务器间网络问题,客户端可以到服务器,服务器无法到客户端,建议排查主机之间的路由
  2. 客户端在搞鬼了,在进行syn攻击,建议封堵这些攻击IP

SSL握手失败

抓包位置:客户端/服务器

现象:

  1. windows xp系统下使用ie访问不了https网站

当服务器后端对应多个服务,为了区分https请求是请求哪个服务,设定了扩展字段SNI(Sever Name Indication),里面有请求的Host信息,服务器根据SNI来选择对应的服务。

查看数据包,发现SSL握手时,client hello包里面没有SNI(Sever Name Indication)字段,服务器无法识别,故SSL握手失败。

解决方法:

  1. 升级客户端操作系统
  2. 服务器仅对应一个服务

请求没回应

抓包位置:客户端+服务器、代理前后

原因:

  1. 多层代理下的MSS值协商问题
  2. 防火墙拦截

MSS协商问题

若通过不同厂家的设备来组建网络,特别是里面有代理转发的设备,需要确认下是否是都支持标准的tcp协议,并根据协商好的MSS值来转发数据。当数据包长度大于协商的MSS值,理应被丢弃。

之前有一个厂家的array设备做了代理,但未按照标准协议,转发了数据包长度异常的数据包(一个请求),后面的设备按照标准协议,丢弃了数据包。

现象:
从客户端看到的现象是请求发过去了,并被接受了,但在服务器上却没有看到请求。

解决方法:

  1. 换掉不遵循协议的设备
  2. 在后面的设备上取消对MSS的限制

防火墙拦截

阿里云会对攻击/大流量IP进行自动封锁,并拦截应用层的数据包,同时,会发送一个rst包。

针对https请求,某厂商防火墙会发送一个告警(encrypted alert)数据包,中断连接。

你可能感兴趣的:(网络http)