TCP拆包、滑动窗口通俗理解

简介:TCP协议会将应用层的数据封装交给下层继续处理,根据七层协议,可以不管TCP数据包在下层的详细过程,而假设接收端TCP层同样可以收到该数据包,在此基础上进行以下讨论。
完美情况:
TCP直接将应用层数据包(可以认为就是一个数组)发给接收方,并且根据TCP协议,TCP会将每个发送的数据包编号(序列号),发送完一个序列号后,接收端收到会回复该序列号,代表已经被接受。
在这里插入图片描述
这样实际上保证了数据包的有序性,并且如果包与包之间接受有时间间隔的话,就按照顺序解包就可以了(一般来说,一个包对应一个信息,即数据未分段发送)
在这里插入图片描述
但问题是:
(1)接收端有自己的TCP缓存区,它会将多个包积累在一起在进行处理,这样的结果是导致包与包之间“无缝连接”,即所谓的”粘包“
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
针对此问题,就有了一些解决办法:

  • 每个包长度固定:这样接收端就可以每隔一定长度进行拆包,但缺点是浪费资源
  • 加入头部信息:每个数据包前加入该数据包中数据的长度值,这样接收端从缓存中读取时,通过读该头部信息,知道了每个包的长度,这样就能拆包。
    详情可参考:粘包、拆包

(2)每个数据包发送后都要得到响应才发下一个,如果因为某一个包发送出现问题,会阻塞而导致程序一直占据资源等待,这是一种浪费。所以引入了滑动窗口机制。
详情参考:滑动窗口机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值