zoukankan      html  css  js  c++  java
  • 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建连失败演示 

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

  • 相关阅读:
    SqLite 框架 GreenDAO
    HttpClient的使用
    android事件分发介绍
    Android常见开发思路
    AndroidStudio学习记录
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常总结
    开源Pull_To_Refresh控件使用
    自定义控件ViewPagae<
    白龙软件商店面试问题整理
    基于anyrtc的sdk实现直播连麦互动
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/12520843.html
Copyright © 2011-2022 走看看