服務器網絡問題分析之丟包


一、關於 ethtool

  • 獲取設備信息及診斷信息

  • 獲取設備統計數據

  • 控制因特網設備速率(speed)、全雙工(duplex)、自動協商(autonegotiation)、流控(flow control)

  • 控制 checksum offload 及其它設備 offload

  • 控制 DMA ring sizes 及中斷 moderation

  • multiqueue 設備的接收隊列選擇

  • 閃存固件升級

二、丟包查看

ifconfig:

 

或:cat /proc/net/dev

三、error 查看:

ethtool -S  eth0 | grep errors

 

根據相應的錯誤進行處理。

四、關於ring buffer:

網絡數據傳輸:數據幀傳輸,由網卡讀取並放入設備緩沖區ring buffer,當網絡數據包到達的速率快於內核處理的速率時,ring buffer很快會被填滿,新來的數據包將被丟棄。

查看 ring buffer 設置:ethtool -g eth0:

設置 ring buffer :ethtool -G eth0 rx 新值。

五、關於 netdev_max_backlog:

netdev_max_backlog是內核從網卡收到數據包后,交由協議棧(如IP、TCP)處理之前的緩沖隊列。每個CPU核都有一個backlog隊列,當協議棧處理速度滿足不了接收包速率時會發生丟包。

查看數據處理情況:/proc/net/softnet_stat

行:一行代表一個cpu

列:第一列為接收的總包數;第二列為由於溢出丟棄的包數。

查看當前 netdev_max_backlog:cat /proc/sys/net/core/netdev_max_backlog

設置netdev_max_backlog:sysctl -w net.core.netdev_max_backlog=4096 或者 echo "4096"  > /proc/sys/net/core/netdev_max_backlog

六、關於 rp_filter 反向路由過濾導致丟包:

反向路由過濾機制是Linux通過反向路由查詢,檢查收到的數據包源IP是否可路由(Loose mode)、是否最佳路由(Strict mode),如果沒有通過驗證,則丟棄數據包,設計的目的是防范IP地址欺騙攻擊。rp_filter提供了三種模式供配置:

0 - 不驗證

1 - RFC3704定義的嚴格模式:對每個收到的數據包,查詢反向路由,如果數據包入口和反向路由出口不一致,則不通過

2 - RFC3704定義的松散模式:對每個收到的數據包,查詢反向路由,如果任何接口都不可達,則不通過

查看設置:cat /proc/sys/net/ipv4/conf/eth0/rp_filter

設置:所有不驗證:sysctl -w net.ipv4.conf.all.rp_filter=0 | 網卡eth0不驗證:sysctl -w net.ipv4.conf.eth0.rp_filter=2

七、關於 tcp_max_syn_backlog 半連接隊列:

TCP傳輸中服務器收到SYN包但還未完成三次握手的連接隊列,服務器保持的半連接數超過tcp_max_syn_backlog,則丟棄新包。

查看:/proc/sys/net/ipv4/tcp_max_syn_backlog

設置:sysctl -w net.ipv4.tcp_max_syn_backlog=xxxxx

查看是否有丟棄情況:dmesg | grep "TCP: drop open request from"

查看隊列使用情況(查詢SYN_RECV狀態):netstat -ant|grep SYN_RECV|wc -l

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM