nCompass-TCP建连分析
nCompass-TCP建连分析
- 建连失败(三次握手)导致可用性问题,和用户感觉快慢几乎无关
- 建连失败(三次握手)导致间歇性故障(有时行有时不行)
1. TCP几个关键的概念
- TCP三次握手
- 顺序号与确认号
- 滑动窗口
- 丢包与重传
- 端口复用
- 窗口收缩
- TCP Reset
2. TCP三次握手
- SYN: 客户端发起的SNY数据包;SYN,ACK:服务端发起的SYNACK ; ACK:客户端发起ACK数据包。
- SNY:客户端发起的第一数据包,初始化顺序号seq是随机产生的,没有ACK确认号,为0
SNY,ACK:服务端发起的第一数据包,初始化顺序号Seq是随机产生的,和ACK确认号(客户端seq+1)
ACK:客户端回包,Seq(是服务端ACK确认号)和ACK(是服务器Seq+1) - 握手阶段:ACK等于收到的Seq+1
- 初始化接收窗口
客户端为这个链接准备了Win窗口64k内存(表示一次性可以发送64k数据),服务端数据接收端为这个链接准备了Win窗口16k内存
- 在数据包中看到的窗口是表示数据接收端窗口的内存,不是发送端的窗口
- 协商Option参数(如下图最大分片单元)
3. 建连不成功的场景(服务端问题)
3.1 建连不成功的场景---建连服务端重置(客户端发了个SYN,服务端直接RST)
- 服务端是活着的,开机状态
- 不是防火墙阻断,防火墙阻断是丢弃的回ICMP通告,不会Reset
- 如果8080端口在此前是能访问的,说明服务down,现在不能访问了
如果这个端口一直不能访问,有理由怀疑这是端口扫描
以下是nCompass内置:
3.2 建连不成功的场景---建连服务端无响应(客户端发了个SYN,TCP重传3次)
- 服务端不存在或者没开机
- 防火墙策略禁止了
- 网络不可达(可能是路由问题)
以下是nCompass内置:
3.3 建连不成功的场景---建连服务端失败(其他)
- 建连过程没有完成,服务端reset
- 原因不明
- 需要下载数据包分析
以下是nCompass内置:
4. 建连不成功的场景(客户端问题)
4.1 建连不成功的场景---建连客户端无响应
- 客户端发了SYN,没有后续任何动作
- 服务端重试几次SYACK
- 服务端无奈重置了连接
以下是nCompass内置:
4.2 建连不成功的场景---客户端重试次数不足
- 客户端发了1次,1s之后重传了SYN
- 服务端响应了SYNACK,3s后重传了SYNACK
- 客户端没有重传第2次,直接reset,放弃了建连
- 问题: 重传规则要求重传3~6次,以上场景1个SYNACK丢失就放弃了建连不合理。
以下是nCompass内置:
4.3 建连不成功的场景---端口复用
- 客户端发SYN,服务端没有回SYNACK,而是直接ACK
- 说明服务端之前是存在这个连接,所以直接进入数据交互状态
- 客户端无法理解服务端的行为,最终重置链接,放弃建连
以下是nCompass内置:
4.4 建连不成功的场景---客户端建连失败(其他)
- 客户端发SYN,最后客户端重置了连接
- 原因不明确
- 下载数据包验证
以下是nCompass内置:
5. 建连异常的场景
5.1 建连异常的场景---服务端队列不足
- 三次握手完成
- 客户端发数据
- 服务端回SYNACK
原因分析:
- SYN队列(半连接队列) 和ACCEPT队列(全连接队列)是操作系统维护的队列
- SYN队列对应SYN_RCVD状态
- ACCEPT队列对应STEBLISHED状态
- 应用程序如果没有及时调用accept从操作系统取走socket,会导致队列用满,操作系统无法接受更多的连接请求
以下是nCompass内置:
5.2 建连异常的场景---建连异常SYNACK
以下是nCompass内置:
5.3 建连异常的场景---建连异常SYN
以下是nCompass内置:
6. TCP建连失败演示
- 数据表格---右键分析模板---建连分析模板
- 点击失败数量---数据表格---添加维度---下载数据包分析
作者:CARLOS_CHIANG
出处:http://www.cnblogs.com/yaoyaojcy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
posted on 2020-03-18 22:41 CARLOS_KONG 阅读(856) 评论(0) 编辑 收藏 举报