ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TCP协议中的Ack和Seq号

2022-05-21 18:34:37  阅读:195  来源: 互联网

标签:Seq seq Ack TCP ack len 客户端 服务端 78


一、基本概念

seq:表示本次发送数据的偏移量,也就是从哪里开始发送数据。

len:表示本次tcp携带的数据长度。

ack:首先意味着已经收到对方多少字节数据,其次告诉对方接下来的包的seq要从ack确定的数值继续接力。

 

二、Wireshark抓包

本地请求61.135.185.32这个ip,这个过程的抓包如下。

三次握手

(客户端)1号包:我能和你建立连接吗?

  • seq=0,表示这是一个新的开始
  • 没有ack,因为还没有建立连接,也就不存在我收到了对方多少的数据的说法
  • Len=0,表示我没有传输数据,就是一个想要建立连接的tcp包而已。

(服务端)2号包:我收到了,我们能进行连接,快来玩吧。

  • seq=0
  • ack=1暗示了两点,第一表示我收到了你刚才的那个seq=0的连接请求,另外告诉对方接下来请从seq=1开始给我传输数据
  • Len=0,表示同样没有传输数据。

(客户端)3号包:好的,那我们就连接吧。

  • seq=1,响应上面的包,我真的从seq=1开始传输哦
  • ack=1,表示我收到了你的seq=0同意连接,下面你也请从seq=1给我传输数据吧
  • Len=0

好了,三次握手愉快的结束,建立起来了连接。

 

总结一下三次握手的过程:

  • 起始包的seq都等于0
  • 三次握手中的ack=对方上一个的seq+1
  • seq等于对方上次的ack

数据传输过程

(客户端)4号包:我要你的首页信息

客户端发送http请求,http请求需要tcp进行控制,然后交给ip层,然后由网卡发出...

注意4号帧tcp包的内容

  • seq=1,因为上次没有传输数据,seq号不变,也就是3号包的seq=1,len=0
  • ack=1,告诉服务端你要是发送数据,得从seq=1开始哈
  • len=77,表示我这次传输的数据字节数

(服务端)5号包:好的,我收到你的请求了。

  • seq=1,如4号包的ack所要求的
  • ack=78ack=4号包的seq+4号包的len = 1+77=78表示客户端啊,你要是再发就从seq=78开始发送哈
  • len=0

(服务端)`6`号包:诺,给你的数据

5、6号均为服务端发送的包,在这期间没有接收到包,理所应当的,5、6号包的seq、ack是一样的。

  • seq=1
  • ack=78
  • len=1440,数据的长度

(客户端)7号包:收到啦

  • seq=78,你让我从78发,我就从78
  • ack=14411441=6号包的seq+6号包的len=1+1440=1441,表示我收到啦
  • len=0

总结

发送方的包,包括seqlen,接收方如何告知对方数据已经收到呢?

答案就在于接收方的ack=发送方的seq+发送方的len

整体来讲,就是这样。

特殊情况在于三次握手时,客户端、服务端握手时,len=0,此时对方就不是ack=seq+0,而是ack=seq+1

 

参考链接:

https://blog.csdn.net/zhangdaxia2/article/details/107760114

https://zhuanlan.zhihu.com/p/439614017

标签:Seq,seq,Ack,TCP,ack,len,客户端,服务端,78
来源: https://www.cnblogs.com/superbaby11/p/16295671.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有