请问应用层协议的解析需不需要考虑TCP丢包的情况?

窗外蓝天 2016-12-01 04:46:07
大家好,最近在做网络通信的时候碰到这个问题,请教一下各位。
我在标题中提到的丢包是指,发送了A包+B包+C包(简写为ABC,后面都用字母表示),然后接收时,只收到了AC。我想到了两种情况:
1.如果接收缓冲大小足够大(大到能够一次性接收到ABC),那么根据TCP实现可靠性的原理,应该不会出现这种情况。
2.如果接收缓冲大小不足以一次性接收ABC,导致ABC需要分两次接收到,同时认定缓冲接收满之后会让后续收到的数据覆盖原有缓冲内容,那么只要在接收时,把接收到数据进行拼接,数据应该还是完整的。

所以请大家帮我看看,我有没有忽略什么情况?
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
窗外蓝天 2016-12-06
  • 打赏
  • 举报
回复
我在另一个版提了同样的问题,http://bbs.csdn.net/topics/392057551,有不错的回答
窗外蓝天 2016-12-02
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
你说的A包,B包,C包,是TCP的包,还是应用层的包
应用层的包,用send函数发出去的 还有一点要说的是,我说的"发ABC,收到AC"是我想的情况,实际中没有碰到过,我仅仅是疑惑有没有这种可能。
ipqtjmqj 2016-12-02
  • 打赏
  • 举报
回复
你说的A包,B包,C包,是TCP的包,还是应用层的包
窗外蓝天 2016-12-02
  • 打赏
  • 举报
回复
引用 3 楼 luciferisnotsatan 的回复:
正常情况下(硬件驱动没问题),通过TCP发送ABC,是不可能出现只收到AC包,而缺了B包的。 发送端send时,有没有检测返回值?即在发送B时,有没有发送成功?如果窗口满了,那么你在send B时,实际上B没有send出去。而你没有判断返回值,继续send C时,这时,对端recv了一部分数据,使得窗口又有了空间,那么C就发送成功了。实际发送了AC,实际收到的也是AC lz还是把代码贴出来看下吧。
没有代码,协议还在设计着 看来我想的那种情况是不会出现的。
luciferisnotsatan 2016-12-02
  • 打赏
  • 举报
回复
正常情况下(硬件驱动没问题),通过TCP发送ABC,是不可能出现只收到AC包,而缺了B包的。 发送端send时,有没有检测返回值?即在发送B时,有没有发送成功?如果窗口满了,那么你在send B时,实际上B没有send出去。而你没有判断返回值,继续send C时,这时,对端recv了一部分数据,使得窗口又有了空间,那么C就发送成功了。实际发送了AC,实际收到的也是AC lz还是把代码贴出来看下吧。

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧