現(xiàn)在魄鸦,我們已經(jīng)解決了網(wǎng)絡中的基本問題,接下來讓我們討論一下兩臺電腦究竟是怎樣通信的壁顶。
假設(shè)PCA為用戶電腦际乘,PCB為提供web服務的服務器。PCA的IP地址為10.1.1.2衔肢,掩碼255.255.255.0庄岖,網(wǎng)關(guān)10.1.1.1;PCB的IP地址為10.1.4.2角骤,掩碼255.255.255.0隅忿,網(wǎng)關(guān)10.1.4.1。我們來討論PCA訪問PCB的整個過程(各層協(xié)議的封裝內(nèi)容較多邦尊,我們只填寫其中便于我們理解通信的主要內(nèi)容背桐。部分內(nèi)容雖然很重要,但跟我們理解通信關(guān)系不大蝉揍,就不在這里填寫了链峭,比如序號等)。
用戶在PCA上打開瀏覽器又沾,地址欄輸入http://10.1.4.2:80弊仪,http的默認端口號為80熙卡,一般省略不寫,只寫http://10.1.4.2就可以励饵。瀏覽器把此套接字信息向下傳遞給傳輸層TCP協(xié)議(http是基于TCP的)驳癌。
TCP收到應用層的信息后,填寫TCP的“快遞單”曲横,源端口號隨機選取動態(tài)端口號49152~65535中的一個喂柒,假設(shè)為56789,目的端口號為80禾嫉,SYN=1灾杰,把自己設(shè)置為握手請求報文,再向下傳遞給網(wǎng)絡層IP協(xié)議熙参。
“快遞小哥”IP收到后艳吠,填寫“快遞單”,源IP地址填寫10.1.1.2孽椰,目的IP地址填寫10.1.4.2昭娩,協(xié)議號填寫6(表示這份快遞是TCP的,UDP是17)黍匾。此時栏渺,IP協(xié)議發(fā)現(xiàn)源地址與目的地址不在同一個網(wǎng)段,因此需要查找電腦的ARP表中锐涯,有沒有網(wǎng)關(guān)10.1.1.1的MAC地址磕诊,如果沒有,則向網(wǎng)關(guān)發(fā)ARP Request報文請求網(wǎng)關(guān)的MAC地址纹腌,并寫入ARP表中霎终,再向下傳遞給鏈路層的以太網(wǎng)協(xié)議。
鏈路層以太網(wǎng)收到后升薯,填寫以太網(wǎng)封裝莱褒,目的MAC地址填寫網(wǎng)關(guān)的MAC地址MAC_R1,源MAC地址填寫自己的MAC地址MAC_PCA涎劈,Type填寫0x0800(0x表示后面的數(shù)字是十六進制广凸,0800表示快遞是IP給下來的)后,把這些信息用二進制通過線纜傳給了R1责语。
R1收到后炮障,發(fā)現(xiàn)目的MAC是自己的MAC地址,于是拆除以太網(wǎng)封裝坤候,并根據(jù)Type的內(nèi)容0x0800把數(shù)據(jù)交給IP協(xié)議胁赢。
IP協(xié)議收到后,根據(jù)IP封裝中的目的地址10.1.4.2查找路由表白筹,發(fā)現(xiàn)下一跳地址是10.1.2.2智末,此地址與R1的E1/1接口相連谅摄,接口地址是10.1.2.1/24,于是把數(shù)據(jù)包送到接口E1/1系馆,E1/1接口需要把此數(shù)據(jù)包送給對面的10.1.2.2送漠,需要再次封裝為以太網(wǎng)幀才可以傳遞過去,于是查看路由器上ARP表中有沒有10.1.2.2對應的MAC地址由蘑,若沒有闽寡,則從接口E1/1發(fā)送ARP Request請求10.1.2.2的MAC地址并寫入ARP表中。把數(shù)據(jù)包封裝為以太網(wǎng)幀尼酿,源MAC為MAC_R1爷狈,目的MAC為MAC_R2,Type還是0x0800裳擎,發(fā)送給了R2涎永。
R2收到后把剛才R1做的事再做一遍,數(shù)據(jù)被發(fā)給了R3鹿响。
R3收到后羡微,拆除以太網(wǎng)封裝,根據(jù)IP封裝中的目的地址10.1.4.2查找路由表惶我,發(fā)現(xiàn)這個地址與本路由器地址為10.1.4.1/24的接口直連妈倔。把數(shù)據(jù)送到此接口后,查找路由器的ARP表中有沒有10.1.4.2的MAC地址绸贡,若沒有就從接口發(fā)ARP Request請求启涯,然后封裝成以太網(wǎng)幀發(fā)出去。
我們發(fā)現(xiàn)恃轩,路由器如果發(fā)現(xiàn)數(shù)據(jù)封裝中的目的IP地址不是自己接口的,則會根據(jù)路由表送到出接口黎做,然后再封裝為以太網(wǎng)幀發(fā)出去叉跛,并不改變網(wǎng)絡層之上的任何內(nèi)容。也就是說蒸殿,數(shù)據(jù)從源地址發(fā)送到目的地址期間筷厘,沿途所有路由器只會根據(jù)每條鏈路的不同,改變鏈路層封裝宏所,并不改變網(wǎng)絡層之上的任何內(nèi)容酥艳。
從數(shù)據(jù)轉(zhuǎn)發(fā)的角度,路由器工作在鏈路層和網(wǎng)絡層爬骤,并不關(guān)心網(wǎng)絡層之上的東西充石,這也是為什么把路由器歸為三層設(shè)備。同理霞玄,交換機只根據(jù)以太網(wǎng)鏈路層封裝轉(zhuǎn)發(fā)數(shù)據(jù)骤铃,不關(guān)心鏈路層之上的內(nèi)容拉岁,所以交換機也歸為二層設(shè)備。
最后惰爬,我們看看PCB收到后怎么處理喊暖。
PCB收到后,看到目的MAC為MAC_PCB撕瞧,正是自己的陵叽,所以拆除以太網(wǎng)封裝,并根據(jù)Type內(nèi)容交給IP協(xié)議丛版。網(wǎng)絡層IP協(xié)議查看封裝中的目的IP地址為10.1.4.2巩掺,還是自己的IP地址,于是拆除IP封裝硼婿,根據(jù)協(xié)議號6锌半,交給TCP協(xié)議。TCP協(xié)議查看封裝中的目的端口號為80寇漫,查看應用層HTTP進程是否存在刊殉,若不存在,則報Port Unreachable(端口不可達)錯誤州胳,否則本端以56789為目的端口號记焊,80為源端口號,與對端進行三次握手建立TCP連接栓撞,連接建立成功后遍膜,把本機的Web主頁內(nèi)容層層封裝后傳給網(wǎng)關(guān)R3,之后過程與前述基本相同瓤湘,最終到達PCA瓢颅。
于是,PCA的瀏覽器呈現(xiàn)出了精彩的網(wǎng)頁內(nèi)容弛说。
小Q:配置電腦的IP地址信息時挽懦,如果不配置網(wǎng)關(guān)會有什么結(jié)果?
歡迎大家留言討論木人。