TCP\IP協議實踐:wireshark抓包分析之鏈路層與網絡層

TCP\IP協議實踐:wireshark抓包分析之鏈路層與網絡層

@網絡

從ping開始

我打算從一個ping命令的抓包結果來結合實際分析鏈路層和網絡層的幾個協議,先看一些無聊卻重要的基礎知識,封裝過程圖鎮樓併發

在這裏插入圖片描述

鏈路層之以太網封裝

咱們都知道網絡是分層的,在鏈路層的封裝主要是以太網封裝,這裏咱們直接給出格式tcp

在這裏插入圖片描述

這裏也給出了IEEE 802的封裝,下面的就是以太網封裝,咱們看到以太網的封裝會爲網絡層的其餘協議提供服務,同時也看到ARP/RARP 和IP的地位是並列的。他們根據以太網頭部的類型字段區分,以太網的源地址和目的地址是6字節的硬件地址也就是咱們常說的MAC地址,一個硬件由它來標識。能夠看到除了14個字節的頭部之外,數據段要求最小46個字節,因此會有填充的出現,後面的尾部是4個字節,即以太網數據幀一共最少有64字節(有時候會略去尾部直接是60字節)。測試

ip首部

在這裏插入圖片描述

咱們雖然從ping命令開始,可是必須介紹一些基礎知識,首先就是ip協議,上圖就是ip協議的頭部,最小是20字節。後面的抓包結果要結合這張圖來看。目前幾乎全部的互聯網傳輸都使用的ip協議。命令行

首先介紹一下這些字段3d

  • 4位版本表明是ipv4仍是ipv6。即4或6 。
  • 4位首部長度表明ip首部佔多少個32位(4字節)。爲啥會有這個字段?由於咱們看到ip首部裏面是能夠有選項字段的,不固定長度(選項字段一直都是以32 bit做爲界限,必要時填充0,保證ip首部始終是32bit整數倍),因此要有個數據表示有多少字節是屬於ip頭部。
  • 8位的服務類型TOS字段見下圖

在這裏插入圖片描述

  • 16位的總長度表示ip數據報的長度(字節爲單位),爲了從填充過的以太網幀中準確的找出ip數據報。
  • 標識字段惟一地標識主機發送的每一份數據報。後面的偏移字段和這裏的標識字段都是爲了後面的ip分片和重組用的。
  • T T L(t i m e - t o - l i v e)生存時間字段設置了數據報能夠通過的最多路由器數。它指定了數據報的生存時間。T T L的初始值由源主機設置(一般爲3 2或64),一旦通過一個處理它的路由器,它的值就減去1。當該字段的值爲0時,數據報就被丟棄,併發送I C M P報文通知源主機。
  • 8位協議是1表示爲ICMP協議, 2表示爲IGMP協議, 6表示爲TCP協議, 17表示爲UDP協議
  • 首部檢驗和字段是根據I P首部計算的檢驗和碼。它不對首部後面的數據進行計算。I C M P、I G M P、U D P和T C P在它們各自的首部中均含有同時覆蓋首部和數據檢驗和碼。
  • 地址字段
  • 選項字段後面會說

開啓ping程序,開始抓包

ping程序是測試連通性用的,固然他還有其餘功能,這個下面會說,首先咱們就用它的測試功能,至於ping的原理,咱們邊抓包邊看,這其中會涉及不少網絡層的協議,咱們結合抓包講解。代理

打開wireshark後,開啓命令行的ping命令ping一個ip地址(這裏我ping的是一個網段的地址10.134.220.102,我本機的地址是10.134.220.113),如何使用wireshark和如何查看本身的ip地址請自行百度。這裏ping完成後code

在這裏插入圖片描述

收到這四個回覆,咱們先無論這些,看看咱們抓包抓到了什麼,這裏我加了過濾器:blog

ip.dst == 10.134.220.102 or ip.src == 10.134.220.102 or arp

抓包結果

在這裏插入圖片描述

咱們能夠看看發生了什麼,第一行不是此次ping產生的,從第二行看,首先是ARP協議的數據,內容是後面的看起來是詢問的內容,而後下一行仍是ARP的協議,看起來是回答。咱們注意到第一列是時間,第二列是源地址,6字節的,第三列是目的地址,也是6字節的。這兩個地址就是上面以太網封裝頭部中的那兩個硬件地址。咱們看到有的目的地址是廣播,廣播地址是全1的6字節。這個能夠詳細的看包裏的內容。咱們先無論這些協議是什麼,就是看看發生了啥。接續看,有四組連續的(忽略中間那個ARP)ICMP協議的報文,並且是一問一答形式的,想一想咱們的ping命令的結果,是否是對起來了?

由一個ping的結果引出來的兩個協議ARP ICMP

從上面的抓包結果咱們看到了兩個協議,ARP與ICMP,這兩個重要的協議咱們細細講解,同時會結合抓包的內容一塊看。

ARP:地址解析協議

原理

ARP是什麼?ARP是一種地址解析協議。

ARP幹嗎用的?當咱們知道目的ip地址後,咱們覺得計算機知道了應該找哪臺主機,可是計算機硬件一臉懵,在他那裏只有硬件地址,ip地址是網路層的東西,要數據傳輸必須知道鏈路層的信息即硬件的地址,那麼如何根據ip地址知道目的地址的硬件地址呢?答案就是使用ARP協議來查詢,將ip地址轉化爲硬件地址。還有一種協議是RARP,他跟ARP反着,根據硬件地址查詢ip地址,這種協議是無盤系統沒法從本地知曉本身的ip地址,只能經過RARP協議從RARP服務器上查詢本身的ip地址。因爲我這裏沒有無盤機,因此抓包抓不到RARP協議的包,有須要的能夠查資料詳細理解。他們倆的報文格式仍是很像的。

ARP如何工做的?

ARP分爲請求和應答,他的報文格式以下

在這裏插入圖片描述

還記得看以太網封裝時說過的,ARP是跟IP並列的。這裏詳細介紹ARP的報文格式

  • 2字節的硬件類型,1表明以太網地址。
  • 2字節的協議類型表示要映射的協議地址類型,咱們大部分用的就是ip協議,因此這裏通常是0x800。
  • 1字節的協議地址長度。咱們都知道ipv4協議是4字節的。
  • 1字節的硬件地址長度。以太網的硬件地址是6字節。
  • op字段是操做字段,表明四種操做類型,它們是ARP請求(值爲1)、ARP應答(值爲2)、RARP請求(值爲3)和RARP應答(值爲4)。
  • 發送端的以太網地址(硬件地址),發送的ip地址,接收端的硬件地址和ip地址。這裏會有疑問,在ARP請求中,不是ARP請求的就是目的端的硬件地址嗎,這時如何填寫目的端的硬件地址呢?答案是ARP請求中的目的硬件地址全爲0 。

對於以太網頭部中的目的地址,在ARP請求報文中,是沒法知道的(由於自己就是去查詢的),那麼如何填呢?或者說ARP如何起做用呢?固然是把全部的主機全問一遍唄。因此這裏就填成全1表示廣播地址,這樣整個以太網上的全部主機都能收到ARP請求,而後看看是否是本身被翻了牌子,若是是,就發回一個ARP應答告知本身的硬件地址。整個過程能夠參考下圖

在這裏插入圖片描述

這是在同一個以太網的狀況下。若是不在同一個以太網下,又如何呢?若是ARP請求是從一個網絡的主機發往另外一個網絡上的主機,那麼鏈接這兩個網絡的路由器就能夠回答該請求,這個過程稱做委託A R P或A R P代理(Proxy ARP)。這樣能夠欺騙發起ARP請求的發送端,使它誤覺得路由器就是目的主機,而事實上目的主機是在路由器的「另外一邊」。路由器的功能至關於目的主機的代理,把分組從其餘主機轉發給它。這方面這篇文章裏暫時沒有,後續會有一個專門的文章介紹。

若是目的主機不存在呢?那就隔一段時間問一次,多問幾回都沒答覆就不問了,哈哈哈。

抓包結果

好,接下來回到抓包結果,咱們說開頭的是兩個ARP協議,瞭解了原理後咱們知道他們其實就是一個ARP請求和ARP應答

這是個人ARP請求報文

在這裏插入圖片描述

逐字節解析,前6字節就是全1的廣播以太網地址,而後是6字節的發送端以太網地址。而後0806表明是ARP協議。0001表明的以太網,0800表明ip協議,06的硬件地址長度,04的協議地址長度,0001的op字段表明ARP請求,而後就是發送端的硬件地址和ip地址,而後就是咱們前面說的全0的目的硬件地址,而後是目的ip。

一樣的應答報文就不解析了,就是對着格式來。

ICMP:Internet控制報文協議

ICMP是什麼? ICMP是Internet控制報文協議,對,就是控制報文協議,發送控制報文的,啥叫控制報文?看下去就知道了。必須知道ICMP是封裝在IP數據報裏面的。在IP頭部的8位協議字段中規定的,1就表明ICMP。

ICMP幹嗎用的? 頗有用,用途普遍,哈哈哈。

ICMP如何用?

看格式

在這裏插入圖片描述

8位的類型,8位的代碼都在上面那張很長的圖中。因爲太多,就不介紹詳細的了,就介紹咱們ping命令用到的即ICMP回顯應答報文。

在這裏插入圖片描述

U n i x系統在實現p i n g程序時是把I C M P報文中的標識符字段置成發送進程的I D號。這樣即便在同一臺主機上同時運行了多個p i n g程序實例, p i n g程序也能夠識別出返回的信息。序列號從0開始,每發送一次新的回顯請求就加1。p i n g程序打印出返回的每一個分組的序列號,容許咱們查看是否有分組丟失、失序或重複。I P是一種最好的數據報傳遞服務,所以這三個條件都有可能發生。

抓包結果

以我本機發送的ICMP回顯請求報文爲例:

在這裏插入圖片描述

前面的14個字節以太網首部就不解析了,如今從第一行的45開始

回顧ip首部,4表明ipv4 , 5表明ip首部佔5個四字節即20字節,說明沒有選項字段。後面兩個00表明的TOS字段,你們到網上一查,不對啊,00表明不少服務啊,怎麼區分啊?其實如今大多數實現都不實用TOS段了,因此就不用管這個字段了。

進入第二行,003c是總長度,整個ip數據報有60個字節,說明數據部分有40個字節,咱們數一下,整個報文74個字節,除去14字節以太網首部,20字節的ip首部,剩下的40字節就是數據部分(沒有計算以太網尾部)。

4347是標識,0000是偏移量,這個沒啥好說的。80是TTL生存時間,01是表明的ICMP報文。2996是校驗和。而後是源ip地址0a 86 dc 71, 是否是就是10.134.220.113 。目的地址是0a 86 dc 66 。後面我選中的藍色部分就是真正的ICMP回顯請求報文的內容了, 08 00 與咱們說的代碼是同樣的,0101校驗和,後面的就不說了。

總結

這篇文章從一個ping命令入手,講述了兩個很重要的協議ARP協議和ICMP協議,結合實際抓包的結果,分析了報文內容,可是這裏仍是有疑問,好比,咱們說以太網幀除去尾部最少60字節,可是實際抓包時有的就只有42字節(好比個人ARP請求那裏),沒有進行填充,這部分疑問尚未獲得解決嗎,但願有人能夠指導一下。

相關文章
相關標籤/搜索