网络丢包分析
引言
本期分享一个比较常见的⽹络问题—丢包。例如我们去 Ping ⼀个⽹站,如果能 Ping 通,且⽹站返回信息全⾯,则说明与⽹站服务器的通信是畅通的,如果 Ping 不通,或者⽹站返回的信息不全等,则很可能是数据被丢包了,类似情况想必⼤家都不陌⽣。针对⽹络丢包,本⽂提供⼀些常见的丢包故障定位⽅法,希望能够帮助⼤家对⽹络丢包有更多的认识,遇到丢包莫要慌,且跟着⼀起来涨姿(知)势(识)……
什么是丢包
数据在 Internet 上是以数据包为单位传输的,单位为字节,数据在⽹络上传输,受⽹络设备,⽹络质量等原因的影响,使得接收到的数据⼩于发送出去的数据,造成丢包。
数据包接收、发送原理
发送数据包:
- 应⽤程序的数据包,在TCP层增加TCP报⽂头,形成可传输的数据包。
- 在 IP 层增加 IP 报头,形成 IP 报⽂。
- 经过数据⽹卡驱动程序将IP包再添加14字节的MAC头,构成frame(暂⽆CRC),frame(暂⽆CRC)中含有发送端和接收端的MAC地址。
- 驱动程序将 frame(暂⽆CRC)拷贝到⽹卡的缓冲区,由⽹卡处理。
- ⽹卡为 frame(暂⽆CRC)添加头部同步信息和CRC校验,将其封装为可以发送的packet,然后再发送到⽹线上,这样说就完成了⼀个IP报⽂的发送了,所有连接到这个⽹线上的⽹卡都可以看到该 packet。
接收数据包:
- ⽹卡收到⽹线上的packet,⾸先检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame。(⽹卡会检查MAC包内的⽬的MAC地址是否和本⽹卡的MAC地址⼀样,不⼀样则会丢弃。)
- ⽹卡将frame拷贝到预分配的ring buffer缓冲。
- ⽹卡驱动程序通知内核处理,经过TCP/IP协议栈层层解码处理。
- 应⽤程序从socket buffer 中读取数据。
核心思路
了解了收发包的原理,可以了解到丢包原因主要会涉及⽹卡设备、⽹卡驱动、内核协议栈三⼤类。以下我们将遵循“从下到上分层分析(各层可能性出现的丢包场景),然后查看关键信息,最终得出分析结果”的原则展开介绍。
目录—网络丢包情形概览
- 硬件网卡丢包
- 网卡驱动丢包
- 以太网链路层丢包
- 网络 IP 层丢包
- 传输层 UDP/TCP 丢包
- 应用层 socket 丢包
针对以上 6 种情形,分别作出如下详述~
简单总结一下网卡丢包:
简单总结一下网卡驱动丢包处理:
简单总结一下内核协议栈丢包:
转载自;https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2021-03-16 libevent源码学习(17):缓冲管理框架