网络丢包分析


引言

本期分享一个比较常见的?络问题—丢包。例如我们去 Ping ?个?站,如果能 Ping 通,且?站返回信息全?,则说明与?站服务器的通信是畅通的,如果 Ping 不通,或者?站返回的信息不全等,则很可能是数据被丢包了,类似情况想必?家都不陌?。针对?络丢包,本?提供?些常见的丢包故障定位?法,希望能够帮助?家对?络丢包有更多的认识,遇到丢包莫要慌,且跟着?起来涨姿(知)势(识)……

什么是丢包

数据在 Internet 上是以数据包为单位传输的,单位为字节,数据在?络上传输,受?络设备,?络质量等原因的影响,使得接收到的数据?于发送出去的数据,造成丢包。

数据包接收、发送原理

发送数据包:

  1. 应?程序的数据包,在TCP层增加TCP报?头,形成可传输的数据包。
  2. 在 IP 层增加 IP 报头,形成 IP 报?。
  3. 经过数据?卡驱动程序将IP包再添加14字节的MAC头,构成frame(暂?CRC),frame(暂?CRC)中含有发送端和接收端的MAC地址。
  4. 驱动程序将 frame(暂?CRC)拷贝到?卡的缓冲区,由?卡处理。
  5. ?卡为 frame(暂?CRC)添加头部同步信息和CRC校验,将其封装为可以发送的packet,然后再发送到?线上,这样说就完成了?个IP报?的发送了,所有连接到这个?线上的?卡都可以看到该 packet。

接收数据包:

  1. ?卡收到?线上的packet,?先检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame。(?卡会检查MAC包内的?的MAC地址是否和本?卡的MAC地址?样,不?样则会丢弃。)
  2. ?卡将frame拷贝到预分配的ring buffer缓冲。
  3. ?卡驱动程序通知内核处理,经过TCP/IP协议栈层层解码处理。
  4. 应?程序从socket buffer 中读取数据。

核心思路

了解了收发包的原理,可以了解到丢包原因主要会涉及?卡设备、?卡驱动、内核协议栈三?类。以下我们将遵循“从下到上分层分析(各层可能性出现的丢包场景),然后查看关键信息,最终得出分析结果”的原则展开介绍。

目录—网络丢包情形概览

  • 硬件网卡丢包
  • 网卡驱动丢包
  • 以太网链路层丢包
  • 网络 IP 层丢包
  • 传输层 UDP/TCP 丢包
  • 应用层 socket 丢包

针对以上 6 种情形,分别作出如下详述~


简单总结一下网卡丢包:

简单总结一下网卡驱动丢包处理:

简单总结一下内核协议栈丢包:

转载自;https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ