【Linux内核二】常用的网络丢包错包debug工具介绍

news2024/11/17 0:37:16

目录

ifconfig

Ifconfig输出各字段简述

txqueuelen

RX和TX的errors指哪些错误

dropped与overruns的区别

常用ifconfig配置命令

显示网卡信息

启动关闭指定网卡

配置和删除ip地址

修改MAC地址

启用和关闭ARP协议

设置最大传输单元

设置网卡的promiscuous模式

设置网卡的多播模式

配置和删除IPv6地址

配置txqqueuelen

ethtool

netstat


ifconfig

关于此工具找到一篇雄文:note/ifconfig.md at master · vikyd/note · GitHub

Ifconfig输出各字段简述

以下图的Ubuntu系统为例:

 字段:eth0

含义:网卡名,网卡驱动里定义的名称,这个没什么好说的。

字段:flags

示例:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>

含义:表示当前网卡的状态(此列表并非可操作的命令)

详细:

UP:表示网卡已启动(interface is up),无 UP 则表示网卡未启动(ifconfig -a 显示未启动网卡)

BROADCAST:网卡的广播地址有效(broadcast address valid. Volatile)

RUNNING:网卡已连接到路由器等设备(interface RFC2863 OPER_UP. Volatile)

与UP的区别:UP 表示网卡本身启动了,RUNNING 表示是否连接到了路由器等设备。

MULTICAST:可以发送组播包(或说多播)(Supports multicast)

关于4613的这个数字怎么来的,请查看雄文原文,这里不多提了。

字段:mtu

示例:mtu 1500

全称:Linux 文档中称为:Maximum Transfer Unit维基百科中称为:Maximum Transmission Unit

含义:最大传输单元;指链路层(第 2 层)的 frame 的 payload(负载)的最大大小;Linux 中 MTU 对发送和接收都起作用。

单位:Byte

详细:为什么mtu通常是1500?请查看原文。

字段:inet

示例:inet 10.10.10.11 netmask 255.255.240.0 broadcast 10.10.10.255 中的 10.10.10.11

全称:Internet

含义:TCP/IP 的 IPv4 地址(IPv6 的字段为inet6)

理解:互联网基于TCP/IP 协议族(protocol family),所以通常inet指IP地址

类型:除了inet,还可能会有:inet6、ax25、ddp、ipx、netrom 等类型

字段:netmask

示例:netmask 255.255.240.0

全称:IP network mask

中文:子网掩码

字段:broadcast

示例:broadcast 10.10.10.255

全称:IP broadcast address

中文:广播地址

字段:inet6

示例:inet6 fe80::215:5dff:fef6:a8e7

全称:类似前面 inet

含义:TCP/IP 的 IPv6 地址

字段:prefixlen

示例:prefixlen 64

全称:prefix length

含义:表示此地址的前64位是网络前缀,作用类似于IPv4的子网掩码

字段:scopeid

示例:scopeid 0x20<link>

全称:scope id

含义:0x20<link> 表示 IPv6 的 Link-Local类型地址

字段:ether

示例:ether 42:01:0a:aa:00:03

全称:Ethernet

中文:以太网

含义:表示网卡的 MAC 地址

理解:对应第 2 层链路层的Ethernet协议

字段:txqueuelen

示例:txqueuelen 1000

全称:transmit queue length

理解:发送数据时qdisc(Queuing Disciplines)队列的大小

单位:sk_buff(socket buffer)

详细:txqueuelen 是一个比较长的话题,见后面txqueuelen小节

字段:RX 与 TX

示例:

RX packets 69426519  bytes 20960261647 (19.5 GiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 73886979  bytes 15013465511 (13.9 GiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这两个大字段数据主要 来源于 /proc/net/dev(查看:cat /proc/net/dev)

参考:Linux输出 /proc/net/dev的源码

字段:RX

示例:

RX packets 69426519  bytes 20960261647 (19.5 GiB)

RX errors 0  dropped 0  overruns 0  frame 0

全称:Received

含义:网卡接收数据的统计

字段:

packets 69426519:成功接收到的数据包数量

单位:sk_buff(与第 2 层链路层的frame的数量相等)

注意:这不是第3层网络层的单位packet

bytes 20960261647 (19.5 GiB):数据 + 各层header的字节数量

换算:CentOS 貌似常按 1024 换算成 GiB,Ubuntu 貌似常按 1000 换算成 GB,参考 man 7 units

errors:出错的包数量

单位:sk_buff

注意:此数值不等于后面 dropped、overruns、frame字段的总和,原因见后面 RX的errors指哪些错误小节

dropped:Linux 内核对应的sk_buff满了导致的丢包

单位:sk_buff

可能原因之一:Linux系统内存不足,导致从网卡拷贝数据到系统内存时丢包

overruns:Linux 内核对应的Ring Buffer满了导致的丢包

单位:sk_buff

可能原因之一:CPU 很忙无法及时处理网卡申请的中断

对应 Linux Kernel 的 rx_fifo_errors

注意:详细见后面dropped与overruns的区别小节

frame:指第2层链路层的frame的bit数不能被8整除,不符合帧的定义的错误

单位:sk_buff

可能原因之一:网卡、交换机等硬件故障导致

详细:见后面RX和TX小节

字段:TX

示例:

TX packets 73886979  bytes 15013465511 (13.9 GiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

全称:Transmitted

含义:网卡发送数据的统计

字段:

与 RX 同名的字段:略过

errors:与前面 RX 的 errors 包含的错误类型有些不一样

carrier:硬件调制信号(modulation of signal)导致的出错包数量

collisions:冲突的包数量

txqueuelen

txqueuelen发送数据时qdisc的允许队列大小,txqueuelen 的单位是 sk_buff(socket buffer),发送数据时,应用层的数据经过内核协议栈的层层封装后,先到达qdisc,之后才到达Ring Buffer(就是下图中的Driver queue),Ring Buffer是一个简单的FIFO(先进先出)队列,但太简单,所以出现了qdisc 提供灵活的流量控制功能。

RX和TX的errors指哪些错误

RX错误类型包括:

rx_frame_errors(对应ifconfig 的frame,表示非对齐的帧,这种错误一般出现在物理层)

rx_crc_errors(不对应ifconfig 的任何字段,表示帧校验错误,这种错误一般出现在物理层)

rx_length_errors(不对应ifconfig的任何字段)

rx_fifo_errors(对应ifconfig的overruns)

这些错误类型可能因不同网卡而不同

错误类型 不一定 包括:

rx_dropped(对应ifconfig的dropped)

TX错误类型包括:

tx_window_errors(不对应 ifconfig 的任何字段)

tx_aborted_errors(不对应 ifconfig 的任何字段)

tx_carrier_errors(对应 ifconfig 的 carrier)

tx_fifo_errors(对应 ifconfig 的 overruns)

这些错误类型可能因不同网卡而不同

错误类型不包括:

tx_dropped(对应 ifconfig 的 dropped)

dropped与overruns的区别

dropped与overruns是指两种不同的丢包情况。

要了解两者的区别,需首先了解Linux内核中的 网络数据流转机制。

以接收数据为例:

1)网卡驱动在内存中分配一片缓冲区用来接收数据包,叫做sk_buff

2)将上述缓冲区的地址和大小(即接收描述符),加入到rx ring buffer。描述符中的缓冲区地址是 DMA 使用的物理地址

3)驱动通知网卡有一个新的描述符

4)网卡从rx ring buffer中取出描述符,从而获知缓冲区的地址和大小

5)网卡收到新的数据包;

6)网卡将新数据包通过 DMA 直接写到sk_buff中

注意,上述流程有几个可能容易模糊的概念:

网卡驱动:这是跑在 Linux 中的程序,而非跑在网卡硬件中

sk_buff:存在于 Linux 内存中,可以在不同的网络协议层之间传递(在 Linux 源码中的定义见 skbuff.h),sk_buff 是真正存放网络数据的位置。

rx ring buffer:是一个 FIFO(先进先出)队列,队列的内容并不是真正的网络数据,而是一些指向 sk_buff 的描述符。

再次看下这个图可能会更清晰:

了解上述流程后,可以开始说两者的区别了:

dropped:sk_buff 满了,新的数据写不进 sk_buff 导致的丢包

可能原因之一:Linux系统分配的内存不足,导致从网卡拷贝数据到系统内存时丢包。

overruns:ring buffer 队列满了,队列暂无可用的描述符,导致的丢包。在 ifconfig 源码实际就是 rx_fifo_errors(recv'r fifo overrun)

可能原因之一:CPU 很忙无法及时处理网卡申请的中断

总之,大概可理解为,一个是指针满了(overruns),一个是内存满了(dropped)

ring buffer满了不代表buffer满了,可能是因为每个指针指向的buffer数据都很小,当有一段相对小帧数据过来,需要的消耗的指针数量大于ring buffer的当前容量;sk_buff 满了也不代表 ring buffer满了,可能是因为每个指针指向的buffer数据较大,大到当前的socket buffer装不下此数据。

常用ifconfig配置命令

显示网卡信息

(1) 显示激活的网卡信息

ifconfig

(2) 显示所有的网卡信息

ifconfig -a

(3) 显示简要的网卡信息

ifconfig -s

启动关闭指定网卡

(1) 关闭网卡

ifconfig eth0 down

(2) 启动网卡

ifconfig eth0 up

配置和删除ip地址

(1) 配置ip

// 配置ip地址

ifconfig eth0 192.168.1.100

// 配置ip地址和子网掩码

ifconfig eth0 192.168.1.100 netmask 255.255.255.0

// 配置ip地址、子网掩码和广播地址

ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

(2) 单网卡添加多个IP地址

ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 up

ifconfig eth0:1 192.168.2.100 netmask 255.255.255.0 up

(3) 删除IP地址

ifconfig eth0 del 192.168.1.100

修改MAC地址

ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

启用和关闭ARP协议

(1) 启用arp

ifconfig eth0 arp

(2) 禁用arp

ifconfig eth0 -arp

设置最大传输单元

ifconfig eth0 mtu 1500

设置网卡的promiscuous模式

(1) 启用

ifconfig eth0 promisc ,指网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。

(2) 禁用

ifconfig eth0 -promisc

设置网卡的多播模式

(1) 启用

ifconfig eth0 allmulti

(2) 禁用

ifconfig eth0 -allmulti

配置和删除IPv6地址

(1) 添加

ifconfig eth0 add 3ffe:3240:800:1005::2/64

(2) 删除

ifconfig eth0 del 3ffe:3240:800:1005::2/64

配置txqqueuelen

ifconfig eth0 txqqueuelen 1500

ethtool

ethtool查询或控制网络驱动程序和硬件设置。利用ethtool可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。

命令格式:ethtool [<options>] [<devname>]

Option说明:

-a, --show-pause

    查看网卡中接收模块RX、发送模块TX 和 Autonegotiate模块的pause帧流控状态:启动on或停用off。

-A, --pause <devname> [autoneg on|off] [rx on|off] [tx on|off]

    修改网卡中接收模块RX、发送模块TX和Autonegotiate 模块的pause帧流控状态:启动on或停用off。

-c, --show-coalesce

    查询指定网络设备的合并信息。

-C, --coalesce

    更改指定网络设备的合并设置。

-g, --show-ring

    显示指定以太网卡的rx/tx环参数信息。就是上篇文章提到的ring buffer。

-G, --set-ring

    更改指定以太网卡的rx/tx环设置。

-i, --driver

    显示网卡驱动的信息,如驱动的名称、版本等。

-d, --register-dump <devname> [raw on|off] [hex on|off] [file name]

    显示register dump信息,部分网卡驱动不支持该选项。

-e, --eeprom-dump <devname> [raw on|off] [offset N] [length N]

    显示EEPROM dump信息,部分网卡驱动不支持该选项。

-E, --change-eeprom

    修改网卡 EEPROM byte。

-k, --show-features, --show-offload <devname>

    显示网卡 Offload 参数的状态:on或off,包括 rx-checksumming、tx-checksumming等。就是网卡来做一些事情,给CPU减负。

-K, --features, --offload <devname> <feature> on|off ...

    修改网卡 Offload 参数的状态。

-p, --identify <devname> [N]

    用于区别不同 ethX 对应网卡的物理位置,常用的方法是使网卡 port 上的 led 不断的闪;N 指示了网卡闪的持续时间,以秒为单位。

-P, --show-permaddr

    向指定的网络设备查询永久硬件地址。

-r, --negotiate <devname>

    如果auto-negotiation 模块状态为on,则restarts auto-negotiation。

-S, --statistics

    显示 NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。

-t, --test

    让网卡执行自我检测,有两种模式:offline or online。

-s, --change

    修改网卡的部分配置,包括网卡速度、单工/全双工模式、MAC地址等。

-h, --help

    显示帮助信息。

--version

    显示版本信息。

参考文章:(24条消息) Linux 命令(194)—— ethtool 命令_ethtool命令详解_恋喵大鲤鱼的博客-CSDN博客

netstat

该命令经常用于查看网络连接状态

下面是它的一些参数:

-a:显示所有选项

-t:仅显示tcp相关选项

-u:仅显示udp相关选项

-n:不显示别名

-l:仅列出处于监听状态下的服务

-p:显示建立相关链接的程序名

-r:显示路由信息、路由表

-e:显示扩展信息,如uid

-s:按各个协议进行统计

-c:每隔一段事件执行netstat

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 学习(二)—— 工作区 — 本地仓库的操作命令

我们要上传文件到本地仓库&#xff0c;不是直接拷贝进去的&#xff0c;而是需要通过命令一步步上传。从工作区到本地仓库分为了三步&#xff0c;也可以说是三个区域&#xff1a; 目录 1、操作命令 (1) git init&#xff08;获取本地仓库&#xff09; (2) git add&#xff08;…

【Linux】 -- 进度条小程序

Linux第一个小程序&#xff0d;进度条 目录 行缓冲区概念 \r 和 \n 进度条代码和演示 行缓冲区概念 用两段代码来感受下行缓冲区的存在 #include<stdio.h> …

C++回顾(十四)—— 函数模板

14.1 概述 所谓函数模板(function template)&#xff0c;实际上是建立一个通用函数&#xff0c;其函数类型和形参类型不具体指定&#xff0c;用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替&#xff0c;不必定义多个函数&a…

数据分析方法08用户画像

用户画像 1、 概念 用户画像是指用户信息标签化&#xff0c;通过收集用户多维度的信息数据&#xff08;如人口统计属性&#xff0c;社会属性&#xff0c;行为偏好&#xff0c;消费习惯等&#xff09;&#xff0c;对其进行统计&#xff0c;分析&#xff0c;从而抽象出用户信息…

Ubuntu c++ MySQL数据库操作

mysql安装sudo apt-get install updatesudo apt-get install mysql-server libmysqlclient-dev mysql-workbenchmysql启动/重启/停止sudo service mysql start/restart/stop登录mysql命令&#xff1a;mysql -uroot -p错误异常&#xff1a;解决办法&#xff1a;修改mysqld.cnf配…

软件测试员如何进行产品测试?

一般来讲&#xff0c;当软件成为一个成功的产品后&#xff0c;产品测试工作就会复杂很多。比如拥有的用户量大&#xff0c;迭代频繁&#xff0c;测试的周期短&#xff0c;重复性强。面对紧张复杂的产品测试工作&#xff0c;软件测试员应怎样完成这一系列的测试工作呢&#xff1…

如何修复dxgi.dll文件错误?修复方法推荐

如果您使用Windows操作系统&#xff0c;在使用某些应用程序时&#xff0c;可能会遇到dxgi.dll文件错误。这可能会导致应用程序崩溃或无法正常运行。在本文中&#xff0c;我们将探讨如何修复dxgi.dll文件错误。 一.什么是dxgi.dll文件 dxgi.dll文件是Microsoft DirectX图形接口…

域控制器搭建以及成员加入

需要iso&#xff1a;windows server 2016软件使用&#xff1a;vmwarewindows server 2016系统搭建自己选iso&#xff0c;一直下一步就可以安装完成。&#xff08;记得要设置密码&#xff09;&#xff08;密码要求大小写字母数字符号&#xff09;等待就能安装完成。安装和配置Ac…

day28_js

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 零、 复习昨日 CSS 美化,复用,样式文件和表现文件分离便于维护 选择器 {属性:值;…} 引入css 内联文件内部使用style标签外部文件 <link href"路…

sqoop安装 使用

目录 拷贝安装包 解压 改名 拷贝jar包 修改配置文件 配置环境变量 查看安装情况 查看指定mysql服务器中数据库 查看指定mysql服务器数据库中的表 在hive中创建一个teacher表跟mysql的students中的teacher结构相同 将mysql中students库中的sc数据导出到hdfs指定的文件目…

Spring Cache 介绍及使用方法

目录 一、Spring Cache介绍 1、Spring Cache常用注解 二、Spring Cache使用redis缓存步骤 1、添加依赖 2、添加配置 3、使用注解 一、Spring Cache介绍 Spring cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实…

阿里云EMR集群搭建及使用

目录 1.简介 1.什么是EMR 2.组成 3.与自建hadoop集群对比 4.产品架构 2.使用 1.创建EMR集群 1.登录EMR on ECS控制台 2.软件设置 3.硬件设置 3.基础配置 2.配置 1.组件配置 2.用户管理 3.安全组 4.Gateway 3.组件UI 1.简介 1.什么是EMR EMR是运行在阿里云平台…

国际安全领域顶会NDSS 2023录稿整理 (上)

隐私计算研习社 NDSS是网络和系统安全领域的四大顶级国际学术会议&#xff08;BIG4&#xff09;之一&#xff0c;第三十届会议于2023年2月27日到3月3日&#xff0c;在美国圣迭戈举办。本文将分上下两部分整理会议录取的94篇论文&#xff0c;并对论文进行分类&#xff0c;感兴趣…

【数据库概论】第七章 数据库设计

第七章 数据库设计 7.1 概述 1.数据库设计的基本步骤 数据库设计可以分为以下六个阶段 需求分析阶段 准别了解和分析用户的需求&#xff08;包括数据与处理&#xff09;。需求分析是整个设计过程的基础&#xff0c;觉定了在其上构建数据库的速度和质量。需求分析做不好可能会…

TwinCAT 3 ADS Monitor使用

TwinCAT 3 ADS Monitor使用 《20211022 TwinCAT ADS Monitor的使用方法》 《TwinCAT3.1从入门到精通》 TF6010 | TwinCAT 3 ADS Monitor 以上是基础知识&#xff0c;下面是实操 先在Instance中查看变量的偏移量&#xff0c;即地址 多变量读写测试 结果如下&#xff0c;4条指令…

GPC爬虫池有什么用?

GPC爬虫池有什么用&#xff1f; 答案是&#xff1a;100%提高外贸网站在Google搜索引擎的收录量。 众所周知&#xff0c;要想免费从谷歌搜索引擎获取流量&#xff0c;就好做好谷歌SEO。 一个网站是否能获取谷歌的认可&#xff0c;有一个重要的技术指标&#xff0c;就是这个网…

R语言基础(一):注释、变量

R语言用于统计分析和绘制图表等操作。不同于Java等其它语言&#xff0c;R用于统计&#xff0c;而不是做一个网站或者软件&#xff0c;所以R的一些开发习惯和其它语言不同。如果你是一个编程小白&#xff0c;那么可以放心大胆的学。如果你是一个有编程基础的人&#xff0c;那么需…

数字化时代,你应该知道的BI

我曾经看到有人在讨论过商业智能BI的部署对于企业是否有实际意义&#xff0c;现在市场的数据已经证明商业智能BI在商业世界中&#xff0c;在企业的实践中证明了自己的价值&#xff0c;得到了广泛的认可。 一、什么是BI 有一点可能很多人没有想到&#xff0c;实际上商业智能BI…

CorelDRAW2023详解新增七大功能 ,CorelDRAW2023最新版本更新怎么样?

CorelDRAW2023新功能有哪些&#xff1f;CorelDRAW2023最新版本更新怎么样&#xff1f;让我们带您详细了解&#xff01; CorelDRAW Graphics Suite 2023是矢量制图行业的标杆软件&#xff0c;2023年全新版本为您带来多项新功能和优化改进。本次更新强调易用性&#xff0c;包括更…

如何使用vue创建一个完整的前端项目

搭建Vue项目的完整流程可以分为以下几个步骤&#xff1a;安装Node.js和npm&#xff1a;Vue.js是基于Node.js开发的&#xff0c;因此在开始搭建Vue项目之前&#xff0c;需要先安装Node.js和npm&#xff08;Node.js的包管理器&#xff09;。可以从官网下载Node.js安装包并安装。安…