IP 基礎(chǔ)知識(shí)“全家桶”,45 張圖一套帶走
前言
前段時(shí)間,有讀者希望我寫一篇關(guān)于 IP 分類地址、子網(wǎng)劃分等的文章,他反饋常常混淆,摸不著頭腦。
那么,說來就來!而且要盤就盤全一點(diǎn),順便挑戰(zhàn)下小林的圖解功力,所以就來個(gè) IP 基礎(chǔ)知識(shí)全家桶。
吃完這個(gè) IP 基礎(chǔ)知識(shí)全家桶全家桶,包你撐著肚子喊出:“真香!”
不多說,直接上菜,共分為三道菜:
首先是前菜 「 IP 基本認(rèn)識(shí) 」 其次是主菜 「IP 地址的基礎(chǔ)知識(shí)」 最后是點(diǎn)心 「IP 協(xié)議相關(guān)技術(shù)」

正文
??
前菜 —— IP 基本認(rèn)識(shí)

網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層有什么關(guān)系呢?

主菜 —— IP 地址的基礎(chǔ)知識(shí)
32 位正整數(shù)來表示,IP 地址在計(jì)算機(jī)是以二進(jìn)制的方式處理的。4 組,每組以「.」隔開,再將每組轉(zhuǎn)換成十進(jìn)制。


可能有的小伙伴提出了疑問,現(xiàn)在不僅電腦配了 IP, 手機(jī)、IPad 等電子設(shè)備都配了 IP 呀,照理來說肯定會(huì)超過 43 億啦,那是怎么能夠支持這么多 IP 的呢?
NAT,使得可連接計(jì)算機(jī)數(shù)超過 43 億臺(tái)。NAT 技術(shù)后續(xù)會(huì)進(jìn)一步討論和說明。IP 地址的分類

什么是 A、B、C 類地址?

A、B、C 分類地址最大主機(jī)個(gè)數(shù)是如何計(jì)算的呢?


主機(jī)號(hào)全為 1 指定某個(gè)網(wǎng)絡(luò)下的所有主機(jī),用于廣播 主機(jī)號(hào)全為 0 指定某個(gè)網(wǎng)絡(luò)
廣播地址用于什么?
172.20.0.0/16 用二進(jìn)制表示如下:172.20.255.255。在本網(wǎng)絡(luò)內(nèi)廣播的叫做本地廣播。例如網(wǎng)絡(luò)地址為 192.168.0.0/24 的情況下,廣播地址是 192.168.0.255 。因?yàn)檫@個(gè)廣播地址的 IP 包會(huì)被路由器屏蔽,所以不會(huì)到達(dá) 192.168.0.0/24 以外的其他鏈路上。 在不同網(wǎng)絡(luò)之間的廣播叫做直接廣播。例如網(wǎng)絡(luò)地址為 192.168.0.0/24 的主機(jī)向 192.168.1.255/24 的目標(biāo)地址發(fā)送 IP 包。收到這個(gè)包的路由器,將數(shù)據(jù)轉(zhuǎn)發(fā)給192.168.1.0/24,從而使得所有 192.168.1.1~192.168.1.254 的主機(jī)都能收到這個(gè)包(由于直接廣播有一定的安全問題,多數(shù)情況下會(huì)在路由器上設(shè)置為不轉(zhuǎn)發(fā))。
什么是 D、E 類地址?

多播地址用于什么?

1110 就表示是多播地址,而剩下的 28 位是多播的組編號(hào)。224.0.0.0 ~ 224.0.0.255 為預(yù)留的組播地址,只能局域網(wǎng)中,路由器是不會(huì)進(jìn)行轉(zhuǎn)發(fā)的 224.0.1.0 ~ 238.255.255.255 ?為用戶可用的組播地址,可以用于 Internet 上 239.0.0.0 ~ 239.255.255.255 為本地管理組播地址,可供內(nèi)部網(wǎng)在內(nèi)部使用,僅在特定的本地范圍內(nèi)有效
IP 分類的優(yōu)點(diǎn)

IP 分類的缺點(diǎn)
C 類地址能包含的最大主機(jī)數(shù)量實(shí)在太少了,只有 254 個(gè),估計(jì)一個(gè)網(wǎng)吧都不夠用。 而 B 類地址能包含的最大主機(jī)數(shù)量又太多了,6 萬多臺(tái)機(jī)器放在一個(gè)網(wǎng)絡(luò)下面,一般的企業(yè)基本達(dá)不到這個(gè)規(guī)模,閑著的地址就是浪費(fèi)。
CIDR 無分類地址解決。無分類地址 CIDR
CIDR。怎么劃分網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)的呢?
a.b.c.d/x,其中 /x 表示前 x 位屬于網(wǎng)絡(luò)號(hào), x 的范圍是 0 ~ 32,這就使得 IP 地址更加具有靈活性。/24 表示前 24 位是網(wǎng)絡(luò)號(hào),剩余的 8 位是主機(jī)號(hào)。

為什么要分離網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)?

怎么進(jìn)行子網(wǎng)劃分?

未做子網(wǎng)劃分的 ip 地址:網(wǎng)絡(luò)地址+主機(jī)地址 做子網(wǎng)劃分后的 ip 地址:網(wǎng)絡(luò)地址+(子網(wǎng)網(wǎng)絡(luò)地址+子網(wǎng)主機(jī)地址)



公有 IP 地址與私有 IP 地址


公有 IP 地址由誰管理呢?
ICANN 組織管理,中文叫「互聯(lián)網(wǎng)名稱與數(shù)字地址分配機(jī)構(gòu)」。
ARIN 北美地區(qū) LACNIC 拉丁美洲和一些加勒比群島 RIPE NCC 歐洲、中東和中亞 AfriNIC 非洲地區(qū) APNIC 亞太地區(qū)
IP 地址與路由控制

主機(jī) A 要發(fā)送一個(gè) IP 包,其源地址是 10.1.1.30和目標(biāo)地址是10.1.2.10,由于沒有在主機(jī) A 的路由表找到與目標(biāo)地址10.1.2.10的網(wǎng)絡(luò)地址,于是把包被轉(zhuǎn)發(fā)到默認(rèn)路由(路由器1)路由器 1收到 IP 包后,也在路由器1的路由表匹配與目標(biāo)地址相同的網(wǎng)絡(luò)地址記錄,發(fā)現(xiàn)匹配到了,于是就把 IP 數(shù)據(jù)包轉(zhuǎn)發(fā)到了10.1.0.2這臺(tái)路由器2路由器 2收到后,同樣對(duì)比自身的路由表,發(fā)現(xiàn)匹配到了,于是把 IP 包從路由器2的10.1.2.1這個(gè)接口出去,最終經(jīng)過交換機(jī)把 IP 數(shù)據(jù)包轉(zhuǎn)發(fā)到了目標(biāo)主機(jī)
環(huán)回地址是不會(huì)流向網(wǎng)絡(luò)
localhost?的主機(jī)名。IP 分片與重組
MTU 都是不相同的,如 FDDI 數(shù)據(jù)鏈路 MTU 4352、以太網(wǎng)的 MTU 是 1500 字節(jié)等。1500 字節(jié)。
MSS 也就是在 TCP 層進(jìn)行分片不由 IP 層分片,那么對(duì)于 UDP 我們盡量不要發(fā)送一個(gè)大于 MTU 的數(shù)據(jù)報(bào)文。IPv6 基本認(rèn)識(shí)
128 位的,這可分配的地址數(shù)量是大的驚人,說個(gè)段子 IPv6 可以保證地球上的每粒沙子都能被分配到一個(gè) IP 地址。IPv6 的亮點(diǎn)
IPv6 可自動(dòng)配置,即使沒有 DHCP 服務(wù)器也可以實(shí)現(xiàn)自動(dòng)分配IP地址,真是便捷到即插即用啊。 IPv6 包頭包首部長度采用固定的值 40字節(jié),去掉了包頭校驗(yàn)和,簡(jiǎn)化了首部結(jié)構(gòu),減輕了路由器負(fù)荷,大大提高了傳輸?shù)男阅?/strong>。IPv6 有應(yīng)對(duì)偽造 IP 地址的網(wǎng)絡(luò)安全功能以及防止線路竊聽的功能,大大提升了安全性。 … (由你發(fā)現(xiàn)更多的亮點(diǎn))
IPv6 地址的標(biāo)識(shí)方法


IPv6 地址的結(jié)構(gòu)
單播地址,用于一對(duì)一的通信 組播地址,用于一對(duì)多的通信 任播地址,用于通信最近的節(jié)點(diǎn),最近的節(jié)點(diǎn)是由路由協(xié)議決定 沒有廣播地址

IPv6 單播地址類型
在同一鏈路單播通信,不經(jīng)過路由器,可以使用鏈路本地單播地址,IPv4 沒有此類型 在內(nèi)網(wǎng)里單播通信,可以使用唯一本地地址,相當(dāng)于 IPv4 的私有 IP 在互聯(lián)網(wǎng)通信,可以使用全局單播地址,相當(dāng)于 IPv4 的公有 IP

IPv4 首部與 IPv6 首部

取消了首部校驗(yàn)和字段。 因?yàn)樵跀?shù)據(jù)鏈路層和傳輸層都會(huì)校驗(yàn),因此 IPv6 直接取消了 IP 的校驗(yàn)。 取消了分片/重新組裝相關(guān)字段。 分片與重組是耗時(shí)的過程,IPv6 不允許在中間路由器進(jìn)行分片與重組,這種操作只能在源與目標(biāo)主機(jī),這將大大提高了路由器轉(zhuǎn)發(fā)的速度。 取消選項(xiàng)字段。 選項(xiàng)字段不再是標(biāo)準(zhǔn) IP 首部的一部分了,但它并沒有消失,而是可能出現(xiàn)在 IPv6 首部中的「下一個(gè)首部」指出的位置上。刪除該選項(xiàng)字段是的 IPv6 的首部成為固定長度的 40字節(jié)。
點(diǎn)心 —— IP 協(xié)議相關(guān)技術(shù)
DNS 域名解析 ARP 與 RARP 協(xié)議 DHCP 動(dòng)態(tài)獲取 IP 地址 NAT 網(wǎng)絡(luò)地址轉(zhuǎn)換 ICMP 互聯(lián)網(wǎng)控制報(bào)文協(xié)議 IGMP 因特網(wǎng)組管理協(xié)
DNS
域名的層級(jí)關(guān)系
www.server.com,這里的句點(diǎn)代表了不同層次之間的界限。根 DNS 服務(wù)器 頂級(jí)域 DNS 服務(wù)器(com) 權(quán)威 DNS 服務(wù)器(server.com)

域名解析的工作流程
hosts,如果還是沒有,就會(huì) DNS 服務(wù)器進(jìn)行查詢,查詢的過程如下:客戶端首先會(huì)發(fā)出一個(gè) DNS 請(qǐng)求,問 www.server.com 的 IP 是啥,并發(fā)給本地 DNS 服務(wù)器(也就是客戶端的 TCP/IP 設(shè)置中填寫的 DNS 服務(wù)器地址)。 本地域名服務(wù)器收到客戶端的請(qǐng)求后,如果緩存里的表格能找到 www.server.com,則它直接返回 IP 地址。如果沒有,本地 DNS 會(huì)去問它的根域名服務(wù)器:“老大, 能告訴我 www.server.com 的 IP 地址嗎?” 根域名服務(wù)器是最高層次的,它不直接用于域名解析,但能指明一條道路。 根 DNS 收到來自本地 DNS 的請(qǐng)求后,發(fā)現(xiàn)后置是 .com,說:“www.server.com 這個(gè)域名歸 .com 區(qū)域管理”,我給你 .com 頂級(jí)域名服務(wù)器地址給你,你去問問它吧。” 本地 DNS 收到頂級(jí)域名服務(wù)器的地址后,發(fā)起請(qǐng)求問“老二, 你能告訴我 www.server.com ?的 IP 地址嗎?” 頂級(jí)域名服務(wù)器說:“我給你負(fù)責(zé) www.server.com 區(qū)域的權(quán)威 DNS 服務(wù)器的地址,你去問它應(yīng)該能問到”。 本地 DNS 于是轉(zhuǎn)向問權(quán)威 DNS 服務(wù)器:“老三,www.server.com對(duì)應(yīng)的IP是啥呀?” server.com 的權(quán)威 DNS 服務(wù)器,它是域名解析結(jié)果的原出處。為啥叫權(quán)威呢?就是我的域名我做主。 權(quán)威 DNS 服務(wù)器查詢后將對(duì)應(yīng)的 IP 地址 X.X.X.X 告訴本地 DNS。 本地 DNS 再將 IP 地址返回客戶端,客戶端和目標(biāo)建立連接。

ARP
那么 ARP 又是如何知道對(duì)方 MAC 地址的呢?

主機(jī)會(huì)通過廣播發(fā)送 ARP 請(qǐng)求,這個(gè)包中包含了想要知道的 MAC 地址的主機(jī) IP 地址。 當(dāng)同個(gè)鏈路中的所有設(shè)備收到 ARP 請(qǐng)求時(shí),會(huì)去拆開 ARP 請(qǐng)求包里的內(nèi)容,如果 ARP 請(qǐng)求包中的目標(biāo) IP 地址與自己的 IP 地址一致,那么這個(gè)設(shè)備就將自己的 MAC 地址塞入 ARP 響應(yīng)包返回給主機(jī)。
RARP 協(xié)議你知道是什么嗎?
RARP 服務(wù)器,在這個(gè)服務(wù)器上注冊(cè)設(shè)備的 MAC 地址及其 IP 地址。然后再將這個(gè)設(shè)備接入到網(wǎng)絡(luò),接著:該設(shè)備會(huì)發(fā)送一條「我的 MAC 地址是XXXX,請(qǐng)告訴我,我的IP地址應(yīng)該是什么」的請(qǐng)求信息。 RARP 服務(wù)器接到這個(gè)消息后返回「MAC地址為 XXXX 的設(shè)備,IP地址為 XXXX」的信息給這個(gè)設(shè)備。

DHCP

客戶端首先發(fā)起 DHCP 發(fā)現(xiàn)報(bào)文(DHCP DISCOVER) 的 IP 數(shù)據(jù)報(bào),由于客戶端沒有 IP 地址,也不知道 DHCP 服務(wù)器的地址,所以使用的是 UDP 廣播通信,其使用的廣播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作為源 IP 地址。DHCP 客戶端將該 IP 數(shù)據(jù)報(bào)傳遞給鏈路層,鏈路層然后將幀廣播到所有的網(wǎng)絡(luò)中設(shè)備。 DHCP 服務(wù)器收到 DHCP 發(fā)現(xiàn)報(bào)文時(shí),用 DHCP 提供報(bào)文(DHCP OFFER) 向客戶端做出響應(yīng)。該報(bào)文仍然使用 IP 廣播地址 255.255.255.255,該報(bào)文信息攜帶服務(wù)器提供可租約的 IP 地址、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)、DNS 服務(wù)器以及 IP 地址租用期。 客戶端收到一個(gè)或多個(gè)服務(wù)器的 DHCP 提供報(bào)文后,從中選擇一個(gè)服務(wù)器,并向選中的服務(wù)器發(fā)送 DHCP 請(qǐng)求報(bào)文(DHCP REQUEST進(jìn)行響應(yīng),回顯配置的參數(shù)。 最后,服務(wù)端用 DHCP ACK 報(bào)文對(duì) DHCP 請(qǐng)求報(bào)文進(jìn)行響應(yīng),應(yīng)答所要求的參數(shù)。
服務(wù)器如果同意繼續(xù)租用,則用 DHCP ACK 報(bào)文進(jìn)行應(yīng)答,客戶端就會(huì)延長租期。 服務(wù)器如果不同意繼續(xù)租用,則用 DHCP NACK 報(bào)文,客戶端就要停止使用租約的 IP 地址。
咦,用的是廣播,那如果 DHCP 服務(wù)器和客戶端不是在同一個(gè)局域網(wǎng)內(nèi),路由器又不會(huì)轉(zhuǎn)發(fā)廣播包,那不是每個(gè)網(wǎng)絡(luò)都要配一個(gè) DHCP 服務(wù)器?

DHCP 客戶端會(huì)向 DHCP 中繼代理發(fā)送 DHCP 請(qǐng)求包,而 DHCP 中繼代理在收到這個(gè)廣播包以后,再以單播的形式發(fā)給 DHCP 服務(wù)器。 服務(wù)器端收到該包以后再向 DHCP 中繼代理返回應(yīng)答,并由 DHCP 中繼代理將此包轉(zhuǎn)發(fā)給 DHCP 客戶端 。
NAT

那不是 N 個(gè) 私有 IP 地址,你就要 N 個(gè)公有 IP 地址?這怎么就緩解了 IPv4 地址耗盡的問題?這不瞎扯嗎?

NAT 那么牛逼,難道就沒缺點(diǎn)了嗎?
外部無法主動(dòng)與 NAT 內(nèi)部服務(wù)器建立連接,因?yàn)?NAPT 轉(zhuǎn)換表沒有轉(zhuǎn)換記錄。 轉(zhuǎn)換表的生產(chǎn)與轉(zhuǎn)換操作都會(huì)產(chǎn)生性能開銷。 通信過程中,如果 NAT 路由器重啟了,所有的 TCP 連接都將被重置。
如何解決 NAT 潛在的問題呢?
ICMP
ICMP 功能都有啥?
ICMP 主要的功能包括:確認(rèn) IP 包是否成功送達(dá)目標(biāo)地址、報(bào)告發(fā)送過程中 IP 包被廢棄的原因和改善網(wǎng)絡(luò)設(shè)置等。IP 通信中如果某個(gè) IP 包因?yàn)槟撤N原因未能達(dá)到目標(biāo)地址,那么這個(gè)具體的原因?qū)?strong style="font-size: inherit;line-height: inherit;color: rgb(48, 79, 254);">由 ICMP 負(fù)責(zé)通知。
A 向主機(jī) B 發(fā)送了數(shù)據(jù)包,由于某種原因,途中的路由器 2 未能發(fā)現(xiàn)主機(jī) B 的存在,這時(shí),路由器 2 就會(huì)向主機(jī) A 發(fā)送一個(gè) ICMP 目標(biāo)不可達(dá)數(shù)據(jù)包,說明發(fā)往主機(jī) B 的包未能成功。IP 進(jìn)行發(fā)送 。2 返回的 ICMP 包會(huì)按照往常的路由控制先經(jīng)過路由器 1 再轉(zhuǎn)發(fā)給主機(jī) A 。收到該 ICMP 包的主機(jī) A 則分解 ICMP 的首部和數(shù)據(jù)域以后得知具體發(fā)生問題的原因。ICMP 類型
一類是用于診斷的查詢消息,也就是「查詢報(bào)文類型」 另一類是通知出錯(cuò)原因的錯(cuò)誤消息,也就是「差錯(cuò)報(bào)文類型」

IGMP
IGMP 協(xié)議了。
IGMP 報(bào)文向路由器申請(qǐng)加入和退出組播組,默認(rèn)情況下路由器是不會(huì)轉(zhuǎn)發(fā)組播包到連接中的主機(jī),除非主機(jī)通過 IGMP 加入到組播組,主機(jī)申請(qǐng)加入到組播組時(shí),路由器就會(huì)記錄 IGMP 路由器表,路由器后續(xù)就會(huì)轉(zhuǎn)發(fā)該組播地址的數(shù)據(jù)包了。 IGMP 報(bào)文采用 IP 封裝,IP 頭部的協(xié)議號(hào)為 2,而且 TTL 字段值通常 為 1,因?yàn)?IGMP 是工作在主機(jī)與連接的路由器之間。
IGMP 工作機(jī)制
IGMPv2 作為例子,說說常規(guī)查詢與響應(yīng)和離開組播組這兩個(gè)工作機(jī)制。
路由器會(huì)周期性發(fā)送目的地址為 224.0.0.1(表示同一網(wǎng)段內(nèi)所有主機(jī)和路由器) IGMP 常規(guī)查詢報(bào)文;主機(jī)1 和 主機(jī) 3 收到這個(gè)查詢,隨后會(huì)啟動(dòng)「報(bào)告延遲計(jì)時(shí)器」,計(jì)時(shí)器的時(shí)間是隨機(jī)的,通常是 0~10 秒,計(jì)時(shí)器超時(shí)后主機(jī)就會(huì)發(fā)送 IGMP 成員關(guān)系報(bào)告報(bào)文(源 IP 地址為自己主機(jī)的 IP 地址,目的 IP 地址為組播地址)。如果在定時(shí)器超時(shí)之前,收到同一個(gè)組內(nèi)的其他主機(jī)發(fā)送的成員關(guān)系報(bào)告報(bào)文,則自己不再發(fā)送,這樣可以減少網(wǎng)絡(luò)中多余的 IGMP 報(bào)文數(shù)量; 路由器收到主機(jī)的成員關(guān)系報(bào)告報(bào)文后,就會(huì)在 IGMP 路由表中加入該組播組,后續(xù)網(wǎng)絡(luò)中一旦該組播地址的數(shù)據(jù)到達(dá)路由器,它會(huì)把數(shù)據(jù)包轉(zhuǎn)發(fā)出去;

主機(jī) 1 要離開組 224.1.1.1,發(fā)送 IGMPv2 離組報(bào)文,報(bào)文的目的地址是 224.0.0.2(表示發(fā)向網(wǎng)段內(nèi)的所有路由器); 路由器收到該報(bào)文后,以 1 秒為間隔連續(xù)發(fā)送 IGMP 特定組查詢報(bào)文(共計(jì)發(fā)送 2 個(gè)),以便確認(rèn)該網(wǎng)絡(luò)是否還有 224.1.1.1 組的其他成員; 主機(jī) 3 仍然是組 224.1.1.1 的成員,因此它立即響應(yīng)這個(gè)特定組查詢。路由器知道該網(wǎng)絡(luò)中仍然存在該組播組的成員,于是繼續(xù)向該網(wǎng)絡(luò)轉(zhuǎn)發(fā) 224.1.1.1 的組播數(shù)據(jù)包;

主機(jī) 1 要離開組播組 224.1.1.1,發(fā)送 IGMP 離組報(bào)文; 路由器收到該報(bào)文后,以 1 秒為間隔連續(xù)發(fā)送 IGMP 特定組查詢報(bào)文(共計(jì)發(fā)送 2 個(gè))。此時(shí)在該網(wǎng)段內(nèi),組 224.1.1.1 已經(jīng)沒有其他成員了,因此沒有主機(jī)響應(yīng)這個(gè)查詢; 一定時(shí)間后,路由器認(rèn)為該網(wǎng)段中已經(jīng)沒有 224.1.1.1 組播組成員了,將不會(huì)再向這個(gè)網(wǎng)段轉(zhuǎn)發(fā)該組播地址的數(shù)據(jù)包;
參考文獻(xiàn)
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
評(píng)論
圖片
表情
