使用大包ping對端進行MTU不一致的故障處理

2021-09-09 07:01:41 字數 3493 閱讀 9201

某次開局,使用quidway路由器與其他廠商的某路由器互連,並執行ospf協議。資料配置完畢後,一切正常,並在今後相當長的時間內裝置運轉穩定,但兩個月後,使用者反饋網路中斷。

登入到兩台路由器上,發現雙方連線正常,可以相互ping通對端位址。但ospf協議中斷

登入quidway路由器檢視鄰居狀態,發現鄰居狀態機處於exstart狀態。開啟相應的debug開關檢視相應的報文資訊,發現雙方都可以收到hello報文,但quidway路由器傳送dd報文後,一直沒有收到對方回應的dd報文;

登入其他廠商的那台路由器,開啟相應的debug開關,發現對方收到quidway路由器傳送的dd報文後,已傳送了相應的dd報文並予以回應。

原因分析:

初步斷定,quidway路由器沒有收到dd回應報文,但對方確實發出來了。

既然可以接收到hello報文,說明鏈路是通暢的,而且多播報文的收發也沒有問題。那麼有可能是對方傳送的dd報文有錯誤導致quidway路由器拒收,但檢視相應的資訊,並沒有報告接收到錯誤的dd報文。

仔細檢視了某廠商路由器的除錯資訊,發現這個dd報文很大有2000多位元組。會不會是由於報文太大導致的問題呢?試著ping了乙個2000位元組的報文,結果不通。那麼故障的原因很可能是 --- 由於雙方的mtu不一致導致大包不通

處理過程:

檢查配置,發現對方路由器的mtu設定為4000多,而quidway路由器的mtu設定為1500,於是修改對端路由器的mtu為1500,故障消除。那麼為什麼工程初期沒有問題呢這是因為前期dd報文長度小於1500位元組,而後來網路擴容導致路由資訊過多使dd報文的長度超過了1500位元組

建議和總結:

由於ping預設報文是56個位元組,所以顯示的ping通資訊只是表示56位元組的報文可以通而並不一定表示其他大小的報文仍可以通過。所以,應當善於使用ping的其他引數來進行故障處理

ping命令使用技巧 --

ping是個使用頻率極高的實用程式,用於確定本地主機是否能與另外一台主機交換(傳送與接收)資料報。根據返回的資訊,我們就可以推斷tcp/ip引數是否設定的正確以及執行是否正常。需要注意的是:成功地與另一台主機進行一次或兩次的資料報交換並不表示tcp/ip的配置就是正確的,我們必須執行大量的本地主機與遠端主機的資料交換,才能確信tcp/ip的正確性。

簡單的說,ping就是乙個測試程式,如果ping執行正確,我們大體上就可以排除網路訪問層,網絡卡,modem的輸入輸出線路、電纜和路由器等存在的故障,從而減小了問題的範圍。但由於可以自定義所發資料報的大小及無休止的傳送,ping也被某些別有用心的人作為ddos(拒絕服務攻擊)的工具,例如許多大型**就是被黑客利用數百台可以高速接入網際網路的電腦連續傳送大量ping資料報而癱瘓的。

按照預設設定,windows上執行的ping命令傳送4個icmp(網間控制報文協議)會送請求,每個32位元組資料,如果一切正常,我們應能得到4個回送應答。ping能夠以毫秒為單位顯示傳送會送請求到返回回送應答之間的時間量。如果應答時間短,表示資料報不必通過太多的路由器或網路連線速度比較快。ping還能顯示ttl(time to live存在時間)值,我們可以通過ttl值推算一下資料報已經通過了多少個路由器:源地點ttl起始值(就是比返回ttl略大乙個2的乘方數)-返回時ttl值。例如,返回ttl值為119,那麼可以推算資料報離開源位址的ttl起始值為128,而源地點到目標地點要通過9個路由器網段(128-119),如果返回ttl值為246,ttl起始值就是256,源地點到目標地點要通過9個路由器網段。

1. 通過ping檢測網路故障的典型次序

正常情況下,當我們使用ping命令來查詢問題所在或檢驗網路運**況時,我們需要使用許多ping命令,如果所有都執行正確,我們就可以相信基本的連通性和配置引數沒有問題;如果某些ping命令出現執行故障,它也可以指明到何處去查詢問題。下面就給出乙個典型的檢測次序及對應的可能故障:

ping 127.0.0.1

這個ping命令被送到本地計算機的ip軟體,該命令永不退出該計算機,如果沒有做到這一點,就表示tcp/ip的安裝或執行存在某些最基本的問題。

ping 本機ip

這個命令被送到我們計算機所配置的ip位址,我們的計算機始終都應該對該ping命令做出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,區域網使用者請斷開網路電纜,然後重新傳送該命令。如果網線斷開後本命令正確,則標識另一台計算機可能配置了相同的ip位址。

注:ping本機ip在斷開網路電纜的情況下可以ping通,但禁用本地網路時則無法ping通。)

ping 區域網內其他ip

這個命令應該離開我們的計算機(也就是說前兩個命令都不離開我們的計算機),經過網絡卡及網路電纜到達其他計算機,再返回。收到回送應答表明本地網路中的網絡卡和載體執行正確。但如果收到0個回送應答,那麼表示子網掩碼(進行子網分割時,將ip位址的網路部分與主機部分分開的**)不正確,或網絡卡配置錯誤或電纜系統有問題。

ping 閘道器ip

這個命令如果應答正確,表示區域網中的閘道器路由器正在執行並能夠做出應答。

ping 遠端ip

如果收到4個應答,表示成功的使用了預設閘道器。對於撥號上網使用者則表示能夠成功的訪問internet(但不排除isp的dns會有問題)。

ping localhost

localhost是系統的網路保留名,它是127.0.0.1的別名,每台計算機都應該能夠將該名字轉換成該位址。如果沒有做到這一點,則表示主機檔案(/windows/host)中存在問題

ping www.***.com

對這個網域名稱執行ping www.***.com位址,通常是通過dns伺服器,如果這裡出現故障,則表示dns伺服器的ip位址配置不正確,或dns伺服器有故障(對於撥號上網使用者,某些isp已經不需要設定dns伺服器了)。順便說一句,我們也可以利用該命令實現網域名稱對ip位址的轉換功能。

如果上面所列出的所有ping命令都能正常執行,那麼我們對自己的計算機進行本地和遠端通訊的功能基本上就可以放心了。但是,這些命令的成功並不表示我們所有的網路配置都沒有問題,例如,某些子網掩碼錯誤就可能無法用這些方法檢測到。

2. ping命令的常用引數選項

ping ip ct

連續對ip位址執行ping命令,直到被使用者以ctrl+c中斷;

ping ip -l 3000

指定ping命令中資料的長度為3000位元組,而不是預設的32位元組;

ping ip cn

指定特定次數的ping;

使用jmeter對websocket進行壓力測試

前段時間本著練習angularjs requirejs的目的寫了乙個基於nodejs和socket.io的聊天室,github位址為 當時沒有考慮效能方面的問題,本著功能實現的目的就好。最近剛好有空,打算測試一下這個聊天室的效能。在外掛程式安裝好了後,就可以使用jmeter來模擬socket.io的...

使用ROS進行ARM端與PC端通訊

終於在zynq上跑起了ros,接下來最令人關心的就是能否使用ros使arm端和pc端進行通訊了,我按照wiki上的教程進行了實驗,基本上是沒有問題的,只是需要修改一下arm端和pc端的hosts檔案。1 實驗環境 zynq ubuntu 12.04 groovy pc ubuntu 12.04 fu...

使用Eclipse對FFMpeg進行除錯

在研究 的過程中,除錯執行是一種非常有效的方法。我們常用的visual studio建立的工程可以很方便地對程式進行除錯執行。但是對於ffmpeg這樣的工程,想要進行單步除錯就沒這麼容易了。如果一定要除錯執行ffmpeg,最好按照我們之前博文的描述編譯完成之後,放在eclipse中進行除錯執行。在開...