seq 当前端成功发送的数据位数
ack 希望对方下一次发送的序号 不是当前端已经接收到的数据量
以三次握手为例 https://blog.csdn.net/zhangdell/article/details/115380788
第一次: SYN = 1,seq = x
第二次:SYN = 1,ACK = 1,seq = y,ack = x + 1
第三次:ACK = 1,seq = x + 1,ack = y + 1
这里边容易给大家一个误导,觉得下一次的ack = 上一次的seq + 1,下一次的seq = 上一次的ack,有个+1的关系在这里边。其实这是错误的,正确的是+Len
现在以Wireshark抓包为例 (192.168.0.102 是client 192.168.0.101 是服务server)
No.1 2 3是3次握手的过程
No.7 是client--->server 发送 abcdefg seq = 1,ack = 41 len = 7
No.8 是server--->client 发送ACK 确认包 seq = 41,ack = 8 len = 0 (下一次从8开始发,客户端此时就知道上次发送的7个字节的内容 全部被server端接收)
No.9 是client--->server 发送 abcdef seq = 8,ack = 41,len = 6
No.10 是server---->client 发送ACK确认包 seq = 41,ack = 14, len = 0 (下一次从14开始发 14刚好是上一次的seq+len)
所以seq 表示当前已经成功向对方发送的数据位数 ack是告诉对端下一次从哪里给我发数据