艾銻無限為您整理:當你「ping 一下」的時候,你知道它背后的邏輯嗎?
2020-02-14 17:29 作者:艾銻無限 瀏覽量:
迎戰疫情,艾銻無限用愛與您同行
為中國中小企業提供免費IT外包服務
這次的肺炎疫情對中國的中小企業將會是沉重的打擊,據釘釘和微信兩個辦公平臺數據統計現有2億左右的人在家遠程辦公,那么對于中小企業的員工來說不懂IT技術將會讓他們面臨的最大挑戰和困難。
電腦不亮了怎么辦?系統藍屏如何處理?辦公室的電腦在家如何連接?網絡應該如何設置?VPN如何搭建?數據如何對接?服務器如何登錄?數據安全如何保證?數據如何存儲?視頻會議如何搭建?業務系統如何開啟等等一系列的問題,都會困擾著并非技術出身的您。
好消息是當您看到這篇文章的時候,就不用再為上述的問題而苦惱,您只需撥打艾銻無限的全國免費熱線電話:400 650 7820,就會有我們的遠程工程師為您解決遇到的問題,他們可以遠程幫您處理遇到的一些IT技術難題。
如遇到免費熱線占線,您還可以撥打我們的24小時值班經理電話:15601064618或技術經理的電話:13041036957,我們會在第一時間接聽您的來電,為您提供適合的解決方案,讓您無論在家還是在企業都能無憂辦公。
那艾銻無限具體能為您的企業提供哪些服務呢?
艾銻無限始創于2005年,歷經15年服務了5000多家中小企業并保障了幾十萬臺設備的正常運轉,積累了豐富的企業IT緊急問題和特殊故障的解決經驗,制定了相對應的解決方案。我們為您的企業提供的IT服務分為三大版塊:
第一版塊是保障性IT外包服務:如電腦設備運維,辦公設備運維,網絡設備運維,服務器運維等綜合性企業IT設備運維服務。
第二版塊是功能性互聯網外包服務:如網站開發外包,小程序開發外包,APP開發外包,電商平臺開發外包,業務系統的開發外包和后期的運維外包服務。
第三版塊是增值性云服務外包:如企業郵箱上云,企業網站上云,企業存儲上云,企業APP小程序上云,企業業務系統上云,阿里云產品等后續的云運維外包服務。
您要了解更多服務也可以登錄艾銻無限的官網:
www.bjitwx.com查看詳細說明,
在疫情期間,您企業遇到的任何困境只要找到艾銻無限,能免費為您提供服務的我們絕不收一分錢,我們全體艾銻人承諾此活動直到中國疫情結束,我
們將這次活動稱為——春雷行動。
以下還有我們為您提供的一些技術資訊,以便可以幫助您更好的了解相關的IT知識,幫您渡過疫情中辦公遇到的困難和挑戰,艾銻無限愿和中國中小企業一起共進退,因為我們相信萬物同體,能量合一,只要我們一起齊心協
力,一定會成功。再一次祝福您和您的企業,戰勝疫情,您和您的企業一定行。
艾銻無限為您整理:當你「ping 一下」的時候,你知道它背后的邏輯嗎?
我們在遇到網絡不通的情況,大家都知道去 ping 一下,看一下網絡狀況。那你知道「ping」命令背后的邏輯是什么嗎?知道它是如何實現的嗎?
我們在遇到網絡不通的情況,大家都知道去 ping 一下,看一下網絡狀況。
那你知道「ping」命令背后的邏輯是什么嗎?知道它是如何實現的嗎?
一、「ping」命令的作用和原理?
簡單來說,「ping」是用來探測本機與網絡中另一主機之間是否可達的命令,如果兩臺主機之間ping不通,則表明這兩臺主機不能建立起連接。ping是定位網絡通不通的一個重要手段。
ping 命令是基于 ICMP 協議來工作的,「 ICMP 」全稱為 Internet 控制報文協議( Internet Control Message Protocol)。ping 命令會發送一份ICMP回顯請求報文給目標主機,并等待目標主機返回ICMP回顯應答。因為ICMP協議會要求目標主機在收到消息之后,必須返回ICMP應答消息給源主機,如果源主機在一定時
間內收到了目標主機的應答,則表明兩臺主機之間網絡是可達的。
舉一個例子來描述「ping」命令的工作過程:
假設有兩個主機,主機A(192.168.0.1)和主機B(192.168.0.2),現在我們要監測主機A和主機B之間網絡是否可達,那么我們在主機A上輸入命令:ping 192.168.0.2
此時,ping命令會在主機A上構建一個 ICMP的請求數據包(數據包里的內容后面再詳述),然后 ICMP協議會將這個數據包以及目標IP(192.168.0.2)等信息一同交給IP層協議。
IP層協議得到這些信息后,將源地址(即本機IP)、目標地址(即目標IP:192.168.0.2)、再加上一些其它的控制信息,構建成一個IP數據包。
IP數據包構建完成后,還不夠,還需要加上MAC地址,因此,還需要通過ARP映射表找出目標IP所對應的MAC地址。當拿到了目標主機的MAC地址和本機MAC后,一并交給數據鏈路層,組裝成一個數據幀,依據以太網的介質訪問規則,將它們傳送出出去。
當主機B收到這個數據幀之后,會首先檢查它的目標MAC地址是不是本機,如果是就接收下來處理,接收之后會檢查這個數據幀,將數據幀中的IP數據包取出來,交給本機的IP層協議,然后IP層協議檢查完之后,再將ICMP數據包取出來交給ICMP協議處理,當這一步也處理完成之后,就會構建一個ICMP應答數據
包,回發給主機A
在一定的時間內,如果主機A收到了應答包,則說明它與主機B之間網絡可達,如果沒有收到,則說明網絡不可達。除了監測是否可達以外,還可以利用應答時間和發起時間之間的差值,計算出數據包的延遲耗時。
通過ping的流程可以發現,ICMP協議是這個過程的基礎,是非常重要的,因此下面就把ICMP協議再詳細解釋一下。
二、什么是「 ICMP 」?
我們知道,ping命令是基于ICMP協議來實現的。那么我們再來看下圖,就明白了ICMP協議又是通過IP協議來發送的,即ICMP報文是封裝在IP包中。
IP協議是一種無連接的,不可靠的數據包協議,它并不能保證數據一定被送達,那么我們要保證數據送到就需要通過其它模塊來協助實現,這里就引入的是ICMP協議。
當傳送的IP數據包發送異常的時候,ICMP就會將異常信息封裝在包內,然后回傳給源主機。
將上圖再細拆一下可見:
繼續將ICMP協議模塊細拆:
由圖可知,ICMP數據包由8bit的類型字段和8bit的代碼字段以及16bit的校驗字段再加上選項數據組成。
ICMP協議大致可分為兩類:
·
查詢報文類型
·
差錯報文類型
查詢報文類型:
查詢報文主要應用于:ping查詢、子網掩碼查詢、時間戳查詢等等。
上面講到的ping命令的流程其實就對應ICMP協議查詢報文類型的一種使用。在主機A構建ICMP請求數據包的時候,其ICMP的類型字段中使用的是 8 (回送請求),當主機B構建ICMP應答包的時候,其ICMP類型字段就使用的是 0 (回送應答),更多類型值參考上表。
對 查詢報文類型 的理解可參考一下文章最開始講的ping流程,這里就不做贅述。
差錯報文類型:
差錯報文主要產生于當數據傳送發送錯誤的時候。
它包括:目標不可達(網絡不可達、主機不可達、協議不可達、端口不可達、禁止分片等)、超時、參數問題、重定向(網絡重定向、主機重定向等)等等。
差錯報文通常包含了引起錯誤的IP數據包的***個分片的IP首部,加上該分片數據部分的前8個字節。
當傳送IP數據包發生錯誤的時候(例如 主機不可達),ICMP協議就會把錯誤信息封包,然后傳送回源主機,那么源主機就知道該怎么處理了。
那是不是只有遇到錯誤的時候才能使用 差錯報文類型 呢?也不一定。
Traceroute 就是一個例外,Traceroute是用來偵測源主機到目標主機之間所經過路由情況的常用工具。Traceroute 的原理就是利用ICMP的規則,制造一些錯誤的事件出來,然后根據錯誤的事件來評估網絡路由情況。
具體做法就是:
Traceroute會設置特殊的TTL值,來追蹤源主機和目標主機之間的路由數。首先它給目標主機發送一個 TTL=1 的UDP數據包,那么這個數據包一旦在路上遇到一個路由器,TTL就變成了0(TTL規則是每經過一個路由器都會減1),因為TTL=0了,所以路由器就會把這個數據包丟掉,然后產生一個錯誤類型(超時)的ICMP
數據包回發給源主機,也就是差錯包。這個時候源主機就拿到了***個路由節點的IP和相關信息了。
接著,源主機再給目標主機發一個 TTL=2 的UDP數據包,依舊上述流程走一遍,就知道第二個路由節點的IP和耗時情況等信息了。
如此反復進行,Traceroute就可以拿到從主機A到主機B之間所有路由器的信息了。
但是有個問題是,如果數據包到達了目標主機的話,即使目標主機接收到TTL值為1的IP數據包,它也是不會丟棄該數據包的,也不會產生一份超時的ICMP回發數據包的,因為數據包已經達到了目的地嘛。那我們應該怎么認定數據包是否達到了目標主機呢?
Traceroute的方法是在源主機發送UDP數據包給目標主機的時候,會設置一個不可能達到的目標端口號(例如大于30000的端口號),那么當這個數據包真的到達目標主機的時候,目標主機發現沒有對應的端口號,因此會產生一份“端口不可達”的錯誤ICMP報文返回給源主機。
可見Traceroute的原理確實很取巧,很有趣。