歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux網絡 >> linux網絡編程之TCP/IP基礎(二) 利用ARP和ICMP協議解釋ping命令

linux網絡編程之TCP/IP基礎(二) 利用ARP和ICMP協議解釋ping命令

日期:2017/3/3 16:26:27   编辑:Linux網絡

一、MTU

以太網和IEEE 802.3對數據幀的長度都有限制,其最大值分別是1500和1492字節,將這個限制稱作最大 傳輸單元(MTU,Maximum Transmission Unit)

如果IP層有一個數據報要傳,而且數據的長度比鏈路層的MTU還大, 那麼IP層就要進行分片(Fragmentation),把數據報分成若干片,這樣每一片都小於MTU。

當網絡上的兩台主機互相 進行通信時,兩台主機之間要經過多個網絡,每個網絡的鏈路層可能有不同的MTU,其中兩台通信主機路徑中的最小MTU被稱 作路徑MTU,Internet上標准MTU為576B。

二、以太網幀格式

其中的源地址和目的地址是指網卡的硬件地址(也叫MAC地址),長度是48位,是在網卡出廠時固化的。用ifconfig命令 看一下,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。協議字段有三種值,分別對應IP、ARP、RARP。幀末尾是CRC校 驗碼。

以太網幀中的數據長度規定最小46字節,最大1500字節,ARP和RARP數據包的長度不夠46字節,要在後面補填 充位。ifconfig命令的輸出中也有“MTU:1500”。注意,MTU這個概念指數據幀中有效載荷的最大長度,不包括幀首部的長 度。

三、ARP(address resolution protocol)

在網絡通訊時,源主機的應用程序知道目的主機的IP地址和 端口號,卻不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地 址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬件地址。ARP協議就起到這個作用。源主機發出ARP請求, 詢問“IP地址是10.0.0.1的主機的硬件地址是多少”,並將這個請求廣播到本地網段(以太網幀首部的硬件地址填 FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據 包給源主機,將自己的硬件地址填寫在應答包中。如下圖所示

每台主機都維護一個ARP緩存表,可以用arp -a命令查看。緩存表中的表項有過期時間(一般為20分鐘),如果20分鐘內沒有再次使用某個表項,則該表項失效,下次還 要發ARP請求來獲得目的主機的硬件地址。

注意到源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對於鏈路層為以太網的情況是多余的,但如果鏈 路層是其它類型的網絡則有可能是必要的。硬件類型指鏈路層網絡類型,1為以太網,協議類型指要轉換的地址類型, 0x0800為IP地址,後面兩個地址長度對於以太網地址和IP地址分別為6和4(字節),op字段為1表示ARP請求,op字段為2表 示ARP應答。

地址解析協議的處理流程如下圖:

四、RARP(Reverse Address Resolution Protocol)

跟ARP相反的協議,主要用於獲取無盤工作站的ip地址,如下圖所示,不再贅述。

五、ICMP (Internet Control Message Protocol)

ICMP協議用於傳遞差錯信息、時間、回顯、網絡信息等控制數據,如下圖 所示。

ICMP報文是封裝在IP數據報文中進行傳輸的,如下圖所示。

具體的 類型和代碼見下圖。

六、利用ARP和ICMP協議解釋ping程序

先看下面的流程圖,再來解釋。

步驟a:應用程序ping會判斷發送的是主機名還是IP地址,如果是主機名會調用函數gethostbyname()解析主機B,將主機 名轉換成一個32位的IP地址。這個過程叫做DNS域名解析。

步驟b:ping程序向目的IP地址發送一個ICMP的ECHO包

步驟c:將目標主機的IP地址轉換為48位硬件地址,在局域網內發送ARP請求廣播,查找主機B的硬件地址。

步驟d: 主機B的ARP協議層接收到主機A的ARP請求後,將本機的硬件地址填充到應答包,發送ARP應答到主機A。

步驟e:發送 ICMP數據包到主機B。

步驟f:主機B接收到主機A的ICMP包,發送響應包。

步驟g:主機A接收到主機B的ICMP包 響應包。

Copyright © Linux教程網 All Rights Reserved