來(lái)自公眾號(hào):小林coding
作者:小林coding
前言
前段時(shí)間,有讀者希望我寫一篇關(guān)于 IP 分類地址纫谅、子網(wǎng)劃分等的文章炫贤,他反饋常常混淆付秕,摸不著頭腦兰珍。
那么,說(shuō)來(lái)就來(lái)询吴!而且要盤就盤全一點(diǎn)掠河,順便挑戰(zhàn)下小林的圖解功力,所以就來(lái)個(gè) IP 基礎(chǔ)知識(shí)全家桶猛计。
吃完這個(gè) IP 基礎(chǔ)知識(shí)全家桶全家桶唠摹,包你撐著肚子喊出:“真香!”
不多說(shuō)有滑,直接上菜跃闹,共分為三道菜:
首先是前菜 「 IP 基本認(rèn)識(shí) 」
其次是主菜 「IP 地址的基礎(chǔ)知識(shí)」
最后是點(diǎn)心 「IP 協(xié)議相關(guān)技術(shù)」
為啥要比喻成菜?因?yàn)樾×质?strong>菜狗(押韻不?)
正文
前菜 —— IP 基本認(rèn)識(shí)
IP 在 TCP/IP 參考模型中處于第三層望艺,也就是網(wǎng)絡(luò)層苛秕。
網(wǎng)絡(luò)層的主要作用是:實(shí)現(xiàn)主機(jī)與主機(jī)之間的通信,也叫點(diǎn)對(duì)點(diǎn)(end to end)通信找默。
網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層有什么關(guān)系呢艇劫?
有的小伙伴分不清 IP(網(wǎng)絡(luò)層) 和 MAC (數(shù)據(jù)鏈路層)之間的區(qū)別和關(guān)系。
其實(shí)很容易區(qū)分惩激,在上面我們知道 IP 的作用是主機(jī)之間通信中的店煞,而 MAC 的作用則是實(shí)現(xiàn)「直連」的兩個(gè)設(shè)備之間通信,而 IP 則負(fù)責(zé)在「沒(méi)有直連」的兩個(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)程定位的功能,行程的開(kāi)始好比源 IP滚婉,行程的終點(diǎn)好比目的 IP 地址图筹。
如果小林只有行程表而沒(méi)有車票,就無(wú)法搭乘交通工具到達(dá)目的地让腹。相反远剩,如果除了車票而沒(méi)有行程表,恐怕也很難到達(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)块促,旅行途中我們雖然不斷變化了交通工具,但是旅行行程的起始地址和目的地址始終都沒(méi)變淹辞。其實(shí)医舆,在網(wǎng)絡(luò)中數(shù)據(jù)包傳輸中也是如此,源IP地址和目標(biāo)IP地址在傳輸過(guò)程中是不會(huì)變化的象缀,只有源 MAC 地址和目標(biāo) MAC 一直在變化蔬将。
主菜 —— IP 地址的基礎(chǔ)知識(shí)
在 TCP/IP 網(wǎng)絡(luò)通信時(shí),為了保證能正常通信央星,每個(gè)設(shè)備都需要配置正確的 IP 地址霞怀,否則無(wú)法實(shí)現(xiàn)正常的通信。
IP 地址(IPv4 地址)由 32
位正整數(shù)來(lái)表示莉给,IP 地址在計(jì)算機(jī)是以二進(jìn)制的方式處理的里烦。
而人類為了方便記憶采用了點(diǎn)分十進(jìn)制的標(biāo)記方式,也就是將 32 位 IP 地址以每 8 位為組禁谦,共分為 4
組,每組以「.
」隔開(kāi)废封,再將每組轉(zhuǎn)換成十進(jìn)制州泊。
那么,IP 地址最大值也就是
也就說(shuō)漂洋,最大允許 43 億臺(tái)計(jì)算機(jī)連接到網(wǎng)絡(luò)遥皂。
實(shí)際上,IP 地址并不是根據(jù)主機(jī)臺(tái)數(shù)來(lái)配置的刽漂,而是以網(wǎng)卡演训。像服務(wù)器、路由器等設(shè)備都是有 2 個(gè)以上的網(wǎng)卡贝咙,也就是它們會(huì)有 2 個(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ù)更是少了很多。
可能有的小伙伴提出了疑問(wèn)蔼水,現(xiàn)在不僅電腦配了 IP震糖, 手機(jī)、IPad 等電子設(shè)備都配了 IP 呀趴腋,照理來(lái)說(shuō)肯定會(huì)超過(guò) 43 億啦吊说,那是怎么能夠支持這么多 IP 的呢论咏?
因?yàn)闀?huì)根據(jù)一種可以更換 IP 地址的技術(shù) NAT
,使得可連接計(jì)算機(jī)數(shù)超過(guò) 43 億臺(tái)颁井。NAT
技術(shù)后續(xù)會(huì)進(jìn)一步討論和說(shuō)明厅贪。
IP 地址的分類
互聯(lián)網(wǎng)誕生之初,IP 地址顯得很充裕蚤蔓,于是計(jì)算機(jī)科學(xué)家們?cè)O(shè)計(jì)了分類地址卦溢。
IP 地址分類成了 5 種類型,分別是 A 類秀又、B 類单寂、C 類、D 類吐辙、E 類宣决。
上圖中黃色部是分類號(hào),用以區(qū)分 IP 地址類別昏苏。
什么是 A尊沸、B、C 類地址贤惯?
其中對(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 分類地址
A煎殷、B屡谐、C 分類地址最大主機(jī)個(gè)數(shù)是如何計(jì)算的呢?
最大主機(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 地址。
主機(jī)號(hào)全為 1 指定某個(gè)網(wǎng)絡(luò)下的所有主機(jī)滑潘,用于廣播
主機(jī)號(hào)全為 0 指定某個(gè)網(wǎng)絡(luò)
因此垢乙,在分配過(guò)程中,應(yīng)該去掉這兩種情況语卤。
廣播地址用于什么追逮?
廣播地址用于在同一個(gè)鏈路中相互連接的主機(jī)之間發(fā)送數(shù)據(jù)包。
學(xué)校班級(jí)中就有廣播的例子粹舵,在準(zhǔn)備上課的時(shí)候钮孵,通常班長(zhǎng)會(huì)喊:“上課, 全體起立眼滤!”巴席,班里的同學(xué)聽(tīng)到這句話是不是全部都站起來(lái)了?這個(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
。
廣播地址可以分為本地廣播和直接廣播兩種场刑。
在本網(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è)包(由于直接廣播有一定的安全問(wèn)題,多數(shù)情況下會(huì)在路由器上設(shè)置為不轉(zhuǎn)發(fā))瓤摧。
什么是 D竿裂、E 類地址?
而 D 類和 E 類地址是沒(méi)有主機(jī)號(hào)的照弥,所以不可用于主機(jī) IP腻异,D 類常被用于多播,E 類是預(yù)留的分類这揣,暫時(shí)未使用悔常。
D影斑、E 分類地址
多播地址用于什么?
多播用于將包發(fā)送給特定組內(nèi)的所有主機(jī)机打。
還是舉班級(jí)的栗子矫户,老師說(shuō):“最后一排的同學(xué),上來(lái)做這道數(shù)學(xué)題残邀〗粤桑”,老師是指定的是最后一排的同學(xué)芥挣,也就是多播的含義了驱闷。
由于廣播無(wú)法穿透路由,若想給其他網(wǎng)段發(fā)送同樣的包九秀,就可以使用可以穿透路由的多播(組播)遗嗽。
多播使用的 D 類地址,其前四位是 1110
就表示是多播地址鼓蜒,而剩下的 28 位是多播的組編號(hào)痹换。
從 224.0.0.0 ~ 239.255.255.255 都是多播的可用范圍,其劃分為以下三類:
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)
不管是路由器還是主機(jī)解析到一個(gè) IP 地址時(shí)候,我們判斷其 IP 地址的首位是否為 0框杜,為 0 則為 A 類地址浦楣,那么就能很快的找出網(wǎng)絡(luò)地址和主機(jī)地址。
其余分類判斷方式參考如下圖:
所以咪辱,這種分類地址的優(yōu)點(diǎn)就是簡(jiǎn)單明了振劳、選路(基于網(wǎng)絡(luò)地址)簡(jiǎn)單。
IP 分類的缺點(diǎn)
缺點(diǎn)一
同一網(wǎng)絡(luò)下沒(méi)有地址層次油狂,比如一個(gè)公司里用了 B 類地址历恐,但是可能需要根據(jù)生產(chǎn)環(huán)境、測(cè)試環(huán)境专筷、開(kāi)發(fā)環(huán)境來(lái)劃分地址層次弱贼,而這種 IP 分類是沒(méi)有地址層次劃分的功能,所以這就缺少地址的靈活性磷蛹。
缺點(diǎn)二
A吮旅、B、C類有個(gè)尷尬處境味咳,就是不能很好的與現(xiàn)實(shí)網(wǎng)絡(luò)匹配鸟辅。
C 類地址能包含的最大主機(jī)數(shù)量實(shí)在太少了氛什,只有 254 個(gè),估計(jì)一個(gè)網(wǎng)吧都不夠用匪凉。
而 B 類地址能包含的最大主機(jī)數(shù)量又太多了枪眉,6 萬(wàn)多臺(tái)機(jī)器放在一個(gè)網(wǎng)絡(luò)下面,一般的企業(yè)基本達(dá)不到這個(gè)規(guī)模再层,閑著的地址就是浪費(fèi)贸铜。
這兩個(gè)缺點(diǎn),都可以在 CIDR
無(wú)分類地址解決聂受。
無(wú)分類地址 CIDR
正因?yàn)?IP 分類存在許多缺點(diǎn)蒿秦,所有后面提出了無(wú)分類地址的方案,即 CIDR
蛋济。
這種方式不再有分類地址的概念棍鳖,32 比特的 IP 地址被劃分為兩部分,前面是網(wǎng)絡(luò)號(hào)碗旅,后面是主機(jī)號(hào)渡处。
怎么劃分網(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)。
為什么要分離網(wǎng)絡(luò)號(hào)和主機(jī)號(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ī)拼窥,
路由器尋址工作中戏蔑,也就是通過(guò)這樣的方式來(lái)找到對(duì)應(yīng)的網(wǎng)絡(luò)號(hào)的蹋凝,進(jìn)而把數(shù)據(jù)包轉(zhuǎn)發(fā)給對(duì)應(yīng)的網(wǎng)絡(luò)內(nèi)。
怎么進(jìn)行子網(wǎng)劃分总棵?
在上面我們知道可以通過(guò)子網(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ī)地址迄汛。形式如下:
未做子網(wǎng)劃分的 ip 地址:網(wǎng)絡(luò)地址+主機(jī)地址
做子網(wǎng)劃分后的 ip 地址:網(wǎng)絡(luò)地址+(子網(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,沒(méi)有任何問(wèn)題冠桃。但一旦出了小區(qū)命贴,就需要帶上中山路 666 號(hào)(公網(wǎng) IP 地址),是國(guó)家統(tǒng)一分配的,不能兩個(gè)小區(qū)都叫中山路 666胸蛛。
所以污茵,公有 IP 地址是有個(gè)組織統(tǒng)一分配的,假設(shè)你要開(kāi)一個(gè)博客網(wǎng)站葬项,那么你就需要去申請(qǐng)購(gòu)買一個(gè)公有 IP泞当,這樣全世界的人才能訪問(wèn)。并且公有 IP 地址基本上要在整個(gè)互聯(lián)網(wǎng)范圍內(nèi)保持唯一玷室。
公有 IP 地址由誰(shuí)管理呢零蓉?
私有 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 地址津肛,是按州的方式層層分配章喉。
ARIN 北美地區(qū)
LACNIC 拉丁美洲和一些加勒比群島
RIPE NCC 歐洲、中東和中亞
AfriNIC 非洲地區(qū)
APNIC 亞太地區(qū)
其中身坐,在中國(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ò)鏈路作為例子說(shuō)明:
主機(jī) A 要發(fā)送一個(gè) IP 包崇败,其源地址是
10.1.1.30
和目標(biāo)地址是10.1.2.10
,由于沒(méi)有在主機(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)過(guò)交換機(jī)把 IP 數(shù)據(jù)包轉(zhuǎn)發(fā)到了目標(biāo)主機(jī)
環(huán)回地址是不會(huì)流向網(wǎng)絡(luò)
環(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 也就不同拄踪。
其中,我們最常見(jiàn)數(shù)據(jù)鏈路是以太網(wǎng)拳魁,它的 MTU 是 1500
字節(jié)惶桐。
那么當(dāng) IP 數(shù)據(jù)包大小大于 MTU 時(shí), IP 數(shù)據(jù)包就會(huì)被分片潘懊。
經(jīng)過(guò)分片之后的 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ù)量是大的驚人,說(shuō)個(gè)段子 IPv6 可以保證地球上的每粒沙子都能被分配到一個(gè) IP 地址姑曙。
但 IPv6 除了有更多的地址之外襟交,還有更好的安全性和擴(kuò)展性,說(shuō)簡(jiǎn)單點(diǎn)就是 IPv6 相比于 IPv4 能帶來(lái)更好的網(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)
IPv6 不僅僅只是可分配的地址變多了,他還有非常多的亮點(diǎn)贞言。
IPv6 可自動(dòng)配置斜棚,即使沒(méi)有 DHCP 服務(wù)器也可以實(shí)現(xiàn)自動(dòng)分配IP地址,真是便捷到即插即用啊该窗。
IPv6 包頭包首部長(zhǎng)度采用固定的值
40
字節(jié)弟蚀,去掉了包頭校驗(yàn)和,簡(jiǎn)化了首部結(jié)構(gòu)酗失,減輕了路由器負(fù)荷义钉,大大提高了傳輸?shù)男阅?/strong>。IPv6 有應(yīng)對(duì)偽造 IP 地址的網(wǎng)絡(luò)安全功能以及防止線路竊聽(tīng)的功能规肴,大大提升了安全性断医。
… (由你發(fā)現(xiàn)更多的亮點(diǎn))
IPv6 地址的標(biāo)識(shí)方法
IPv4 地址長(zhǎng)度共 32 位,是以每 8 位作為一組奏纪,并用點(diǎn)分十進(jìn)制的表示方式鉴嗤。
IPv6 地址長(zhǎng)度是 128 位,是以每 16 位作為一組序调,每組用冒號(hào) 「:」 隔開(kāi)醉锅。
如果出現(xiàn)連續(xù)的 0 時(shí)還可以將這些 0 省略,并用兩個(gè)冒號(hào) 「::」隔開(kāi)发绢。但是硬耍,一個(gè) IP 地址中只允許出現(xiàn)一次兩個(gè)連續(xù)的冒號(hào)。
IPv6 地址的結(jié)構(gòu)
IPv6 類似 IPv4边酒,也是通過(guò) IP 地址的前幾位標(biāo)識(shí) IP 地址的種類经柴。
IPv6 的地址主要有一下類型地址:
單播地址,用于一對(duì)一的通信
組播地址墩朦,用于一對(duì)多的通信
任播地址坯认,用于通信最近的節(jié)點(diǎn),最近的節(jié)點(diǎn)是由路由協(xié)議決定
沒(méi)有廣播地址
IPv6 單播地址類型
對(duì)于一對(duì)一通信的 IPv6 地址氓涣,主要?jiǎng)澐至巳悊尾サ刂放2福款惖刂返挠行Х秶疾煌?/p>
在同一鏈路單播通信,不經(jīng)過(guò)路由器劳吠,可以使用鏈路本地單播地址引润,IPv4 沒(méi)有此類型
在內(nèi)網(wǎng)里單播通信,可以使用唯一本地地址痒玩,相當(dāng)于 IPv4 的私有 IP
在互聯(lián)網(wǎng)通信淳附,可以使用全局單播地址议慰,相當(dāng)于 IPv4 的公有 IP
IPv4 首部與 IPv6 首部
IPv4 首部與 IPv6 首部的差異如下圖:
IPv6 相比 IPv4 的首部改進(jìn):
取消了首部校驗(yàn)和字段。 因?yàn)樵跀?shù)據(jù)鏈路層和傳輸層都會(huì)校驗(yàn)奴曙,因此 IPv6 直接取消了 IP 的校驗(yàn)褒脯。
取消了分片/重新組裝相關(guān)字段。 分片與重組是耗時(shí)的過(guò)程缆毁,IPv6 不允許在中間路由器進(jìn)行分片與重組硫眯,這種操作只能在源與目標(biāo)主機(jī)巧骚,這將大大提高了路由器轉(zhuǎn)發(fā)的速度。
取消選項(xiàng)字段单雾。 選項(xiàng)字段不再是標(biāo)準(zhǔn) IP 首部的一部分了践啄,但它并沒(méi)有消失浇雹,而是可能出現(xiàn)在 IPv6 首部中的「下一個(gè)首部」指出的位置上。刪除該選項(xiàng)字段是的 IPv6 的首部成為固定長(zhǎng)度的
40
字節(jié)屿讽。
點(diǎn)心 —— IP 協(xié)議相關(guān)技術(shù)
跟 IP 協(xié)議相關(guān)的技術(shù)也不少昭灵,接下來(lái)說(shuō)說(shuō)與 IP 協(xié)議相關(guān)的重要且常見(jià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
我們?cè)谏暇W(wǎng)的時(shí)候伐谈,通常使用的方式域名烂完,而不是 IP 地址,因?yàn)橛蛎奖闳祟愑洃洝?/p>
那么實(shí)現(xiàn)這一技術(shù)的就是 DNS 域名解析诵棵,DNS 可以將域名網(wǎng)址自動(dòng)轉(zhuǎn)換為具體的 IP 地址抠蚣。
域名的層級(jí)關(guān)系
DNS 中的域名都是用句點(diǎn)來(lái)分隔的,比如 www.server.com
履澳,這里的句點(diǎn)代表了不同層次之間的界限嘶窄。
在域名中,越靠右的位置表示其層級(jí)越高距贷。
畢竟域名是外國(guó)人發(fā)明柄冲,所以思維和中國(guó)人相反,比如說(shuō)一個(gè)城市地點(diǎn)的時(shí)候忠蝗,外國(guó)喜歡從小到大的方式順序說(shuō)起(如 XX 街道 XX 區(qū) XX 市 XX 氏趾帷),而中國(guó)則喜歡從大到小的順序(如 XX 省 XX 市 XX 區(qū) XX 街道)阁最。
根域是在最頂層长赞,它的下一層就是 com 頂級(jí)域,再下面是 server.com闽撤。
所以域名的層級(jí)關(guān)系類似一個(gè)樹(shù)狀結(jié)構(gòu):
根 DNS 服務(wù)器
頂級(jí)域 DNS 服務(wù)器(com)
權(quán)威 DNS 服務(wù)器(server.com)
根域的 DNS 服務(wù)器信息保存在互聯(lián)網(wǎng)中所有的 DNS 服務(wù)器中得哆。這樣一來(lái),任何 DNS 服務(wù)器就都可以找到并訪問(wèn)根域 DNS 服務(wù)器了哟旗。
因此贩据,客戶端只要能夠找到任意一臺(tái) DNS 服務(wù)器栋操,就可以通過(guò)它找到根域 DNS 服務(wù)器,然后再一路順藤摸瓜找到位于下層的某臺(tái)目標(biāo) DNS 服務(wù)器饱亮。
域名解析的工作流程
瀏覽器首先看一下自己的緩存里有沒(méi)有矾芙,如果沒(méi)有就向操作系統(tǒng)的緩存要,還沒(méi)有就檢查本機(jī)域名解析文件 hosts
近上,如果還是沒(méi)有剔宪,就會(huì) DNS 服務(wù)器進(jìn)行查詢,查詢的過(guò)程如下:
客戶端首先會(huì)發(fā)出一個(gè) DNS 請(qǐng)求壹无,問(wèn) www.server.com 的 IP 是啥葱绒,并發(fā)給本地 DNS 服務(wù)器(也就是客戶端的 TCP/IP 設(shè)置中填寫的 DNS 服務(wù)器地址)。
本地域名服務(wù)器收到客戶端的請(qǐng)求后斗锭,如果緩存里的表格能找到 www.server.com地淀,則它直接返回 IP 地址。如果沒(méi)有岖是,本地 DNS 會(huì)去問(wèn)它的根域名服務(wù)器:“老大帮毁, 能告訴我 www.server.com 的 IP 地址嗎?” 根域名服務(wù)器是最高層次的豺撑,它不直接用于域名解析烈疚,但能指明一條道路。
根 DNS 收到來(lái)自本地 DNS 的請(qǐng)求后聪轿,發(fā)現(xiàn)后置是 .com胞得,說(shuō):“www.server.com 這個(gè)域名歸 .com 區(qū)域管理”,我給你 .com 頂級(jí)域名服務(wù)器地址給你屹电,你去問(wèn)問(wèn)它吧阶剑。”
本地 DNS 收到頂級(jí)域名服務(wù)器的地址后危号,發(fā)起請(qǐng)求問(wèn)“老二牧愁, 你能告訴我 www.server.com 的 IP 地址嗎?”
頂級(jí)域名服務(wù)器說(shuō):“我給你負(fù)責(zé) www.server.com 區(qū)域的權(quán)威 DNS 服務(wù)器的地址外莲,你去問(wèn)它應(yīng)該能問(wèn)到”猪半。
本地 DNS 于是轉(zhuǎn)向問(wè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)建立連接邓了。
至此恨诱,我們完成了 DNS 的解析過(guò)程。現(xiàn)在總結(jié)一下骗炉,整個(gè)過(guò)程我畫(huà)成了一個(gè)圖照宝。
DNS 域名解析的過(guò)程蠻有意思的,整個(gè)過(guò)程就和我們?nèi)粘I钪姓胰藛?wèn)路的過(guò)程類似句葵,只指路不帶路厕鹃。
ARP
在傳輸一個(gè) IP 數(shù)據(jù)報(bào)的時(shí)候,確定了源 IP 地址和目標(biāo) IP 地址后乍丈,就會(huì)通過(guò)主機(jī)「路由表」確定 IP 數(shù)據(jù)包下一跳剂碴。然而,網(wǎng)絡(luò)層的下一層是數(shù)據(jù)鏈路層诗赌,所以我們還要知道「下一跳」的 MAC 地址。
由于主機(jī)的路由表中可以找到下一條的 IP 地址秸弛,所以可以通過(guò) ARP 協(xié)議铭若,求得下一跳的 MAC 地址。
那么 ARP 又是如何知道對(duì)方 MAC 地址的呢递览?
簡(jiǎn)單地說(shuō)叼屠,ARP 是借助 ARP 請(qǐng)求與 ARP 響應(yīng)兩種類型的包確定 MAC 地址的。
主機(jī)會(huì)通過(guò)廣播發(fā)送 ARP 請(qǐng)求绞铃,這個(gè)包中包含了想要知道的 MAC 地址的主機(jī) IP 地址镜雨。
當(dāng)同個(gè)鏈路中的所有設(shè)備收到 ARP 請(qǐng)求時(shí),會(huì)去拆開(kāi) ARP 請(qǐng)求包里的內(nèi)容儿捧,如果 ARP 請(qǐng)求包中的目標(biāo) IP 地址與自己的 IP 地址一致荚坞,那么這個(gè)設(shè)備就將自己的 MAC 地址塞入 ARP 響應(yīng)包返回給主機(jī)。
操作系統(tǒng)通常會(huì)把第一次通過(guò) ARP 獲取的 MAC 地址緩存起來(lái)菲盾,以便下次直接從緩存中找到對(duì)應(yīng) IP 地址的 MAC 地址颓影。
不過(guò),MAC 地址的緩存是有一定期限的懒鉴,超過(guò)這個(gè)期限诡挂,緩存的內(nèi)容將被清除。
RARP 協(xié)議你知道是什么嗎临谱?
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è)備會(huì)發(fā)送一條「我的 MAC 地址是XXXX鞭缭,請(qǐng)告訴我,我的IP地址應(yīng)該是什么」的請(qǐng)求信息魏颓。
RARP 服務(wù)器接到這個(gè)消息后返回「MAC地址為 XXXX 的設(shè)備岭辣,IP地址為 XXXX」的信息給這個(gè)設(shè)備。
最后甸饱,設(shè)備就根據(jù)從 RARP 服務(wù)器所收到的應(yīng)答信息設(shè)置自己的 IP 地址沦童。
DHCP
DHCP 在生活中我們是很常見(jiàn)的了,我們的電腦通常都是通過(guò) DHCP 動(dòng)態(tài)獲取 IP 地址叹话,大大省去了配 IP 信息繁瑣的過(guò)程偷遗。
接下來(lái),我們來(lái)看看我們的電腦是如何通過(guò) 4 個(gè)步驟的過(guò)程驼壶,獲取到 IP 的氏豌。
先說(shuō)明一點(diǎn),DHCP 客戶端進(jìn)程監(jiān)聽(tīng)的是 68 端口號(hào)热凹,DHCP 服務(wù)端進(jìn)程監(jiān)聽(tīng)的是 67 端口號(hào)泵喘。
DHCP 交互的 4 個(gè)步驟:
客戶端首先發(fā)起 DHCP 發(fā)現(xiàn)報(bào)文(DHCP DISCOVER) 的 IP 數(shù)據(jù)報(bào),由于客戶端沒(méi)有 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ù)聪黎。
一旦客戶端收到 DHCP ACK 后,交互便完成了备恤,并且客戶端能夠在租用期內(nèi)使用 DHCP 服務(wù)器分配的 IP 地址稿饰。
如果租約的 DHCP IP 地址快期后锦秒,客戶端會(huì)向服務(wù)器發(fā)送 DHCP 請(qǐng)求報(bào)文:
服務(wù)器如果同意繼續(xù)租用,則用 DHCP ACK 報(bào)文進(jìn)行應(yīng)答喉镰,客戶端就會(huì)延長(zhǎng)租期旅择。
服務(wù)器如果不同意繼續(xù)租用,則用 DHCP NACK 報(bào)文侣姆,客戶端就要停止使用租約的 IP 地址生真。
可以發(fā)現(xiàn),DHCP 交互中捺宗,全程都是使用 UDP 廣播通信柱蟀。
咦,用的是廣播蚜厉,那如果 DHCP 服務(wù)器和客戶端不是在同一個(gè)局域網(wǎng)內(nèi)长已,路由器又不會(huì)轉(zhuǎn)發(fā)廣播包,那不是每個(gè)網(wǎng)絡(luò)都要配一個(gè) DHCP 服務(wù)器昼牛?
所以术瓮,為了解決這一問(wèn)題,就出現(xiàn)了 DHCP 中繼代理匾嘱。
有了 DHCP 中繼代理以后斤斧,對(duì)不同網(wǎng)段的 IP 地址分配也可以由一個(gè) DHCP 服務(wù)器統(tǒng)一進(jìn)行管理早抠。
DHCP 客戶端會(huì)向 DHCP 中繼代理發(fā)送 DHCP 請(qǐng)求包霎烙,而 DHCP 中繼代理在收到這個(gè)廣播包以后,再以單播的形式發(fā)給 DHCP 服務(wù)器蕊连。
服務(wù)器端收到該包以后再向 DHCP 中繼代理返回應(yīng)答悬垃,并由 DHCP 中繼代理將此包轉(zhuǎn)發(fā)給 DHCP 客戶端 。
因此甘苍,DHCP 服務(wù)器即使不在同一個(gè)鏈路上也可以實(shí)現(xiàn)統(tǒng)一分配和管理IP地址尝蠕。
NAT
IPv4 的地址是非常緊缺的,在前面我們也提到可以通過(guò)無(wú)分類地址來(lái)減緩 IPv4 地址耗盡的速度载庭,但是互聯(lián)網(wǎng)的用戶增速是非常驚人的看彼,所以 IPv4 地址依然有被耗盡的危險(xiǎn)。
于是囚聚,提出了一個(gè)種網(wǎng)絡(luò)地址轉(zhuǎn)換 NAT 的方法靖榕,再次緩解了 IPv4 地址耗盡的問(wèn)題。
簡(jiǎn)單的來(lái)說(shuō) NAT 就是在同個(gè)公司顽铸、家庭茁计、教室內(nèi)的主機(jī)對(duì)外部通信時(shí),把私有 IP 地址轉(zhuǎn)換成公有 IP 地址谓松。
那不是 N 個(gè) 私有 IP 地址星压,你就要 N 個(gè)公有 IP 地址践剂?這怎么就緩解了 IPv4 地址耗盡的問(wèn)題?這不瞎扯嗎娜膘?
確實(shí)是逊脯,普通的 NAT 轉(zhuǎn)換沒(méi)什么意義。
由于絕大多數(shù)的網(wǎng)絡(luò)應(yīng)用都是使用傳輸層協(xié)議 TCP 或 UDP 來(lái)傳輸數(shù)據(jù)的劲绪。
因此男窟,可以把 IP 地址 + 端口號(hào)一起進(jìn)行轉(zhuǎn)換。
這樣贾富,就用一個(gè)全球 IP 地址就可以了歉眷,這種轉(zhuǎn)換技術(shù)就叫網(wǎng)絡(luò)地址與端口轉(zhuǎn)換 NAPT。
很抽象颤枪?來(lái)汗捡,看下面的圖解就能瞬間明白了。
圖中有兩個(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)答從表中被刪除手报。
NAT 那么牛逼蚯舱,難道就沒(méi)缺點(diǎn)了嗎?
當(dāng)然有缺陷掩蛤,肯定沒(méi)有十全十美的方案枉昏。
由于 NAT/NAPT 都依賴于自己的轉(zhuǎn)換表,因此會(huì)有以下的問(wèn)題:
外部無(wú)法主動(dòng)與 NAT 內(nèi)部服務(wù)器建立連接盏档,因?yàn)?NAPT 轉(zhuǎn)換表沒(méi)有轉(zhuǎn)換記錄凶掰。
轉(zhuǎn)換表的生產(chǎn)與轉(zhuǎn)換操作都會(huì)產(chǎn)生性能開(kāi)銷。
通信過(guò)程中,如果 NAT 路由器重啟了懦窘,所有的 TCP 連接都將被重置前翎。
如何解決 NAT 潛在的問(wèn)題呢?
解決的方法主要兩種方法畅涂。
第一種就是改用 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)完成的帅戒。
也就是說(shuō)灯帮,在 NAT 穿越技術(shù)中,NAT 設(shè)備后的應(yīng)用程序處于主動(dòng)地位逻住,它已經(jīng)明確地知道 NAT 設(shè)備要修改它外發(fā)的數(shù)據(jù)包钟哥,于是它主動(dòng)配合 NAT 設(shè)備的操作,主動(dòng)地建立好映射瞎访,這樣就不像以前由 NAT 設(shè)備來(lái)建立映射了腻贰。
說(shuō)人話,就是客戶端主動(dòng)從 NAT 設(shè)備獲取公有 IP 地址扒秸,然后自己建立端口映射條目播演,然后用這個(gè)條目對(duì)外通信,就不需要 NAT 設(shè)備來(lái)進(jìn)行轉(zhuǎn)換了鸦采。
ICMP
ICMP 全稱是 Internet Control Message Protocol宾巍,也就是互聯(lián)網(wǎng)控制報(bào)文協(xié)議咕幻。
里面有個(gè)關(guān)鍵詞 —— 控制渔伯,如何控制的呢?
網(wǎng)絡(luò)包在復(fù)雜的網(wǎng)絡(luò)傳輸環(huán)境里肄程,常常會(huì)遇到各種問(wèn)題锣吼。
當(dāng)遇到問(wèn)題的時(shí)候,總不能死個(gè)不明不白蓝厌,沒(méi)頭沒(méi)腦的作風(fēng)不是計(jì)算機(jī)網(wǎng)絡(luò)的風(fēng)格玄叠。所以需要傳出消息,報(bào)告遇到了什么問(wèn)題拓提,這樣才可以調(diào)整傳輸策略读恃,以此來(lái)控制整個(gè)局面。
ICMP 功能都有啥?
ICMP
主要的功能包括:確認(rèn) IP 包是否成功送達(dá)目標(biāo)地址寺惫、報(bào)告發(fā)送過(guò)程中 IP 包被廢棄的原因和改善網(wǎng)絡(luò)設(shè)置等疹吃。
在 IP
通信中如果某個(gè) IP
包因?yàn)槟撤N原因未能達(dá)到目標(biāo)地址,那么這個(gè)具體的原因?qū)?strong>由 ICMP 負(fù)責(zé)通知西雀。
如上圖例子萨驶,主機(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ù)包再悼,說(shuō)明發(fā)往主機(jī) B
的包未能成功核畴。
ICMP 的這種通知消息會(huì)使用 IP
進(jìn)行發(fā)送 。
因此冲九,從路由器 2
返回的 ICMP 包會(huì)按照往常的路由控制先經(jīng)過(guò)路由器 1
再轉(zhuǎn)發(fā)給主機(jī) A
膛檀。收到該 ICMP 包的主機(jī) A
則分解 ICMP 的首部和數(shù)據(jù)域以后得知具體發(fā)生問(wèn)題的原因。
ICMP 類型
ICMP 大致可以分為兩大類:
一類是用于診斷的查詢消息娘侍,也就是「查詢報(bào)文類型」
另一類是通知出錯(cuò)原因的錯(cuò)誤消息咖刃,也就是「差錯(cuò)報(bào)文類型」
IGMP
ICMP 跟 IGMP 是一點(diǎn)關(guān)系都沒(méi)有的,就好像周杰與周杰倫的區(qū)別憾筏,大家不要混淆了嚎杨。
在前面我們知道了組播地址,也就是 D 類地址氧腰,既然是組播枫浙,那就說(shuō)明是只有一組的主機(jī)能收到數(shù)據(jù)包,不在一組的主機(jī)不能收到數(shù)組包古拴,怎么管理是否是在一組呢箩帚?那么,就需要 IGMP
協(xié)議了黄痪。
IGMP 是因特網(wǎng)組管理協(xié)議紧帕,工作在主機(jī)(組播成員)和最后一跳路由之間,如上圖中的藍(lán)色部分桅打。
IGMP 報(bào)文向路由器申請(qǐng)加入和退出組播組是嗜,默認(rèn)情況下路由器是不會(huì)轉(zhuǎn)發(fā)組播包到連接中的主機(jī),除非主機(jī)通過(guò) 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ī)制
IGMP 分為了三個(gè)版本分別是顷歌,IGMPv1、IGMPv2幔睬、IGMPv3眯漩。
接下來(lái),以 IGMPv2
作為例子麻顶,說(shuō)說(shuō)常規(guī)查詢與響應(yīng)和離開(kāi)組播組這兩個(gè)工作機(jī)制赦抖。
常規(guī)查詢與響應(yīng)工作機(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ā)出去蚕键;
離開(kāi)組播組工作機(jī)制
離開(kāi)組播組的情況一,網(wǎng)段中仍有該組播組:
主機(jī) 1 要離開(kāi)組 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ù)包泊柬;
離開(kāi)組播組的情況二,網(wǎng)段中沒(méi)有該組播組:
主機(jī) 1 要離開(kāi)組播組 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)沒(méi)有其他成員了惊科,因此沒(méi)有主機(jī)響應(yīng)這個(gè)查詢;
一定時(shí)間后亮钦,路由器認(rèn)為該網(wǎng)段中已經(jīng)沒(méi)有 224.1.1.1 組播組成員了馆截,將不會(huì)再向這個(gè)網(wǎng)段轉(zhuǎn)發(fā)該組播地址的數(shù)據(jù)包;
參考文獻(xiàn)
[1] 計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下方法.陳鳴 譯.機(jī)械工業(yè)出版社
[2] TCP/IP詳解 卷1:協(xié)議.范建華 譯.機(jī)械工業(yè)出版社
[3] 圖解TCP/IP.竹下隆史.人民郵電出版社