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