• TCP ------ 抓包分析(seq ack)


     

    总结:

    1、ACK包可以和其他包合在一起,比如ACK包可以携带数据

    2、可以接收多个数据包后,一次性给一个应答,不用每个数据包一一对应给应答

    3、在通信过程中,通过接收到的包的ack值可以判断是否是上一个本机发送包的应答包(ack值与上一个本机发送包的seq有关),seq值和ack值的确定规则如下:

      三次握手:

        第一次握手(发送):seq为x(x为任意值),无视ack(因为是第一个包,不需要给其他包应答)

        第二次握手(发送):seq为y(y为任意值),ack等于接收包seq+1(即x+1)

        第三次握手(发送):seq等于上一个本机发送包seq+1(即x+1),也就是1,ack等于接收包seq+1(即y+1)

      数据传输:

        某主机发送的seq和ack是根据上一个接收包的seqacklen得到,具体为:seq=ack,ack=seq+len

        提醒:如果某一主机连续发了4个包,后三个包的seq和ack和第一个包的一样

        提醒:seq会单调增大

        特别:如果握手完第一个数据包是客户端发送,第一个数据包的seq和ack和第三次握手的一样 

      四次挥手:

        如果是服务器发起的挥手,挥手前最后一个包是服务器发送:

        如果是客户端发起的挥手,挥手前最后一个包是客户端发送:

          第一次挥手(发送):seq为上一个本机发送包seq+len,ack为上一个本机发送包ack

          第二个挥手(发送):seq为本次接收包ack,ack为本次接收包seq+1

          第三次挥手(发送):和第二次挥手一样

          第四次挥手(发送):seq为本次接收包ack,ack为本次接收包seq+1

           

        如果是服务器发起的挥手,挥手前最后一个包是客户端发送:

        如果是客户端发起的挥手,挥手前最后一个包是服务器发送:

          第一次挥手(发送):seq为本次接收包ack,ack为本次接收包seq+len

          第二个挥手(发送):seq为本次接收包ack,ack为本次接收包seq+1

          第三次挥手(发送):和第二次挥手一样

          第四次挥手(发送):seq为本次接收包ack,ack为本次接收包seq+1

           

  • 相关阅读:
    PB调用.NET类库详解
    一个游标的性能问题
    WCF实例与并发的一些测试
    PB调用.NET代码的两个入口函数
    SQL数据库表防JS木马注入
    Atitit 收入理论大总结 4位一体 4象限理论 财政收入理论 6位一体
    Atitit 融资 之道 圈钱之道 attilax总结
    Atitit 组织架构的如何划分 划分方法attilax大总结
    Atitit 每个人都应该实施的互联网金融战略 attilax总结
    Atitit 研发组织与个人如何gdp计算法 attilax总结
  • 原文地址:https://www.cnblogs.com/god-of-death/p/7905817.html
Copyright © 2020-2023  润新知