如何判定一个TCP应答包为dupack?

首先需要明白TCP包中的sequence和ack sequence的含义:

1.sequence·是表示发送方的当前包的起始数据序列号
2.ack sequence则是表示对接收方的应答序列号,它是指对方下一个包要使用的起始sequence。(上一接收包的sequence加上len之后的值)

那么再来看什么是dupack,它是为了快速重传机制而发送的重复确认包,那么是不是说只要发送包中的ack sequence一直相同就表示它是一个dupack呢,并且会触发重传机制?

实际上并不是如此,试想一下,当发送方A向接收方B不停发送数据,而B端始终处于接收而没有发送数据到A的场景 ,首先比较容易理解的是,B端应答的Ack sequence应该是递增的;那么A端发送数据给B时,按照协议来说也需要填充Ack sequence,由于B端始终没有发送数据到A端,那么可想而知,当A端数据到B端时,填充的Ack sequence始终是相同的,那么对于这种来说,它并没有触发快速重传,因为B端压根不存在要发送给A端的数据,所以这种情况并不数据Dup Ack,Dup Ack的存在时有一个前提的,那就是它所重复应答的包,是对方发送的旧包,并且对方已经把新包也发出来了,所以这个处理到底是按照Dup Ack进行快速重传还是正常处理,是由发送端是否已经发送了更新的数据来决定的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值