博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP拆包、滑动窗口通俗理解
阅读量:3938 次
发布时间:2019-05-23

本文共 534 字,大约阅读时间需要 1 分钟。

简介:TCP协议会将应用层的数据封装交给下层继续处理,根据七层协议,可以不管TCP数据包在下层的详细过程,而假设接收端TCP层同样可以收到该数据包,在此基础上进行以下讨论。

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

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

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

详情参考:

转载地址:http://xrzwi.baihongyu.com/

你可能感兴趣的文章
悦读:重新定义公司-谷歌是如何运营的
查看>>
研发主管的烦恼:周一早晨延迟的项目会议
查看>>
研发主管的烦恼:难以执行的绩效考核
查看>>
精益Scrum(五)
查看>>
精益Scrum(六)
查看>>
精益Scrum(七)
查看>>
软件测试管理—如何写好软件测试计划书
查看>>
解读一名软件测试经理所需要具备的能力
查看>>
有效的软件测试度量
查看>>
软件评测和测试国家现行标准
查看>>
理解测试策略
查看>>
机器学习界大牛林达华推荐的书籍
查看>>
path变量备份
查看>>
Lesson2.2 & 2.3 Maya command reference & quick help
查看>>
lesson 2.4 - Converting MEL Commands to Python
查看>>
Lesson3.2 variables
查看>>
3.4.2 - Operators & 3.4.3 division and truncation
查看>>
3.7.1 - Strings
查看>>
3.7.4 - Indexing and Slicing Strings
查看>>
3.7.5 - Modifying Strings
查看>>