日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

一層層剝開網(wǎng)絡(luò)通信協(xié)議,太長了

 liqualife 2020-10-02

前言

這是一篇很長很長的文章,挑戰(zhàn)你的忍耐極限!

一、理論五層模型

互聯(lián)網(wǎng)的實(shí)現(xiàn),分為好幾層,每一層都有自己特有的功能,而且每一層都靠下一層支持。用戶接觸到的,只是最上面的一層,我們稱為應(yīng)用層,要理解互聯(lián)網(wǎng),必須從最下層開始,自下而上的理解每一層的功能。

我們常見的網(wǎng)絡(luò)模型,有以下三種:

  • OSI七層模型

  • 理論五層模型

  • TCP/IP四層模型

它們之間的關(guān)系如下圖所示

其中,理論五層模型是綜合OSI七層TCP/IP四層的優(yōu)點(diǎn),采用的一種原理體系結(jié)構(gòu)。我們接下來的探討也是基于理論五層模型來展開的。

理論五層模型的結(jié)構(gòu)如下圖

各層的作用如下:

  • 應(yīng)用層

    • 直接為用戶的應(yīng)用進(jìn)程提供服務(wù)
    • 常見的協(xié)議有HTTP、HTTPS、SMTP、TELNET
  • 傳輸層

    • 傳輸層任務(wù)是為應(yīng)用層進(jìn)行通信的兩個(gè)進(jìn)程之間提供一個(gè)可靠的端到端服務(wù),使它們看不到傳輸層以下的數(shù)據(jù)通信的細(xì)節(jié)。
    • 端到端意思是數(shù)據(jù)來自某個(gè)端口,再傳送給指定的端口
    • 端口:一個(gè)0到65535間的整數(shù),用來指定特定應(yīng)用程序
    • 常見的協(xié)議有TCPUDP
  • 網(wǎng)絡(luò)層

    • 網(wǎng)路層的任務(wù)是選擇合適的路由,使分組能夠準(zhǔn)確的按照地址找到目的地,并交付給目的地的傳輸層。
    • 網(wǎng)絡(luò)層協(xié)議為IP協(xié)議
  • 數(shù)據(jù)鏈路層

    • 數(shù)據(jù)鏈路層是將數(shù)據(jù)組合為一個(gè)個(gè)的,確定電信號(hào)的數(shù)據(jù)包格式。
    • 數(shù)據(jù)鏈路層的協(xié)議為以太網(wǎng)協(xié)議
  • 物理層

    • 物理層定義了把電腦之間連接起來所用設(shè)備的標(biāo)準(zhǔn),在網(wǎng)絡(luò)中的網(wǎng)絡(luò)信號(hào)都是通過0和1的電信號(hào)進(jìn)行傳輸?shù)摹?/section>

簡(jiǎn)單說,越下面的層,越靠近硬件;越上面的層,越靠近用戶。

協(xié)議是什么

每一層都是為了完成某一種功能。為了實(shí)現(xiàn)這些功能,需要遵守一些共同的規(guī)則,這些規(guī)則就是協(xié)議(protocol)。

互聯(lián)網(wǎng)的每一層,都定義了很多協(xié)議。這些協(xié)議的總稱,叫做互聯(lián)網(wǎng)協(xié)議(Internet Protocol Suite),它們是互聯(lián)網(wǎng)的核心。

下面的內(nèi)容中,我們通過每一層的功能的介紹,對(duì)每一層中的主要協(xié)議所起作用進(jìn)行講解。

二、物理層

電腦要進(jìn)行聯(lián)網(wǎng),需要把電腦通過各種設(shè)備連接進(jìn)網(wǎng)絡(luò),設(shè)備有光纜、電纜、雙絞線、無限電波等方式。

這就是物理層,它就是把電腦連接起來的物理手段,它主要規(guī)定了網(wǎng)絡(luò)的一些電氣特性,作用是傳輸0和1的電信號(hào)。

三、數(shù)據(jù)鏈路層

1.定義

物理層是用于傳輸信號(hào)的介質(zhì),它傳輸?shù)氖?code>0和1的電信號(hào)。但是關(guān)于電信號(hào)如何分組,每個(gè)信號(hào)位有何意義并沒有規(guī)定。

這就是數(shù)據(jù)鏈路層的功能,它在物理層的上方,確定了0和1的分組方式,用于兩個(gè)設(shè)備(同一種數(shù)據(jù)鏈路結(jié)點(diǎn))之間進(jìn)行信息傳遞。

2.以太網(wǎng)協(xié)議

早期的時(shí)候,每家公司都有自己的電信號(hào)分組方式。逐漸地,一種叫做以太網(wǎng)(Ethernet)的協(xié)議,占據(jù)了主導(dǎo)地位。

以太網(wǎng)規(guī)定,一組電信號(hào)構(gòu)成一個(gè)數(shù)據(jù)包,叫做幀(frame),每一幀分為兩個(gè)部分:標(biāo)頭(Head)數(shù)據(jù)(Data)

  • 標(biāo)頭和數(shù)據(jù)

    標(biāo)頭包含數(shù)據(jù)包的一些說明項(xiàng),比如發(fā)送者、接收者、數(shù)據(jù)類型等;數(shù)據(jù)則是數(shù)據(jù)包具體內(nèi)容。

  • 標(biāo)頭和數(shù)據(jù)的限制

    標(biāo)頭的長度,固定為18字節(jié)數(shù)據(jù)的長度,最短為46字節(jié),最長為1500字節(jié)。

    因此,整個(gè)最短為64字節(jié),最長為1518字節(jié)。如果數(shù)據(jù)很長,就必須分割成多個(gè)幀發(fā)送。

MTU(最大傳輸單元)

MTU是鏈路層對(duì)物理層的限制。

  • 以太網(wǎng)幀數(shù)據(jù)段長度規(guī)定為46-1500字節(jié),這個(gè)最大值1500字節(jié)稱為以太網(wǎng)的最大傳輸單元(MTU),不同的網(wǎng)絡(luò)類型有不同的MTU。

  • 如果一個(gè)數(shù)據(jù)包從以太網(wǎng)路由到撥號(hào)鏈路上,數(shù)據(jù)包長度大于撥號(hào)鏈路的MTU,則需要對(duì)數(shù)據(jù)包進(jìn)行分片。

MTU對(duì)IP協(xié)議的影響

由于鏈路層存在MTU的限制,導(dǎo)致網(wǎng)絡(luò)層的報(bào)文如果超過1500字節(jié),就必要要對(duì)其進(jìn)行分片發(fā)送。

  • 將較大的IP包分成多個(gè)小包,并給每個(gè)小包打上標(biāo)簽,每個(gè)小包IP協(xié)議頭的16位標(biāo)識(shí)(id)都是相同的,這樣在重組的時(shí)候就知道這個(gè)小包來自于哪個(gè)報(bào)文。

  • 每個(gè)小包的IP協(xié)議頭的3位標(biāo)志字段中, 第2位MF置為0, 表示允許分片, 第3位DF來表示結(jié)束標(biāo)記(當(dāng)前是否是后一個(gè)小包, 是的話置為1, 否則置為0)。

  • 到達(dá)對(duì)端時(shí)再將這些小包按順序重組, 拼裝到一起返回給傳輸層。一旦這些小包中任意一個(gè)小包丟失,接收端的重組就會(huì)失敗,但是IP層不會(huì)負(fù)責(zé)重新傳輸數(shù)據(jù)。

MTU對(duì)UDP協(xié)議的影響

  • 只要UDP報(bào)文中攜帶的數(shù)據(jù)超過過1472(1500 - 20(IP首部) - 8(UDP首部)),那么就會(huì)在網(wǎng)絡(luò)層分成多個(gè)IP數(shù)據(jù)報(bào)。

  • 這些IP數(shù)據(jù)報(bào)有任意一個(gè)丟失,都會(huì)引起接收端網(wǎng)絡(luò)層重組失敗。那么這就意味著,如果UDP數(shù)據(jù)報(bào)在網(wǎng)絡(luò)層被分片,整個(gè)數(shù)據(jù)被丟失的概率就大大增加。

  • 在局域網(wǎng)環(huán)境下,建議UDP數(shù)據(jù)控制在1472字節(jié)以下;在Internet環(huán)境下,建議將UDP數(shù)據(jù)控制在548字節(jié)以下。

MTU對(duì)TCP協(xié)議的影響

  • TCP報(bào)文的長度不能無限大,依然要受制于MTU, TCP的單個(gè)數(shù)據(jù)報(bào)的最大消息長度稱為MSS(Max Segment Size)。

  • TCP在建立連接時(shí),首先會(huì)和對(duì)方協(xié)商MSS的大小(也只能在三次握手時(shí)協(xié)商,否則就是默認(rèn)值536字節(jié))。理想的情況下,MSS的值正好是在IP不會(huì)被分片處理的大長度(這個(gè)長度仍然是受制于數(shù)據(jù)鏈路層的MTU)

  • 雙方在發(fā)送SYN的時(shí)候會(huì)在TCP頭部寫入自己能支持的MSS值。然后雙方得知對(duì)方的MSS值之后選擇較小的作為最終的MSS。MSS的值就是在TCP首部的40字節(jié)變長選項(xiàng)中(kind=2)。

  • MSS = MTU - TCP首部 - IP首部,既TCP報(bào)文的數(shù)據(jù)長度。

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.廣播

定義地址只是第一步,后面還有更多的步驟:

  • 1)首先:一塊網(wǎng)卡怎么會(huì)知道另一塊網(wǎng)卡的MAC地址?

    回答是有一種ARP協(xié)議,可以解決這個(gè)問題。這個(gè)在本文網(wǎng)絡(luò)層中介紹,這里只需要知道,以太網(wǎng)數(shù)據(jù)包必須知道接收方的MAC地址,然后才能發(fā)送。

  • 2)其次:就算有了MAC地址,系統(tǒng)怎樣才能把數(shù)據(jù)包準(zhǔn)確送到接收方?

    回答是以太網(wǎng)采用了一種很原始的方式,它不是把數(shù)據(jù)包準(zhǔn)確送到接收方,而是向本網(wǎng)絡(luò)內(nèi)所有計(jì)算機(jī)發(fā)送,讓每臺(tái)計(jì)算機(jī)自己判斷,是否為接收方。

上圖中,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

  • IPv4規(guī)定,網(wǎng)絡(luò)地址由32個(gè)二進(jìn)制位組成;

  • 習(xí)慣上,我們用分成四段的十進(jìn)制數(shù)表示IP地址,從0.0.0.0一直到255.255.255.255。

互聯(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)掩碼(subnet mask)。

子網(wǎng)掩碼:

  • 所謂子網(wǎng)掩碼,就是表示子網(wǎng)絡(luò)特征的一個(gè)參數(shù)。它在形式上等同于IP地址,也是一個(gè)32位二進(jìn)制數(shù)字,它的網(wǎng)絡(luò)部分全部為1,主機(jī)部分全部為0。比如,IP地址172.16.254.1,如果已知網(wǎng)絡(luò)部分是前24位,主機(jī)部分是后8位,那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000,寫成十進(jìn)制就是255.255.255.0。

  • 知道子網(wǎng)掩碼,我們就能判斷,任意兩個(gè)IP地址是否處在同一個(gè)子網(wǎng)絡(luò)。方法是將兩個(gè)IP地址與子網(wǎng)掩碼分別進(jìn)行按位與運(yùn)算(兩個(gè)數(shù)位都為1,運(yùn)算結(jié)果為1,否則為0),然后比較結(jié)果是否相同,如果是的話,就表明它們?cè)谕粋€(gè)子網(wǎng)絡(luò)中,否則就不是。

NAT

我們知道,IPv4的地址只有32位,地球上網(wǎng)民數(shù)量已經(jīng)遠(yuǎn)遠(yuǎn)超出這個(gè)數(shù)字,那么,為啥至今還沒出現(xiàn)地址枯竭呢?

因?yàn)槲覀冞€有一些技術(shù),可以變相的緩解地址不足,比如NAT技術(shù)。

  • 每一個(gè)小的局域網(wǎng),都會(huì)使用一個(gè)網(wǎng)段的私網(wǎng)地址,在與外界連接時(shí),再變換成公網(wǎng)地址。這樣一來,幾十個(gè)或幾百個(gè)電腦,都只需要一個(gè)公網(wǎng)地址。

  • 甚至還可以私網(wǎng)套私網(wǎng),NAT套NAT,一層一層套。這樣一來,大大節(jié)約了公網(wǎng)IP地址數(shù)量。正因?yàn)槿绱?,才讓我們“續(xù)命”到了今天,不至于無法上網(wǎng)。

  • 但是,NAT這種方式也有很多缺點(diǎn),雖然私網(wǎng)地址訪問互聯(lián)網(wǎng)地址方便,但互聯(lián)網(wǎng)地址訪問私網(wǎng)地址就困難了。很多服務(wù),都會(huì)受到限制,你只能通過復(fù)雜的設(shè)置才能解決,也會(huì)影響網(wǎng)絡(luò)的處理效率。

(2) IPv6

定義:

  • IPv6地址由八組、每組四位16進(jìn)制數(shù)字組成,每組之間由:來分隔。

  • IPv6地址支持壓縮前導(dǎo)零的表示方法,如圖中的地址可寫為:2001:D12:0:0:2AA:987:FE29:9871

  • 當(dāng)冒號(hào)十六進(jìn)制格式中出現(xiàn)連續(xù)幾段數(shù)值0的位段時(shí),這些段可以壓縮為雙冒號(hào)(::)的表示,所以我們得到了最終的簡(jiǎn)化格式:2001:D12::2AA:987:FE29:9871

  • 注意:雙冒號(hào)只能出現(xiàn)一次

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地址/前綴長度表示方法,例如:

  • 2001:C3:0:2C6A::/64表示一個(gè)子網(wǎng);

  • 而2001:C3:0:2C6A:C9B4:FF12:48BC:1A22/64表示該子網(wǎng)下的一個(gè)節(jié)點(diǎn)地址。

可以看到,一個(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),例如:

  • IPv6使用更小的路由表。使得路由器轉(zhuǎn)發(fā)數(shù)據(jù)包的速度更快;

  • IPv6增加了增強(qiáng)的組播支持以及對(duì)流的控制,對(duì)多媒體應(yīng)用很有利,對(duì)服務(wù)質(zhì)量(QoS)控制也很有利;

  • IPv6加入了對(duì)自動(dòng)配置的支持。這是對(duì)DHCP協(xié)議的改進(jìn)和擴(kuò)展,使得網(wǎng)絡(luò)(尤其是局域網(wǎng))的管理更加方便和快捷;

  • IPv6具有更高的安全性。用戶可以對(duì)網(wǎng)絡(luò)層的數(shù)據(jù)進(jìn)行加密并對(duì)IP報(bào)文進(jìn)行校驗(yàn),極大地增強(qiáng)了網(wǎng)絡(luò)的安全性;

  • IPv6具有更好的擴(kuò)容能力。如果新的技術(shù)或應(yīng)用需要時(shí),IPV6允許協(xié)議進(jìn)行擴(kuò)充;

  • IPv6具有更好的頭部格式。IPV6使用新的頭部格式,就簡(jiǎn)化和加速了路由選擇過程,提高了效率;

(3)IPv4和IPv6的區(qū)別

  • 報(bào)文中,IPv6數(shù)據(jù)鏈路層的type字段標(biāo)識(shí)為0x86dd,IPv4數(shù)據(jù)鏈路層的type字段標(biāo)識(shí)為:0x0800

  • IPv6報(bào)文頭部固定為40字節(jié),IPv4報(bào)文頭部是20到60字節(jié)。這個(gè)意味著,寫代碼處理IPv6數(shù)據(jù)報(bào)文的效率會(huì)提高很多

  • IPv6的報(bào)文頭部取消了校驗(yàn)和字段,提高了路由器的轉(zhuǎn)發(fā)效率。不過,值得一提的是,在IPv6協(xié)議下,傳輸層協(xié)議UDP、TCP是強(qiáng)制需要進(jìn)行校驗(yàn)和的(IPv4是可選的)

  • 當(dāng)IPv6數(shù)據(jù)報(bào)文承載的是上層協(xié)議ICMPv6、TCP、UDP等的時(shí)候,Next Header的值分別為58、6、17,這個(gè)時(shí)候和IPv4報(bào)文頭部中的Protocol字段很類似

  • 當(dāng)不是以上3種協(xié)議類型的時(shí)候,IPv6報(bào)文頭部緊接的是擴(kuò)展頭部。擴(kuò)展頭部是IPv6引入的一個(gè)新的概念,每個(gè)IPv6的數(shù)據(jù)報(bào)文可以承載0個(gè)或多個(gè)擴(kuò)展頭部,擴(kuò)展頭部通過鏈表的形式組織起來。當(dāng)IPv6數(shù)據(jù)報(bào)文承載著擴(kuò)展頭部的時(shí)候,Next Header的數(shù)值為擴(kuò)展頭部的類型值。為什么要引入擴(kuò)展頭部這個(gè)概念,這里也是IPv6對(duì)IPv4改進(jìn)的一個(gè)方面,用擴(kuò)展頭部取代了IPv4的可選項(xiàng)信息,精簡(jiǎn)了IPv6的頭部,增強(qiáng)了IPv6的擴(kuò)展性。當(dāng)發(fā)送一個(gè)分片IPv6數(shù)據(jù)報(bào)文的時(shí)候,IPv6使用的是擴(kuò)展頭部的形式組織各個(gè)分片的信息,如圖IPv6報(bào)文頭部Next Header字段值為44表示存在擴(kuò)展頭部,擴(kuò)展頭部是IPv6分片數(shù)據(jù)信息。對(duì)比IPv4,分片信息是記錄在IPv4報(bào)文頭部的分片字段中。

4) IP協(xié)議簡(jiǎn)單總結(jié)

如上所述,IP協(xié)議的作用主要有兩個(gè):

  • 為每一臺(tái)計(jì)算機(jī)分配IP地址

  • 確定哪些地址在同一個(gè)子網(wǎng)絡(luò)

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地址。

這里又可以分成兩種情況:

  • 第一種情況:如果兩臺(tái)主機(jī)不在同一個(gè)子網(wǎng)絡(luò),那么事實(shí)上沒有辦法得到對(duì)方的MAC地址,只能把數(shù)據(jù)包傳送到兩個(gè)子網(wǎng)絡(luò)連接處的網(wǎng)關(guān)(gateway),讓網(wǎng)關(guān)去處理;

  • 第二種情況:如果兩臺(tái)主機(jī)在同一個(gè)子網(wǎng)絡(luò),那么我們可以用ARP協(xié)議,得到對(duì)方的MAC地址。ARP協(xié)議也是發(fā)出一個(gè)數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中),其中包含它所要查詢主機(jī)的IP地址,在對(duì)方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個(gè)廣播地址。它所在子網(wǎng)絡(luò)的每一臺(tái)主機(jī),都會(huì)收到這個(gè)數(shù)據(jù)包,從中取出IP地址,與自身的IP地址進(jìn)行比較。如果兩者相同,都做出回復(fù),向?qū)Ψ綀?bào)告自己的MAC地址,否則就丟棄這個(gè)包。

總之,有了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è)包的大小最大能多大

  • 局域網(wǎng)環(huán)境下,建議將UDP數(shù)據(jù)控制在1472字節(jié)以下

    • 以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的,這個(gè)1500字節(jié)被稱為鏈路層的MTU(最大傳輸單元)。但這并不是指鏈路層的長度被限制在1500字節(jié),其實(shí)這這個(gè)MTU指的是鏈路層的數(shù)據(jù)區(qū),并不包括鏈路層的首部和尾部的18個(gè)字節(jié)。

    • 所以,事實(shí)上這個(gè)1500字節(jié)就是網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的長度限制。因?yàn)镮P數(shù)據(jù)報(bào)的首部最小為20字節(jié),所以IP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長度最大為1480字節(jié)。而這個(gè)1480字節(jié)就是用來放TCP傳來的TCP報(bào)文段或UDP傳來的UDP數(shù)據(jù)報(bào)的。

    • 又因?yàn)閁DP數(shù)據(jù)報(bào)的首部8字節(jié),所以UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長度為1472字節(jié)。這個(gè)1472字節(jié)就是我們可以使用的字節(jié)數(shù)。

    • 當(dāng)我們發(fā)送的UDP數(shù)據(jù)大于1472的時(shí)候會(huì)怎樣呢?這也就是說IP數(shù)據(jù)報(bào)大于1500字節(jié),大于MTU,這個(gè)時(shí)候發(fā)送方IP層就需要分片(fragmentation)。把數(shù)據(jù)報(bào)分成若干片,使每一片都小于MTU,而接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)的重組。這樣就會(huì)多做許多事情,而更嚴(yán)重的是,由于UDP的特性,當(dāng)某一片數(shù)據(jù)傳送中丟失時(shí),接收方無法重組數(shù)據(jù)報(bào),將導(dǎo)致丟棄整個(gè)UDP數(shù)據(jù)報(bào)。

    • 因此,在普通的局域網(wǎng)環(huán)境下,我建議將UDP的數(shù)據(jù)控制在1472字節(jié)以下為好。

  • Internet編程時(shí),建議將UDP數(shù)據(jù)控制在548字節(jié)以下

    • 進(jìn)行Internet編程時(shí)則不同,因?yàn)镮nternet上的路由器可能會(huì)將MTU設(shè)為不同的值。如果我們假定MTU為1500來發(fā)送數(shù)據(jù),而途經(jīng)的某個(gè)網(wǎng)絡(luò)的MTU值小于1500字節(jié),那么系統(tǒng)將會(huì)使用一系列的機(jī)制來調(diào)整MTU值,使數(shù)據(jù)報(bào)能夠順利到達(dá)目的地,這樣就會(huì)做許多不必要的操作。

    • 鑒于Internet上的標(biāo)準(zhǔn)MTU值為576字節(jié),所以我建議在進(jìn)行Internet的UDP編程時(shí), 最好將UDP的數(shù)據(jù)長度控件在548字節(jié)(576-8-20)以內(nèi)。

    • ps:這句話貌似有問題,unix網(wǎng)絡(luò)編程第一卷里說:ipv4協(xié)議規(guī)定ip層的最小重組緩沖區(qū)大小為576!所以,建議udp包不要超過這個(gè)大小,而不是因?yàn)閕nternet的標(biāo)準(zhǔn)MTU是576!

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é)語

我只想說,讀到這里的,都是猛人!?。?/p>

點(diǎn)個(gè)在看在走吧!

來源于:https:///post/6876860213991833613#heading-15

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多