握手阶段:
序号 | 方向 | seq | ack | SYN | ACK |
1 | A->B | 10000 | 0 | 1 | 0 |
2 | B->A | 20000 | 10000+1=10001 | 1 | 1 |
3 | A->B | 10001 | 20000+1=20001 | 0 | 1 |
数据传输过程中seq和ack的值:
序号 | 方向 | seq | ack | size |
23 | A->B | 40000 | 70000 | 1514 |
24 | B->A | 70000 | 40000+1514-54=41460 | 54 |
25 | A->B | 41460 | 70000+54-54=70000 | 1514 |
26 | B->A | 70000 | 41460+1514-54=42920 | 54 |
其中1514表示以太网帧的长度,1514 - 54(以太网协议头=14字节,IP头=20字节,TCP头=20字节)= 负载长度
1. 如果发送方最后一次发送数据的时候,tcp.flags=0x018(PUSH,ACK)
那么接收方的确认ACK是发送方的seq和数据长度之和,即接收方的ack=发送方上个包的seq+数据长度
2. 如果发送方最后一次发送数据的时候,tcp.flags=0x019(FIN,PUSH,ACK)
那么接收方的确认ACK是发送方的seq和数据长度之和,还要加上1,即接收方的ack=发送方上个包的seq+数据长度+1。因为fin占一个序列号
————————————————
版权声明:本文为CSDN博主「开源造福世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weijuqie0697/article/details/81487077