抓包整理————ip 協議一[十二]

前言

簡單介紹一下ip協議。

正文

先來看下ip協議在網路層的哪一層:

  1. 應用層
  2. 表示層
  3. 會話層
  4. 傳輸層
  5. 網路層
  6. 數據鏈路層
  7. 物理層

ip 層就在網路層:

其實很好想像哈,就是因為每台機器起碼有一個ip地址,形成了這樣一個網路。

ip 層的功能就是:

ip 定址
選路
封裝打包
分片

數據鏈路層功能:

  1. 邏輯鏈路控制
  2. 媒體訪問控制
  3. 封裝鏈路層幀
  4. mac 定址
  5. 差錯檢測與處理
  6. 定義物理層標準

ip地址:

我們知道ip地址一共4個位元組。

那麼理論上有2的32次方個地址,也就是43億多,現在來看肯定不夠用了。

如果只是這樣分類的話,那麼有一個問題,什麼問題呢?

那就是不滿足一個需求,比如有一個社區是800台ip地址,這個時候分一個c類地址肯定不夠,分一個b類地址又太大,這樣會浪費的。

那麼怎麼破呢?

這個時候就要使用cidr 無分類地址:

cidr, classess inter-domain routing 這個意思。

表示方法就是a.b.c.d/b n 範圍[0,32]

這樣就可以根據n的範圍然後進行劃分了。

比如800台需要ip的,那麼分的就是n是22(32-10)了,1024個ip了。

這個時候也很好判斷一個ip是否在某個網路下。

比如某個網路的子網掩碼是10.10.1.32/27。

那麼這個網路為:00001010.00001010.00000001.00100000

這樣的。 那麼判斷10.10.1.44 是否在這個網路中呢?

那麼判斷前27位是否一樣,如果一樣的話,那麼就是在同一網路了。

另一個例子:10.10.1.90 前27位就不一樣,那麼這個時候就不在一個網路中。

那麼他們的定址方式是怎麼樣的呢?

比如MCI 分配了 208.128.0.0/11

MCI 將 208.130.28.0/22 分配給ars

ars 將 208.130.29.0/22 分配給publish servers 使用。

那麼www.freesoft.org 使用208.130.29.33 地址。

那麼先找到mci,然後找到了ars,然後ars 找到了publish servers,然後找到了這個地址。

然後有一些特殊的ip,全0或者全1的特殊含義。

這裡就解釋了,ip的一個分類,並且非常簡單說了一下ip是怎麼定址的。

那麼為什麼有mac 地址呢? 不是說ip地址就可以找到機器了嗎? 為什麼還有這個mac地址呢?

有些人就說啊,有很多台機器共享一個ip,如果根據ip是找不到機器的。

這個怎麼說呢? 其實是本末倒置了。因為ip層基於鏈路層,鏈路層是只有ip的,也就是你必須通過mac才能傳輸。

比如 a 要往 b發送資訊,那麼a必須知道b的mac地址,這樣交換機才能知道發送給b。

為什麼有ip這個東西呢?

想想一下這個時候,a 是將資訊第一個交換機呢?還是將發給第二個交換機呢?對吧,如果有ip協議的話,那麼就知道在那個子網,就知道發給哪個了,這就是ip的網路能力。

那就有人又問了,為什麼不將mac 廢除,然後直接使用ip呢?

這個時候可能有人回答ip沒有那麼多啊,而且又很多區域網,很難每台機器一個獨立ip呢?

這的確是一個很大的問題,個人認為最大的原因是ip是動態的,而mac 是不變的。假如一台機器的a 通過幾個網路訪問到b,然後有一台機器c替換了b的ip,那麼和a對話的就是b了。這樣複雜度就很高了。

無論如何ip協議和鏈路層協議是相符的。

這個就是動態地址解析協議ARP (address resolution protocal).

動態解析廣播。

那麼比如a要發送到b,a 只能到b的ip地址,那麼是如何獲取b的mac地址呢?

首先a向交換機1發送廣播,那麼b收到了相應後,那麼就會發送mac地址給a了。

a知道了b的mac地址就可以通訊了。

但是如果每次都這樣廣播一次的話,那麼實在性能太低了,這不是一般的低。

那麼這個時候一般當a知道了 ip 的 mac 後就會進行快取,下次對這個ip發送消息的時候拿下mac就好了。

那麼查看一下本地快取:

windows: arp -a
linux: arp -nv
mac: arp -nla

這裡說明一下交換機的作用哈。

交換機的主要功能包括:學習功能、轉發過濾和消除迴路。

學習功能:乙太網交換機知道連接到每個埠的設備的MAC地址,將該地址與相應的埠進行映射,並存儲在交換機快取的MAC地址表中。

轉發過濾:當數據幀的目的地址在MAC地址表中被映射時,它被轉發到與目的節點相連的埠,而不是所有埠。

消除環路:當交換機包括一個冗餘環路時,乙太網交換機通過生成樹協議避免環路,同時允許備份路徑。

現在一般是路由器了,路由器包含了交換機的功能,如果交換機1是路由器的話,那麼直接這個路由器也是有arp的快取的,如果有對應ip的mac地址直接發給了a了。

那麼來看一下arp的報文格式。

arp 報文格式:

硬體類型: 如1 表示乙太網
協議類型,如0*0800 表示ipv4
硬體地址長度,如6
協議地址長度: 如4表示ipv4
操作碼:1 表示請求,2表示應答
發送方硬體地址
發送方協議地址
目標硬體地址
目標協議地址

這裡抓個包看下哈:

看下請求的哈:

這裡opcode 為1,那麼就是請求的了。

如果protocol size是4,protocol type 是0x0800,那麼就是ipv4了。

然後請求的地址是192.168.0.100。

然後隨便找一個響應的:

然後有一個非常關鍵的問題得說明一下,那就是arp協議是存在區域網中,而不是廣域網。

1、arp是地址解析協議,根據IP地址獲取物理地址的一個TCP與IP協議。
2、arp協議工作的解析範圍只限於本地網路也就是區域網之中,arp協議工作的範圍是不能用於廣域網的。

所以不要想通過arp找到百度的mac地址。

怎麼說呢? 如果是廣域網的話,你的包首先發送給了網關,網關會修改你包中的mac地址。

抓個百度的包看下:

看到了吧目標的mac地址是你的網關地址。

然後看下百度給你的,到你手裡的包是怎麼樣的?

這個發送給你的mac地址是網關。

那麼有ip解析成mac,自然就有mac解析成ip了,這個就是rarp。

這個怎麼說呢?就是如果你電腦啟動的時候是沒有分配ip的,那麼你就得問啊,我的mac地址是這個,那麼我的ip地址是怎麼樣的呢?

協議如下:

硬體類型: 如1 表示乙太網
協議類型,如0*0800 表示ipv4
硬體地址長度,如6
協議地址長度: 如4表示ipv4
操作碼:3 表示請求,4表示應答
發送方硬體地址
發送方協議地址
目標硬體地址
目標協議地址

然後介紹一個arp攻擊,這個攻擊很簡單。

比如,a b c 機器的mac地址分別是aa,bb,cc

當a要發資訊給b192.168.0.2的時候,那麼c 回答 192.168.0.2 的mac地址是cc。

同樣c要發消息給192.168.0.3 的時候,c也回答a的地址是cc。那麼a b 直接的通訊都到了c。

先到這裡,後續繼續補充ip相關協議。