博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sweet Snippet系列 之 TCP数据接收
阅读量:4224 次
发布时间:2019-05-26

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

Sweet Snippet系列 之 TCP数据接收

 

一.引子

 

  虽说仍然是Sweet Snippet,不过本篇并没有代码,纯粹是自己觉得有点趣味,就索性一记了~

 

二. 问题

 

  接触过网络编程的朋友大概都应知道TCP,作为一种“流”式协议,TCP的粘包问题一直都是程序处理的要点,而这次的问题就是,如果发送n字节的TCP数据,对端接收时会出现多少种接收情况?

 

三. 解法

 

  我们先从具体的一个实例来简单算一算吧~就假设我们发送了3个字节的TCP数据:

 

 

 

 

 

 

 

  由于TCP如果接收成功至少可以接收一个字节,所以对于3个字节的数据而言,最多可能造成总计三次TCP接收,让我们分情况讨论一下:

 

  对于只发生一次TCP接收就获取全部数据的情况,只有1种可能(分隔线代表一次接收):

 

  

 

  

  

 

对于发生两次TCP接收,有2种可能:

 

 

  

  

 

  

  对于发生三次TCP接收,显而易见,只有1种可能:

 

 

  

 

所以总的接收情况次数为:C(3) = 1 + 2 + 1 = 4

 

 

对于n个字节的一般情况,分情况讨论的方法就有些费心费力了,换个思路,以添加分隔线的角度来考虑这个问题,对于任意相邻两个字节之间,我们都可以添加或者不添加分隔线来表示是否在这两个字节间额外发生了一次TCP接收,图示大概就是这个样子(虚线表示可以添加或者不添加的分隔线):

 

 

 

  

  对于n个字节而言,总计有n-1个间隔可以添加或者不添加分隔线,所以总的可能情况为:

 

 C(n) = 2^(n-1)

  

  对于前面讲述的3字节情况,运用上面的公式,得到C(3) = 2^(3-1) = 4,哈,结果正确~

 

  至于实践中的一些诸如TCP接收缓冲区大小限制会影响接收可能情况之类的问题,在此就不讨论了,这里就是简单并理想化的计算一下可能的接收情况,就这样了~

 

你可能感兴趣的文章
大年初四,你认为在南方过年和在北方过年最大的不同是什么?
查看>>
大年初五,Python、Go、C...你最爱用哪种语言?
查看>>
大年初六,你最崇拜的数据科学大咖是谁?
查看>>
大年初七,发paper、学Python...分享一下你的学习计划吧~
查看>>
数据蒋堂 | 报表开发的现状
查看>>
手把手带你复现AI+区块链写码全过程!(附代码&视频)
查看>>
50个“杀手级”AI项目 !(附链接)
查看>>
Python实例介绍正则化贪心森林算法(附代码)
查看>>
Facebook如何运用机器学习进行亿级用户数据处理
查看>>
独家 | 如何解决深度学习泛化理论
查看>>
数据蒋堂 | 谈谈临时性计算
查看>>
独家 | 教你实现数据集多维可视化(附代码)
查看>>
女生节征集令 | 你的数据女神,由你来宠~
查看>>
手把手实战:利用LM神经网络算法自动识别窃电用户(附代码)
查看>>
清华史上最酷炫女生节福利来袭!女神,与我同乘无人车可好?
查看>>
全解今日头条大数据算法原理(附PPT&视频)
查看>>
想知道你在清华100年前的照片是什么样子吗?
查看>>
数据挖掘实战:带你做客户价值分析(附代码)
查看>>
数据院携手汽车工程系,女生节尽展清华大数据风采~
查看>>
机器学习算法清单!附Python和R代码
查看>>