最后更新:2021-12-09 01:59:30 手机定位技术交流文章
找不到 Linux 的网络滴。 blog syxdevcode
物理介质上的数据框首先由NIC(网络适配器)接收,然后储存在环缓冲装置的内缓冲区,然后由干扰过程触发到Softirq,在那里,环缓冲的大小从一个卡设备到下一个卡设备不等。当网络数据包比内核处理(消费)更快到达(生产)时,环缓冲将很快满,新的数据集将丢弃。
https://syxdevcode.github.io/2021/03/01/Linux%E4%B8%8B%E7%BD%91%E7%BB%9C%E4%B8%A2%E5%8C%85%E6%95%85%E9%9A%9C%E5%AE%9A%E4%BD%8D/
转载:
鸟眼观察云层网络倾弃场 和不对称

如图所示,物理介质上的数据框首先由NIC(网络适配器)接收,并写入设备内部缓冲区,然后由Softirq(由中断过程引发)使用,环缓冲的大小视网络卡设备的不同而不同。当基于网络的数据包比内核处理(消耗)更快到达(生产)时,环缓冲器很快会是完整和新鲜的数据集将被丢弃。
缺失的环缓冲包统计数据可通过ethtool 或/proc/net/dev, 以及贴有fifo标签的统计项目提供:
ethtool -S eth0
ethtool eth0
观察与网络卡和上游网络设备协商的预计速度和模式。
解决方案:
ethtool -r eth0;
当 RX 缓冲器满载或其它网络卡资源受限时,打开传送到开关端的流量控制的制表符数为 Rx_ flow_ control_xon。当资源可用时,关闭流量控制的制表符数为 tx_ flow_ control_xoff。
ethtool -a eth1
大多数计算机网络卡以非复杂方式运作,这意味着他们只接受网络端口中标明自己数据的预定地址,如果提交的目的不是接口端端的 Mac 地址,则往往删除软件包。这往往是基于源的静态回转输入或动态学习正转输入没有及时更新的情况,但基于目的地的mac 地址已经改变(网卡已经改变),没有收到给源的任何通知(例如,更新报告已经丢失,中间开关是不正常的,等等)。
查看:
解决方案:
这些异常现象并不常见, 但是如果它们不是上面全部列出的,
Netcard 的硬件版本 :
检查网络卡片芯片中的问题,如果安装的版本符合预期,以及ethtoto-i eth1:
eth1:

向制造商询问任何已知问题、新版本等等;
网线接触不良:
如果网卡统计中的 crc 误差计数增加,这很可能是由于网络联系不畅所致,您可以通知网络管道以下内容:

解决办法包括重新插入网络或以新的网络取代网络,确保插座符合港口标准等等;
报文长度丢包
网页卡有一系列接收准确信息的范围,一般范围为64-1518,电子邮件的长度通常涵盖这一范围:发送者端的正常情况得到填充或拍摄,偶尔出现异常情况,导致发送者信息中包裹不规则地下降。
查看:

解决方案:
1 更改接口的 MTU 设置以打开以太网框架;
2 发件人打开PATH MTU, 以便实现公平分割;
网卡滴数快速下降:

查看:ifconfig eth1/eth0等接口

Netdev_max_backlog 是在内核收到NIC(网络接口卡,通常称为网络适配器)的软件包之前的缓冲队列。 IP IP, TCP 。 Each CPU 核心有一个黑色队列, 与 Ring Buffer 一起, 当软件包以比内核处理速度更快的速度收到时, 当 CPU 的黑格队列增加时, 当设定的 Netdev_ max_ backlog 设置到达时, 将会被删除 。
查看:
通过查看/proc/net/softnet_stat可以确定是否发生了netdev backlog队列溢出:

从 CPU0 开始,每行显示每个CPU的状态;每列依次代表一个CPU的统计:第一列提供因处理过程中断而收到的包件总数;第二列显示因 Netdev_max_backlog 队列溢出而丢弃的包件总数。从以上输出可以看出,该服务器没有因 Netde 而减少的包件。
解决方案:
Netdev_max_backlog 的默认值为 100, 在高速链上, 可能会出现第二个计数不是零的情况, 而内核参数可以修改. net. I'm not sure you're talking about, core.Netdev_max_backlog 会处理下列问题:
单核CPU破解率很高,导致申请无法接收和接收包件或接收和接收包件的速度缓慢,即使Netdev_max_backlog 队列被设定在一段时间内被删除、处理速度和接收离线卡的速度;
查看:mpstat -P ALL 1

(a) 100%的单核软中断,导致申请无法缓慢地接收和接收或接收包件;
解决方案:
查看:ethtool -x ethx;
调整:ethtool -X ethx xxxx;
cat /proc/interrupts调整:
- CPU 超过网卡队列数 :
查看网卡队列ethtool -x ethx;
(a) 协议仓库启动和配置RPS;
2) CPU低于破碎的卡片排队数量,可以关闭RPS并观察其效果:
echo 0 > /sys/class/net/<dev>/queues/rx-<n>/rps_cpus
四. Numa CPU 调整和调整网卡的位置,以提高内核处理性能,为应用程序收集软件包提供更多的CPU,并减少投放软件包的可能性。
见网卡上的Numa位置:
(b) 上述中断,以及在RPS设置中重新安装Numa CPU对遮罩至关重要。
五,尝试激活 分裂聚合物。
查看 :
调整:
网卡驱动袋处理简要概述:

相邻系统下降回数
放下 Arp_ignore 配置软件包 。
rp_ignore 参数的作用是规范当系统收到外部正转请求时是否返回正转。 rp_ignore 参数通常用于值为 0, 1, 2, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 38, 38, 38, 38, 38
查看:sysctl -a|grep arp_ignore

解决办法:根据实际情况设定适当的数值。


Arp_ filter 配置的拖放软件包
在多界面系统中(例如,对 tweak 云的弹性网页卡配置),这些界面可以响应回声请求,这意味着终端可以学习新的Mac地址,由于接收信件接口的Mac地址和Mac地址之间的差异,进一步传输可能导致包丢失,而ARp_过滤器主要用于适应现场。
查看:sysctl -a | grep arp_filter

解决方案:
(b) 根据当前场景调整相应的数值;默认情况下,这一过滤规则是封闭的,但不寻常的条件可以打开它。
0: 默认值,这意味着在回答简单查询时,对接口不进行校验。
1: 发出信号,表示在回复回复回复请求时,如果该接口与接收请求所使用的接口相同,即对接口进行核查,而这一差异被忽略;
arp表满导致丢包
例如,由于突然的 arp 表格元素数量超过了 Ark 的默认设置, 电文发送失败时生成部分 rp 元素, 导致发送失败, 软件包丢失 :

查看:
cat /proc/net/stat/arp_cache完整表格 :
ip n|wc -l查看系统配额:
当有足够的内存时, gc_thresh3 值可以视为整张正数表的大小 。

溶液:根据实际最大正数调整正数表的大小(例如,进入额外机器的最大数量)。
Arp 请求使用缓存队列来填充空包 。
查看:
调整快取队列大小以满足客户需求 unres_qlen_ bytes
sysctl -a | grep unres_qlen_bytes

接口 IP 地址配置的 Drop 软件包
ip r 显示表子子系统本地 grep这种降压包通常发生在几个IP场景上,多层次层配置失败,导致包丢失到适当的 ip;
解决方案:
ip a add 1.1.1.1 dev eth0ip r add local本机ip地址dev eth0 table local;路由丢包
路由配置丢包
查看:
ip rule:
然后我们找到匹配的路径图

哦,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,
重新配置正确的路线作为变通办法。
反向路由过滤丢包
反向线路过滤是Linux的反向路线搜索,该搜索确定收到的源IP是否无障碍(丢失模式)、最佳路径(石墨模式),或者如果未经验证,则丢弃数据包,以保障IP地址免遭欺诈性袭击。
查看:
Rp_filter 有三个配置模型:
Rp_ filter 的当前政策配置 :
cat /proc/sys/net/ipv4/conf/eth0/rp_filter
如果设定为1,则必须确定东道方的网络环境和路线战略是否可能导致客户的一揽子计划未经逆向路线核查。
推理是,由于该方法在网络一级运作,如果客户可以连接到Ping服务器,则可以排除这一要素。
解决方案:
将 rp_ filter 更改为 0 或 2 :
防火墙丢包
客户确定了导致取消包裹的限制。
查看:
iptables -nvL |grep DROP
解决办法:修改防火墙规则;
连接跟踪导致丢包
连接跟踪表溢出丢包
内核输入使用 ip_contract 模块输入ipables 网络包的状态,并保存表格中的每个记录(本表格为内存)。/proc/net/ip_conntrack如果网络条件繁忙,例如高连通性、高连通性等,导致逐步占用这个不易填满且可以自行清理的可填表格空间,则表格记录将留在表格中,直到IP源发布 RST 软件包,但如果出现攻击、错误的网络配置、有问题的路由器/路由装置、有问题的网页卡等,则源IP发送了这个RST软件包,该软件包在表格中积累并积累到满满。 在任何一种情况下,当表格满时,软件包就满了,外部无法连接到服务器。 内核将给出以下错误信息:kernel: ip_conntrack: table full, dropping packet;
见最近的连接路径 :
cat /proc/sys/net/netfilter/nf_conntrack_max
解决方案:
ct 造成冲突损失,造成包件损失
另一个组织者(_A)cat /proc/net/stat/nf_conntrack你可以检查所有CT 异常的投放包。

溶液:内核补丁可用于修复或升级内核版本(混合补丁修改)。
丢弃 tcp 连接连接连接音轨安全检查
包件损失:由于连接没有中断,因此没有合理的更新,但曾经出现过某些情况,如服务结束前包件异常或阴蒂(电文没有通过链接跟踪模块更新计算)。window范围,导致损失后续报告安全检查的包件;商定储存nf_conntrack_tcp_be_liberal来控制这个选项:
查看:
查看配置 :
查看log:
一般而言, Netfileer 模块不默认装入日志, 必须手动装入 。
当我们拿到包裹后,我们会通过系统
(b) 解决办法:根据对实际渔获量包的检查,可以试图关闭试验,不管投放物是否由机制触发。
分片重组丢包
情况总结:超时
查看:
解决方案:改变超时。
根据frash_high_thresh,超过特定级别的内存可能会触发系统安全检查丢弃包。
查看:
解决方案:调整大小
用分门别类的安全范围检查下装袋
查看:
解决方案: 将 ipg_ max_ dist 更改为 0, 并禁用此安全检查 。

在某些情况下,frag_max_dist 设置不适用:
与128的系统默认值128相比,巴克特冲突链过长。
查看:
火山灰因热补丁而变大了
由于系统缺陷,无法创建新的队列。
查看方法:
要看到下降, 请使用以下链接: dropwatch. com 。

解决方案:
紧急情况下,可以用/proc/sys/vm/drop_caches为了释放虚拟记忆;
MTU丢包

查看:
ifconfig eth1/eth0,默认是1500;解决方案:
tcp层丢包
时间离包装太远了
大量的TiMEWAIT假想是现成的,必须在一个连接时间短的高端TCP服务器上加以解决。 TCP服务器一旦请求由服务器处理,就自动关闭连接。TERMEWAIT中将有许多插座。如果客户的联手仍然很高,某些客户将表明目前缺乏连通性。
查看:
查看系统log :
查看系统配置:
解决方案:
时间戳异常丢包
当许多客户处于同一个NAT环境并访问服务器时,各种客户的时间安排可能不一致。 当服务器收到相同的NAT请求时,就会出现时间纠错,而后一数据包通常以客户提供SYN的形式被删除,但服务供应商对ACK没有反应。
检查:
解决方案:
不能启用通过NAT节点穿行的网络路线 。net.ipv4.tcp_tw_recycle;
Quan Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest Quest
原理:
(三手握手) tcp 状态机器

协议处理:

半连接队列( 同步队列) 就是一个例子 :
在三个“握手”协议中,服务器保留一个半连接队列,作为每个客户的 SYN 软件包,并有一个条目(服务所有人在收到SYN 软件包时创建了一个请求_sock 结构,存储在半连接队列中),这表明服务器已经收到SYN 软件包,并向客户发送确认其正在等待客户软件包确认的确认(第二个握手将发送SYN+ACK供确认)。这些条目的连接在服务器的 Syn_RECV 状态中,当服务器收到客户的确认软件包时,删除了条目,服务器进入了设置的ED状态。 团队被列为SYN 队列,最大(64,/ proc/sys/net/ipv4/tp_max_syn_max_syn_backlog),机器的tp_max_syn_backlog被配置在/proc/syls/net/ipv4/tcp_max_syn_backlog 下;
第一个是整个连接队列( 接受队列 ) :
服务器在第三次握手中收到 ACK 报告后, 它会进入一个被接受的新队列, 其默认值为 128 Somaxconn, 表示 ESTAB 最多 129 的连接正在等待接受 (), 而积压的值应该由插入列表中的第二个参数( 锁定、 内背) 确定, 可以通过我们的应用程序在监听中配置 ;
查看:
连接建立失败, 导致同步失败 :
它还受到被放弃的连接的影响。
解决办法:让它变得更大。tcp_max_syn_backlog
连接满丢包
-xxx times the listen queue of a socket overflowed
查看:
net.core.somaxconn解决方案:
对不起,但包 被攻击 由合成食物。
目前,Linux默认再次释放SYN-ACK软件包5次,从1个开始,下一个再测试间隔是前一个间隔的两倍,再测试间隔的5个间隔是1个、2个、4个、8个、16个,总共31个,等待32个知道第5个时间太晚,所以T需要1个s + 2 + 2 + 4s + 8s + 8s + 16s + 32s = 63s
查看:
查看syslog:
kernel: [3649830.269068] TCP: Possible SYN flooding on port xxx. Sending cookies. Check SNMP counters.
解决方案:
PAWS机制丢包
理由:由于PAWS(防波数字保护)带宽高,TCP序列号可以在很短的时间内重复(循环/包装),可能导致在很短的时间内产生两个法律数据包,确认包和确认包的序列号相同,在同一TCP流中。
查看:
检查 Sysctl 是否启用了 tcp_ tw_ 回收和 tcp_ timestamp :
解决方案:
清除 tcp 时间戳选项,或者不打开NAT 环境的 tcp_tw_区域参数 。
TLP问题丢包
TLP主要旨在解决回落包再传输效率问题,TLP成功地防止了更长的RTO超时,从而提高了TCP的性能,如下所示:
TCP 尾部损失检验(TLP)是尾部损失检验(TLP)的缩写。
然而,在低时间延迟情况下(短链小包件),技术联络平台和延迟的ACK组合可能会造成低效率的再传输,导致客户对大量错误的再传输包的印象和反应延迟增加。
查看:
查看协议栈统计:
netstat -s |grep TCPLossProbes
查看系统配置:
sysctl -a | grep tcp_early_retrans

解决方案:
内存不足导致丢包
查看:
查看log:
dmesg|grep "out of memory"
查看系统配置:
解决方案:
基于TCP活动同时流动的系统参数调整,经常试图加倍或以其他方式增加,以测试缓解措施是否可实现;
TCP超时丢包
查看:
带上包,检查网络RTT:

用更多的工具检查当前的网络质量( hping, etc.) ;
解决方案:
关闭Nagle算法, 降低小包件的延迟度 。
关闭延迟ack:sysctl -w net.ipv4.tcp_no_delay_ack=1
TCP乱序丢包
TCP将暂时将这种情况描述为数据包的混乱,因为这是一个时间问题(可能数据包延迟到达),而放弃包将意味着重新传输。 当TCP意识到包件的混乱时,ACK立即意识到,ACK TER部分所含的TSEV值将记录目前接收者收到测序电文的时刻。 这将增加数据包中RRT样本的价值并进一步导致RTO的延伸。 这无疑对TCP是有用的,因为TCP有足够的时间来判断包件是否不正常或丢失以防止不必要的数据重新传输。
TCP紊乱和丢弃决定(使用重新排序更新算法) - 理论-网络过滤器、iptables/OpenVPN/TCP 授权书: - (- CSDN 博客_替换)
另一个组织者(_A)

解决办法:如果多通道传输状况或网络质量差,通过调整以下数值,系统向TCP的无序传输的误差率可以提高:

拥塞控制丢包
TCP算法随着互联网的出现而改变和发展。
Reno、 NewReno、 NewReno、 NewReno 和基于软件网络缺失的事件是被动的。 即使网络负荷高, 协议也不会自动降低自己的传输速度, 只要软件包没有拥堵, 协议不会自动降低自己的传输速度。 最初为出口转发的路由器比小, TCP很容易用于建立全球同步和低带宽利用率, 以及后来路由器制造商因硬件成本降低而不断增加 Boffer 和脂肪管道, 并且基于丢失的软件反馈协议继续使用路由器布弗, 同时增加带宽利用率的利用率, 也意味着在软件包被封后会增加网络的震动。 此外, 以高带宽和RRTs为主的长节流速度, 用于出口的最初路由路由器传输的最初路由器路由器传输的最初速度下降, 并且通过自动自动发送的节时序、 节路由机流生成的节流控制, 使得BCP的最大节流速度持续使用。
4. 内核首次使用了BBR Condensation Control Algorithm的初始版本,该版本比其他算法更健全,但在某些情况下存在缺陷(缺陷),以及BBR在实时音频和视频方面的问题,这些对立方体而言不够具有竞争力。
问题是,在BBR Probett阶段只发布了四个一揽子计划,而交付率的大幅度下降可能会在Caden造成延误和问题。
查看:


解决方案:
UDP层丢包
收发包失败丢包
看看净统计数据。
如果有连续缓冲错误/ 发送缓冲错误的数数;

解决方案:
投放袋将被发送到折叠夹缓存处 。
查看:
netstat -s|grep "packet receive errors"
解决方案:
具体大小调整原理:
没有任何设定值的缓冲区的面积是最佳的,因为根据没有设定值的缓冲区的情景适当情况,最佳规模会波动,最佳规模会波动,因为最佳规模会根据情况波动。
估计缓冲区的理由:在数据通信中,带宽长度系数(又称带宽延缓产物、带宽长度系数、带宽长度质量等)是指数据链的容量(每秒比特)以及进出通信的延迟度(单位)。 [1][2] 结果是以比特(或字节)计算的数据总量,相当于网络线上任何时刻的最大数据量,数据虽已发送,但尚未确认。
BDP=带宽乘以RRT
可以通过计算当前节点的带宽和统计平均时间,并将其与下列常见情况进行比较,来计算发展局或缓冲区的大小:

11. 管理活跃的TCP/IP网络、IPMP和IPIP隧道
投放软件包时, 请使用连接设置的 tcp 数 。
查看:
请见前面的 TCP 链接队列分析 。
解决方案:
指定数量相当的连接队列,在ACK接收到第三个握手后,加入一个称为接受的新队列,该队列的值默认为128索马克斯康,表明与最多129人的 ESTAB 连接正在等待接受 (),而积压的值应该由插件(in lockfd, intbacklog)中的第二个参数提供,该参数可以由我们的应用程序配置;
申请发送得太快,造成袋子掉落。
查看统计:
netstat -s|grep "send buffer errors"
解决方案:
setsockopt(s,SOL_SOCKET,SO_SNDBUF, i(const char*)&nSendBuf,sizeof(int));附件:内核倾弃场一览表:

1. 人种观察工具
理由: 听 kfree_skb 函数或事件( 被丢弃 Web 消息时的功能), 并显示相关的调用堆叠; 如果您想知道 Linux 系统正在运行哪个功能, 请使用 dropwatch 工具, 该工具会监听系统滴落并打印投放软件包发生时的函数 :

tcpdump是下一个强大的Unix网络捕捉工具,用户可以拦截和显示TCP/IP和网络传送或接收的其他数据包,以便与计算机连接。

抓包命令参考:
Man page of TCPDUMP
数据包分析:
1. 使用有线卫星工具进行分析,参考:Wiresark数据包实地业务分析。
2. 可转换成CSV数据,用于使用Excel或shell分析个别现场报告。
在Linux上,可以用沙皇指挥线工具来检查:
tshark(1)
本文由 在线网速测试 整理编辑,转载请注明出处。