錯包(errors packets)的累積不僅影響網(wǎng)絡(luò)性能,還可能導(dǎo)致業(yè)務(wù)中斷,甚至引發(fā)嚴重的系統(tǒng)故障
本文將詳細講述一次關(guān)于Linux錯包排查的經(jīng)歷,通過實際案例展示如何有效地定位和解決這一問題
一、問題現(xiàn)象 某公司的服務(wù)器側(cè)運維人員在日常監(jiān)控中發(fā)現(xiàn),多臺服務(wù)器的網(wǎng)卡上均存在錯包,并且這些錯包數(shù)量一直在持續(xù)增長
通過ifconfig命令查看,可以明顯看到網(wǎng)卡RX(接收)方向上有大量的errors包
這一問題引起了廣泛關(guān)注,因為隨著業(yè)務(wù)即將上線,任何系統(tǒng)不穩(wěn)定因素都可能導(dǎo)致項目延期,給公司和客戶帶來巨大損失
初步判斷,網(wǎng)絡(luò)工程師首先想到了硬件故障的可能性,于是嘗試更換光模塊和光纖,但經(jīng)過幾天的努力,問題依舊存在
通過不同交換機接入嘗試,情況也沒有改善
顯然,問題并非出在硬件設(shè)備上
二、初步排查 在接手這一棘手問題后,我首先決定深入了解Linux網(wǎng)卡處理數(shù)據(jù)包的流程
Linux系統(tǒng)處理網(wǎng)絡(luò)報文的過程大致如下: 1.物理接收:網(wǎng)絡(luò)報文通過物理網(wǎng)線發(fā)送到網(wǎng)卡
2.DMA傳輸:網(wǎng)絡(luò)驅(qū)動程序利用DMA(Direct Memory Access)技術(shù),將報文從網(wǎng)卡讀取到ring buffer中,這一過程不需要CPU參與
3.內(nèi)核處理:內(nèi)核從ring buffer中讀取報文,進行IP和TCP/UDP層的邏輯處理,然后將報文放入應(yīng)用程序的socket buffer中
4.應(yīng)用處理:應(yīng)用程序從socket buffer中讀取報文進行處理
為了獲取更詳細的信息,我使用了ethtool命令,該命令提供了豐富的網(wǎng)卡配置和統(tǒng)計信息
通過ethtool –S ethX命令,可以查看特定網(wǎng)口的收發(fā)包統(tǒng)計信息
在這一步,我發(fā)現(xiàn)了rx_oversize_pkts_phy字段數(shù)量與網(wǎng)卡errors包數(shù)量高度匹配,這成為解決問題的關(guān)鍵線索
三、深入分析 為了進一步分析錯包的原因,我協(xié)調(diào)服務(wù)器運維人員在服務(wù)器上進行了抓包操作,使用tcpdump工具直接抓取接口上的所有數(shù)據(jù)包
由于此時業(yè)務(wù)流量不大,抓包操作相對容易,也為我們后續(xù)的分析提供了便利
在Wireshark中打開抓到的數(shù)據(jù)包,很快發(fā)現(xiàn)了一系列可疑的數(shù)據(jù)包
通過MAC前綴分析,這些數(shù)據(jù)包竟然來自同一品牌的打印機!由于服務(wù)器尚未上線,網(wǎng)卡數(shù)據(jù)包本身并不多,其中大部分竟然是發(fā)往這些打印機的廣播報文
這一發(fā)現(xiàn)讓我?guī)缀蹩梢源_定,這些廣播報文就是導(dǎo)致網(wǎng)卡errors包增長的原因
為了驗證這一點,我在交換機上通過源MAC地址查找,發(fā)現(xiàn)這些廣播報文都是從一條專線發(fā)上來的
由于交換機和云池服務(wù)器采用trunk對接,并且放通了多個VLAN,導(dǎo)致專線用戶和許多服務(wù)器處于同一個廣播域內(nèi)
四、解決方案 在確定了問題根源后,解決方案變得相對簡單
我將幾臺打印機的MAC地址在專線接入交換機上做了MAC黑洞過濾,即丟棄這些MAC地址的報文,不再將它們轉(zhuǎn)發(fā)到服務(wù)器
實施這一操作后,聯(lián)系服務(wù)器方查看,網(wǎng)卡上的errors包果然不再增長
然而,這一問題并未完全解決我心中的疑惑
為什么服務(wù)器網(wǎng)卡會將打印機的包定義為rx_oversize_pkts_phy包?我猜測,這可能是打印機使用的私有協(xié)議,協(xié)議號超出了標準限制
此外,為什么所有服務(wù)器會一直收到這些廣播包?除了處于同一個廣播域,還涉及交換機的處理機制
由于打印機和客戶端使用私有協(xié)議通信,交換機表項中一直沒有學(xué)到打印機的MAC地址,遇到未知單播報文會進行泛洪處理
五、網(wǎng)絡(luò)配置優(yōu)化 這次事件讓我意識到,網(wǎng)絡(luò)配置的優(yōu)化和監(jiān)控至關(guān)重要
以下是一些建議,可以幫助避免類似問題的發(fā)生: 1.網(wǎng)絡(luò)配置檢查:定期檢查網(wǎng)絡(luò)配置文件,如/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-eth0等,確保配置正確無誤
2.網(wǎng)絡(luò)性能監(jiān)控:使用tcpdump、Wireshark等工具定期抓包分析,及時發(fā)現(xiàn)并處理網(wǎng)絡(luò)異常
3.優(yōu)化路由配置:增加帶寬、優(yōu)化路由策略,提高網(wǎng)絡(luò)傳輸效率
4.硬件和驅(qū)動更新:定期更換性能更好的網(wǎng)卡,更新網(wǎng)卡驅(qū)動程序到最新版本,確保硬件和軟件的兼容性
六、總結(jié) 這次Linux錯包排查經(jīng)歷讓我深刻認識到,網(wǎng)絡(luò)問題的排查和解決不僅需要扎實的理論知識,還需要豐富的實踐經(jīng)驗和敏銳的洞察力
通過ethtool命令獲取詳細的網(wǎng)卡統(tǒng)計信息,結(jié)合Wireshark抓包分析,我們可以快速定位問題根源
同時,網(wǎng)絡(luò)配置的優(yōu)化和監(jiān)控也是預(yù)防類似問題的關(guān)鍵
在未來的工作中,我將繼續(xù)加強對Linux網(wǎng)絡(luò)原理的學(xué)習(xí)和實踐,不斷提升自己的技能水平
同時,我也將積極分享自己的經(jīng)驗和教訓(xùn),與同行們共同探討和解決網(wǎng)絡(luò)問題,共同推動網(wǎng)絡(luò)技術(shù)的進步和發(fā)展
通過這次錯包排查,我們不僅解決了實際問題,還收獲了寶貴的經(jīng)驗和教訓(xùn)
相信在未來的工作中,我們能夠更加從容地面對各種網(wǎng)絡(luò)挑戰(zhàn),確保系統(tǒng)的穩(wěn)定性和可靠性