最近复习tcp连接的时候,产生一些疑问,最后决定直接抓包验证一下,下面是验证的全过程:
-
问题:tcp连接建立后,tcp传输过程中ack=seq+1还是ack=seq+data.length?
如果是第一种,单次数据的完整性如何检验?是放在了ip层吗?补充:OSI网络分层
如果是第二种,ack码会不会出现重复的情况? -
用wireshark抓包分析一下 TCP三次握手wireshark抓包分析
最后一次FIN的数据不连续了,但是最后验证了和左边是一样的。 -
问题:tcp连接建立后,tcp传输过程中ack=seq+1还是ack=seq+data.length?
如果是第一种,单次数据的完整性如何检验?是放在了ip层吗?
如果是第二种,ack码会不会出现重复的情况? -
通过验证可以发现第二种是正确的,验证其实是通过两组序列码确定的,两组序列码又都是随机生成的,同时重复的可能性很小
为了看懂包的结构,补充知识:
tcp头部信息--看wiki
重要的几个状态码:
Sequence number:随机生成的序列码
Acknowledgment number:确认码
SYN:Synchronize 代表同步状态的头
PSH:Push 代表推送数据状态的头
FIN:代表最后一次传输