計(jì)算機(jī)網(wǎng)絡(luò)系列
- 計(jì)算機(jī)網(wǎng)絡(luò)篇——概述
- 計(jì)算機(jī)網(wǎng)絡(luò)篇——鏈路層
- 計(jì)算機(jī)網(wǎng)絡(luò)篇——網(wǎng)絡(luò)層
- 計(jì)算機(jī)網(wǎng)絡(luò)篇——傳輸層
- 計(jì)算機(jī)網(wǎng)絡(luò)篇——應(yīng)用層
IP協(xié)議
IP協(xié)議的作用
網(wǎng)絡(luò)層的主要作用是“實(shí)現(xiàn)終端節(jié)點(diǎn)之間的通信”吃度,也就是點(diǎn)對(duì)點(diǎn)的通信直撤。IP協(xié)議主要負(fù)責(zé)將數(shù)據(jù)包發(fā)送給最終的目標(biāo)計(jì)算機(jī)抑胎。前面我們講過(guò)鏈路層主要是負(fù)責(zé)數(shù)據(jù)在鏈路中進(jìn)行傳輸灿意,那么網(wǎng)絡(luò)層和鏈路層有什么聯(lián)系呢?
舉個(gè)栗子让簿,把鏈路層比作各種交通軌道叮称,它可以把世界各地的交通連接起來(lái)并傳輸舒萎,但是它并沒(méi)有規(guī)定始發(fā)地和目的地, 而網(wǎng)絡(luò)層就相當(dāng)于你的車(chē)票鳍置,車(chē)票上有始發(fā)地和目的地辽剧,把車(chē)票交給鏈路層,它就知道你的需求税产,就把你運(yùn)輸?shù)较鄳?yīng)的目的地怕轿,而具體通過(guò)什么交通工具(采用什么鏈路層協(xié)議),網(wǎng)絡(luò)層是不關(guān)心的辟拷,只要你能安全送達(dá)就可以了撞羽。
IP地址
IP地址(IPv4)由32位正整數(shù)來(lái)表示。通常每一個(gè)主機(jī)都被分配了一個(gè)這樣的IP地址衫冻。IP地址分為“網(wǎng)絡(luò)標(biāo)識(shí)”和“主機(jī)標(biāo)識(shí)”兩部分诀紊,根據(jù)“網(wǎng)絡(luò)標(biāo)識(shí)”的位數(shù)對(duì)IP地址進(jìn)行了分類(lèi)。
- A類(lèi)地址從1到8位是網(wǎng)絡(luò)標(biāo)識(shí)羽杰,后28位是主機(jī)標(biāo)識(shí)渡紫,以“0”開(kāi)頭,所以它的十進(jìn)制表示范圍是0.0.0.0~127.0.0.0考赛。(十進(jìn)制二進(jìn)制的轉(zhuǎn)換這個(gè)不用說(shuō)吧)
- B類(lèi)地址從1到16位是網(wǎng)絡(luò)標(biāo)識(shí)惕澎,以“10”開(kāi)頭,所以它的十進(jìn)制表示范圍是128.0.0.1~191.255.0.0
- C類(lèi)地址從1到24位為它的網(wǎng)絡(luò)標(biāo)識(shí)颜骤,以“110”開(kāi)頭唧喉,它的十進(jìn)制表示范圍是192.168.0.0~239.255.255.0。
- D類(lèi)地址的32位都是網(wǎng)絡(luò)標(biāo)識(shí)忍抽,它沒(méi)有主機(jī)標(biāo)識(shí)八孝,以“1110”開(kāi)頭,它常被用于多播鸠项。
多播:多播可以把數(shù)據(jù)包同時(shí)發(fā)送給指定的多臺(tái)主機(jī)干跛,因此它的效率高于廣播,且它能穿透路由祟绊,所以可以向其它網(wǎng)絡(luò)發(fā)送數(shù)據(jù)包楼入。
用一張圖來(lái)說(shuō)明一下單播哥捕、多播與廣播的區(qū)別:
子網(wǎng)掩碼
由于IP地址的分類(lèi)嘉熊,對(duì)IP地址造成了極大的浪費(fèi)(一個(gè)A類(lèi)地址可以有1600多萬(wàn)的主機(jī)遥赚,但是一個(gè)B類(lèi)地址只能有6萬(wàn)多的主機(jī),而C類(lèi)地址的主機(jī)上限則為254個(gè))阐肤,顯然這樣劃分也是不夠靈活的凫佛,所以就產(chǎn)生了一種子網(wǎng)掩碼的技術(shù),來(lái)對(duì)IP地址進(jìn)行更加靈活孕惜、細(xì)粒度更高的劃分愧薛。
子網(wǎng)掩碼用二進(jìn)制表示的話(huà),也是32位诊赊,它對(duì)應(yīng)IP地址網(wǎng)絡(luò)標(biāo)識(shí)的位全為1厚满,主機(jī)標(biāo)識(shí)位全為0。
由圖可以看到碧磅,子網(wǎng)掩碼可以把一個(gè)B類(lèi)IP地址的網(wǎng)絡(luò)號(hào)擴(kuò)展到了26位(10位子網(wǎng)掩碼)碘箍,此時(shí)根據(jù)網(wǎng)絡(luò)號(hào)就可以劃分不同的子網(wǎng),每個(gè)子網(wǎng)也可以分配一定數(shù)量的主機(jī)鲸郊。
路由控制
路由控制(Routing)是指將分組數(shù)據(jù)發(fā)送到目標(biāo)地址的功能丰榴,這個(gè)功能一般由路由器完成。(不要與家里用的小型無(wú)線(xiàn)路由器混為一談)
路由器通過(guò)保存路由表秆撮,來(lái)對(duì)路由進(jìn)行控制四濒。類(lèi)似于你在旅行的時(shí)候,你想要從A到B职辨,但是A和B中間還有很多其它的城市盗蟆,你要通過(guò)哪些城市才能順利從A到B呢,路由表就是保存著這些“航線(xiàn)”信息舒裤。
如圖喳资,主機(jī)A想把數(shù)據(jù)包發(fā)送給目標(biāo)地址為10.1.2.10
的主機(jī)B,它先通過(guò)查找它的路由腾供,然后根據(jù)路由表的信息把數(shù)據(jù)包發(fā)送給默認(rèn)路(IP地址為0.0.0.0/0
表示默認(rèn)路由)由10.1.1.1
的路由器1仆邓。然后路由器1查找它的路由表,通過(guò)對(duì)比可以知道伴鳖,目標(biāo)地址10.1.2.10
與圈出的地址最為吻合(一般采用最長(zhǎng)匹配法則)节值。然后路由器1繼續(xù)講數(shù)據(jù)包轉(zhuǎn)發(fā)給地址為10.1.0.2
的路由器2,然后一直轉(zhuǎn)發(fā)知道轉(zhuǎn)發(fā)給目標(biāo)主機(jī)B榜聂。
IP分割處理與再構(gòu)處理
在數(shù)據(jù)鏈路層中搞疗,其實(shí)每一種數(shù)據(jù)鏈路都有它的最大傳輸單元(MTU),所以如果你傳輸?shù)臄?shù)據(jù)包大于了數(shù)據(jù)鏈路的最大傳輸單元须肆,就需要對(duì)它進(jìn)行分割匿乃。
路徑MTU發(fā)現(xiàn)
由于分片機(jī)制脐往,會(huì)對(duì)路由器帶來(lái)強(qiáng)大的負(fù)擔(dān),而且如果在分片處理中某個(gè)分片丟失扳埂,會(huì)造成整個(gè)IP報(bào)文作廢。因此就產(chǎn)生了“路徑MTU發(fā)現(xiàn)”技術(shù)瘤礁。路徑MTU發(fā)現(xiàn)其實(shí)就是從發(fā)送主機(jī)按照路徑MTU的大小將數(shù)據(jù)報(bào)進(jìn)行分片后進(jìn)行發(fā)送阳懂。
在發(fā)送端發(fā)送IP數(shù)據(jù)報(bào)時(shí),會(huì)將其首部的分片禁止標(biāo)志位設(shè)置為1柜思,根據(jù)這個(gè)標(biāo)志岩调,途中的路由器即使遇到需要分片才能處理的打包,也不會(huì)去分片赡盘。而是將包丟棄号枕,隨后通過(guò)一個(gè)ICMP的不可達(dá)消息將數(shù)據(jù)鏈路上MTU值發(fā)送給發(fā)送主機(jī)。下一次發(fā)送主機(jī)就會(huì)根據(jù)這個(gè)MTU值進(jìn)行分片
重組
接收端根據(jù)IP首部中的標(biāo)志(Flag)和片偏移(Fragment Offset)進(jìn)行數(shù)據(jù)重組陨享。
IP的首部(IPv4)
首部結(jié)構(gòu)比較復(fù)雜葱淳,說(shuō)幾個(gè)重要一點(diǎn)的吧。
版本(Version):由4bit構(gòu)成抛姑,標(biāo)識(shí)IP首部的版本號(hào)赞厕。如IPv4的版本號(hào)位4,IPv6的版本號(hào)為6.
總長(zhǎng)度(Total Length):標(biāo)識(shí)IP首部與數(shù)據(jù)部分合起來(lái)的總字節(jié)數(shù)定硝。該字段長(zhǎng)16bit皿桑,因此IP包的最大長(zhǎng)度為65535(2^16)字節(jié)。
標(biāo)識(shí):用于分片重組蔬啡。同一個(gè)分片的標(biāo)識(shí)值相同诲侮,不同分片的標(biāo)識(shí)值不同。
-
標(biāo)志(Flags):由3bit組成箱蟆,表示包被分片的相關(guān)信息沟绪。每一位的含義如下
標(biāo)志段各位含義 片偏移:標(biāo)識(shí)被分片的每一分段相對(duì)于原始數(shù)據(jù)的位置,單位為8字節(jié)顽腾。
生存時(shí)間(TTL):記錄當(dāng)前包在網(wǎng)絡(luò)上應(yīng)該生存的期限近零。每經(jīng)過(guò)一個(gè)路由器,它的值就會(huì)減一抄肖,當(dāng)變?yōu)?則丟棄該包久信。
協(xié)議:表示IP首部下一個(gè)首部的協(xié)議。即傳輸層的協(xié)議漓摩。
首部校驗(yàn)和:用于檢查首部部分是否被破壞裙士。
IPv6
IPv6是為了解決IPv4地址耗盡而產(chǎn)生,它的長(zhǎng)度是IPv4的4倍管毙,即128bit腿椎,一般寫(xiě)成8個(gè)16位字節(jié)桌硫。
IPv6的特點(diǎn)
- IP地址的擴(kuò)大與路由表控制的聚合
IP地址依然適應(yīng)互聯(lián)網(wǎng)的分層構(gòu)造。分配與其地址結(jié)構(gòu)相適應(yīng)的IP地址啃炸,盡可能避免路由表膨大 - 性能提升
包首部長(zhǎng)度采用固定的值(40字節(jié))铆隘,不再采用首部檢驗(yàn)碼。簡(jiǎn)化首部結(jié)構(gòu)南用,減輕路由負(fù)荷膀钠。 - 支持即插即用功能
- 采用認(rèn)證與加密功能
- 多播、Mobile IP成為擴(kuò)展
IP協(xié)議的相關(guān)技術(shù)
IP旨在讓最終目標(biāo)主機(jī)收到數(shù)據(jù)包裹虫,但是僅憑IP協(xié)議是無(wú)法完成這一工作的肿嘲。如怎樣解析主機(jī)名稱(chēng)和MAC地址,以及數(shù)據(jù)包在發(fā)送過(guò)程中產(chǎn)生異常如何處理筑公。所以還有一些很重要的技術(shù)來(lái)幫助IP一起工作雳窟。
DNS(域名解析系統(tǒng))
我們平常在訪問(wèn)某個(gè)網(wǎng)站的時(shí)候都不是使用的IP地址,而是通過(guò)“網(wǎng)址”來(lái)進(jìn)行訪問(wèn)匣屡,那么計(jì)算機(jī)網(wǎng)絡(luò)如何通過(guò)“網(wǎng)址”來(lái)尋找對(duì)應(yīng)的主機(jī)呢封救?這就是DNS的工作了。所謂的“網(wǎng)址”捣作,其中包含的最重要的信息就是域名兴泥,域名是指為了識(shí)別主機(jī)名稱(chēng)和組織機(jī)構(gòu)名稱(chēng)的一種具有分層的名稱(chēng)。它和IP地址都可以對(duì)應(yīng)一臺(tái)主機(jī)虾宇,DNS協(xié)議的作用就是將域名轉(zhuǎn)換為IP地址搓彻,以方便尋找對(duì)應(yīng)的主機(jī)。
如圖所示嘱朽,計(jì)算機(jī)要訪問(wèn)某個(gè)網(wǎng)站時(shí)旭贬,它都是向DNS服務(wù)器查詢(xún)IP地址,然后DNS服務(wù)器按層進(jìn)行查詢(xún)搪泳。
ARP
ARP是以目標(biāo)IP地址為索引稀轨,來(lái)定位下一個(gè)應(yīng)該接受數(shù)據(jù)分包的網(wǎng)絡(luò)設(shè)備的對(duì)應(yīng)的MAC地址,簡(jiǎn)單點(diǎn)說(shuō)岸军,ARP就是用來(lái)進(jìn)行IP地址到MAC地址的對(duì)應(yīng)奋刽。
ARP的工作原理:簡(jiǎn)單點(diǎn)說(shuō),ARP就是通過(guò)ARP請(qǐng)求與ARP響應(yīng)兩種包來(lái)確定MAC地址艰赞。
如上所示佣谐,每次發(fā)送請(qǐng)求前都需要先發(fā)送ARP請(qǐng)求來(lái)確定MAC地址,這樣的效率就太低了方妖。所以通常的做法是把獲取到的MAC地址緩存一段時(shí)間狭魂。一般來(lái)說(shuō),一旦源主機(jī)向目標(biāo)地址發(fā)送一個(gè)數(shù)據(jù)包,接下來(lái)繼續(xù)發(fā)送多次的概率非常大雌澄,因此這種緩存非常容易命中斋泄。
為什么要同時(shí)有MAC地址和IP地址?
肯定有人會(huì)產(chǎn)生這樣的疑問(wèn)镐牺,明明通過(guò)IP地址就可以確定一條主機(jī)了炫掐,為什么還要有MAC地址?
如果在相同的鏈路中睬涧,確實(shí)通過(guò)廣播就能發(fā)送到對(duì)應(yīng)的主機(jī)卒废,此時(shí),僅僅使用IP地址也能工作宙地。但是如果兩臺(tái)通信的主機(jī)處于不同的鏈路上,此時(shí)就得通過(guò)路由器來(lái)進(jìn)行轉(zhuǎn)發(fā)逆皮,而路由器是工作在鏈路層的宅粥,此時(shí)你想把數(shù)據(jù)報(bào)發(fā)送哦出去,必須得先發(fā)送給路由器的MAC地址电谣。
此外秽梅,假如不適用IP地址,而是通過(guò)MAC地址連接世界上所有網(wǎng)絡(luò)中的主機(jī)和結(jié)點(diǎn)剿牺,我們想象一下企垦,網(wǎng)橋和交換機(jī)等設(shè)備得維護(hù)一張多么大的表格來(lái)保存所有MAC地址。
NAT和NAPT
NAT是用于在本地網(wǎng)絡(luò)中使用私有地址晒来,在連接互聯(lián)網(wǎng)時(shí)轉(zhuǎn)而使用全局IP地址的技術(shù)钞诡,它實(shí)際上是為正在面臨的IPv4地址枯竭而產(chǎn)生。
在NAT路由器內(nèi)部湃崩,有一張自動(dòng)生成的用來(lái)轉(zhuǎn)換地址的表荧降。當(dāng)10.0.0.10
向163.221.120.9
發(fā)送第一個(gè)包時(shí)生成這張表,并按照表中的映射關(guān)系進(jìn)行處理攒读。但是這樣對(duì)應(yīng)的話(huà)好像并沒(méi)有完全減少全局IP地址的數(shù)量朵诫,如果私有網(wǎng)絡(luò)中多臺(tái)主機(jī)要和外部通信時(shí),很可能造成全局IP不夠用的情況薄扁,此時(shí)剪返,就可以用包含端口號(hào)一起轉(zhuǎn)換方式(NAPT)。
此時(shí)邓梅,在轉(zhuǎn)換IP地址的同時(shí)脱盲,再加上端口號(hào)進(jìn)行區(qū)分,就可以節(jié)省很多全局IP地址了(同一全局IP地址對(duì)應(yīng)不同端口號(hào)不同私有IP地址)日缨。
不管是 NAT 還是 NAPT宾毒,都需要路由器路由器內(nèi)部維護(hù)一張自動(dòng)生成的地址轉(zhuǎn)換表。以 TCP 為例,建立 TCP 連接首次握手的 SYN 包發(fā)出時(shí)會(huì)生成這個(gè)表诈铛,關(guān)閉連接時(shí)會(huì)發(fā)出 FIN 包乙各,收到這個(gè)包的應(yīng)答時(shí)轉(zhuǎn)換表被刪除。