IP旨在讓最終目標(biāo)主機收到數(shù)據(jù)包,但是在這一過程中僅僅有IP時無法實現(xiàn)通信的。必須還要又能夠解析主機名稱和MACdivide功能,以技術(shù)包在發(fā)送過程中異常情況處理的功能。
這篇主要介紹下DNS、ARP、ICMP等協(xié)議
DNS
TCP/IP網(wǎng)絡(luò)中要求每一個互連的計算機都具有其唯一的IP地址,并基于這個IP地址進(jìn)行通信。但是IP地址太長了,不好記。
人們希望主機有自己自己的名字,這個名字是唯一的,而且容易記住。于是,誕生了主機名“域名”的概念板鬓。域名是一種為了識別主機名稱和機構(gòu)名的具有分層的名稱,比如在域名 neu.edu.cn中探遵,neu是主機名,edu 和 cn 是不同層次下的機構(gòu)名。
為了實現(xiàn)這樣的功能,主機往往會利用一個叫做hosts的數(shù)據(jù)庫文件
但是隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,接入計算機的個數(shù)不斷增加,這種集中在本地電腦管理的方式就不可取了揽咕。
于是出現(xiàn)了DNS,當(dāng)我們輸入主機名(域名)時,DNS會先在互聯(lián)網(wǎng)上先自動檢索那個注冊了主機名和IP地址的數(shù)據(jù)庫,并迅速定位到對應(yīng)的IP地址蛹头。
域名和 IP 地址都可以唯一對應(yīng)一臺主機知染,DNS 協(xié)議的作用就是將自身具有意義的域名轉(zhuǎn)換成不容易記住的 IP 地址辫诅。
域名是分層的涉枫,每層都有自己的 DNS 服務(wù)器用于處理 DNS 解析的請求衬廷。這樣的好處在于每層的服務(wù)器不用關(guān)注過多的信息救鲤,它只要知道自己這一層下的域名服務(wù)器信息即可稀颁。以解析域名: www.abc.com為例:
根服務(wù)器其實并不知道 www.abc.com 的 IP 地址秃踩,但是它知道 abc.com 域名服務(wù)器的地址,所以它把這條查詢請求轉(zhuǎn)發(fā)給 abc.com 域名服務(wù)器。DNS請求被逐層下發(fā)朽们,直到找到對應(yīng)的 IP 地址為止啤誊。
解析器和域名服務(wù)器將最新了解到的信息暫時保存在緩存中醬紫可以減少每次查詢時的性能消耗。
DNS就如同互聯(lián)網(wǎng)中的分布式數(shù)據(jù)庫
ARP
只要確定了IP地址,就可以向這個目標(biāo)地址發(fā)送IP數(shù)據(jù)報。然而在底層數(shù)據(jù)鏈路層,進(jìn)行實際通信時,卻需要知道每個IP地址所對應(yīng)的MAC地址
ARP 協(xié)議(Address Resolution Protocol)用于通過目標(biāo) IP 地址痒给,定位下一個接收數(shù)據(jù)包的網(wǎng)絡(luò)設(shè)備的 MAC 地址。如果目標(biāo)主機處在同一個數(shù)據(jù)鏈路上母怜,那么可以直接得到目標(biāo)主機的 MAC 地址币喧,否則會得到下一條路由器的 MAC 地址枉长。
ARP 協(xié)議的工作原理可以分為兩部分:ARP 請求和 ARP 響應(yīng)。 首先术唬,源主機會通過廣播發(fā)送一個 ARP 請求包:“我要與 IP 地址為 xxx 的主機通話塘淑,誰知道它的 MAC地址肖油?”。
數(shù)據(jù)鏈路上的所有主機都會收到這條消息并檢查自己的 IP 地址杂数,如果與 ARP 請求包中的 IP 地址一致,主機就會發(fā)送 ARP 響應(yīng)包:“我就是 IP 地址為 xxx 的主機诉探,我的 MAC 地址是:xxxx”。
下圖表示了 ARP 協(xié)議的工作機制:
在實際的使用過程中丁恭,每次往目標(biāo)主機發(fā)送數(shù)據(jù)都要使用 ARP 是很低效的庸毫,通常的做法是把獲取到的 MAC 地址緩存一段時間臀栈。一般來說刁俭,一旦源主機向目標(biāo)地址發(fā)送一個數(shù)據(jù)包第晰,接下來繼續(xù)發(fā)送多次的概率非常大突倍,因此這種緩存非常容易命中诵闭。
當(dāng)下一次發(fā)送 ARP 請求或超過一定時間后嚼鹉,緩存都會失效锚赤,這保證了即使 MAC 地址與 IP 地址的對應(yīng)關(guān)系發(fā)生了變化晰绎,數(shù)據(jù)包依然能夠被正確的發(fā)往目標(biāo)地址荞下。
IP地址和MAC地址缺一不可?
MAC 和 IP 地址雖然看上去功能類似(都是用于唯一區(qū)分主機)蚯窥,但是兩者缺一不可荷鼠。如果只有 IP 地址歼狼,雖然可以跳過 ARP,直接在數(shù)據(jù)鏈路上發(fā)一個廣播添瓷,但是這僅適用于通信雙方處于同一個數(shù)據(jù)鏈路下的情況限寞。如果雙方處于不同的數(shù)據(jù)鏈路,數(shù)據(jù)報無法穿透中間的路由器仰坦。
僅憑MAC地址,人們無法知道這臺機器所處的位置履植。如果全世界只用 MAC 地址,那么網(wǎng)橋就得向全世界發(fā)包,那么請參考交換機的自學(xué)過程悄晃,可以想象這個過程會帶來龐大的玫霎,不必要的流量,而且網(wǎng)橋要維護(hù)一張巨大的表格來維護(hù)所有學(xué)到的MAC地址,當(dāng)這些信超過網(wǎng)橋極限,就沒法工作了,也就無法通信了。
正因為 MAC 和 IP 地址缺一不可妈橄,所以才產(chǎn)生了 ARP 這樣的協(xié)議將兩者關(guān)聯(lián)起來庶近。
RARP
RARP(Reverse Address Resolution Protocol)是將ARP反過來,從MAC地址定位IP地址的一種協(xié)議。
代理ARP
通常ARP包會被路由器隔離,但是采用代理ARP的路由器可以將ARP請求轉(zhuǎn)發(fā)給鄰近的網(wǎng)段眷蚓。由此兩個以上網(wǎng)段的節(jié)點之間可以像在同一個網(wǎng)段中一樣進(jìn)行通信鼻种。
一般情況下有路由器連接多個網(wǎng)絡(luò)時,會在每個網(wǎng)段定義各自的子網(wǎng),從而進(jìn)行路由控制,但是對于那些不支持設(shè)定子網(wǎng)掩碼的老設(shè)備,不適用代理ARP,有時就無法更好的使用網(wǎng)絡(luò)。
ICMP
架構(gòu)IP網(wǎng)絡(luò)時需要特別注意兩點:確認(rèn)網(wǎng)絡(luò)是否正常工作,以及遇到異常時進(jìn)行問題診斷沙热。
ICMP正是提供這類功能的一種協(xié)議叉钥。
主要功能包括:確認(rèn)IP包是否成功送達(dá)目標(biāo)地址,通知在發(fā)送過程中IP包被廢棄的具體原因,改善網(wǎng)絡(luò)設(shè)置等。
ICMP的消息大致可以分為兩類:一類是通知出錯原因的錯誤消息,另一類是用于診斷的查詢消息篙贸。
主要消息類型
DHCP(Dynamic Host Configuration Protocol)
逐一為每一臺主機設(shè)置IP地址會非常繁瑣的事情投队。特別是移動設(shè)備,每到一個新地方,就要重新設(shè)置IP地址
于是為了實現(xiàn)自動設(shè)置IP地址、統(tǒng)一管理IP地址分配,就產(chǎn)生了DHCP協(xié)議爵川。
有了DHCP,計算機只要連接到網(wǎng)絡(luò),就可以進(jìn)行TCP/IP通信敷鸦。
DHCP工作機制
使用DHCP前,首先要假設(shè)一臺DHCP服務(wù)器。然后將DHCP所要分配的IP地址設(shè)置到服務(wù)器上。此外,還需要將相應(yīng)的子網(wǎng)掩碼扒披、路由控制信息以及DNS服務(wù)器的地址等設(shè)置到服務(wù)器上值依。
為了檢查所要分配的IP地址以及已經(jīng)分配了的IP地址是否可用,DHCP服務(wù)器或DHCP客戶端必須具備以下功能:
- DHCP服務(wù)器:
在分配IP底之前發(fā)送ICMP回送請求包,確認(rèn)沒有返回應(yīng)答 - DHCP客戶端:
針對從DHCP哪里獲得的IP地址發(fā)送ARP請求包,確認(rèn)沒有返回應(yīng)答
在大規(guī)模組織機構(gòu)的網(wǎng)絡(luò)環(huán)境中,往往需要將DHCP統(tǒng)一管理
NAT
NAT (Network Address Translator) 是一種用于將局域網(wǎng)中的私有地址轉(zhuǎn)換成全局 IP 地址的技術(shù)。
在連接上無線路由器的時候碟案,如果檢查一下設(shè)備的 IP 地址鳞滨,也許你會發(fā)現(xiàn)是類似于 192.168.1.1 這樣的局域網(wǎng) IP 地址。那不同網(wǎng)段中蟆淀,IP 地址都是 192.168.1.1 的主機改如何通信呢拯啦?
局域網(wǎng)中 IP 地址為 10.0.0.10 的主機向全局 IP 地址 163.221.120.9 發(fā)送數(shù)據(jù)。NAT 路由器將數(shù)據(jù)包的源地址修改成自己的全局 IP 地址:202.244.174.37熔任。同理褒链,接收數(shù)據(jù)時,路由器把目標(biāo)地址 202.244.174.37 翻譯成內(nèi)網(wǎng)地址:10.0.0.10
下圖描繪了 NAT 的工作原理:
路由器只有一個對外的全局 IP 地址疑苔,如果有多個內(nèi)網(wǎng)主機都向外部通訊怎么辦呢甫匹?這時就要使用 NAPT 技術(shù),它和 NAT 從原理上類似惦费,但它可以轉(zhuǎn)換 TCP 和 UDP 端口號兵迅。
使用 NAPT 技術(shù)時,不同的內(nèi)網(wǎng) IP 被轉(zhuǎn)換成同一個公共 IP 地址薪贫,也就是路由器對外顯示的全局 IP 地址恍箭,但是被附加不同的端口號以示區(qū)分:
不管是 NAT 還是 NAPT,都需要路由器路由器內(nèi)部維護(hù)一張自動生成的地址轉(zhuǎn)換表瞧省。以 TCP 為例扯夭,建立 TCP 連接首次握手的 SYN 包發(fā)出時會生成這個表,關(guān)閉連接時會發(fā)出 FIN 包鞍匾,收到這個包的應(yīng)答時轉(zhuǎn)換表被刪除交洗。
IP隧道
在下圖所示的網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)A、B使用IPv6,如果處于中間位置的網(wǎng)絡(luò)C支持使用IPv4的話,A與B之間就無法直接進(jìn)行通信橡淑。為了讓他們之間正常通信,這是必須得采用IP隧道的功能构拳。
IP隧道中可以將那些從網(wǎng)絡(luò)A發(fā)過來的IPv6的包統(tǒng)和為一個數(shù)據(jù),再為之追加一個IPv4的首部以后轉(zhuǎn)發(fā)給網(wǎng)絡(luò)C。
一般情況下,緊接著IP首部的是TCP或UDP的首部梁棠。然而,現(xiàn)在的應(yīng)用中,"IP首部的后面還是IP首部"或者"IP首部的后面是IPv6的首部"等情況與日俱增置森。這種在網(wǎng)絡(luò)層的首部后面繼續(xù)追加網(wǎng)絡(luò)層首部 的通信方法就叫做"IP隧道"。