自從有了網路便有了網路故障,網路故障的最大體現是丟包。如何對丟包進行診斷一直是乙個令工程師頭疼的問題,可關注丟包原因分析的人卻非常的少。
現實
目前對於網路**現丟包的傳統處理步驟如下:
也許你會覺得一一核對**流程表項太慢太麻煩,熟悉晶元的處理流程和功能之後你會找到如下一種處理方式:
雖然看起來步驟很明確,但是執行這些步驟需要對其中的流程以及機制了解的非常清楚,才能準確的診斷出丟包的原因。目前各個廠商對於丟包的診斷沒有更進一步的手段和方案。
為什麼會這樣
是什麼導致了網路診斷的手段在長時間都沒有什麼實質性的發展呢?主要是因為以下幾個方面:
nos本身的封閉性
晶元廠商提供的diagnosis具有相當的侷限性。
理想
想象一下當你發現網路不通的時候,你開啟乙個應用程式,這個程式告訴你,你的某個報文在網路中的某一台裝置的某個口上因為某種原因丟棄了,然後你核對對應配置,發現配置被人修改了,然後修改配置後就通了。前後用不上幾分鐘就能解決問題。相比傳統的兩種方式,是不是要簡便的多了?
為什麼這麼做
看到這裡人們不禁要問了,為什麼傳統的網路廠商都沒有這麼做,應該是沒有辦法做到這樣的吧?
而今是乙個開放網路作業系統盛行的時代,隨之一起而來的是白盒交換機,白盒交換機的控制面cpu不再是侷限在傳統的mips/ppc的架構,支援x86、arm的有,而交換機伺服器化的趨勢也在醞釀,可以預計將來x86的交換機將會大行其道。
總的來看這個時代有兩個重要的趨勢:
診斷與分析的難度和開放網路的趨勢使得開發便利的診斷分析成為了一種必要,同時這也是乙個機會。
怎麼做
理想是一步步實現的,要實現這個理想需按如下幾步走:
一小步
對於丟包我們首先想到的是使用者關注是哪個埠在發生丟包,其丟包原因是什麼,因此對show命令的內容進行了如下的定義。
在裝置上快取這些丟包的case,並更新其最後發現的時間。
接下來就是如何獲取這些丟包的資訊,針對資料中心場景下20多種丟包原因進行分析,首先將其分為兩類:
情況一
通常**流水線中的大部分的丟包都可以獲取到其丟棄的原始報文,對應的有:
對於這些的丟包情況,可以從晶元獲取其原始的報文進行分析然後歸類統計。
情況二
在整個**流水線中也存在部分的丟包是無法提供原始報文的,對應的有:
對於這些丟包情況,可以從晶元的狀態資訊中獲取對應的狀態,然後進行歸類統計。
同時為了支援將資訊匯出以為後續的分析提供支援,定義了agent匯出丟包資訊的格式,如下:
上述結構中包含了截斷的前128位元組的報文(如果能有原始報文),這裡主要是提供給應用程式分析使用。
進一步
完成第一步之後,對於部分場景依然只能得到乙個模糊的丟包的原因,只能對應上直接原因,對於找到根本原因還差一步,例如l3 lookup miss,如果無法知道報文的目的口ip,那麼就無法繼續分析下去,因此,使用者檢視對應的報文的詳細資訊的需要在此時變的非常重要。
同樣我們需要分析報文資訊哪些在這種場景下對使用者是必要的,分析的結果如下:
於是在裝置的快取的丟包case中不僅儲存了丟包的metadata資訊,還儲存了該case對應最近乙個丟包的報文的解析結果。在cli上就可以通過命令將對應的資訊以以下格式展示出來。
以上給出了三個示例,其中兩個是可以獲取到原始的丟棄的報文資訊的,另乙個是無法獲取的。
同樣對於匯出的資訊,也需要支援解析,通過wireshark的lua外掛程式進行展示,展示的結果如下所示。
一大步
將全網的丟包資訊全部匯集到乙個collector上進行統計分析,然後提供以下方式的統計顯示,並可盡量還原其對應的流量大小。
通過這些統計的方式可以發現網路中存在的危險和配置問題(like kill all possible warning in coding),整個網路盡在掌握。
擁有了這個網路診斷分析功能之後,我們只需要簡單的兩步就可以確定丟包的原因:
我的理想與現實
很久了,都不曾去思考我的理想,只是是時時刻刻想到了我正在遭遇的現實。生活的經歷和身邊的事情,讓我時時刻刻關心著 近憂不斷 幾乎不敢去 遠慮 思考未來的生活,於是我不懂浪漫,甚或不懂感情,更不懂得愛情,現實但是更需綿要浪漫的愛情。我不知道自己究竟需要什麼,有的時候有一種得過且過的茫然和無助,心中感覺只...
ping 網路抖動與丟包
基本概念 ping ping指乙個資料報從使用者的裝置傳送到測速點,然後再立即從測速點返回使用者裝置的來回時間。也就是俗稱的 網路延遲 一般以毫秒 ms 計算 一般ping在0 100ms都是正常的速度,不會有較為明顯的卡頓。測試ping值方法 在powershell中輸入ping 網路位址 通過c...
碼農的理想與現實
對於還未入坑的小鮮肉們,可能你們想象中的工作是像電影中的黑客一樣,在漆黑的控制台介面下,噼里啪啦的敲擊著鍵盤,像 龍貓 中的樹木一樣快速生長起來,最後帥氣的敲下回車鍵,程式完美執行。但實際情況卻是你要閱讀大量的 和文件,想盡辦法要先明白這玩意到底都有啥特性,需要哪些關鍵操作,然後小心翼翼的改上那麼一...