TCP序列号和确认号详解

1.序列号和确认号的简介及作用

TCP协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。 响应包内也包括一个序列号,表示接收方准备好这个序列号的包。在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。另外,TCP通过数据分段中的序 列号来保证所有传输的数据可以按照正常的顺序进行重组,从而保障数据传输的完整。

2.TCP的通讯过程

在TCP通讯中主要有连接的建立、数据的传输、连接的关闭三个过程!每个过程完成不同的工作,而且序列号和确认号在每个过程中的变化都是不同的。

2.1 TCP建立连接

TCP建立连接,也就是我们常说的三次握手,它需要三步完成。在TCP的三次握手中,发送第一个SYN的一端执行的是主动打开。而接收这个SYN并发回下一个SYN的另一端执行的是被动打开。

这里以客户端向服务器发起连接来说明。

1) 第1步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0;

2) 第2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1;

3) 第3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的初始序列号+1。

先把TCP协议的序列号搞清楚:
1、开始C端随机生成初始sequence(C),发到S,flag为syn (eg.Seq(C)=0)
2、S端回应C端,也随机生成初始sequence(S) eg. Seq(S)=0,ack=sequence(C)+1,表示收到C端的连接请求,flag为syn+ack(eg. Seq(s)=0, ack=1)
3 、C端回应S端,ack=sequence(S)+1,表示收到S端的连接回应,flag为ack (eg. ack=1)

至此三次握手建立,此后双方的序列号变化为:

刚开始任一方(不分C或S)的sequence=sequence(握手时)+1
至于next sequence是wireshark自己加上去的,其值为 n_sequence=此次发送包的sequence+TCP层以上负载的数据长度.也就是下次发包时该方将会使用的sequence值
5、同理任一方的ack=收到的对方的sequence+其TCP层以上负载的数据长度,也就是期待对方下一次发包所使用的sequence值

回家后再完成这篇文章
参考资料:
http://blog.chinaunix.net/uid-20665441-id-305478.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值