前言這是一篇很長很長的文章,挑戰(zhàn)你的忍耐極限! 一、理論五層模型互聯(lián)網(wǎng)的實(shí)現(xiàn),分為好幾層,每一層都有自己特有的功能,而且每一層都靠下一層支持。用戶接觸到的,只是最上面的一層,我們稱為應(yīng)用層,要理解互聯(lián)網(wǎng),必須從最下層開始,自下而上的理解每一層的功能。 我們常見的網(wǎng)絡(luò)模型,有以下三種:
它們之間的關(guān)系如下圖所示 其中, 理論五層模型的結(jié)構(gòu)如下圖 各層的作用如下:
簡(jiǎn)單說,越下面的層,越靠近硬件;越上面的層,越靠近用戶。 協(xié)議是什么每一層都是為了完成某一種功能。為了實(shí)現(xiàn)這些功能,需要遵守一些共同的規(guī)則,這些規(guī)則就是 互聯(lián)網(wǎng)的每一層,都定義了很多協(xié)議。這些協(xié)議的總稱,叫做 下面的內(nèi)容中,我們通過每一層的功能的介紹,對(duì)每一層中的主要協(xié)議所起作用進(jìn)行講解。 二、物理層電腦要進(jìn)行聯(lián)網(wǎng),需要把電腦通過各種設(shè)備連接進(jìn)網(wǎng)絡(luò),設(shè)備有光纜、電纜、雙絞線、無限電波等方式。 這就是 三、數(shù)據(jù)鏈路層1.定義物理層是用于傳輸信號(hào)的介質(zhì),它傳輸?shù)氖?code>0和1的電信號(hào)。但是關(guān)于電信號(hào)如何分組,每個(gè)信號(hào)位有何意義并沒有規(guī)定。 這就是 2.以太網(wǎng)協(xié)議早期的時(shí)候,每家公司都有自己的電信號(hào)分組方式。逐漸地,一種叫做 以太網(wǎng)規(guī)定,一組電信號(hào)構(gòu)成一個(gè)數(shù)據(jù)包,叫做
MTU(最大傳輸單元)MTU是鏈路層對(duì)物理層的限制。
MTU對(duì)IP協(xié)議的影響由于鏈路層存在MTU的限制,導(dǎo)致網(wǎng)絡(luò)層的報(bào)文如果超過1500字節(jié),就必要要對(duì)其進(jìn)行分片發(fā)送。
MTU對(duì)UDP協(xié)議的影響
MTU對(duì)TCP協(xié)議的影響
3.MAC地址上面我們提到,以太網(wǎng)數(shù)據(jù)包的標(biāo)頭,包含了發(fā)送者和接受者的信息。那么,發(fā)送者和接受者是如何標(biāo)識(shí)呢? 以太網(wǎng)規(guī)定,連入網(wǎng)絡(luò)的所有設(shè)備,都必須具有網(wǎng)卡接口。數(shù)據(jù)包必須是從一塊網(wǎng)卡,傳送到另一塊網(wǎng)卡。網(wǎng)卡的地址,就是數(shù)據(jù)包的發(fā)送地址和接收地址,這叫做MAC地址。 每塊網(wǎng)卡出廠的時(shí)候,都有一個(gè)全世界獨(dú)一無二的MAC地址,長度是48個(gè)二進(jìn)制位,通常用12個(gè)十六進(jìn)制數(shù)表示。 前6個(gè)十六進(jìn)制數(shù)是廠商編號(hào),后6個(gè)十六進(jìn)制數(shù)是該廠商的網(wǎng)卡流水號(hào)。有了MAC地址,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。 4.廣播定義地址只是第一步,后面還有更多的步驟:
上圖中,5號(hào)計(jì)算機(jī)向3號(hào)計(jì)算機(jī)發(fā)送一個(gè)數(shù)據(jù)包,同一個(gè)子網(wǎng)絡(luò)的1號(hào)、2號(hào)、3號(hào)、4號(hào)、6號(hào)計(jì)算機(jī)都會(huì)收到這個(gè)包。它們讀取這個(gè)包的標(biāo)頭,找到接收方的MAC地址,然后與自身的MAC地址相比較,如果兩者相同,就接收這個(gè)包,做進(jìn)一步處理,否則就丟棄這個(gè)包。這種發(fā)送方式就叫做廣播(broadcasting)。 有了數(shù)據(jù)包的定義、網(wǎng)卡的MAC地址、廣播的發(fā)送方式,'鏈接層'就可以在多臺(tái)計(jì)算機(jī)之間傳送數(shù)據(jù)了。 四、網(wǎng)絡(luò)層1、 網(wǎng)絡(luò)層的由來以太網(wǎng)協(xié)議,依靠MAC地址發(fā)送數(shù)據(jù)。理論上,單單依靠MAC地址,成都的網(wǎng)卡就可以找到休斯頓的網(wǎng)卡了,技術(shù)上是可以實(shí)現(xiàn)的。 但是,這樣做有一個(gè)重大的缺點(diǎn)。以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包,所有成員人手一包,不僅效率低,而且局限在發(fā)送者所在的子網(wǎng)絡(luò)。也就是說,如果兩臺(tái)計(jì)算機(jī)不在同一個(gè)子網(wǎng)絡(luò),廣播是傳不過去的。這種設(shè)計(jì)是合理的,否則互聯(lián)網(wǎng)上每一臺(tái)計(jì)算機(jī)都會(huì)收到所有包,那會(huì)引起災(zāi)難。 互聯(lián)網(wǎng)是無數(shù)子網(wǎng)絡(luò)共同組成的一個(gè)巨型網(wǎng)絡(luò),很像想象成都和休斯頓的電腦會(huì)在同一個(gè)子網(wǎng)絡(luò),這幾乎是不可能的。 因此,必須找到一種方法,能夠區(qū)分哪些MAC地址屬于同一個(gè)子網(wǎng)絡(luò),哪些不是。如果是同一個(gè)子網(wǎng)絡(luò),就采用廣播方式發(fā)送,否則就采用路由方式發(fā)送。(路由的意思,就是指如何向不同的子網(wǎng)絡(luò)分發(fā)數(shù)據(jù)包,這是一個(gè)很大的主題,本文不涉及。)遺憾的是,MAC地址本身無法做到這一點(diǎn)。它只與廠商有關(guān),與所處網(wǎng)絡(luò)無關(guān)。 這就導(dǎo)致了網(wǎng)絡(luò)層的誕生。它的作用是引進(jìn)一套新的地址,使得我們能夠區(qū)分不同的計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)。這套地址就叫做網(wǎng)絡(luò)地址,簡(jiǎn)稱網(wǎng)址。 于是,網(wǎng)絡(luò)層出現(xiàn)以后,每臺(tái)計(jì)算機(jī)有了兩種地址,一種是MAC地址,另一種是網(wǎng)絡(luò)地址。兩種地址之間沒有任何聯(lián)系,MAC地址是綁定在網(wǎng)卡上的,網(wǎng)絡(luò)地址則是管理員分配的,它們只是隨機(jī)組合在一起。 網(wǎng)絡(luò)地址幫助我們確定計(jì)算機(jī)所在的子網(wǎng)絡(luò),MAC地址則將數(shù)據(jù)包送到該子網(wǎng)絡(luò)中的目標(biāo)網(wǎng)卡。因此,從邏輯上可以推斷,必定是先處理網(wǎng)絡(luò)地址,然后再處理MAC地址。 2、IP協(xié)議規(guī)定網(wǎng)絡(luò)地址的協(xié)議,叫做IP協(xié)議。它所定義的地址,就被稱為IP地址。目前,廣泛采用的是IP協(xié)議的第四版和第六版,分別稱為IPv4和IPv6。 (1) IPv4
互聯(lián)網(wǎng)上的每一臺(tái)計(jì)算機(jī),都會(huì)分配到一個(gè)IP地址。 這個(gè)地址分成兩個(gè)部分,前一部分代表網(wǎng)絡(luò),后一部分代表主機(jī)。 比如,IP地址14.215.177.39,這是一個(gè)32位的地址,假定它的網(wǎng)絡(luò)部分是前24位(14.215.177),那么主機(jī)部分就是后8位(最后的那個(gè)1)。處于同一個(gè)子網(wǎng)絡(luò)的電腦,它們IP地址的網(wǎng)絡(luò)部分必定是相同的,也就是說14.215.177.2應(yīng)該與14.215.177.1處在同一個(gè)子網(wǎng)絡(luò)。 但是,問題在于單單從IP地址,我們無法判斷網(wǎng)絡(luò)部分。還是以14.215.177.39為例,它的網(wǎng)絡(luò)部分,到底是前24位,還是前16位,甚至前28位,從IP地址上是看不出來的。那么,怎樣才能從IP地址,判斷兩臺(tái)計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)呢?這就要用到另一個(gè)參數(shù) 子網(wǎng)掩碼:
NAT我們知道,IPv4的地址只有32位,地球上網(wǎng)民數(shù)量已經(jīng)遠(yuǎn)遠(yuǎn)超出這個(gè)數(shù)字,那么,為啥至今還沒出現(xiàn)地址枯竭呢? 因?yàn)槲覀冞€有一些技術(shù),可以變相的緩解地址不足,比如NAT技術(shù)。
(2) IPv6定義:
IPv6號(hào)段劃分和前綴表示法IPv6擁有128位巨大的地址空間,對(duì)于那么大的空間,也不是隨意的劃分,而是使用按照bit位進(jìn)行號(hào)段劃分。 IPv6地址結(jié)構(gòu)如下圖 ![]() 例如RFC4291中定義了n=48, m=16,也就是子網(wǎng)和接口ID與各占64位。 IPv6沒有子網(wǎng)掩碼mask的概念,它支持的是子網(wǎng)前綴標(biāo)識(shí)方法。 使用IPv6地址/前綴長度表示方法,例如:
可以看到,一個(gè)IPv6的地址有子網(wǎng)前綴+接口ID構(gòu)成,子網(wǎng)前綴由地址分配和管理機(jī)構(gòu)定義和分配,而接口ID可以由各操作系統(tǒng)實(shí)現(xiàn)生成。 IPv6優(yōu)點(diǎn)IPv6是用來解決IPv4地址枯竭問題的,IPv4地址為32位,而IPv6地址為128位 除了地址數(shù)量以外,IPv6還有很多優(yōu)點(diǎn),例如:
(3)IPv4和IPv6的區(qū)別
4) IP協(xié)議簡(jiǎn)單總結(jié)如上所述,IP協(xié)議的作用主要有兩個(gè):
3、IP數(shù)據(jù)包根據(jù)IP協(xié)議發(fā)送的數(shù)據(jù),就叫做IP數(shù)據(jù)包。我們直接把IP數(shù)據(jù)包直接放進(jìn)以太網(wǎng)數(shù)據(jù)包的'數(shù)據(jù)'部分,不用修改以太網(wǎng)的規(guī)格。這就是互聯(lián)網(wǎng)分層結(jié)構(gòu)的好處:上層的變動(dòng)完全不涉及下層的結(jié)構(gòu)。 具體來說,IP數(shù)據(jù)包也分為標(biāo)頭和數(shù)據(jù)兩個(gè)部分:其中,標(biāo)頭范圍為20-60字節(jié)(IPv6固定為40字節(jié)),整個(gè)數(shù)據(jù)包的總長度最大為65535字節(jié)。因此,理論上,一個(gè)IP數(shù)據(jù)包的數(shù)據(jù)部分,最長為65515字節(jié)。 ![]() 如圖所示,標(biāo)頭中20字節(jié)是固定不變的,它包含了版本、長度、IP地址等信息,另外還有可變部分的標(biāo)頭可選。而數(shù)據(jù)則是IP數(shù)據(jù)包的具體內(nèi)容。 將它放入以太網(wǎng)數(shù)據(jù)包后,以太網(wǎng)數(shù)據(jù)包就變成了下面這樣: ![]() 在以太網(wǎng)協(xié)議中,以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最長只有1500字節(jié)。因此,如果IP數(shù)據(jù)包超過了1500字節(jié),它就需要分割成幾個(gè)以太網(wǎng)數(shù)據(jù)包,分開發(fā)送了。 4、ARP協(xié)議關(guān)于網(wǎng)絡(luò)層,還有最后一點(diǎn)需要說明。因?yàn)镮P數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包里發(fā)送的,所以我們必須同時(shí)知道兩個(gè)地址,一個(gè)是對(duì)方的MAC地址,另一個(gè)是對(duì)方的IP地址。通常情況下,對(duì)方的IP地址是已知的,但是我們不知道它的MAC地址。所以,我們需要一種機(jī)制,能夠從IP地址得到MAC地址。 這里又可以分成兩種情況:
總之,有了ARP協(xié)議之后,我們就可以得到同一個(gè)子網(wǎng)絡(luò)內(nèi)的主機(jī)MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一臺(tái)主機(jī)之上了。 ARP攻擊ARP攻擊是利用ARP協(xié)議設(shè)計(jì)時(shí)缺乏安全驗(yàn)證漏洞來實(shí)現(xiàn)的,通過偽造ARP數(shù)據(jù)包來竊取合法用戶的通信數(shù)據(jù),造成影響網(wǎng)絡(luò)傳輸速率和盜取用戶隱私信息等嚴(yán)重危害。 ARP攻擊主要是存在于局域網(wǎng)網(wǎng)絡(luò)中,局域網(wǎng)中若有一臺(tái)計(jì)算機(jī)感染ARP木馬,則感染該ARP木馬的系統(tǒng)將會(huì)試圖通過“ARP欺騙”手段截獲所在網(wǎng)絡(luò)內(nèi)其它計(jì)算機(jī)的通信信息,并因此造成網(wǎng)內(nèi)其它計(jì)算機(jī)的通信故障。 局域網(wǎng)中比較常見的ARP攻擊包括:上網(wǎng)時(shí)斷時(shí)續(xù),拷貝文件無法完成,局域網(wǎng)內(nèi)的ARP包激增。出現(xiàn)不正常的MAC地址,MAC地址對(duì)應(yīng)多個(gè)IP地址,網(wǎng)絡(luò)數(shù)據(jù)發(fā)不出去了,網(wǎng)上發(fā)送信息被竊取,個(gè)人PC中毒局域網(wǎng)內(nèi)MAC地址泛洪使MAC地址緩存表溢出等問題。據(jù)包的協(xié)議地址不匹配,從而在網(wǎng)絡(luò)中產(chǎn)生大量的ARP。 在局域網(wǎng)環(huán)境中,ARP攻擊是主要的安全威脅,在傳統(tǒng)網(wǎng)絡(luò)中主要是通過靜態(tài)綁定的方式來解決,但是這種方式限制了網(wǎng)絡(luò)擴(kuò)展的易用性。 五、傳輸層1、傳輸層的由來有了MAC地址和IP地址,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺(tái)主機(jī)上建立通信。 接下來的問題是,同一臺(tái)主機(jī)上有許多程序都需要用到網(wǎng)絡(luò),比如,你一邊瀏覽網(wǎng)頁,一邊與朋友在線聊天。當(dāng)一個(gè)數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來的時(shí)候,你怎么知道,它是表示網(wǎng)頁的內(nèi)容,還是表示在線聊天的內(nèi)容? 也就是說,我們還需要一個(gè)參數(shù),表示這個(gè)數(shù)據(jù)包到底供哪個(gè)程序(進(jìn)程)使用。這個(gè)參數(shù)就叫做端口(port),它其實(shí)是每一個(gè)使用網(wǎng)卡的程序的編號(hào)。每個(gè)數(shù)據(jù)包都發(fā)到主機(jī)的特定端口,所以不同的程序就能取到自己所需要的數(shù)據(jù)。 端口是0到65535之間的一個(gè)整數(shù),正好16個(gè)二進(jìn)制位。0到1023的端口被系統(tǒng)占用,用戶只能選用大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天,應(yīng)用程序會(huì)隨機(jī)選用一個(gè)端口,然后與服務(wù)器的相應(yīng)端口聯(lián)系。 傳輸層的功能,就是建立端口到端口的通信。相比之下,網(wǎng)絡(luò)層的功能是建立主機(jī)到主機(jī)的通信。只要確定主機(jī)和端口,我們就能實(shí)現(xiàn)程序之間的交流。因此,Unix系統(tǒng)就把主機(jī)+端口,叫做套接字(socket)。有了它,就可以進(jìn)行網(wǎng)絡(luò)應(yīng)用程序開發(fā)了。 2、UDP協(xié)議:用戶數(shù)據(jù)報(bào)協(xié)議現(xiàn)在,我們必須在數(shù)據(jù)包中加入端口信息,這就需要新的協(xié)議。最簡(jiǎn)單的實(shí)現(xiàn)叫做UDP協(xié)議,它的格式幾乎就是在數(shù)據(jù)前面,加上端口號(hào)。 UDP數(shù)據(jù)包,也是由標(biāo)頭和數(shù)據(jù)兩部分組成: ![]() 如圖所示,UDP的標(biāo)頭固定為8字節(jié),包含了16位源端口和16位目的端口,以及16位的UDP長度和16位的UDP檢驗(yàn)和。然后,把整個(gè)UDP數(shù)據(jù)包放入IP數(shù)據(jù)包的數(shù)據(jù)部分,而前面說過,IP數(shù)據(jù)包又是放在以太網(wǎng)數(shù)據(jù)包之中的,所以整個(gè)以太網(wǎng)數(shù)據(jù)包現(xiàn)在變成了下面這樣: ![]() UDP數(shù)據(jù)包非常簡(jiǎn)單,標(biāo)頭部分一共只有8個(gè)字節(jié),總長度不超過65,535字節(jié),正好放進(jìn)一個(gè)IP數(shù)據(jù)包。 UDP中一個(gè)包的大小最大能多大
3、TCP協(xié)議:傳輸控制協(xié)議UDP協(xié)議的優(yōu)點(diǎn)是比較簡(jiǎn)單,容易實(shí)現(xiàn),但是缺點(diǎn)是可靠性較差,一旦數(shù)據(jù)包發(fā)出,無法知道對(duì)方是否收到。為了解決這個(gè)問題,提高網(wǎng)絡(luò)可靠性,TCP協(xié)議就誕生了。這個(gè)協(xié)議非常復(fù)雜,但可以近似認(rèn)為,它就是有確認(rèn)機(jī)制的UDP協(xié)議,每發(fā)出一個(gè)數(shù)據(jù)包都要求確認(rèn)。如果有一個(gè)數(shù)據(jù)包遺失,就收不到確認(rèn),發(fā)出方就知道有必要重發(fā)這個(gè)數(shù)據(jù)包了。 因此,TCP協(xié)議能夠確保數(shù)據(jù)不會(huì)遺失。它的缺點(diǎn)是過程復(fù)雜、實(shí)現(xiàn)困難、消耗較多的資源。 ![]() 如圖所示,TCP標(biāo)頭在20-60字節(jié)之間,除了源端口號(hào)和目的端口號(hào)之外,還包含了序號(hào)、確認(rèn)號(hào)等各種信息,用于保證可靠連接與數(shù)據(jù)重發(fā)。 TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣,都是內(nèi)嵌在IP數(shù)據(jù)包的數(shù)據(jù)部分。TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡(luò)的效率,通常TCP數(shù)據(jù)包的長度不會(huì)超過IP數(shù)據(jù)包的長度,以確保單個(gè)TCP數(shù)據(jù)包不必再分割。 ![]() 六、應(yīng)用層應(yīng)用程序收到傳輸層的數(shù)據(jù),接下來就要進(jìn)行解讀。由于互聯(lián)網(wǎng)是開放架構(gòu),數(shù)據(jù)來源五花八門,必須事先規(guī)定好格式,否則根本無法解讀。應(yīng)用層的作用,就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式。 舉例來說,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email、WWW、FTP等等。那么,必須有不同協(xié)議規(guī)定電子郵件、網(wǎng)頁、FTP數(shù)據(jù)的格式,這些應(yīng)用程序協(xié)議就構(gòu)成了應(yīng)用層。這是最高的一層,直接面對(duì)用戶。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的數(shù)據(jù)部分。 因此,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣: ![]() 結(jié)語我只想說,讀到這里的,都是 點(diǎn)個(gè) 來源于:https:///post/6876860213991833613#heading-15 |
|