- 網絡的琴弦:玩轉IP看監控
- 周迪等
- 3196字
- 2019-01-04 14:22:30
IP與ARP解析
由于互聯網的誕生,局域網內部的鏈路層地址無法充當設備的唯一性標識(鏈路層地址只在局域網內部有效),于是IP地址就站上了歷史的舞臺,用來唯一地標識接入互聯網的設備的接口。如果一個設備具有多個接口,那么每個接口都會擁有一個IP地址,典型的例子是連接多個局域網的路由器,它的每一個接口都有一個獨立的IP地址。但計算機通常只有一個接口,那它通常只有一個IP地址,除非特殊組網需要還會配置一些從地址。
IP地址
IP地址是一個32位的二進制數,通常用“點分十進制”表示成“a.b.c.d”的形式。其中a, b, c, d各占用8位,是0~255之間的十進制整數。例如:IP地址192.168.1.10,實際上是32位二進制數11000000. 10101000.00000001.00001010。
IP地址分為ABCDE五類:
A類:0.0.0.0~127.255.255.255;
B類:128.0.0.0~191.255.255.255;
C類:192.0.0.0~223.255.255.255;
D類:224.0.0.0~239.255.255.255;
E類:240.0.0.0~247.255.255.255。
A、B、C三類地址稱為單播地址,用于標識一個接口,而目的地址為單播地址的報文稱為單播報文;D類地址稱為組播地址,目的地址為組播地址的報文稱為組播報文,某些啟用了特定功能的接口可以收到對應組播地址的組播報文;E類地址暫時不用;還有一個特別地址255.255.255.255,稱為廣播地址,廣播報文可以被所有設備接收。
IP(IPv4)地址中,有三段地址專門用于內部專網(或稱為“私網”)的規劃,不能被傳播到互聯網(與“私網”相對應,可以稱為“公網”)上:A類地址段中的10.0.0.0~10.255.255.255, B類地址段中的172.16.0.0~172.31.255.255, C類地址段中的192.168.0.0~192.168.255.255;或表示為10.0.0.0/8,172.16.0.0/12,192.168.0.0/16三個網段。
ARP解析
通過靜態手工配置或應用層的協議互通,NVR和IPC可以獲知對方的IP地址——關于協議互通的詳細機制與具體的聯網協議相關,我們在后續講到互聯互通時再仔細闡述。
以太局域網的內部通信需要知道鏈路層地址,即MAC地址。已經知道了對方的IP地址,怎么才能獲取對方的MAC地址呢?
小時候父母和老師經常教導我們,鼻子下面是啥?嘴巴啊,不清楚問就行了。
“誰的IP地址是192.168.1.10(NVR的IP),告訴一下MAC地址?”IPC對著大伙喊,這叫廣播。
“嗨,來了來了,是我是我,我的MAC是48:EA:63:0E:B7:BF。”NVR對著IPC應答,這叫單播。
規定這個交互過程的協議叫ARP(Address Resolution Protocol),這個過程稱為地址解析。在討論ARP協議之前,我們先了解下MAC地址的單播、組播、廣播知識。
每個以太網設備都有一個唯一的屬于自己的MAC地址,叫作單播MAC地址,例如48:EA:63:0E:B7:BF,目的MAC為該地址的以太幀只有它才會接收。有一個特別的MAC地址“FF:FF:FF:FF:FF:FF”,它對應于局域網上的所有設備,只要給這個MAC地址發送報文,局域網上的所有設備都會接收,這個MAC地址稱為廣播MAC地址。另外還有一類地址,對應于以太網上的一組特定的設備,這類MAC地址叫組播MAC地址,目的為組播MAC地址的以太幀,只有加入到這個組播組的設備才會接收。
說明
關于組播MAC地址的應用,我們在后面討論組播時再深入介紹。
當IPC不知道NVR的MAC地址的時候,它會發送一個ARP請求報文,通常是一個廣播以太幀。大意是“誰知道192.168.1.10的MAC地址是多少,告訴我192.168.1.100”,然后在發送者地址字段填上自己的MAC地址:48:EA:63:0E:00:01。既然不知道對方的MAC地址,目的MAC地址就填廣播MAC地址“FF:FF:FF:FF:FF:FF”了。
當NVR收到這個報文后一看,哦,有人問我的MAC地址,那我就告訴他吧。然后發送一個ARP應答報文,通常是一個單播以太幀。大意就是“192.168.1.10的MAC地址是48:EA:63:0E:B7:BF”,然后填上自己的MAC地址48:EA:63:0E:B7:BF,目的MAC地址就是請求人的MAC地址了:48:EA:63:0E:00:01。對了,還要把對方的IP和MAC地址保存下來:“192.168.1.100 48:EA:63:0E:00:01”,下一次給IPC發送報文的時候就不用再次詢問對方的MAC地址了——這個存下來的表項就叫ARP表項,如圖1-7所示。

圖1-7 ARP機制組網圖
與此同時,同一局域網內的其他IPC也能收到該IPC發送給NVR的ARP請求,這些IPC雖然不會發送ARP響應,但也會把這個IPC的MAC地址和IP的對應關系保存下來。下次如果需要向這個IPC發送消息就不用再發送ARP請求了。
再回頭看發送ARP請求的IPC,在收到NVR的ARP應答報文后,自然就得到了NVR的MAC地址,于是建立了一個關于NVR的ARP表項:“192.168.1.10 48:EA:63:0E:B7:BF”。
到此為止,雙方的ARP表中都有關于彼此的MAC地址了。
上述的ARP學習過程是通過協議動態獲取的,這種ARP表項叫作動態ARP。為了節省表項資源,ARP表項需要定期老化清除。相對動態ARP,也可以手工靜態配置,這種手工配置的表項叫作靜態ARP表項。
免費ARP
有一種特殊的ARP特性叫作免費ARP(Gratuitous ARP)。免費ARP的過程很簡單,就是明知故問,發送一個ARP請求報文。比如NVR發送的免費ARP就是“誰知道192.168.1.10的MAC地址,請告訴我192.168.1.10”。這種明知故問的ARP有什么用呢?當設備獲得了一個IP地址或剛開機時,為了確定自己的IP有沒有被局域網內的其他設備占用,通常會發送一個免費ARP請求;如果局域網內有其他設備已用了這個地址,那個設備就會回應一個ARP應答,于是發送免費ARP的設備就會給予系統提示。例如,NVR收到其他設備關于它的免費ARP的應答,就會提示“IP地址沖突”,便于管理員進行故障排查。
免費ARP的另一個好處是,如果設備IP所對應的MAC地址發生了變化,發送免費ARP可以使得局域網內的其他IP設備立刻刷新該設備的ARP表項。
說明
MAC地址發生改變的場景比較多,可能是計算機更換了網卡,也可能是主備系統發生了切換。
觸發機制
通過ARP解析可以獲取對方的MAC地址,原理比較簡單。但是昨天老U碰到了一件費解的事情:開始的時候將NVR配成1.1.1.1, IPC配成2.2.2.2,死活不通,后來在BBS上請教了高人,分別改配成192.168.1.10和192.168.1.100才互通成功,這是為什么呢?
我們知道,以太幀用于局域網通信,同樣MAC地址只有在局域網內有效,所以,只有當設備認為自己與對方處于同一個局域網時,才會通過ARP協議請求對方的MAC地址,然后將報文直接或通過二層交換機發送給對端設備,這個過程叫二層轉發。否則,設備就不會將報文直接發送給對方,而是將報文發送給一個叫“網關”的設備,即前面提到的路由器,由網關轉發給處于另一個局域網的目的設備,這個過程叫三層轉發。
設備怎么判斷對方是否與自己在同一個局域網呢?
一個IP地址可以分解為網絡地址和主機地址,網絡地址和主機地址的劃分是由“地址掩碼”決定的。地址掩碼為32位,由一串1后面跟隨一串0組成,其中1表示IP地址中的網絡地址對應的位數,而0表示IP地址中主機地址對應的位數。掩碼可以用點分十進制表示,例如點分十進制的掩碼255.255.255. 0,實際上是32位二進制數11111111. 11111111. 11111111.00000000;掩碼也通常用長度值來表示,即值為1的位的數量,例如掩碼255.255.255.0用掩碼長度來表示就是24。
當我們配置計算機的IP地址時,除了配置IP地址本身,同時需要配置地址掩碼。例如,配置主機地址為192.168.1.10,掩碼為255.255.255.0,或這樣表示為192.168.1.10/24。
網絡地址相同的兩個IP地址,稱它們處于同一網段,即處于同一局域網。但由于報文的發送方并不知道對方的地址掩碼,所以實際的處理方法是:將對方的IP和自己的掩碼相與,若結果與自己的網絡地址相同,就認為處于同一網段。例如,A主機的地址為192.168.1.10/16, B主機的地址為192.168.1.100/24,則A會認為B與自己在同一網段,因為192.168.1.100與A的16位掩碼相與的結果為192.168.0.0,剛好是A的網絡地址;B也會認為A與自己在同一網段,因為192.168.1.10與B的24位掩碼相與的結果為192.168.1.0,剛好是B的網絡地址。所以它們倆會進行二層轉發。又比如,A主機的地址為1.1.1.1/24, B主機的地址為2.2.2.2/24,則A不會認為B與自己在同一網段,因為2.2.2.2與A的24位掩碼相與的結果2.2.2.0不是A的網絡地址;B也不會認為A與自己在同一網段,因為1.1.1.1與自己的24位掩碼相與的結果1.1.1.0不是B的網絡地址。所以它們不會去發送ARP報文解析對方的MAC地址,而是各自去尋找網關,去解析網關的MAC地址,走三層轉發流程。
家園網友互動
Q:hurryliao發表于2015-8-13 17:24
1.1.1.1和1.1.1.5是同一網段的嗎?
A:網語者 發表于2015-8-13 17:38
不能確定。在早期的協議中,1.1.1.1是屬于A類地址,A類地址的掩碼長度是8位。因此這兩個地址是屬于同一網段。但是,現在的網絡都實現了無類別域間路由(Classless Inter-Domain Routing, CIDR),這兩個地址是否位于同一網段還需要依賴掩碼長度來確定。如果掩碼長度是30,那么這兩個地址就不屬于同一個網段了。
Q:westbuke發表于2015-8-13 17:39
一個接口只能有一個IP地址嗎?
A:網語者 發表于2015-8-13 18:28
取決于操作系統,一個物理接口完全可以有多個IP地址。
感覺學有所成的老U點了支雪茄,悠哉地坐到監控屏幕前面,看著客人們在各個茶房聊天喝茶。突然,圖像上的人影跳動了起來,視頻不像原先那么順暢了;同時,辦公室傳來玩游戲的老婆的尖叫聲:“電腦中病毒了……”