【Linux运维】网络及网卡收发数据过程和Linux服务器排查丢包方法

news/2025/1/4 16:39:48/文章来源:https://www.cnblogs.com/o-O-oO/p/18646501

服务器丢包是网络通信中常见的问题之一,它会导致网络不稳定和数据丢失,进而影响业务的正常运行。面对这种情况,我们需要采取一系列措施来诊断和解决问题。以下是一些有效的解决方法和建议,帮助你应对服务器丢包问题。
首先,我们要知道网络数据是如何封装及流向的,涉及哪些设备。当两台电脑需要传输数据时,它们首先通过各自的网卡建立起网络连接。发送方电脑将需要传输的数据按照网络协议(如TCP/IP)封装成数据包,这些数据包包含了目标电脑的IP地址、端口号等信息,以确保数据能够准确地被接收方电脑识别和处理。一旦数据包准备好,发送方电脑的网卡将其发送到与之相连的网络设备(如交换机、路由器)上。网络设备根据数据包中的目标IP地址,通过查找路由表等机制,将数据包转发到接收方电脑所在的网络路径上。在这个过程中,数据包可能会经过多个网络设备和链路,直到最终到达接收方电脑的网卡。

其次,要了解电脑网卡是如何收发数据的。在接收数据时,网卡首先通过其物理接口(如RJ45接口)捕获来自网络传输介质(如双绞线、光纤等)上的模拟信号。这些信号随后被网卡的物理层(PHY)芯片进行模数转换、时钟恢复、信号均衡等处理,以提取出数字比特流。接着,MAC(媒体访问控制)层芯片负责将这些比特流解码,并根据以太网协议将其组装成完整的数据帧。数据帧在通过错误检测(如CRC校验)后被暂时存储在网卡的接收FIFO(先进先出队列)中。
随后,网卡利用DMA(直接存储器存取)技术,无需CPU干预,直接将数据帧从接收FIFO传输到主机内存中的特定缓冲区(通常是操作系统为网络栈分配的环形缓冲区)。一旦数据帧被成功传输到内存,网卡会触发一个硬中断来通知CPU有新的数据到达。CPU响应这个中断,进而触发软中断(或称为延迟过程调用)来处理这些数据。在软中断处理过程中,系统会关闭硬中断以避免后续数据到达时再次打断CPU,然后从缓冲区中取出数据帧,上传到网络协议栈进行解析、处理或转发。

在这个过程中,网络协议栈、网卡驱动程序、网络设备以及网络传输介质等多个组件和层次都发挥了关键作用,共同确保了数据的准确、高效传输。同时,为了保证数据传输的可靠性和安全性,还可能采用了诸如错误检测与重传、数据加密等技术。

链路层

首先,来看最底下的链路层。当缓冲区溢出等原因导致网卡丢包时,Linux会在网卡收发数据的统计信息中,记录下收发错误的次数。你可以通过ethtool或者netstat,来查看网卡的丢包记录。例如,可以在Linux中执行下面的命令,查看丢包情况:

[hik@HikvisionOS ~]$  netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eno1             1500 280564513      0 1014149 0      125719128      0      0      0 BMRU
lo              65536 208404457      0      0 0      208404457      0      0      0 LRU

输出中的RX-OK、RX-ERR、RX-DRP、RX-OVR ,分别表示接收时的总包数、总错误数、进入Ring Buffer后因其他原因(如内存不足)导致的丢包数以及Ring Buffer溢出导致的丢包数。TX-OK、TX-ERR、TX-DRP、TX-OVR也代表类似的含义,只不过是指发送时对应的各个指标。

还需要查看是否配置了tc规则,并查看有没有丢包。

[hik@HikvisionOS ~]$ tc -s qdisc show dev eno1
qdisc mq 0: rootSent 52814288926 bytes 125720226 pkt (dropped 0, overlimits 0 requeues 532)backlog 0b 0p requeues 532
qdisc pfifo_fast 0: parent :8 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 9014793964 bytes 20583761 pkt (dropped 0, overlimits 0 requeues 81)backlog 0b 0p requeues 81
qdisc pfifo_fast 0: parent :7 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 5054813125 bytes 14804826 pkt (dropped 0, overlimits 0 requeues 97)backlog 0b 0p requeues 97
qdisc pfifo_fast 0: parent :6 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 5659461166 bytes 15967932 pkt (dropped 0, overlimits 0 requeues 63)backlog 0b 0p requeues 63
qdisc pfifo_fast 0: parent :5 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 9185688609 bytes 18295290 pkt (dropped 0, overlimits 0 requeues 63)backlog 0b 0p requeues 63
qdisc pfifo_fast 0: parent :4 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 7781681631 bytes 15873604 pkt (dropped 0, overlimits 0 requeues 59)backlog 0b 0p requeues 59
qdisc pfifo_fast 0: parent :3 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 7958014505 bytes 18497947 pkt (dropped 0, overlimits 0 requeues 63)backlog 0b 0p requeues 63
qdisc pfifo_fast 0: parent :2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 5448067818 bytes 12943905 pkt (dropped 0, overlimits 0 requeues 59)backlog 0b 0p requeues 59
qdisc pfifo_fast 0: parent :1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1Sent 2711768108 bytes 8752961 pkt (dropped 0, overlimits 0 requeues 47)backlog 0b 0p requeues 47

如果发现有TC规则,可以使用如下命令删除

tc qdisc del dev eno1 root 规则名称 loss 规则中的百分比

网络层和传输层

[hik@HikvisionOS ~]$ netstat -s
Ip: Forwarding: 1 //开启转发 31 total packets received //总收包数 0 forwarded //转发包数 0 incoming packets discarded //接收丢包数 25 incoming packets delivered //接收的数据包数 15 requests sent out //发出的数据包数 
Icmp:0 ICMP messages received    //收到的ICMP包数 0 input ICMP message failed //收到ICMP失败数ICMP input histogram: 0 ICMP messages sent         //ICMP发送数 0 ICMP messages failed     //ICMP失败数 ICMP output histogram: 
Tcp:0 active connection openings //主动连接数 0 passive connection openings //被动连接数 11 failed connection attempts //失败连接尝试数 0 connection resets received //接收的连接重置数 0 connections established //建⽴连接数 25 segments received //已接收报⽂数 21 segments sent out //已发送报⽂数 4 segments retransmitted //重传报⽂数 0 bad segments received //错误报⽂数 0 resets sent //发出的连接重置数 
Udp:0 packets received 
... 
TcpExt: 11 resets received for embryonic SYN_RECV sockets //半连接重置数 0 packet headers predicted TCPTimeouts: 7 //超时数 TCPSynRetrans: 4 //SYN重传数 

iptables

除了网络层和传输层的各种协议,iptables和内核的连接跟踪机制也可能会导致丢包。所以,这也是发生丢包问题时,我们必须要排查的一个因素

从这儿你可以看到,连接跟踪数只有54,而最大连接跟踪数则是 262144。显然,这里的丢包,不可能是连接跟踪导致的。
接下来,我们可以通过iptables -nvL命令,查看各条规则的统计信息。

素材来源官方媒体/网络新闻

​>原创 晓致知 电脑知识

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教育资源库:AI知识库在教学资源共享中的作用

一、引言 在当今教育领域,教学资源共享已成为提升教学质量和促进教育公平的重要手段。然而,传统的教学资源共享方式面临着诸多挑战,如资源检索效率低下、资源质量参差不齐、难以实现个性化学习等。随着人工智能技术的快速发展,AI知识库作为一种新兴的智能工具,正逐步改变教…

风险管理新视角:AI知识库在金融风险评估中的应用

一、引言 金融风险评估是金融机构运营中的关键环节,它直接关系到金融机构的稳健运营和客户的资金安全。然而,传统的金融风险评估方法往往依赖于人工经验和历史数据,存在评估周期长、准确性不足等问题。随着人工智能技术的兴起,AI知识库作为一种智能风险评估工具,正逐渐在金…

cMT-SVR服务器使用笔记

1,特点 (1) cMT-SVR100和cMT-SVR102的区别: cMT-SVR102内建EasyAccess2.0授权; (2) cMT-SVR200和cMT-SVR202的区别: cMT-SVR202内建EasyAccess2.0授权; (3) cMT-SVR200和cMT-SVR202支持10.5VDC~28VDC宽电压输入, cMT-SVR100和cMT-SVR102不支持宽电压输入; (4) USB口作…

案件分析助手:AI知识库在法律研究中的应用

在法律研究领域,案件分析是一项复杂而繁琐的工作。传统的案件分析方法往往依赖于律师和法学家的经验和直觉,以及大量的文献查阅和案例对比。然而,随着人工智能(AI)技术的不断发展,AI知识库正逐渐成为法律研究的智能案件分析助手。本文将探讨AI知识库在法律研究中的应用,…

建筑设计优化:AI知识库在建筑设计中的创新应用

随着科技的飞速发展,人工智能(AI)已经渗透到各行各业,建筑设计领域也不例外。AI知识库作为一种高效的信息管理和应用工具,正在逐步改变建筑设计的传统模式,引领建筑设计进入一个新的优化时代。本文将探讨AI知识库在建筑设计中的创新应用,并分析其对设计效率、设计质量和…

Win32汇编学习笔记01.环境配置

Win32汇编学习笔记01.环境配置-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 环境配置 masm32下载 官网:http://www.masm32.com/安装成功标志环境配置:将masm32下的bin目录添加到path 新建include,将masm32目录下的inclcude目录添加进去 新建lib,将mas…

JVM实战—7.如何模拟GC场景并阅读GC日志

大纲 1.动手模拟出频繁Young GC的场景 2.JVM的Young GC日志应该怎么看 3.代码模拟动态年龄判定规则进入老年代 4.代码模拟S区放不下部分进入老年代 5.JVM的Full GC日志应该怎么看 6.问题汇总1.动手模拟出频繁Young GC的场景 (1)程序的JVM参数示范 (2)如何打印出JVM GC日志 (3)示…

DI入门 -2025/1/1

applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://…

Leetcode刷题第三天-二分查找

力口二分查找162、167、209、240162. 寻找峰值 - 力扣(LeetCode) 没二分,数组头尾分别插入最小值和最大值,比较num[i-1]<num[i]>num[i+1]class Solution:def findPeakElement(self, nums: List[int]) -> int:if not nums:return Nonemax_num,min_num=min(nums)-1,…

linux系统变量配置与脚本

一、为什么要配置linux的环境变量 添加环境变量之后可以直接在 termianl 中运行 shell 脚本、 可以在 运行 界面直接运行 shell 脚本 可以为命令添加别名等操作,方便输入指令 可以添加函数,方便将常用组合写成一条命令,比如git的提交操作,经典的三条指令二、如何配置linux环…

linux系统变量配置

一、为什么要配置linux的环境变量 添加环境变量之后可以直接在 termianl 中运行 shell 脚本、 可以在 运行 界面直接运行 shell 脚本 可以为命令添加别名等操作,方便输入指令 可以添加函数,方便将常用组合写成一条命令,比如git的提交操作,经典的三条指令二、如何配置linux环…

BUUCTF Misc刷题37

37、[BJDCTF2020]你猜我是个啥 随波逐流梭了