TCP基础知识----序列号、确认号

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是告诉对端下一次从哪里给我发数据


版权声明:本文为zhangdell原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。