TCP协议中的Ack和Seq号

TCP协议中的Ack和Seq号

一、基本概念

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

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP ACK (Acknowledgement) 和 SEQ (Sequence Number) 是 TCP 协议用于实现可靠数据传输和流控制的重要字段。 1. ACK (Acknowledgement): ACK 字段用于确认已经成功接收到的数据。在 TCP 通信,接收方会向发送方发送 ACK 报文,其ACK 字段表示下一个期望接收的字节序。例如,如果 ACK 字段的值是 100,表示接收方已经成功接收到字节序为 99 的数据,并期望接收序为 100 的数据。 2. SEQ (Sequence Number): SEQ 字段用于标识 TCP 报文数据的字节序。在 TCP 通信,每个 TCP 报文都会携带一个 SEQ 字段来指示该报文数据的起始字节序。接收方根据 SEQ 字段来按序接收和重组数据流。 通过 ACKSEQ 字段的组合使用,TCP 协议可以实现可靠的数据传输和流控制。发送方发送数据时,接收方会发送带有 ACK 字段的确认报文,以告知发送方已成功接收到数据。发送方根据接收到的 ACK 确认来确认数据是否成功传输,如果没有收到 ACK 确认,发送方会进行重传。 同时,SEQ 字段的使用也可以帮助接收方按序接收和重组分片的数据。每个 TCP 报文都会携带 SEQ 字段,接收方根据 SEQ 字段来确定数据的顺序,并将它们按序交付给应用层。 总结:TCP ACKSEQ 字段是用于实现可靠数据传输和流控制的重要字段。ACK 字段用于确认已经成功接收到的数据,SEQ 字段用于标识数据的字节序。通过这两个字段的使用,TCP 可以实现可靠的数据传输和流控制机制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值