<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          網(wǎng)絡(luò)七層協(xié)議的通俗理解

          共 13971字,需瀏覽 28分鐘

           ·

          2021-05-17 09:20

          一、需求

          1.1、物理層

          作用是負(fù)責(zé)傳送0和1的電信號(hào)。

          科學(xué)家要解決的第一個(gè)問題是,兩個(gè)硬件之間怎么通信。具體就是一臺(tái)發(fā)些比特流,然后另一臺(tái)能收到。

          于是,科學(xué)家發(fā)明了物理層:主要定義物理設(shè)備標(biāo)準(zhǔn),如網(wǎng)線的接口類型、光纖的接口類型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉(zhuǎn)化為電流強(qiáng)弱來進(jìn)行傳輸,到達(dá)目的地后在轉(zhuǎn)化為1、0,也就是我們常說的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)。這一層的數(shù)據(jù)叫做比特。

          調(diào)制解調(diào)器是一種計(jì)算機(jī)硬件,它能把計(jì)算機(jī)的數(shù)字信號(hào)翻譯成可沿普通電話線傳送的模擬信號(hào),而這些模擬信號(hào)又可被線路另一端的另一個(gè)調(diào)制解調(diào)器接收,并譯成計(jì)算機(jī)可懂的語言。這一簡單過程完成了兩臺(tái)計(jì)算機(jī)間的通信。

          中繼器(RP repeater)工作于OSI的物理層,是局域網(wǎng)上所有節(jié)點(diǎn)的中心,它的作用是放大信號(hào),補(bǔ)償信號(hào)衰減,支持遠(yuǎn)距離的通信。中繼器。工作于物理層,只是起到擴(kuò)展傳輸距離的作用,對(duì)高層協(xié)議是透明的。實(shí)際上,通過中繼器連接起來的網(wǎng)絡(luò)相當(dāng)于同一條電線組成的更大的網(wǎng)絡(luò)。中繼器也能把不同傳輸介質(zhì)(10Base 5和10Base 2)的網(wǎng)絡(luò)連在一起,多用在數(shù)據(jù)鏈路層以上相同的局域網(wǎng)的互連中。

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

          確定了0和1的分組方式。

          現(xiàn)在通過電線我能發(fā)數(shù)據(jù)流了,但是,我還希望通過無線電波,通過其它介質(zhì)來傳輸。然后我還要保證傳輸過去的比特流是正確的,要有糾錯(cuò)功能。

          于是,發(fā)明了數(shù)據(jù)鏈路層:定義了如何讓格式化數(shù)據(jù)以進(jìn)行傳輸,以及如何讓控制對(duì)物理介質(zhì)的訪問。這一層通常還提供錯(cuò)誤檢測(cè)和糾正,以確保數(shù)據(jù)的可靠傳輸。

          1.3、網(wǎng)絡(luò)層

          它的作用是引進(jìn)一套新的地址,使得我們能夠區(qū)分不同的計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)。這套地址就叫做"網(wǎng)絡(luò)地址",簡稱"網(wǎng)址"。

          傳輸層只是解決了打包的問題。但是如果我有多臺(tái)計(jì)算機(jī),怎么找到我要發(fā)的那臺(tái)?或者,A要給F發(fā)信息,中間要經(jīng)過B,C,D,E,但是中間還有好多節(jié)點(diǎn)如K.J.Z.Y。我怎么選擇最佳路徑?這就是路由要做的事。

          于是,發(fā)明了網(wǎng)絡(luò)層。即路由器,交換價(jià)那些具有尋址功能的設(shè)備所實(shí)現(xiàn)的功能。這一層定義的是IP地址,通過IP地址尋址。所以產(chǎn)生了IP協(xié)議。

          1.4、傳輸層

          "傳輸層"的功能,就是建立"端口到端口"的通信。相比之下,"網(wǎng)絡(luò)層"的功能是建立"主機(jī)到主機(jī)"的通信。只要確定主機(jī)和端口,我們就能實(shí)現(xiàn)程序之間的交流。

          現(xiàn)在我能發(fā)正確的發(fā)比特流數(shù)據(jù)到另一臺(tái)計(jì)算機(jī)了,但是當(dāng)我發(fā)大量數(shù)據(jù)時(shí)候,可能需要好長時(shí)間,例如一個(gè)視頻格式的,網(wǎng)絡(luò)會(huì)中斷好多次(事實(shí)上,即使有了物理層和數(shù)據(jù)鏈路層,網(wǎng)絡(luò)還是經(jīng)常中斷,只是中斷的時(shí)間是毫秒級(jí)別的)。那么,我還須要保證傳輸大量文件時(shí)的準(zhǔn)確性。于是,我要對(duì)發(fā)出去的數(shù)據(jù)進(jìn)行封裝。就像發(fā)快遞一樣,一個(gè)個(gè)地發(fā)。

          于是,先發(fā)明了傳輸層(傳輸層在OSI模型中,是在網(wǎng)絡(luò)層上面)。例如TCP,是用于發(fā)大量數(shù)據(jù)的,我發(fā)了1萬個(gè)包出去,另一臺(tái)電腦就要告訴我是否接受到了1萬個(gè)包,如果缺了3個(gè)包,就告訴我是第1001,234,8888個(gè)包丟了,那我再發(fā)一次。這樣,就能保證對(duì)方把這個(gè)視頻完整接收了。

          例如UDP,是用于發(fā)送少量數(shù)據(jù)的。我發(fā)20個(gè)包出去,一般不會(huì)丟包,所以,我不管你收到多少個(gè)。在多人互動(dòng)游戲,也經(jīng)常用UDP協(xié)議,因?yàn)橐话愣际呛唵蔚男畔ⅲ矣袕V播的需求。如果用TCP,效率就很低,因?yàn)樗鼤?huì)不停地告訴主機(jī)我收到了20個(gè)包,或者我收到了18個(gè)包,再發(fā)我兩個(gè)!如果同時(shí)有1萬臺(tái)計(jì)算機(jī)都這樣做,那么用TCP反而會(huì)降低效率,還不如用UDP,主機(jī)發(fā)出去就算了,丟幾個(gè)包你就卡一下,算了,下次再發(fā)包你再更新。TCP協(xié)議是會(huì)綁定IP和端口的協(xié)議,下面會(huì)介紹IP協(xié)議。

          1.5、會(huì)話層

          會(huì)話層的作用就是建立和管理應(yīng)用程序之間的通信。

          現(xiàn)在我們已經(jīng)保證給正確的計(jì)算機(jī),發(fā)送正確的封裝過后的信息了。但是用戶級(jí)別的體驗(yàn)好不好?難道我每次都要調(diào)用TCP去打包,然后調(diào)用IP協(xié)議去找路由,自己去發(fā)?當(dāng)然不行,所以我們要建立一個(gè)自動(dòng)收發(fā)包,自動(dòng)尋址的功能。

          于是,發(fā)明了會(huì)話層。會(huì)話層的作用就是建立和管理應(yīng)用程序之間的通信。

          1.6、表示層

          幫我們解決不同系統(tǒng)之間的通信語法問題。

          現(xiàn)在我能保證應(yīng)用程序自動(dòng)收發(fā)包和尋址了。但是我要用Linux給window發(fā)包,兩個(gè)系統(tǒng)語法不一致,就像安裝包一樣,exe是不能在linux下用的,shell在window下也是不能直接運(yùn)行的。于是需要表示層(presentation),幫我們解決不同系統(tǒng)之間的通信語法問題。

          1.7、應(yīng)用層

          OK,現(xiàn)在所有必要條件都準(zhǔn)備好了,我們可以寫個(gè)android程序,web程序去實(shí)現(xiàn)需求把。


          二、概述

          2.1、五層模型

          互聯(lián)網(wǎng)的核心是一系列協(xié)議,總稱為"互聯(lián)網(wǎng)協(xié)議"(Internet Protocol Suite)。它們對(duì)電腦如何連接和組網(wǎng),做出了詳盡的規(guī)定。理解了這些協(xié)議,就理解了互聯(lián)網(wǎng)的原理。互聯(lián)網(wǎng)的實(shí)現(xiàn),分成好幾層。每一層都有自己的功能,就像建筑物一樣,每一層都靠下一層支持。用戶接觸到的,只是最上面的一層,根本沒有感覺到下面的層。要理解互聯(lián)網(wǎng),必須從最下層開始,自下而上理解每一層的功能。如何分層有不同的模型,有的模型分七層,有的分四層。我覺得,把互聯(lián)網(wǎng)分成五層,比較容易解釋。

          如上圖所示,最底下的一層叫做"實(shí)體層"(Physical Layer),最上面的一層叫做"應(yīng)用層"(Application Layer),中間的三層(自下而上)分別是"鏈接層"(Link Layer)、"網(wǎng)絡(luò)層"(Network Layer)和"傳輸層"(Transport Layer)。越下面的層,越靠近硬件;越上面的層,越靠近用戶。它們叫什么名字,其實(shí)并不重要。只需要知道,互聯(lián)網(wǎng)分成若干層就可以了。

          2.2、層與協(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)的核心,下面介紹每一層的功能,主要就是介紹每一層的主要協(xié)議。

          2.3、實(shí)體層

          我們從最底下的一層開始。電腦要組網(wǎng),第一件事要干什么?當(dāng)然是先把電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式。

          這就叫做"實(shí)體層",它就是把電腦連接起來的物理手段。它主要規(guī)定了網(wǎng)絡(luò)的一些電氣特性,作用是負(fù)責(zé)傳送0和1的電信號(hào)。

          三、鏈接層

          3.1、定義

          單純的0和1沒有任何意義,必須規(guī)定解讀方式:多少個(gè)電信號(hào)算一組?每個(gè)信號(hào)位有何意義?

          這就是"鏈接層"的功能,它在"實(shí)體層"的上方,確定了0和1的分組方式。

          3.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ù)包的一些說明項(xiàng),比如發(fā)送者、接受者、數(shù)據(jù)類型等等;"數(shù)據(jù)"則是數(shù)據(jù)包的具體內(nèi)容。

          "標(biāo)頭"的長度,固定為18字節(jié)。"數(shù)據(jù)"的長度,最短為46字節(jié),最長為1500字節(jié)。因此,整個(gè)"幀"最短為64字節(jié),最長為1518字節(jié)。如果數(shù)據(jù)很長,就必須分割成多個(gè)幀進(jìn)行發(fā)送。

          • IEEE 802.1── 通用網(wǎng)絡(luò)概念及網(wǎng)橋等

          • IEEE 802.2── 邏輯鏈路控制等

          • IEEE 802.3──以太網(wǎng)

          • IEEE 802.4──ARCnet總線結(jié)構(gòu)及訪 問方法,物理層規(guī)定

          • IEEE 802.5──Token Ring訪問方法及物理層 規(guī)定等

          • IEEE 802.6── 城域網(wǎng)的訪問方法及物理 層規(guī)定

          • IEEE 802.7── 寬帶局域網(wǎng)

          • IEEE 802.8── 光纖局域網(wǎng)(FDDI )

          • IEEE 802.9── ISDN局域網(wǎng)

          • IEEE 802.10── 網(wǎng)絡(luò)的安全

          • IEEE 802.11── 無線局域網(wǎng)

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

          MAC地址(Media Access Control Address),直譯為媒體訪問控制地址,也稱為局域網(wǎng)地址(LAN Address),以太網(wǎng)地址(Ethernet Address)或物理地址(Physical Address),它是一個(gè)用來確認(rèn)網(wǎng)上設(shè)備位置的地址。

          每塊網(wǎng)卡出廠的時(shí)候,都有一個(gè)全世界獨(dú)一無二的MAC地址,長度是48個(gè)二進(jìn)制位,通常用12個(gè)十六進(jìn)制數(shù)表示。

          前6個(gè)十六進(jìn)制數(shù)是廠商編號(hào),后6個(gè)是該廠商的網(wǎng)卡流水號(hào)。有了MAC地址,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。

          3.4、廣播

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

          • 首先,一塊網(wǎng)卡怎么會(huì)知道另一塊網(wǎng)卡的MAC地址?回答是有一種ARP協(xié)議,可以解決這個(gè)問題。這個(gè)留到后面介紹,這里只需要知道,以太網(wǎng)數(shù)據(jù)包必須知道接收方的MAC地址,然后才能發(fā)送。

          • 其次,就算有了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ī)自己判斷,是否為接收方。


          上圖中,1號(hào)計(jì)算機(jī)向2號(hào)計(jì)算機(jī)發(fā)送一個(gè)數(shù)據(jù)包,同一個(gè)子網(wǎng)絡(luò)的3號(hào)、4號(hào)、5號(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ù)了。

          計(jì)算機(jī)網(wǎng)絡(luò)的基本分類方法主要有兩種:

          • 一種是根據(jù)網(wǎng)絡(luò)所使用的傳輸技術(shù):計(jì)算機(jī)網(wǎng)絡(luò)可以分為廣播式網(wǎng)絡(luò)和點(diǎn)對(duì)點(diǎn)式網(wǎng)絡(luò)

          • 另一種是根據(jù)覆蓋范圍與規(guī)模:計(jì)算機(jī)網(wǎng)絡(luò)可以分為局域網(wǎng)、城域網(wǎng)和廣域網(wǎng)。

          3.5、PPP 協(xié)議

          在數(shù)據(jù)鏈路層有兩個(gè)重要的協(xié)議,即HDLC協(xié)議和PPP協(xié)議。 

          • 高級(jí)數(shù)據(jù)鏈路控制(High-Level Data Link Control或簡稱HDLC),是一個(gè)在同步網(wǎng)上傳輸數(shù)據(jù)、面向比特的數(shù)據(jù)鏈路層協(xié)議,它是由國際標(biāo)準(zhǔn)化組織制訂的。

            HDLC協(xié)議是面向比特的,而PPP協(xié)議則是面向字節(jié)的,HDLC的幀采用開頭跟結(jié)尾都是01111110作為幀的邊界,這樣當(dāng)接收方接收到一串比特的時(shí)候可以根據(jù)它來判斷該幀從哪里開始,到哪里結(jié)束,但是,假如在兩個(gè)標(biāo)志字段之間的比特串中恰好出現(xiàn)了01111110比特串,那該怎么辦呢,HDLC采用零比特填充法,所謂零比特填充法就是每當(dāng)出現(xiàn)5個(gè)1的時(shí)候就給它添加一個(gè)0進(jìn)去,而接收方接收到數(shù)據(jù)時(shí)凡出現(xiàn)5個(gè)1的時(shí)候去掉其后面一個(gè)0,這樣就能很好地確定幀。 

          • 點(diǎn)對(duì)點(diǎn)協(xié)議(英語:Point-to-Point Protocol,PPP)工作在數(shù)據(jù)鏈路層(以O(shè)SI參考模型的觀點(diǎn))。它通常用在兩節(jié)點(diǎn)間建立直接的連接,并可以提供連接認(rèn)證、傳輸加密(使用ECP,RFC 1968)以及壓縮。

            PPP協(xié)議本來也是跟HDLC協(xié)議一樣,把01111110作為邊界符(一般稱為標(biāo)志符),但是因?yàn)镻PP協(xié)議是面向字節(jié)的,所以這里不說01111110,而是說用7E作為邊界符。PPP協(xié)議在同步傳輸鏈路中也是采用零比特填充法,而在異步傳輸鏈路中則采用特殊的字符填充法。 

          • HDLC在控制字段中提供了可靠的確認(rèn)機(jī)制,因此它可以實(shí)現(xiàn)可靠傳輸,而PPP則不提供可靠傳輸,要靠上層實(shí)現(xiàn)保證其正確性,因此,曾經(jīng)在誤碼率比較高的鏈路中,HDLC曾起到了極大的作用,但隨著技術(shù)的發(fā)展,在數(shù)據(jù)鏈路層出現(xiàn)差錯(cuò)的概率不大,因此現(xiàn)在全世界使用得最多的數(shù)據(jù)鏈路層協(xié)議是PPP協(xié)議。

          3.6、交換機(jī)

          交換機(jī)(Switch)意為“開關(guān)”是一種用于電(光)信號(hào)轉(zhuǎn)發(fā)的網(wǎng)絡(luò)設(shè)備。它可以為接入交換機(jī)的任意兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)提供獨(dú)享的電信號(hào)通路。最常見的交換機(jī)是以太網(wǎng)交換機(jī)。交換機(jī)工作于OSI參考模型的第二層,即數(shù)據(jù)鏈路層。交換機(jī)內(nèi)部的CPU會(huì)在每個(gè)端口成功連接時(shí),通過將MAC地址和端口對(duì)應(yīng),形成一張MAC表。在今后的通訊中,發(fā)往該MAC地址的數(shù)據(jù)包將僅送往其對(duì)應(yīng)的端口,而不是所有的端口。因此,交換機(jī)可用于劃分?jǐn)?shù)據(jù)鏈路層廣播,即沖突域;但它不能劃分網(wǎng)絡(luò)層廣播,即廣播域。

          四、網(wǎng)絡(luò)層

          4.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)。

          ICMP是(Internet Control Message Protocol)Internet控制報(bào)文協(xié)議。它是TCP/IP協(xié)議族的一個(gè)子協(xié)議,用于在IP主機(jī)、路由器之間傳遞控制消息。控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對(duì)于用戶數(shù)據(jù)的傳遞起著重要的作用。常用的ping用到的就是該協(xié)議。

          這就導(dǎo)致了"網(wǎng)絡(luò)層"的誕生。它的作用是引進(jìn)一套新的地址,使得我們能夠區(qū)分不同的計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)。這套地址就叫做"網(wǎng)絡(luò)地址",簡稱"網(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地址。

          4.2、IP協(xié)議

          規(guī)定網(wǎng)絡(luò)地址的協(xié)議,叫做IP協(xié)議。它所定義的地址,就被稱為IP地址。

          目前,廣泛采用的是IP協(xié)議第四版,簡稱IPv4。這個(gè)版本規(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地址172.16.254.1,這是一個(gè)32位的地址,假定它的網(wǎng)絡(luò)部分是前24位(172.16.254),那么主機(jī)部分就是后8位(最后的那個(gè)1)。處于同一個(gè)子網(wǎng)絡(luò)的電腦,它們IP地址的網(wǎng)絡(luò)部分必定是相同的,也就是說172.16.254.2應(yīng)該與172.16.254.1處在同一個(gè)子網(wǎng)絡(luò)。

          但是,問題在于單單從IP地址,我們無法判斷網(wǎng)絡(luò)部分。還是以172.16.254.1為例,它的網(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)絡(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)行AND運(yùn)算(兩個(gè)數(shù)位都為1,運(yùn)算結(jié)果為1,否則為0),然后比較結(jié)果是否相同,如果是的話,就表明它們?cè)谕粋€(gè)子網(wǎng)絡(luò)中,否則就不是。

          比如,已知IP地址172.16.254.1和172.16.254.233的子網(wǎng)掩碼都是255.255.255.0,請(qǐng)問它們是否在同一個(gè)子網(wǎng)絡(luò)?兩者與子網(wǎng)掩碼分別進(jìn)行AND運(yùn)算,結(jié)果都是172.16.254.0,因此它們?cè)谕粋€(gè)子網(wǎng)絡(luò)。

          總結(jié)一下,IP協(xié)議的作用主要有兩個(gè),一個(gè)是為每一臺(tái)計(jì)算機(jī)分配IP地址,另一個(gè)是確定哪些地址在同一個(gè)子網(wǎng)絡(luò)。

          • A類IP地址:一個(gè)A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機(jī)地址組成。以0開頭, 第一個(gè)字節(jié)范圍:0~127(1.0.0.0 - 126.255.255.255);

          • B類IP地址:一個(gè)B類IP地址由2個(gè)字節(jié)的網(wǎng)絡(luò)地址和2個(gè)字節(jié)的主機(jī)地址組成。以10開頭, 第一個(gè)字節(jié)范圍:128~191(128.0.0.0 - 191.255.255.255);

          • C類IP地址:一個(gè)C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機(jī)地址組成。以110開頭, 第一個(gè)字節(jié)范圍:192~223(192.0.0.0 - 223.255.255.255);

          4.3、IP數(shù)據(jù)包

          根據(jù)IP協(xié)議發(fā)送的數(shù)據(jù),就叫做IP數(shù)據(jù)包。不難想象,其中必定包括IP地址信息。

          但是前面說過,以太網(wǎng)數(shù)據(jù)包只包含MAC地址,并沒有IP地址的欄位。那么是否需要修改數(shù)據(jù)定義,再添加一個(gè)欄位呢?

          回答是不需要,我們可以把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)頭"部分主要包括版本、長度、IP地址等信息,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內(nèi)容。它放進(jìn)以太網(wǎng)數(shù)據(jù)包后,以太網(wǎng)數(shù)據(jù)包就變成了下面這樣。

          IP數(shù)據(jù)包的"標(biāo)頭"部分的長度為20到60字節(jié),整個(gè)數(shù)據(jù)包的總長度最大為65,535字節(jié)。因此,理論上,一個(gè)IP數(shù)據(jù)包的"數(shù)據(jù)"部分,最長為65,515字節(jié)。前面說過,以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分,最長只有1500字節(jié)。因此,如果IP數(shù)據(jù)包超過了1500字節(jié),它就需要分割成幾個(gè)以太網(wǎng)數(shù)據(jù)包,分開發(fā)送了。

          4.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地址是已知的(后文會(huì)解釋),但是我們不知道它的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é)議:地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個(gè)TCP/IP協(xié)議。

          總之,有了ARP協(xié)議之后,我們就可以得到同一個(gè)子網(wǎng)絡(luò)內(nèi)的主機(jī)MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一臺(tái)主機(jī)之上了。

          五、傳輸層

          5.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ā)了。

          5.2、UDP協(xié)議

          現(xiàn)在,我們必須在數(shù)據(jù)包中加入端口信息,這就需要新的協(xié)議。最簡單的實(shí)現(xiàn)叫做UDP協(xié)議,它的格式幾乎就是在數(shù)據(jù)前面,加上端口號(hào)。

          UDP用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol),又稱使用者資料包協(xié)議,是一個(gè)簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議。

          UDP數(shù)據(jù)包,也是由"標(biāo)頭"和"數(shù)據(jù)"兩部分組成。

          "標(biāo)頭"部分主要定義了發(fā)出端口和接收端口,"數(shù)據(jù)"部分就是具體的內(nèi)容。然后,把整個(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ù)包非常簡單,"標(biāo)頭"部分一共只有8個(gè)字節(jié),總長度不超過65,535字節(jié),正好放進(jìn)一個(gè)IP數(shù)據(jù)包。

          5.3、TCP協(xié)議

          UDP協(xié)議的優(yōu)點(diǎ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ù)包了。

          傳輸控制協(xié)議(英語:Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。

          因此,TCP協(xié)議能夠確保數(shù)據(jù)不會(huì)遺失。它的缺點(diǎn)是過程復(fù)雜、實(shí)現(xiàn)困難、消耗較多的資源。

          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ù)包就變成下面這樣。

          至此,整個(gè)互聯(lián)網(wǎng)的五層結(jié)構(gòu),自下而上全部講完了。這是從系統(tǒng)的角度,解釋互聯(lián)網(wǎng)是如何構(gòu)成的。接下來,從用戶的角度,自上而下看看這個(gè)結(jié)構(gòu)是如何發(fā)揮作用,完成一次網(wǎng)絡(luò)數(shù)據(jù)交換的。

          七、一個(gè)小結(jié)

          7.1、小結(jié)

          先對(duì)前面的內(nèi)容,做一個(gè)小結(jié)。

          我們已經(jīng)知道,網(wǎng)絡(luò)通信就是交換數(shù)據(jù)包。電腦A向電腦B發(fā)送一個(gè)數(shù)據(jù)包,后者收到了,回復(fù)一個(gè)數(shù)據(jù)包,從而實(shí)現(xiàn)兩臺(tái)電腦之間的通信。數(shù)據(jù)包的結(jié)構(gòu),基本上是上圖那樣子。

          發(fā)送這個(gè)包,需要知道兩個(gè)地址:

          • 對(duì)方的MAC地址

          • 對(duì)方的IP地址

          有了這兩個(gè)地址,數(shù)據(jù)包才能準(zhǔn)確送到接收者手中。但是,前面說過,MAC地址有局限性,如果兩臺(tái)電腦不在同一個(gè)子網(wǎng)絡(luò),就無法知道對(duì)方的MAC地址,必須通過網(wǎng)關(guān)(gateway)轉(zhuǎn)發(fā)。

          上圖中,1號(hào)電腦要向4號(hào)電腦發(fā)送一個(gè)數(shù)據(jù)包。它先判斷4號(hào)電腦是否在同一個(gè)子網(wǎng)絡(luò),結(jié)果發(fā)現(xiàn)不是(后文介紹判斷方法),于是就把這個(gè)數(shù)據(jù)包發(fā)到網(wǎng)關(guān)A。網(wǎng)關(guān)A通過路由協(xié)議,發(fā)現(xiàn)4號(hào)電腦位于子網(wǎng)絡(luò)B,又把數(shù)據(jù)包發(fā)給網(wǎng)關(guān)B,網(wǎng)關(guān)B再轉(zhuǎn)發(fā)到4號(hào)電腦。

          1號(hào)電腦把數(shù)據(jù)包發(fā)到網(wǎng)關(guān)A,必須知道網(wǎng)關(guān)A的MAC地址。所以,數(shù)據(jù)包的目標(biāo)地址,實(shí)際上分成兩種情況:

          發(fā)送數(shù)據(jù)包之前,電腦必須判斷對(duì)方是否在同一個(gè)子網(wǎng)絡(luò),然后選擇相應(yīng)的MAC地址。接下來,我們就來看,實(shí)際使用中,這個(gè)過程是怎么完成的。

          7.2、網(wǎng)關(guān)協(xié)議

          • 內(nèi)部網(wǎng)關(guān)協(xié)議是在自治系統(tǒng)內(nèi)部運(yùn)行的路由協(xié)議,主要包括:RIP、EIGRP、OSPF、ISIS;

          • 外部網(wǎng)關(guān)協(xié)議是在自治系統(tǒng)之間使用的路由協(xié)議,有BGP;

          八、用戶的上網(wǎng)設(shè)置

          8.1、靜態(tài)IP地址

          你買了一臺(tái)新電腦,插上網(wǎng)線,開機(jī),這時(shí)電腦能夠上網(wǎng)嗎?

          通常你必須做一些設(shè)置。有時(shí),管理員(或者ISP)會(huì)告訴你下面四個(gè)參數(shù),你把它們填入操作系統(tǒng),計(jì)算機(jī)就能連上網(wǎng)了:

          • 本機(jī)的IP地址

          • 子網(wǎng)掩碼

          • 網(wǎng)關(guān)的IP地址

          • DNS的IP地址

          下圖是Windows系統(tǒng)的設(shè)置窗口。

          這四個(gè)參數(shù)缺一不可,后文會(huì)解釋為什么需要知道它們才能上網(wǎng)。由于它們是給定的,計(jì)算機(jī)每次開機(jī),都會(huì)分到同樣的IP地址,所以這種情況被稱作"靜態(tài)IP地址上網(wǎng)"。

          但是,這樣的設(shè)置很專業(yè),普通用戶望而生畏,而且如果一臺(tái)電腦的IP地址保持不變,其他電腦就不能使用這個(gè)地址,不夠靈活。出于這兩個(gè)原因,大多數(shù)用戶使用"動(dòng)態(tài)IP地址上網(wǎng)"。

          8.2、動(dòng)態(tài)IP地址

          所謂"動(dòng)態(tài)IP地址",指計(jì)算機(jī)開機(jī)后,會(huì)自動(dòng)分配到一個(gè)IP地址,不用人為設(shè)定。它使用的協(xié)議叫做DHCP協(xié)議。

          動(dòng)態(tài)主機(jī)設(shè)置協(xié)議(英語:Dynamic Host Configuration Protocol,DHCP)是一個(gè)局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,主要有兩個(gè)用途:用于內(nèi)部網(wǎng)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動(dòng)分配IP地址;給用戶用于內(nèi)部網(wǎng)管理員作為對(duì)所有計(jì)算機(jī)作中央管理的手段。

          這個(gè)協(xié)議規(guī)定,每一個(gè)子網(wǎng)絡(luò)中,有一臺(tái)計(jì)算機(jī)負(fù)責(zé)管理本網(wǎng)絡(luò)的所有IP地址,它叫做"DHCP服務(wù)器"。新的計(jì)算機(jī)加入網(wǎng)絡(luò),必須向"DHCP服務(wù)器"發(fā)送一個(gè)"DHCP請(qǐng)求"數(shù)據(jù)包,申請(qǐng)IP地址和相關(guān)的網(wǎng)絡(luò)參數(shù)。

          前面說過,如果兩臺(tái)計(jì)算機(jī)在同一個(gè)子網(wǎng)絡(luò),必須知道對(duì)方的MAC地址和IP地址,才能發(fā)送數(shù)據(jù)包。但是,新加入的計(jì)算機(jī)不知道這兩個(gè)地址,怎么發(fā)送數(shù)據(jù)包呢?

          DHCP協(xié)議做了一些巧妙的規(guī)定。

          8.3、DHCP協(xié)議

          首先,它是一種應(yīng)用層協(xié)議,建立在UDP協(xié)議之上,所以整個(gè)數(shù)據(jù)包是這樣的:

          • 最前面的"以太網(wǎng)標(biāo)頭",設(shè)置發(fā)出方(本機(jī))的MAC地址和接收方(DHCP服務(wù)器)的MAC地址。前者就是本機(jī)網(wǎng)卡的MAC地址,后者這時(shí)不知道,就填入一個(gè)廣播地址:FF-FF-FF-FF-FF-FF。

          • 后面的"IP標(biāo)頭",設(shè)置發(fā)出方的IP地址和接收方的IP地址。這時(shí),對(duì)于這兩者,本機(jī)都不知道。于是,發(fā)出方的IP地址就設(shè)為0.0.0.0,接收方的IP地址設(shè)為255.255.255.255。

          • 最后的"UDP標(biāo)頭",設(shè)置發(fā)出方的端口和接收方的端口。這一部分是DHCP協(xié)議規(guī)定好的,發(fā)出方是68端口,接收方是67端口。

          這個(gè)數(shù)據(jù)包構(gòu)造完成后,就可以發(fā)出了。以太網(wǎng)是廣播發(fā)送,同一個(gè)子網(wǎng)絡(luò)的每臺(tái)計(jì)算機(jī)都收到了這個(gè)包。因?yàn)榻邮辗降腗AC地址是FF-FF-FF-FF-FF-FF,看不出是發(fā)給誰的,所以每臺(tái)收到這個(gè)包的計(jì)算機(jī),還必須分析這個(gè)包的IP地址,才能確定是不是發(fā)給自己的。當(dāng)看到發(fā)出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服務(wù)器知道"這個(gè)包是發(fā)給我的",而其他計(jì)算機(jī)就可以丟棄這個(gè)包。

          接下來,DHCP服務(wù)器讀出這個(gè)包的數(shù)據(jù)內(nèi)容,分配好IP地址,發(fā)送回去一個(gè)"DHCP響應(yīng)"數(shù)據(jù)包。這個(gè)響應(yīng)包的結(jié)構(gòu)也是類似的,以太網(wǎng)標(biāo)頭的MAC地址是雙方的網(wǎng)卡地址,IP標(biāo)頭的IP地址是DHCP服務(wù)器的IP地址(發(fā)出方)和255.255.255.255(接收方),UDP標(biāo)頭的端口是67(發(fā)出方)和68(接收方),分配給請(qǐng)求端的IP地址和本網(wǎng)絡(luò)的具體參數(shù)則包含在Data部分

          新加入的計(jì)算機(jī)收到這個(gè)響應(yīng)包,于是就知道了自己的IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址、DNS服務(wù)器等等參數(shù)。

          8.4、上網(wǎng)設(shè)置:小結(jié)

          這個(gè)部分,需要記住的就是一點(diǎn):不管是"靜態(tài)IP地址"還是"動(dòng)態(tài)IP地址",電腦上網(wǎng)的首要步驟,是確定四個(gè)參數(shù)。這四個(gè)值很重要,值得重復(fù)一遍:

          • 本機(jī)的IP地址

          • 子網(wǎng)掩碼

          • 網(wǎng)關(guān)的IP地址

          • DNS的IP地址

          有了這幾個(gè)數(shù)值,電腦就可以上網(wǎng)"沖浪"了。接下來,我們來看一個(gè)實(shí)例,當(dāng)用戶訪問網(wǎng)頁的時(shí)候,互聯(lián)網(wǎng)協(xié)議是怎么運(yùn)作的。

          九、一個(gè)實(shí)例:訪問網(wǎng)頁

          9.1、本機(jī)參數(shù)

          我們假定,經(jīng)過上一節(jié)的步驟,用戶設(shè)置好了自己的網(wǎng)絡(luò)參數(shù):

          • 本機(jī)的IP地址:192.168.1.100

          • 子網(wǎng)掩碼:255.255.255.0

          • 網(wǎng)關(guān)的IP地址:192.168.1.1

          • DNS的IP地址:8.8.8.8

          然后他打開瀏覽器,想要訪問Google,在地址欄輸入了網(wǎng)址:www.google.com。

          這意味著,瀏覽器要向Google發(fā)送一個(gè)網(wǎng)頁請(qǐng)求的數(shù)據(jù)包。

          9.2、DNS協(xié)議

          我們知道,發(fā)送數(shù)據(jù)包,必須要知道對(duì)方的IP地址。但是,現(xiàn)在,我們只知道網(wǎng)址www.google.com,不知道它的IP地址。

          網(wǎng)域名稱系統(tǒng)(英文:Domain Name System,縮寫:DNS)是互聯(lián)網(wǎng)的一項(xiàng)服務(wù)。它作為將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,能夠使人更方便地訪問互聯(lián)網(wǎng)。DNS使用TCP和UDP端口53。

          DNS協(xié)議可以幫助我們,將這個(gè)網(wǎng)址轉(zhuǎn)換成IP地址。已知DNS服務(wù)器為8.8.8.8,于是我們向這個(gè)地址發(fā)送一個(gè)DNS數(shù)據(jù)包(53端口)。

          當(dāng)一個(gè)主機(jī)請(qǐng)求查詢域名時(shí):

          • 先查本地緩存

          • 沒有緩存請(qǐng)求本地域名服務(wù)器

          • 本地域名服務(wù)器沒有請(qǐng)求根域名服務(wù)器

          然后,DNS服務(wù)器做出響應(yīng),告訴我們Google的IP地址是172.194.72.105。于是,我們知道了對(duì)方的IP地址。

          9.3、子網(wǎng)掩碼

          接下來,我們要判斷,這個(gè)IP地址是不是在同一個(gè)子網(wǎng)絡(luò),這就要用到子網(wǎng)掩碼。

          已知子網(wǎng)掩碼是255.255.255.0,本機(jī)用它對(duì)自己的IP地址192.168.1.100,做一個(gè)二進(jìn)制的AND運(yùn)算(兩個(gè)數(shù)位都為1,結(jié)果為1,否則為0),計(jì)算結(jié)果為192.168.1.0;然后對(duì)Google的IP地址172.194.72.105也做一個(gè)AND運(yùn)算,計(jì)算結(jié)果為172.194.72.0。這兩個(gè)結(jié)果不相等,所以結(jié)論是,Google與本機(jī)不在同一個(gè)子網(wǎng)絡(luò)。

          因此,我們要向Google發(fā)送數(shù)據(jù)包,必須通過網(wǎng)關(guān)192.168.1.1轉(zhuǎn)發(fā),也就是說,接收方的MAC地址將是網(wǎng)關(guān)的MAC地址。

          9.4、應(yīng)用層協(xié)議

          瀏覽網(wǎng)頁用的是HTTP協(xié)議,它的整個(gè)數(shù)據(jù)包構(gòu)造是這樣的:

          HTTP部分的內(nèi)容,類似于下面這樣:

              GET / HTTP/1.1
            Host: www.google.com
            Connection: keep-alive
            User-Agent: Mozilla/5.0 (Windows NT 6.1) ......
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
            Accept-Encoding: gzip,deflate,sdch
            Accept-Language: zh-CN,zh;q=0.8
            Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
            Cookie: ... ...

          我們假定這個(gè)部分的長度為4960字節(jié),它會(huì)被嵌在TCP數(shù)據(jù)包之中。

          9.5、TCP協(xié)議

          TCP數(shù)據(jù)包需要設(shè)置端口,接收方(Google)的HTTP端口默認(rèn)是80,發(fā)送方(本機(jī))的端口是一個(gè)隨機(jī)生成的1024-65535之間的整數(shù),假定為51775。

          TCP數(shù)據(jù)包的標(biāo)頭長度為20字節(jié),加上嵌入HTTP的數(shù)據(jù)包,總長度變?yōu)?980字節(jié)。

          9.6、IP協(xié)議

          然后,TCP數(shù)據(jù)包再嵌入IP數(shù)據(jù)包。IP數(shù)據(jù)包需要設(shè)置雙方的IP地址,這是已知的,發(fā)送方是192.168.1.100(本機(jī)),接收方是172.194.72.105(Google)。

          IP數(shù)據(jù)包的標(biāo)頭長度為20字節(jié),加上嵌入的TCP數(shù)據(jù)包,總長度變?yōu)?000字節(jié)。

          9.7、以太網(wǎng)協(xié)議

          最后,IP數(shù)據(jù)包嵌入以太網(wǎng)數(shù)據(jù)包。以太網(wǎng)數(shù)據(jù)包需要設(shè)置雙方的MAC地址,發(fā)送方為本機(jī)的網(wǎng)卡MAC地址,接收方為網(wǎng)關(guān)192.168.1.1的MAC地址(通過ARP協(xié)議得到)。

          以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最大長度為1500字節(jié),而現(xiàn)在的IP數(shù)據(jù)包長度為5000字節(jié)。因此,IP數(shù)據(jù)包必須分割成四個(gè)包。因?yàn)槊總€(gè)包都有自己的IP標(biāo)頭(20字節(jié)),所以四個(gè)包的IP數(shù)據(jù)包的長度分別為1500、1500、1500、560。

          9.8、服務(wù)器端響應(yīng)

          經(jīng)過多個(gè)網(wǎng)關(guān)的轉(zhuǎn)發(fā),Google的服務(wù)器172.194.72.105,收到了這四個(gè)以太網(wǎng)數(shù)據(jù)包。

          根據(jù)IP標(biāo)頭的序號(hào),Google將四個(gè)包拼起來,取出完整的TCP數(shù)據(jù)包,然后讀出里面的"HTTP請(qǐng)求",接著做出"HTTP響應(yīng)",再用TCP協(xié)議發(fā)回來。

          本機(jī)收到HTTP響應(yīng)以后,就可以將網(wǎng)頁顯示出來,完成一次網(wǎng)絡(luò)通信。

          這個(gè)例子就到此為止,雖然經(jīng)過了簡化,但它大致上反映了互聯(lián)網(wǎng)協(xié)議的整個(gè)通信過程。

          瀏覽 106
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲一级一射欧美999 | 久草小视频 | 91爱爱·co m | 军人妓女院BD高清片在线播放 | 久热免费在线视频 |