基于TCP的 socket 有可能丢包吗?
其实就是在问传输层协议如何在不稳定传输上实现稳定传输。
所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。这些被丢弃包的数量,除以总的传输包数,也就是我们常说的丢包率。
丢包率是网络性能中最核心的指标之一。
丢包通常会带来严重的性能下降,特别是对 TCP 来说,丢包通常意味着网络拥塞和重传,进而还会导致网络延迟增大、吞吐降低。
丢包率为多少表示网络不正常?
丢包率(Loss Tolerance或packet loss rate)是指测试中所丢失数据包数量占所发送数据包的比率,通常在吞吐量范围内测试。
丢包率与数据包长度以及包发送频率相关。
通常,千兆网卡在流量大于200Mbps时,丢包率小于万分之五;百兆网卡在流量大于60Mbps时,丢包率小于万分之一。
那到底是哪里发生了丢包呢?
排查之前,我们可以回忆一下 Linux 的网络收发流程,先从理论上分析,哪里有可能会发生丢包。
你不妨拿出手边的笔和纸,边回忆边在纸上梳理,思考清楚再继续下面的内容。
在这里,为了帮你理解网络丢包的原理,我画了一张图,你可以保存并打印出来使用。
参考
TCP面向字节流和报文段的关系是什么?
https://www.zhihu.com/question/34003599/answer/139286798
收集TCP端口的访问延迟和丢包率
https://www.cnblogs.com/flashBoxer/p/13266758.html
粘包粘包、拆包问题的解决策略
https://www.cnblogs.com/orange1438/p/4693470.html
丢包?不要轻易下结论
https://zhuanlan.zhihu.com/p/399679085
使用 psping & paping 进行 TCP 端口连通性测试
https://docs.azure.cn/zh-cn/articles/azure-operations-guide/virtual-network/aog-virtual-network-tcp-psping-paping-connectivity
网友评论