nCompass-TCP建连分析

单击返回:自学N-Compass之路 

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建连失败演示 

  • 数据表格---右键分析模板---建连分析模板
  • 点击失败数量---数据表格---添加维度---下载数据包分析

原文地址:https://www.cnblogs.com/yaoyaojcy/p/12520843.html