Tcp连接(三次握手)、传输、断开(四次挥手)流程验证

746 阅读1分钟

最近复习tcp连接的时候,产生一些疑问,最后决定直接抓包验证一下,下面是验证的全过程:

  • 问题:tcp连接建立后,tcp传输过程中ack=seq+1还是ack=seq+data.length?
    如果是第一种,单次数据的完整性如何检验?是放在了ip层吗?补充:OSI网络分层
    如果是第二种,ack码会不会出现重复的情况? tcp数据传输对比.png

  • 用wireshark抓包分析一下 TCP三次握手wireshark抓包分析 tcp三次握手.png
    最后一次FIN的数据不连续了,但是最后验证了和左边是一样的。

  • 问题:tcp连接建立后,tcp传输过程中ack=seq+1还是ack=seq+data.length?
    如果是第一种,单次数据的完整性如何检验?是放在了ip层吗?
    如果是第二种,ack码会不会出现重复的情况?

  • 通过验证可以发现第二种是正确的,验证其实是通过两组序列码确定的,两组序列码又都是随机生成的,同时重复的可能性很小

为了看懂包的结构,补充知识:
tcp头部信息--看wiki
重要的几个状态码:
Sequence number:随机生成的序列码
Acknowledgment number:确认码
SYN:Synchronize 代表同步状态的头
PSH:Push 代表推送数据状态的头
FIN:代表最后一次传输 image.png