前言 前段時(shí)間,有讀者希望我寫一篇關(guān)于 IP 分類地址、子網(wǎng)劃分等的文章,他反饋常常混淆,摸不著頭腦。 那么,說來就來!而且要盤就盤全一點(diǎn),順便挑戰(zhàn)下小林的圖解功力,所以就來個(gè)IP 基礎(chǔ)知識(shí)全家桶。 吃完這個(gè) IP 基礎(chǔ)知識(shí)全家桶全家桶,包你撐著肚子喊出:“真香!” 不多說,直接上菜,共分為三道菜:
IP 基礎(chǔ)知識(shí)全家桶 正文前菜 —— IP 基本認(rèn)識(shí)網(wǎng)絡(luò)層 網(wǎng)絡(luò)層的主要作用是:實(shí)現(xiàn)主機(jī)與主機(jī)之間的通信,也叫點(diǎn)對(duì)點(diǎn)(end to end)通信。 IP 的作用
有的小伙伴分不清 IP(網(wǎng)絡(luò)層) 和 MAC (數(shù)據(jù)鏈路層)之間的區(qū)別和關(guān)系。 其實(shí)很容易區(qū)分,在上面我們知道 IP 的作用是主機(jī)之間通信中的,而MAC 的作用則是實(shí)現(xiàn)「直連」的兩個(gè)設(shè)備之間通信,而 IP 則負(fù)責(zé)在「沒有直連」的兩個(gè)網(wǎng)絡(luò)之間進(jìn)行通信傳輸。 舉個(gè)生活的栗子,小林要去一個(gè)很遠(yuǎn)的地方旅行,制定了一個(gè)行程表,其間需先后乘坐飛機(jī)、地鐵、公交車才能抵達(dá)目的地,為此小林需要買飛機(jī)票,地鐵票等。 飛機(jī)票和地鐵票都是去往特定的地點(diǎn)的,每張票只能夠在某一限定區(qū)間內(nèi)移動(dòng),此處的「區(qū)間內(nèi)」就如同通信網(wǎng)絡(luò)中數(shù)據(jù)鏈路。 在區(qū)間內(nèi)移動(dòng)相當(dāng)于數(shù)據(jù)鏈路層,充當(dāng)區(qū)間內(nèi)兩個(gè)節(jié)點(diǎn)傳輸?shù)墓δ?,區(qū)間內(nèi)的出發(fā)點(diǎn)好比源 MAC 地址,目標(biāo)地點(diǎn)好比目的 MAC 地址。 整個(gè)旅游行程表就相當(dāng)于網(wǎng)絡(luò)層,充當(dāng)遠(yuǎn)程定位的功能,行程的開始好比源 IP,行程的終點(diǎn)好比目的 IP 地址。 IP 的作用與 MAC 的作用 如果小林只有行程表而沒有車票,就無法搭乘交通工具到達(dá)目的地。相反,如果除了車票而沒有行程表,恐怕也很難到達(dá)目的地。因?yàn)樾×植恢涝撟裁窜嚕膊恢涝撛谀睦飺Q乘。 因此,只有兩者兼?zhèn)?,既有某個(gè)區(qū)間的車票又有整個(gè)旅行的行程表,才能保證到達(dá)目的地。與此類似,計(jì)算機(jī)網(wǎng)絡(luò)中也需要「數(shù)據(jù)鏈路層」和「網(wǎng)絡(luò)層」這個(gè)分層才能實(shí)現(xiàn)向最終目標(biāo)地址的通信。 還有重要一點(diǎn),旅行途中我們雖然不斷變化了交通工具,但是旅行行程的起始地址和目的地址始終都沒變。其實(shí),在網(wǎng)絡(luò)中數(shù)據(jù)包傳輸中也是如此,源IP地址和目標(biāo)IP地址在傳輸過程中是不會(huì)變化的,只有源 MAC 地址和目標(biāo) MAC 一直在變化。 主菜 —— IP 地址的基礎(chǔ)知識(shí) 在 TCP/IP 網(wǎng)絡(luò)通信時(shí),為了保證能正常通信,每個(gè)設(shè)備都需要配置正確的 IP 地址,否則無法實(shí)現(xiàn)正常的通信。 IP 地址(IPv4 地址)由32位正整數(shù)來表示,IP 地址在計(jì)算機(jī)是以二進(jìn)制的方式處理的。 而人類為了方便記憶采用了點(diǎn)分十進(jìn)制的標(biāo)記方式,也就是將 32 位 IP 地址以每 8 位為組,共分為4組,每組以「.」隔開,再將每組轉(zhuǎn)換成十進(jìn)制。 點(diǎn)分十進(jìn)制 那么,IP 地址最大值也就是 也就說,最大允許 43 億臺(tái)計(jì)算機(jī)連接到網(wǎng)絡(luò)。 實(shí)際上,IP 地址并不是根據(jù)主機(jī)臺(tái)數(shù)來配置的,而是以網(wǎng)卡。像服務(wù)器、路由器等設(shè)備都是有 2 個(gè)以上的網(wǎng)卡,也就是它們會(huì)有 2 個(gè)以上的 IP 地址。 每塊網(wǎng)卡可以分配一個(gè)以上的IP地址 因此,讓 43 億臺(tái)計(jì)算機(jī)全部連網(wǎng)其實(shí)是不可能的,更何況 IP 地址是由「網(wǎng)絡(luò)標(biāo)識(shí)」和「主機(jī)標(biāo)識(shí)」這兩個(gè)部分組成的,所以實(shí)際能夠連接到網(wǎng)絡(luò)的計(jì)算機(jī)個(gè)數(shù)更是少了很多。
因?yàn)闀?huì)根據(jù)一種可以更換 IP 地址的技術(shù)NAT,使得可連接計(jì)算機(jī)數(shù)超過 43 億臺(tái)。NAT技術(shù)后續(xù)會(huì)進(jìn)一步討論和說明。 IP 地址的分類互聯(lián)網(wǎng)誕生之初,IP 地址顯得很充裕,于是計(jì)算機(jī)科學(xué)家們?cè)O(shè)計(jì)了分類地址。 IP 地址分類成了 5 種類型,分別是 A 類、B 類、C 類、D 類、E 類。 IP 地址分類 上圖中黃色部是分類號(hào),用以區(qū)分 IP 地址類別。
其中對(duì)于 A、B、C 類主要分為兩個(gè)部分,分別是網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。這很好理解,好比小林是 A 小區(qū) 1 棟 101 號(hào),你是 B 小區(qū) 1 棟 101 號(hào)。 我們可以用下面這個(gè)表格, 就能很清楚的知道 A、B、C 分類對(duì)應(yīng)的地址范圍、最大主機(jī)個(gè)數(shù)。 A、B、C 分類地址
最大主機(jī)個(gè)數(shù),就是要看主機(jī)號(hào)的位數(shù),如 C 類地址的主機(jī)號(hào)占 8 位,那么 C 類地址的最大主機(jī)個(gè)數(shù): 為什么要減 2 呢? 因?yàn)樵?IP 地址中,有兩個(gè) IP 是特殊的,分別是主機(jī)號(hào)全為 1 和 全為 0 地址。
因此,在分配過程中,應(yīng)該去掉這兩種情況。
廣播地址用于在同一個(gè)鏈路中相互連接的主機(jī)之間發(fā)送數(shù)據(jù)包。 學(xué)校班級(jí)中就有廣播的例子,在準(zhǔn)備上課的時(shí)候,通常班長(zhǎng)會(huì)喊:“上課, 全體起立!”,班里的同學(xué)聽到這句話是不是全部都站起來了?這個(gè)句話就有廣播的含義。 當(dāng)主機(jī)號(hào)全為 1 時(shí),就表示該網(wǎng)絡(luò)的廣播地址。例如把172.20.0.0/16用二進(jìn)制表示如下: 10101100.00010100.00000000.00000000 將這個(gè)地址的主機(jī)部分全部改為 1,則形成廣播地址: 10101100.00010100.11111111.11111111 再將這個(gè)地址用十進(jìn)制表示,則為172.20.255.255。 廣播地址可以分為本地廣播和直接廣播兩種。
本地廣播與直接廣播
而 D 類和 E 類地址是沒有主機(jī)號(hào)的,所以不可用于主機(jī) IP,D 類常被用于多播,E 類是預(yù)留的分類,暫時(shí)未使用。 D、E 分類地址
多播用于將包發(fā)送給特定組內(nèi)的所有主機(jī)。 還是舉班級(jí)的栗子,老師說:“最后一排的同學(xué),上來做這道數(shù)學(xué)題。”,老師是指定的是最后一排的同學(xué),也就是多播的含義了。 由于廣播無法穿透路由,若想給其他網(wǎng)段發(fā)送同樣的包,就可以使用可以穿透路由的多播(組播)。 單播、廣播、多播通信 多播使用的 D 類地址,其前四位是1110就表示是多播地址,而剩下的 28 位是多播的組編號(hào)。 從 224.0.0.0 ~ 239.255.255.255 都是多播的可用范圍,其劃分為以下三類:
不管是路由器還是主機(jī)解析到一個(gè) IP 地址時(shí)候,我們判斷其 IP 地址的首位是否為 0,為 0 則為 A 類地址,那么就能很快的找出網(wǎng)絡(luò)地址和主機(jī)地址。 其余分類判斷方式參考如下圖: IP 分類判斷 所以,這種分類地址的優(yōu)點(diǎn)就是簡(jiǎn)單明了、選路(基于網(wǎng)絡(luò)地址)簡(jiǎn)單。
缺點(diǎn)一 同一網(wǎng)絡(luò)下沒有地址層次,比如一個(gè)公司里用了 B 類地址,但是可能需要根據(jù)生產(chǎn)環(huán)境、測(cè)試環(huán)境、開發(fā)環(huán)境來劃分地址層次,而這種 IP 分類是沒有地址層次劃分的功能,所以這就缺少地址的靈活性。 缺點(diǎn)二 A、B、C類有個(gè)尷尬處境,就是不能很好的與現(xiàn)實(shí)網(wǎng)絡(luò)匹配。
這兩個(gè)缺點(diǎn),都可以在CIDR無分類地址解決。 無分類地址 CIDR正因?yàn)?IP 分類存在許多缺點(diǎn),所有后面提出了無分類地址的方案,即CIDR。 這種方式不再有分類地址的概念,32 比特的 IP 地址被劃分為兩部分,前面是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào)。
表示形式a.b.c.d/x,其中/x表示前 x 位屬于網(wǎng)絡(luò)號(hào), x 的范圍是0 ~ 32,這就使得 IP 地址更加具有靈活性。 比如 10.100.122.2/24,這種地址表示形式就是 CIDR,/24表示前 24 位是網(wǎng)絡(luò)號(hào),剩余的 8 位是主機(jī)號(hào)。 還有另一種劃分網(wǎng)絡(luò)號(hào)與主機(jī)號(hào)形式,那就是子網(wǎng)掩碼,掩碼的意思就是掩蓋掉主機(jī)號(hào),剩余的就是網(wǎng)絡(luò)號(hào)。 將子網(wǎng)掩碼和 IP 地址按位計(jì)算 AND,就可得到網(wǎng)絡(luò)號(hào)。
因?yàn)閮膳_(tái)計(jì)算機(jī)要通訊,首先要判斷是否處于同一個(gè)廣播域內(nèi),即網(wǎng)絡(luò)地址是否相同。如果網(wǎng)絡(luò)地址相同,表明接受方在本網(wǎng)絡(luò)上,那么可以把數(shù)據(jù)包直接發(fā)送到目標(biāo)主機(jī), 路由器尋址工作中,也就是通過這樣的方式來找到對(duì)應(yīng)的網(wǎng)絡(luò)號(hào)的,進(jìn)而把數(shù)據(jù)包轉(zhuǎn)發(fā)給對(duì)應(yīng)的網(wǎng)絡(luò)內(nèi)。 IP地址的網(wǎng)絡(luò)號(hào)
在上面我們知道可以通過子網(wǎng)掩碼劃分出網(wǎng)絡(luò)號(hào)和主機(jī)號(hào),那實(shí)際上子網(wǎng)掩碼還有一個(gè)作用,那就是劃分子網(wǎng)。 子網(wǎng)劃分實(shí)際上是將主機(jī)地址分為兩個(gè)部分:子網(wǎng)網(wǎng)絡(luò)地址和子網(wǎng)主機(jī)地址。形式如下:
假設(shè)對(duì) C 類地址進(jìn)行子網(wǎng)劃分,網(wǎng)絡(luò)地址 192.168.1.0,使用子網(wǎng)掩碼 255.255.255.192 對(duì)其進(jìn)行子網(wǎng)劃分。 C 類地址中前 24 位 是網(wǎng)絡(luò)號(hào),最后 8 位是主機(jī)號(hào),根據(jù)子網(wǎng)掩碼可知從 8 位主機(jī)號(hào)中借用 2 位作為子網(wǎng)號(hào)。 由于子網(wǎng)網(wǎng)絡(luò)地址被劃分成 2 位,那么子網(wǎng)地址就有 4 個(gè),分別是 00、01、10、11,具體劃分如下圖: 劃分后的 4 個(gè)子網(wǎng)如下表格: 公有 IP 地址與私有 IP 地址 在 A、B、C 分類地址,實(shí)際上有分公有 IP 地址和 私有 IP 地址。 平時(shí)我們辦公室、家里、學(xué)校用的 IP 地址,一般都是私有 IP 地址。因?yàn)檫@些地址允許組織內(nèi)部的 IT 人員自己管理、自己分配,而且可以重復(fù)。因此,你學(xué)校的某個(gè)私有 IP 地址和我學(xué)校的可以是一樣的。 就像每個(gè)小區(qū)都有自己的樓編號(hào)和門牌號(hào),你小區(qū)家可以叫 1 棟 101 號(hào),我小區(qū)家也可以叫 1 棟 101,沒有任何問題。但一旦出了小區(qū),就需要帶上中山路 666 號(hào)(公網(wǎng) IP 地址),是國(guó)家統(tǒng)一分配的,不能兩個(gè)小區(qū)都叫中山路 666。 所以,公有 IP 地址是有個(gè)組織統(tǒng)一分配的,假設(shè)你要開一個(gè)博客網(wǎng)站,那么你就需要去申請(qǐng)購(gòu)買一個(gè)公有 IP,這樣全世界的人才能訪問。并且公有 IP 地址基本上要在整個(gè)互聯(lián)網(wǎng)范圍內(nèi)保持唯一。 公有 IP 地址與私有 IP 地址
私有 IP 地址通常是內(nèi)部的 IT 人員值管理,公有 IP 地址是由ICANN組織管理,中文叫「互聯(lián)網(wǎng)名稱與數(shù)字地址分配機(jī)構(gòu)」。 IANA 是 ICANN 的其中一個(gè)機(jī)構(gòu),它負(fù)責(zé)分配互聯(lián)網(wǎng) IP 地址,是按州的方式層層分配。
其中,在中國(guó)是由 CNNIC 的機(jī)構(gòu)進(jìn)行管理,它是中國(guó)國(guó)內(nèi)唯一指定的全局 IP 地址管理的組織。 IP 地址與路由控制IP地址的網(wǎng)絡(luò)地址這一部分是用于進(jìn)行路由控制。 路由控制表中記錄著網(wǎng)絡(luò)地址與下一步應(yīng)該發(fā)送至路由器的地址,在主機(jī)和路由器上都會(huì)有各自的路由器控制表。 在發(fā)送 IP 包時(shí),首先要確定 IP 包首部中的目標(biāo)地址,再?gòu)穆酚煽刂票碇姓业脚c該地址具有相同網(wǎng)絡(luò)地址的記錄,根據(jù)該記錄將 IP 包轉(zhuǎn)發(fā)給相應(yīng)的下一個(gè)路由器。如果路由控制表中存在多條相同網(wǎng)絡(luò)地址的記錄,就選擇相同位數(shù)最多的網(wǎng)絡(luò)地址,也就是最長(zhǎng)匹配。 下面以下圖的網(wǎng)絡(luò)鏈路作為例子說明: IP 地址與路由控制
環(huán)回地址是在同一臺(tái)計(jì)算機(jī)上的程序之間進(jìn)行網(wǎng)絡(luò)通信時(shí)所使用的一個(gè)默認(rèn)地址。 計(jì)算機(jī)使用一個(gè)特殊的 IP 地址 127.0.0.1 作為環(huán)回地址,與該地址具有相同意義的是一個(gè)叫做 localhost 的主機(jī)名。 使用這個(gè) IP 或主機(jī)名時(shí),數(shù)據(jù)包不會(huì)流向網(wǎng)絡(luò)。 IP 分片與重組每種數(shù)據(jù)鏈路的最大傳輸單元MTU都是不相同的,如 FDDI 數(shù)據(jù)鏈路 MTU 4352、以太網(wǎng)的 MTU 是 1500 字節(jié)等。 每種數(shù)據(jù)鏈路的 MTU 之所以不同,是因?yàn)槊總€(gè)不同類型的數(shù)據(jù)鏈路的使用目的不同。使用目的不同,可承載的 MTU 也就不同。 其中,我們最常見數(shù)據(jù)鏈路是以太網(wǎng),它的 MTU 是1500字節(jié)。 那么當(dāng) IP 數(shù)據(jù)包大小大于 MTU 時(shí), IP 數(shù)據(jù)包就會(huì)被分片。 經(jīng)過分片之后的 IP 數(shù)據(jù)報(bào)在被重組的時(shí)候,只能由目標(biāo)主機(jī)進(jìn)行,路由器是不會(huì)進(jìn)行重組的。 假設(shè)發(fā)送方發(fā)送一個(gè) 4000 字節(jié)的大數(shù)據(jù)報(bào),若要傳輸在以太網(wǎng)鏈路,則需要把數(shù)據(jù)報(bào)分片成 3 個(gè)小數(shù)據(jù)報(bào)進(jìn)行傳輸,再交由接收方重組成大數(shù)據(jù)報(bào)。 分片與重組 在分片傳輸中,一旦某個(gè)分片丟失,則會(huì)造成整個(gè) IP 數(shù)據(jù)報(bào)作廢,所以 TCP 引入了MSS也就是在 TCP 層進(jìn)行分片不由 IP 層分片,那么對(duì)于 UDP 我們盡量不要發(fā)送一個(gè)大于MTU的數(shù)據(jù)報(bào)文。 IPv6 基本認(rèn)識(shí)IPv4 的地址是 32 位的,大約可以提供 42 億個(gè)地址,但是早在 2011 年 IPv4 地址就已經(jīng)被分配完了。 但是 IPv6 的地址是128位的,這可分配的地址數(shù)量是大的驚人,說個(gè)段子IPv6 可以保證地球上的每粒沙子都能被分配到一個(gè) IP 地址。 但 IPv6 除了有更多的地址之外,還有更好的安全性和擴(kuò)展性,說簡(jiǎn)單點(diǎn)就是 IPv6 相比于 IPv4 能帶來更好的網(wǎng)絡(luò)體驗(yàn)。 但是因?yàn)?IPv4 和 IPv6 不能相互兼容,所以不但要我們電腦、手機(jī)之類的設(shè)備支持,還需要網(wǎng)絡(luò)運(yùn)營(yíng)商對(duì)現(xiàn)有的設(shè)備進(jìn)行升級(jí),所以這可能是 IPv6 普及率比較慢的一個(gè)原因。
IPv6 不僅僅只是可分配的地址變多了,他還有非常多的亮點(diǎn)。
IPv4 地址長(zhǎng)度共 32 位,是以每 8 位作為一組,并用點(diǎn)分十進(jìn)制的表示方式。 IPv6 地址長(zhǎng)度是 128 位,是以每 16 位作為一組,每組用冒號(hào) 「:」 隔開。 IPv6 地址表示方法 如果出現(xiàn)連續(xù)的 0 時(shí)還可以將這些 0 省略,并用兩個(gè)冒號(hào) 「::」隔開。但是,一個(gè) IP 地址中只允許出現(xiàn)一次兩個(gè)連續(xù)的冒號(hào)。 Pv6 地址缺省表示方
IPv6 類似 IPv4,也是通過 IP 地址的前幾位標(biāo)識(shí) IP 地址的種類。 IPv6 的地址主要有一下類型地址:
IPv6地址結(jié)構(gòu)
對(duì)于一對(duì)一通信的 IPv6 地址,主要?jiǎng)澐至巳悊尾サ刂?,每類地址的有效范圍都不同?/p>
IPv6 中的單播通信 IPv4 首部與 IPv6 首部IPv4 首部與 IPv6 首部的差異如下圖: IPv4 首部與 IPv6 首部的差異 IPv6 相比 IPv4 的首部改進(jìn):
點(diǎn)心 —— IP 協(xié)議相關(guān)技術(shù) 跟 IP 協(xié)議相關(guān)的技術(shù)也不少,接下來說說與 IP 協(xié)議相關(guān)的重要且常見的技術(shù)。
我們?cè)谏暇W(wǎng)的時(shí)候,通常使用的方式域名,而不是 IP 地址,因?yàn)橛蛎奖闳祟愑洃洝?/p> 那么實(shí)現(xiàn)這一技術(shù)的就是DNS 域名解析,DNS 可以將域名網(wǎng)址自動(dòng)轉(zhuǎn)換為具體的 IP 地址。
DNS 中的域名都是用句點(diǎn)來分隔的,比如www.server.com,這里的句點(diǎn)代表了不同層次之間的界限。 在域名中,越靠右的位置表示其層級(jí)越高。 畢竟域名是外國(guó)人發(fā)明,所以思維和中國(guó)人相反,比如說一個(gè)城市地點(diǎn)的時(shí)候,外國(guó)喜歡從小到大的方式順序說起(如 XX 街道 XX 區(qū) XX 市 XX ?。袊?guó)則喜歡從大到小的順序(如 XX 省 XX 市 XX 區(qū) XX 街道)。 根域是在最頂層,它的下一層就是 com 頂級(jí)域,再下面是 server.com。 所以域名的層級(jí)關(guān)系類似一個(gè)樹狀結(jié)構(gòu):
DNS 樹狀結(jié)構(gòu) 根域的 DNS 服務(wù)器信息保存在互聯(lián)網(wǎng)中所有的 DNS 服務(wù)器中。這樣一來,任何 DNS 服務(wù)器就都可以找到并訪問根域 DNS 服務(wù)器了。 因此,客戶端只要能夠找到任意一臺(tái) DNS 服務(wù)器,就可以通過它找到根域 DNS 服務(wù)器,然后再一路順藤摸瓜找到位于下層的某臺(tái)目標(biāo) DNS 服務(wù)器。
瀏覽器首先看一下自己的緩存里有沒有,如果沒有就向操作系統(tǒng)的緩存要,還沒有就檢查本機(jī)域名解析文件hosts,如果還是沒有,就會(huì) DNS 服務(wù)器進(jìn)行查詢,查詢的過程如下:
至此,我們完成了 DNS 的解析過程?,F(xiàn)在總結(jié)一下,整個(gè)過程我畫成了一個(gè)圖。 域名解析的工作流程 DNS 域名解析的過程蠻有意思的,整個(gè)過程就和我們?nèi)粘I钪姓胰藛柭返倪^程類似,只指路不帶路。 ARP在傳輸一個(gè) IP 數(shù)據(jù)報(bào)的時(shí)候,確定了源 IP 地址和目標(biāo) IP 地址后,就會(huì)通過主機(jī)「路由表」確定 IP 數(shù)據(jù)包下一跳。然而,網(wǎng)絡(luò)層的下一層是數(shù)據(jù)鏈路層,所以我們還要知道「下一跳」的 MAC 地址。 由于主機(jī)的路由表中可以找到下一條的 IP 地址,所以可以通過ARP 協(xié)議,求得下一跳的 MAC 地址。
簡(jiǎn)單地說,ARP 是借助ARP 請(qǐng)求與 ARP 響應(yīng)兩種類型的包確定 MAC 地址的。 ARP 廣播
操作系統(tǒng)通常會(huì)把第一次通過 ARP 獲取的 MAC 地址緩存起來,以便下次直接從緩存中找到對(duì)應(yīng) IP 地址的 MAC 地址。 不過,MAC 地址的緩存是有一定期限的,超過這個(gè)期限,緩存的內(nèi)容將被清除。
ARP 協(xié)議是已知 IP 地址 求 MAC 地址,那 RARP 協(xié)議正好相反。 它是已知 MAC 地址求 IP 地址。例如將打印機(jī)服務(wù)器等小型嵌入式設(shè)備接入到網(wǎng)絡(luò)時(shí)就經(jīng)常會(huì)用得到。 通常這需要架設(shè)一臺(tái)RARP服務(wù)器,在這個(gè)服務(wù)器上注冊(cè)設(shè)備的 MAC 地址及其 IP 地址。然后再將這個(gè)設(shè)備接入到網(wǎng)絡(luò),接著:
最后,設(shè)備就根據(jù)從 RARP 服務(wù)器所收到的應(yīng)答信息設(shè)置自己的 IP 地址。 RARP DHCPDHCP 在生活中我們是很常見的了,我們的電腦通常都是通過 DHCP 動(dòng)態(tài)獲取 IP 地址,大大省去了配 IP 信息繁瑣的過程。 接下來,我們來看看我們的電腦是如何通過 4 個(gè)步驟的過程,獲取到 IP 的。 DHCP 工作流程 先說明一點(diǎn),DHCP 客戶端進(jìn)程監(jiān)聽的是 68 端口號(hào),DHCP 服務(wù)端進(jìn)程監(jiān)聽的是 67 端口號(hào)。 DHCP 交互的 4 個(gè)步驟:
一旦客戶端收到 DHCP ACK 后,交互便完成了,并且客戶端能夠在租用期內(nèi)使用 DHCP 服務(wù)器分配的 IP 地址。 如果租約的 DHCP IP 地址快期后,客戶端會(huì)向服務(wù)器發(fā)送 DHCP 請(qǐng)求報(bào)文:
可以發(fā)現(xiàn),DHCP 交互中,全程都是使用 UDP 廣播通信。
所以,為了解決這一問題,就出現(xiàn)了DHCP 中繼代理。 有了 DHCP 中繼代理以后,對(duì)不同網(wǎng)段的 IP 地址分配也可以由一個(gè) DHCP 服務(wù)器統(tǒng)一進(jìn)行管理。 DHCP 中繼代理
因此,DHCP 服務(wù)器即使不在同一個(gè)鏈路上也可以實(shí)現(xiàn)統(tǒng)一分配和管理IP地址。 NATIPv4 的地址是非常緊缺的,在前面我們也提到可以通過無分類地址來減緩 IPv4 地址耗盡的速度,但是互聯(lián)網(wǎng)的用戶增速是非常驚人的,所以 IPv4 地址依然有被耗盡的危險(xiǎn)。 于是,提出了一個(gè)種網(wǎng)絡(luò)地址轉(zhuǎn)換 NAT的方法,再次緩解了 IPv4 地址耗盡的問題。 簡(jiǎn)單的來說 NAT 就是在同個(gè)公司、家庭、教室內(nèi)的主機(jī)對(duì)外部通信時(shí),把私有 IP 地址轉(zhuǎn)換成公有 IP 地址。 NAT
確實(shí)是,普通的 NAT 轉(zhuǎn)換沒什么意義。 由于絕大多數(shù)的網(wǎng)絡(luò)應(yīng)用都是使用傳輸層協(xié)議 TCP 或 UDP 來傳輸數(shù)據(jù)的。 因此,可以把 IP 地址 + 端口號(hào)一起進(jìn)行轉(zhuǎn)換。 這樣,就用一個(gè)全球 IP 地址就可以了,這種轉(zhuǎn)換技術(shù)就叫網(wǎng)絡(luò)地址與端口轉(zhuǎn)換 NAPT。 很抽象?來,看下面的圖解就能瞬間明白了。 NAPT 圖中有兩個(gè)客戶端 192.168.1.10 和 192.168.1.11 同時(shí)與服務(wù)器 183.232.231.172 進(jìn)行通信,并且這兩個(gè)客戶端的本地端口都是 1025。 此時(shí),兩個(gè)私有 IP 地址都轉(zhuǎn)換 IP 地址為公有地址 120.229.175.121,但是以不同的端口號(hào)作為區(qū)分。 于是,生成一個(gè) NAPT 路由器的轉(zhuǎn)換表,就可以正確地轉(zhuǎn)換地址跟端口的組合,令客戶端 A、B 能同時(shí)與服務(wù)器之間進(jìn)行通信。 這種轉(zhuǎn)換表在 NAT 路由器上自動(dòng)生成。例如,在 TCP 的情況下,建立 TCP 連接首次握手時(shí)的 SYN 包一經(jīng)發(fā)出,就會(huì)生成這個(gè)表。而后又隨著收到關(guān)閉連接時(shí)發(fā)出 FIN 包的確認(rèn)應(yīng)答從表中被刪除。
當(dāng)然有缺陷,肯定沒有十全十美的方案。 由于 NAT/NAPT 都依賴于自己的轉(zhuǎn)換表,因此會(huì)有以下的問題:
解決的方法主要兩種方法。 第一種就是改用 IPv6 IPv6 可用范圍非常大,以至于每臺(tái)設(shè)備都可以配置一個(gè)公有 IP 地址,就不搞那么多花里胡哨的地址轉(zhuǎn)換了,但是 IPv6 普及速度還需要一些時(shí)間。 第二種 NAT 穿透技術(shù) NAT 穿越技術(shù)擁有這樣的功能,它能夠讓網(wǎng)絡(luò)應(yīng)用程序主動(dòng)發(fā)現(xiàn)自己位于 NAT 設(shè)備之后,并且會(huì)主動(dòng)獲得 NAT 設(shè)備的公有 IP,并為自己建立端口映射條目,注意這些都是 NAT設(shè)備后的應(yīng)用程序自動(dòng)完成的。 也就是說,在 NAT 穿越技術(shù)中,NAT 設(shè)備后的應(yīng)用程序處于主動(dòng)地位,它已經(jīng)明確地知道 NAT 設(shè)備要修改它外發(fā)的數(shù)據(jù)包,于是它主動(dòng)配合 NAT 設(shè)備的操作,主動(dòng)地建立好映射,這樣就不像以前由 NAT 設(shè)備來建立映射了。 說人話,就是客戶端主動(dòng)從 NAT 設(shè)備獲取公有 IP 地址,然后自己建立端口映射條目,然后用這個(gè)條目對(duì)外通信,就不需要 NAT 設(shè)備來進(jìn)行轉(zhuǎn)換了。 ICMPICMP 全稱是Internet Control Message Protocol,也就是互聯(lián)網(wǎng)控制報(bào)文協(xié)議。 里面有個(gè)關(guān)鍵詞 ——控制,如何控制的呢? 網(wǎng)絡(luò)包在復(fù)雜的網(wǎng)絡(luò)傳輸環(huán)境里,常常會(huì)遇到各種問題。 當(dāng)遇到問題的時(shí)候,總不能死個(gè)不明不白,沒頭沒腦的作風(fēng)不是計(jì)算機(jī)網(wǎng)絡(luò)的風(fēng)格。所以需要傳出消息,報(bào)告遇到了什么問題,這樣才可以調(diào)整傳輸策略,以此來控制整個(gè)局面。
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>由 ICMP 負(fù)責(zé)通知。 ICMP 目標(biāo)不可達(dá)消息 如上圖例子,主機(jī)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的包未能成功。 ICMP 的這種通知消息會(huì)使用IP進(jìn)行發(fā)送 。 因此,從路由器2返回的 ICMP 包會(huì)按照往常的路由控制先經(jīng)過路由器1再轉(zhuǎn)發(fā)給主機(jī)A。收到該 ICMP 包的主機(jī)A則分解 ICMP 的首部和數(shù)據(jù)域以后得知具體發(fā)生問題的原因。
ICMP 大致可以分為兩大類:
常見的 ICMP 類型 IGMPICMP 跟 IGMP 是一點(diǎn)關(guān)系都沒有的,就好像周杰與周杰倫的區(qū)別,大家不要混淆了。 在前面我們知道了組播地址,也就是 D 類地址,既然是組播,那就說明是只有一組的主機(jī)能收到數(shù)據(jù)包,不在一組的主機(jī)不能收到數(shù)組包,怎么管理是否是在一組呢?那么,就需要IGMP協(xié)議了。 組播模型 IGMP 是因特網(wǎng)組管理協(xié)議,工作在主機(jī)(組播成員)和最后一跳路由之間,如上圖中的藍(lán)色部分。
IGMP 分為了三個(gè)版本分別是,IGMPv1、IGMPv2、IGMPv3。 接下來,以IGMPv2作為例子,說說常規(guī)查詢與響應(yīng)和離開組播組這兩個(gè)工作機(jī)制。 常規(guī)查詢與響應(yīng)工作機(jī)制 IGMP 常規(guī)查詢與響應(yīng)工作機(jī)制
離開組播組工作機(jī)制 離開組播組的情況一,網(wǎng)段中仍有該組播組: IGMPv2 離開組播組工作機(jī)制 情況1
離開組播組的情況二,網(wǎng)段中沒有該組播組: IGMPv2 離開組播組工作機(jī)制 情況2
|
|