我們知道網(wǎng)絡(luò)分層存在TCP/IP五層模型: 應(yīng)用層:負(fù)責(zé)應(yīng)用程序之間的數(shù)據(jù)溝通;自定制協(xié)議;知名協(xié)議(HTTP/FTP/SSH協(xié)議) 傳輸層:負(fù)責(zé)端與端之間的數(shù)據(jù)溝通(端口與端口之間);封裝端口信息(TCP/UDP協(xié)議) 網(wǎng)絡(luò)層:負(fù)責(zé)地址管理與路由選擇;(選擇最優(yōu)路徑);(IP協(xié)議,路由器) 鏈路層:相鄰設(shè)備之間的數(shù)據(jù)傳輸(兩個(gè)網(wǎng)卡之間,通過(guò)mac地址地址標(biāo)識(shí))(以太網(wǎng)協(xié)議(Etherne)交換機(jī)) 物理層:負(fù)責(zé)光電信號(hào)的傳輸(以太網(wǎng)協(xié)議,集線(xiàn)器(比如雙絞線(xiàn)的長(zhǎng)度直徑,等等)) 應(yīng)用層和傳輸層,阿鯉在之前已經(jīng)分享過(guò)了,連接在此: http https tcp udp 我們?cè)谶@篇文章中會(huì)介紹網(wǎng)絡(luò)層 提到ip,我想大家首先會(huì)想到的是ip地址,是的網(wǎng)絡(luò)中的一個(gè)ip就是一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)。但是ip地址只是ip協(xié)議中的一個(gè)標(biāo)識(shí)而已,現(xiàn)在就讓我們看看IP協(xié)議的格式是怎樣的。 1:4為版本號(hào):指定ip版本協(xié)議,對(duì)于ipv4而言就是4; 2:4位首部長(zhǎng)度:ip頭部長(zhǎng)度是以4字節(jié)為單位的;而其首部長(zhǎng)度是4bit,4bit表示最大的數(shù)是15;所以ip頭部的最大長(zhǎng)度為15*4=60字節(jié) 3:8位服務(wù)類(lèi)型:3位優(yōu)先權(quán)字段(棄用);4位tos字段,和1位保留字段(必須值為0);4位tos字段分別表示,最小延遲,最大吞吐量,最高可靠性,最小成本,這四者沖突所以只能選一個(gè)。eg:對(duì)于ssh/telnet這樣的應(yīng)用程序,最小延遲就比較重要,對(duì)于ftp這樣的程序,最大吞吐量比較重要。 4:16位總長(zhǎng)度:ip數(shù)據(jù)報(bào)整體占多少個(gè)字節(jié) 5:16位標(biāo)識(shí):唯一的標(biāo)識(shí)主機(jī)發(fā)送的報(bào)文,如果ip報(bào)文在數(shù)據(jù)鏈路層被分片了,那么每一個(gè)片里面的這個(gè)id都是相同的。 6:3位標(biāo)志字段:第一位保留(不知道干啥,先空下來(lái));第2位置為1表示禁止分片,如果這時(shí)候報(bào)文長(zhǎng)度超過(guò)mtu,ip模塊就會(huì)丟棄報(bào)文。第3位表示”更多分片“,如果分片的話(huà),最后一個(gè)分片值為1,其他為0,類(lèi)似于結(jié)束標(biāo)志。 7:13位片偏移:是分片相對(duì)于原始ip報(bào)文開(kāi)始處的偏移,其實(shí)就是在表示當(dāng)前分片在原始報(bào)文中的位置。實(shí)際偏移的字節(jié)數(shù)是這個(gè)值*8得到的。因此,除了最后一個(gè)報(bào)文之外,其他報(bào)文的長(zhǎng)度必須是8的整數(shù)倍。 8:8位生存時(shí)間:數(shù)據(jù)報(bào)到達(dá)目的地的最大報(bào)文跳數(shù),一般為64,每次經(jīng)過(guò)一個(gè)路由,TTL就會(huì)減一,如果減到0還沒(méi)有到達(dá),就直接丟棄了;這個(gè)字段就是用來(lái)防止出現(xiàn)路由循環(huán)的。 9:8位協(xié)議:表示上層協(xié)議(網(wǎng)絡(luò)層) 10:16位首部校驗(yàn)和:使用CRC進(jìn)行校驗(yàn),來(lái)鑒別頭部是否受損 11:32位源/目的端口:表示發(fā)送端和接收端 12:選項(xiàng)字段:。。。 ok,現(xiàn)在大家對(duì)ip協(xié)議的結(jié)構(gòu)應(yīng)該有了一定的認(rèn)識(shí),那么接下來(lái)讓我們看看ip協(xié)議在網(wǎng)絡(luò)層是怎樣傳輸?shù)?/span> 在網(wǎng)絡(luò)中,數(shù)據(jù)的傳遞被稱(chēng)為一個(gè)路由的過(guò)程,而路由中的每一個(gè)點(diǎn)就是一個(gè)ip地址;而在我們?nèi)粘I钪?,?fù)責(zé)路由的儀器就是路由器(主機(jī)雖然有ip節(jié)點(diǎn),但是不能進(jìn)行路由控制) 那路由的過(guò)程是怎樣的呢? 唉,不著急,在講解路由過(guò)程之前,讓再看看ip地址的結(jié)構(gòu) 一個(gè)ip地址被分為兩個(gè)部分:網(wǎng)絡(luò)號(hào)+主機(jī)號(hào) 網(wǎng)絡(luò)號(hào):保證相互鏈接的兩個(gè)網(wǎng)段具有不同的標(biāo)識(shí) 主機(jī)號(hào):同一網(wǎng)段內(nèi),主機(jī)之間具有相同的網(wǎng)絡(luò)號(hào),但是必須有不同的主機(jī)號(hào) 其實(shí)不同的主網(wǎng),就是把網(wǎng)路號(hào)相同的主機(jī)放在一起;如果在子網(wǎng)中新增一臺(tái)主機(jī),則這臺(tái)主機(jī)的網(wǎng)絡(luò)號(hào)和這個(gè)子網(wǎng)的網(wǎng)絡(luò)號(hào)一致,但是主機(jī)號(hào)必須不能和子網(wǎng)中的其主機(jī)重復(fù)。 那么合理設(shè)置主機(jī)號(hào)和網(wǎng)絡(luò)號(hào),就可以保證在相互鏈接的網(wǎng)絡(luò)中,每臺(tái)主機(jī)的ip不相同。 那么問(wèn)題來(lái)了,手動(dòng)的管理子網(wǎng)ip,是一個(gè)相當(dāng)麻煩的事情。但是!有一種技術(shù)叫DHCP; DHCP能夠自動(dòng)的給主網(wǎng)內(nèi)新增主機(jī)節(jié)點(diǎn)分配ip地址,避免了手動(dòng)管理ip的不便,一般的路由器都帶有這個(gè)功能。 說(shuō)了這么多,我們還不知道網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)是怎樣劃分的? 對(duì)于網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)的劃分,可以分為兩種,以前和現(xiàn)在 首先讓我們看看以前的劃分 A以前提出的網(wǎng)絡(luò)號(hào)碼的劃分,將ip地址歸為以下5類(lèi): A類(lèi)地址:0.0.0.0到127.255.255.255;高1位固定,7位網(wǎng)絡(luò)號(hào),24位主機(jī)號(hào);一般用于組建超大型網(wǎng)絡(luò)--可以包含一千多萬(wàn)的主機(jī) B類(lèi)地址:128.0.0.0到191.255.255.255;高2位固定,14位網(wǎng)絡(luò)號(hào),16位主機(jī)號(hào);一般用于組建中型網(wǎng)絡(luò)--可以包括65536個(gè)主機(jī) C類(lèi)地址:192.0.0.0到233.255.255.255;高3位固定;21位網(wǎng)絡(luò)號(hào),8位主機(jī)號(hào);一般用于組建小型網(wǎng)絡(luò),可以包含256個(gè)主機(jī) D類(lèi)地址:224.0.0.0到239.255.255.255;高4位固定,28位多播組號(hào) E類(lèi)地址:240.0.0.0到247.255.255.255;高5位固定,27位保留 隨著internet的飛速發(fā)展,這種劃分方案的局限性很快就顯現(xiàn)出來(lái),大多數(shù)組織都申請(qǐng)B類(lèi)網(wǎng)絡(luò)地址,導(dǎo)致B類(lèi)地址很快就分配完了,而A類(lèi)卻浪費(fèi)了大量地址; eg:申請(qǐng)一個(gè)B類(lèi)地址,理論上一個(gè)子網(wǎng)能夠允許6萬(wàn)5千多個(gè)主機(jī)。A類(lèi)地址的子網(wǎng)數(shù)更多,然而實(shí)際網(wǎng)絡(luò)假設(shè)中,不會(huì)存在一個(gè)子網(wǎng)內(nèi)有那么多情況。因此大量ip地址都被浪費(fèi)掉了。 為了針對(duì)這種情況提出了新的劃分方案,成為CIDR(classless interdomain routing) 引入一個(gè)額外的子網(wǎng)掩碼來(lái)區(qū)分網(wǎng)路號(hào)和主機(jī)號(hào); 1:子網(wǎng)掩碼也是一個(gè)32位的正整數(shù)。通常用一串“0”來(lái)結(jié)尾; 2:將ip地址和子網(wǎng)掩碼進(jìn)行 “按位與” 操作,得到的結(jié)果就是網(wǎng)絡(luò)號(hào); 3:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)的劃分與這個(gè)ip地址是A類(lèi),B類(lèi)還是C類(lèi)無(wú)關(guān); eg: ip地址140.252.20.68子網(wǎng)掩碼255.255.255.0網(wǎng)絡(luò)號(hào)142.252.20.0子網(wǎng)地址范圍142.252.20.0~140.252.20.255 細(xì)心的同學(xué)根據(jù)例子可以看出:ip地址與子網(wǎng)掩碼做與運(yùn)算可以得到網(wǎng)絡(luò)號(hào),主機(jī)號(hào)從全0到全1就是子網(wǎng)的地址范圍; ip地址和子網(wǎng)掩碼還有一種更簡(jiǎn)潔的表示方法, eg:140.252.20.68/24,表示ip地址位140.252.20.68,子網(wǎng)掩碼的高位是1,也就是255.255.255.0 在介紹完ip地址的劃分后,讓我們?cè)倏纯磶讉€(gè)特殊的ip地址散散心 1:將ip地址中的主機(jī)號(hào)全部設(shè)置為0,就成了網(wǎng)絡(luò)號(hào),代表這個(gè)局域網(wǎng); 2:將ip地址中的主機(jī)地址全部設(shè)置為1,就成了廣播地址,用于給同一個(gè)鏈路中相互鏈接的所有主機(jī)發(fā)送數(shù)據(jù)包 3:127.*的ip地址是用于本機(jī)回環(huán)測(cè)試的,通常是127.0.0.1 可是,以上的這些技術(shù)可以讓我們擁有足夠的ip地址嗎? 答案是:不能的;因?yàn)楝F(xiàn)在通用的ip地址是ipv4,一共是4個(gè)字節(jié),那么一共只有2的32次方個(gè)ip地址,大概是43億左右,而tcp/ip協(xié)議規(guī)定,每個(gè)主機(jī)都需要有一個(gè)IP地址。 但是世界上的主機(jī)遠(yuǎn)不止43億個(gè),并且ip地址都是按照網(wǎng)卡分的; 雖然CIDR在一定程度上緩解了ip地址的不夠,但是仍然不足。所以出現(xiàn)了下面的三種方法去解決ip地址不夠用; 1:動(dòng)態(tài)分配ip地址:只給接入網(wǎng)絡(luò)的設(shè)備分配ip地址,因此同一個(gè)mac地址的設(shè)備,每次接入互聯(lián)網(wǎng)中得到的IP地址是不同的 2:IPV6:使用128字節(jié)來(lái)表達(dá)一個(gè)地址,現(xiàn)在還未推廣開(kāi);因?yàn)楹蚷pv4不兼容。 3:NAT技術(shù):在介紹NAT技術(shù)之前,我們先看一下什么是私有ip地址和公網(wǎng)ip地址 私有IP地址:如果一個(gè)組織內(nèi)部組建局域網(wǎng),ip地址只用于局域網(wǎng)內(nèi)的通信,而不是直接連到interent上,理論上,使用任意ip地址都可以,但是RFC1918規(guī)定了用于組建局域網(wǎng)的私有ip地址。 1:10.*,前八位為網(wǎng)絡(luò)號(hào),共16777216個(gè)地址 2:172.16.到172.31.,前12位是網(wǎng)絡(luò)號(hào),共1048,576個(gè)地址 3:192,168.*,前16位是網(wǎng)絡(luò)號(hào),共65536個(gè)地址 在這個(gè)范圍中的,都稱(chēng)為私有ip,其余則稱(chēng)為公網(wǎng)ip; 每一個(gè)路由器可以配置兩個(gè)ip地址,一個(gè)是wan口ip,一個(gè)是lan口ip(子網(wǎng)); 路由器的所有l(wèi)an口連接所有主機(jī),其網(wǎng)絡(luò)號(hào)都是這個(gè)ip; 不同的路由器,子網(wǎng)ip都是一樣的(因?yàn)閷?duì)內(nèi)),一般都是192.168.1.1;主網(wǎng)的主機(jī)ip不可以重復(fù)。但是子網(wǎng)之間的主機(jī)ip就可以重復(fù)了。 wan口ip就是公網(wǎng)ip了,lan對(duì)內(nèi),wan對(duì)外;wan口ip就不能重復(fù)了,所以子網(wǎng)之間的ip是可以重復(fù)的。 每次在子網(wǎng)內(nèi)的主機(jī)需要和外網(wǎng)進(jìn)行通信的時(shí)候,路由器將ip首部中的ip地址進(jìn)行替換,這樣逐級(jí)替換,最終將數(shù)據(jù)包中的ip地址轉(zhuǎn)換成一個(gè)公網(wǎng)ip;這個(gè)轉(zhuǎn)換技術(shù)被稱(chēng)為NAT(network address translation) 如果我們希望我們自己實(shí)現(xiàn)的服務(wù)器程序,能夠在公網(wǎng)上被訪問(wèn)到,就需要把程序部署在一臺(tái)具有外網(wǎng)ip的服務(wù)器上。比如阿里云,騰訊云等。 說(shuō)了這么多,就是為我們介紹路由的過(guò)程打鋪墊的,現(xiàn)在就讓我們一起看看路由的過(guò)程; 路由選擇就好比一個(gè)人問(wèn)路的過(guò)程; 問(wèn)路:當(dāng)ip數(shù)據(jù)包,到達(dá)路由器時(shí),路由器會(huì)先查看目的ip; 指路:路由器決定這個(gè)數(shù)據(jù)包是否可以直接發(fā)送給目標(biāo)主機(jī),還是需要發(fā)送給下一個(gè)路由器 重復(fù):依次反復(fù),一直達(dá)到目標(biāo)IP 那你知道,路由器是如何判定這個(gè)數(shù)據(jù)該發(fā)送到哪里呢? 這是因?yàn)槊總€(gè)節(jié)點(diǎn)都會(huì)維護(hù)一個(gè)路由表;這個(gè)表格可以在linux中使用route命令查看。如果ip命中了路由表,就直接轉(zhuǎn)發(fā)。 路由表中的最后一行,主要由一下次路由的地址和發(fā)送接口兩部分組成。 eg: destination:目的網(wǎng)絡(luò)地址 gateway:下一條地址;(廣播) genmast:子網(wǎng)掩碼 flags:U表示有效,G表示此條目的的下一條地址是某個(gè)路由器的地址。 Iface:發(fā)送鏈接接口 |
|