分享

【转】tcp协议的序列号:seq=、ack=

 techres 2010-11-04
以下为个人看法:
先把TCP协议的序列号搞清楚:
1、开始C端随机生成初始sequence,发到S,flag为syn
2、S端回应C端,也随机生成初始sequence,ack=sequence(C)+1,表示收到C端的连接请求,flag为syn+ack
3 、C端回应S端,ack=sequence(S)+1,表示收到S端的连接回应,flag为ack
至此三次握手建立,此后双方的序列号变化为:
4、刚开始任一方(不分C或S)的sequence=sequence(握手时)+1
至于next sequence是wireshark自己加上去的,其值为 n sequence=此次发送包的sequence+TCP层以上负载的数据长度  也就是下次发包时该方将会使用的sequence值
5、同理任一方的ack=收到的对方的sequence+其TCP层以上负载的数据长度,也就是期待对方下一次发包所使用的sequence值

对于你的问题,因为第8帧不是确认第7帧的,是确认7帧前一帧的。所以没确认7帧中的3字节的数据,9帧中2方又向1方发送了18字节数据,因此在10帧 中1方ack连同上两次数据一同确认了,这应该和TCP选项的SACK有关。

对于TCP序列号的详细分析请参见本论坛laura电子书的相关内容。以上属个人看法,欢迎高手指证!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多