1. 程式人生 > >【雜談】網路修復雜談

【雜談】網路修復雜談

前言

斷網,是僅次於斷水、斷電的危機,對於部分依賴於網路的人來說,可能重要性更加突出。這裡主要談一談網路修復的方法與一些常見的故障。

正題

首先要知道怎麼修復網路,就需要大致瞭解網路的運作方式,正如一個能夠裝機的人要會拆機、能夠做網路防禦的人要懂得網路攻擊的原理。這裡主要通過對幾個名詞的解析來大致描述網路的運作方式。

由於這裡只打算大致講一下網路的工作方式,過多的說明可能比不上形象的比喻。這裡,我們把網路比作一個小區,假設這個小區每個房子都被編上了號碼,可以通過這個號碼快速、方便的找到對應的房間,然後每個房間都有一個名字,譬如說“花果山小區水簾棟王者之戶”,這裡我們特地不包含數字進去(現實中都是有編號的),是為了說明根據這個名字我們難以進行快速、準確的查詢到指定的房間。如果這個房子主人沒有換那麼我們就能找到正確的要找的人,然而如果換了呢?那麼我們可以通過房間主人的身份證進行確認,只要身份證不是偽造的或者別人的,那麼找到的就是正確的。

這裡,類比到網路中,我們的房間名“花果山xxx”就是一個主機名,房間的編號就是一個IP地址,而身份證則是對應的實體地址。

實體地址是有硬體自身因素決定的,一般不會變而且唯一,就像身份證一樣,國家發行的,發了以後身份證號就不會變了。而ip地址則是電腦動態或者靜態註冊的,需要通過區域網相關伺服器(DHCP伺服器)的認證,就像你拿著身份證去辦房產證一樣,動態就是問業務員給我隨便來一套舒服的房間,房間號由業務員“智慧”分配,而靜態則是“業務員,我就要著一個號碼,鐵了心了,別的都不要”。這實際上是ip的兩種獲得的途徑,同時也引入DHCP伺服器的概念(幹什麼吃的?管理分配ip的)。如果對自己的房間號不滿意可以要求退了這個房間(退房無條件成立),然後換一個,因此這裡可以看到,ip地址來確定一臺電腦是暫時性的,譬如說一個滿載的wifi上一個客戶端斷線,另外一個馬上連上補上空缺,那麼那個ip就更換了主人,就像你退房了,然後別人住進了這個房間,房間“易主”了。而主機名呢,則是你給自己的主機起的一個“獨一無二”的名字(或者說在當前局域範圍內保證不會與其他可達主機同名),為了確保獨一無二,需要進行“註冊”,譬如說伺服器的域名註冊,比如說www.baidu.com。

但是我們又知道,去訪問一個網站是可以通過域名直接訪問的,就像通過房間的名字可以找到房間,但是這個過程是怎麼實現的呢?為了保證能高效查詢,我們可以建立一個對映表,一個房間號對應一個房間編號(事實上就是這麼做的),一個域名則是對應一個ip,通過域名可以直接找到ip,有了ip就可以方便快速的找到主機建立連線了。但是要不要每個計算機都用一個超大的表去儲存“域名——ip”這個鍵值對呢?這樣顯然會造成巨大的浪費,而且在對映更新時(有的ip換域名了或者域名綁定了新的ip之類的)要傳送大量的資料包,因為存在許多公共的鍵值對,只要儲存在一個公共的地方就好了,這個地方對於所有計算機公開可訪問,好的,於是DNS伺服器就這樣誕生了:我們使用一臺dns伺服器負責一片區域的主機的“域名——ip”對映關係,只要丟域名進去查詢,就會返回對應的ip地址,這個過程有個專業的術語(DNS解析)。另一方面,我們有一些非公用的域名和ip對,或者想要獲得與DNS伺服器不同的對映關係,因此,我們需要一個檔案(就是之前說的超級大的檔案,這裡因為只要儲存幾個特殊的對映就行了,所以很小)來儲存它們,於是hosts檔案就誕生了。還有一方面,如果我的電腦長期訪問一個網站或者幾個網站,那麼我要每次訪問都去DNS伺服器查一下嗎?伺服器肯定會有意見,我們可以先把這些常用的網站的解析結果快取起來,過一段時間失效了再去查,於是DNS快取又誕生了。值得補充的是,DNS伺服器本身也是一臺電腦,而且儲存量有限,實際上有很多DNS伺服器,分為多級,上一級向下一級伺服器提供DNS解析,也就是說,當下一級的DNS伺服器解決不了了(自己也找不到這個域名的鍵值對),就向上級伺服器請求支援,這樣遞迴下去,直到頂級DNS伺服器都解決不了,則返回域名不存在錯誤提示。總結一下,DNS查詢的優先順序:hosts檔案>DNS快取>DNS下級伺服器>DNS上級伺服器。

代理和VPN:代理簡而言之就是一箇中間人,譬如說我要買到北美的東西,自己又無法飛躍過去,那麼需要無數的中間商人為我運過來,然後我如果要往那邊投遞什麼多西也可以仍中間人的快遞商為我寄送過去,實現通訊。原來的直接通訊是一種方式,通過中間人又是一種方式。兩種方式選擇一種,如果選擇了一種方式,但是這種方式又不可達(譬如說中間人罷工了,代理伺服器崩掉了),就會出現使用選擇使用代理的都網路中斷的情況。而VPN則是相當於私人隧道的東西,譬如說通過網路連線大洋彼岸,然後使用網路來通訊,同樣如果選擇了不可用的VPN那麼也會出現網路中斷的情況。

通過對以上幾個名詞的解析,我們大概瞭解了聯網以及上網是怎麼回事了,首先我需要加入這個網路(連WIFI或者接有線),其次我需要獲得一個合法的ip,然後才能建立通訊。在上網時,我們在瀏覽器輸入一個域名,首先通過一系列DNS解析獲得對應主機的ip,然後兩個ip之間建立通訊,網路連通。

OK,原理了解了這裡以後,就可以針對中間的環節進行分析了,網路故障的原因就是這條鏈出現了斷路。

斷路各層分析:

聯網過程:

未加入網路:網線沒插、網路不可用(譬如說把一個沒開通網路的網線插進去)、網絡卡炸了、驅動炸了等,都直接導致無”已連線“字樣出現等。

未正確獲取ip:ip衝突(靜態ip設定為已分配出去的ip或者動態分配出現差錯,一個網段中不允許相同的ip,所以對方使用正常而你無法使用,特點為顯示為“受限”)等。

已獲取ip但是ip被ban:譬如說登入校園網wifi、寬頻才能上網(可以簡單的理解為沒有登入被防火牆ban了,登入後放行)、某些繫結mac的路由認證等。

上網過程:

DNS解析出錯:DNS解析的各個環節都可能出錯。

瀏覽器或者系統代理、VPN設定出錯:設定了不可用的代理或者VPN。

防火牆設定出錯:被防火牆攔截。

正常工作需要使用的埠被禁:閉關鎖國怎樣對外交流?

服務禁用或者服務、應用程式出錯:軟體自身原因導致不能聯網之類、winsock配置出錯(winsock是windows為應用提供的網路訪問操作的介面,一旦出錯可能一大批應用都無法聯網)。

原因分析完畢,開始尋求解決措施:

要修復一個故障,有以下幾種思路:

1.還原到出問題之前的時候,變回你原來的樣子!(時光倒流)

2.直接解除安裝重灌,用新的可用的替換原來不可用的。(從頭來過)

3.鎖定問題的引起源頭,實施定點修復。(真×修復)

其中第一點是完全看使用者有沒有這個備份的好習慣,如果有近期備份將會很方便,以極小的代價快速解決問題;

第二點則是萬金油,不管你的舊(軟體、系統)怎麼樣,換成新的,保證新的能用就呆膠布(不過對使用者的影響最大);

第三點則是對使用者比較友好的,但是對技術人員則是不那麼友好,要求技術人員有較強的查詢和解決問題的能力,不過這才是所謂“技術人員”,在“技術人員”中,有一類是工具boy,另一類是真×技術人員,工具boy只要知道怎麼用工具(譬如說360斷網急救箱之類的)就ok了,甚至原理可以完全小白,缺點就是隻能處理工具所能處理的問題,整個人就是幾件工具的集合;而真×技術人員則是真正處理問題的人,工具boy的工具也是真×技術人員的作品,所以這類人是真正偉大的人。

這裡前兩點我們就直接跳過了,沒有什麼技術含量,直接對第三點進行分析。

可以看到網路出現故障存在諸多原因和影響因素,但是經過分析,可以劃分為不同層次的問題。同樣,要解決問題,首先要鎖定問題的根源出在哪個層次上。這裡有一個經常被提起的ping檢測法,可以進行不同層次的診斷檢測,可以自上層向下層診斷,也可自下層向上層診斷,這裡講自下向上診斷。

ping命令這裡我們不需要使用任何附加引數,僅僅診斷網路連通直接ping ip/域名即可。

1. ping 127.0.0.1,127.0.0.1是本機的迴路地址,即localhost,是無論是否聯網只要機器網路協議棧運作正常都可以ping通,該操作可以診斷電腦的tcp/ip協議棧是否正常運作,如果不正常解除安裝重灌即可,還有可能是網絡卡出現鬆動、網絡卡損壞等物理因素問題。

2. ping 本機ip,本機ip可以用ipconfig檢視,也可以在“網路連線與共享”中檢視,該操作可以檢視本機ip是否分配正確,如果ping不通,那麼ip不可用或者ip衝突,首先檢視ip使用的是動態ip還是靜態ip,靜態ip需要手動更改為可用的ip地址;動態ip則只需要執行ipconfig /release & ipconfig /renew釋放並重新請求ip,通過將網絡卡禁用後啟用也可以達到同樣的效果;另一方面,如果網絡卡驅動出現問題也會導致該問題或者直接ipconfig顯示沒有ip,這時需要去裝置管理器檢視驅動執行情況,如果有x或者!號則需要啟用或者解除安裝重灌。

3. ping 閘道器ip,閘道器是在區域網與廣域網之間的關口,譬如說某個學校內部可以存在區域網,學生可以方便訪問校內資源,但是如果要訪問百度等不在學校內的網站就需要一個具有路由功能的裝置去轉發它,這個就是閘道器。閘道器ip一般是路由器的LAN口ip,譬如說192.168.1.1就是家裡路由的ip,也是閘道器ip。該操作可以診斷機器與閘道器的網路連通情況,如果ping不通,可能是閘道器ip設定出現錯誤,重新設定為正確的即可,還有一種情況是通過該ip找到的不是閘道器主機(ip與實體地址的映射出錯,這裡有個專業術語叫arp表,簡而言之arp表就是儲存在我的電腦裡面某個ip對應的是哪一臺電腦),還有可能是被閘道器禁止ping了。

4. ping 外部網路, 首先直接ping 114.114.114.114等確保能夠在正常情況下ping通的ip地址,該操作檢測與外網的連通情況,如果前面都能ping通,而這裡ping不通,說明

a.故障有可能發生在閘道器到外網的區段內。

b.VPN設定出錯,VPN與代理往往一起提及,但是這裡有必要分開來,因為代理一般用於TCP協議,而ping採用的是ICMP協議,代理對ping一般不會造成影響,而VPN則會產生影響,如果設定了不可用的VPN,那麼網路將會徹底癱瘓,而設定了不可用的代理則只會導致TCP協議的應用訪問網路癱瘓,而其他協議的則正常不受影響(如QQ聊天採用的UDP協議)。

     然後ping www.baidu.com等確保能夠ping通的網址,如果直接ping ip可以ping通,而ping 網址出錯,說明很可能是DNS解析出錯,也就是www.baidu.com可能被解析為了錯誤的ip,解決方法:重新設定dns伺服器ip,確保dns伺服器設定正確(這裡114.114.114.114和8.8.8.8是確保可用的DNS伺服器—>通過ipconfig /flushdns清空DNS快取—>檢視本機hosts檔案是否出現異常欄位,該問題往往只會導致hosts檔案中少數幾個網站無法ping通,不會對於所有網站都無法ping通。

通過以上操作,我們可以診斷系統層的網路故障問題,其中前3項都可能與驅動和網絡卡相關,因此確保網絡卡驅動正常工作十分重要。以上操作都沒有問題,那麼可以保證主機是可以訪問網路的,接下來進入服務和應用層的分析:

5.檢測埠問題:有些網路埠(如80埠)關閉,通過netstat -ano命令可以檢視埠開放情況。

6.winsock配置錯誤:winsock配置錯誤會導致使用winsock應用無法訪問網路,通過netsh winsock reset可以重置winsock配置。

7. 防火牆問題:防火牆的設定不當可能造成網路被攔截,這裡通過在防火牆設定中找到錯誤的規則或者直接恢復防火牆即可,netsh advfirewall reset也可以直接重置防火牆設定。

8.應用本身的問題:應用相關係統檔案丟失、配置錯誤都有可能導致這個問題,最有效、省事的措施就是恢復至預設設定,如果還不行就徹底解除安裝然後重灌。由於使用者與瀏覽器的互動比較多,瀏覽器可能只是因為設定了不可用的代理(在高階設定裡面可以找到代理設定選項),在這種情況下只要把代理設定正確或者取消代理即可。

以上即是排查網路問題的大致路線,前提是已經連上網(顯示“已連線或受限“),當然,有些情況下是網路連線不了、返回錯誤數字,這時的措施為:

1.檢測驅動,驅動出問題網路無法連線

2.檢測網線、介面正常

3.檢測網絡卡正常

4.檢測網路相關服務已經開啟(有些服務是連網所需的,如wlansvr服務,這些服務沒有開啟會出現問題,在工作管理員—服務中可以找到)。

5.返回錯誤數字直接搜尋錯誤數字尋找解決措施即可。

9.還有一些問題,如網路連線圖示消失、wlan連線顯示不見了等,圖示消失可以在個性化->工作列中找到設定,連線消失則可能是在”網路介面卡設定"中禁用了。

總結

總而言之,引起網路故障的因素很多,但是總的來看,都主要集中在硬體、驅動、協議、ip獲取、dns解析、服務、代理和vpn上,其中驅動是問題的一大宗,很多網路問題都是驅動出錯引起的,因此可以作為重點排查物件,然後ip和dns設定不當、dns快取錯誤也是常見的問題,代理設定錯誤往往只侷限在某個設定了代理的瀏覽器上,可以很快排查解決。用到的命令彙總:

ipconfig /all 檢視ip、dns等

ipconfig /release 釋放ip

ipconfig /renew 申請新的ip

ipconfig /flushdns 重新整理dns快取

netsh interface ipv4 reset 重置ip配置(一個頂樓上release和renew兩個命令)

netsh advfirewall reset 重置防火牆設定

netsh winsock reset 重置winsock

ping ip或域名 檢測網路連通

(還有部分通過命令設定ip和dns的可以在GUI下很方便的解決,這裡不做多說)

ps.其中涉及到了部分網路協議的知識,博主對於這方面瞭解的還不深入,以上可能存在部分不準確或者謬誤的地方,如果大家發現了也請批評指正。