我們現(xiàn)在基本上每天都在使用網(wǎng)絡(luò),在網(wǎng)絡(luò)上進行互相通信,但你知道你電腦發(fā)送的信息是如何傳遞到遠(yuǎn)端電腦上的呢?本篇就講述一下網(wǎng)絡(luò)傳輸原理過程。
首先,我們先得了解一下數(shù)據(jù)包的封裝和解封裝過程,這是啥意思呢,比如說你在QQ上發(fā)消息“Hello”給你的朋友。這句話想要在網(wǎng)絡(luò)上進行傳輸時是需要處理過的,那計算機網(wǎng)絡(luò)體系結(jié)構(gòu)的通信協(xié)議通常劃分為七層。自下而上依次為:物理層(Physics Layer)、數(shù)據(jù)鏈路層(Data Link Layer)、網(wǎng)絡(luò)層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應(yīng)用層(Application Layer)。

其中下四層完成數(shù)據(jù)傳送服務(wù),上面三層面向用戶。數(shù)據(jù)要通過網(wǎng)絡(luò)進行傳輸,要從高層一層一層的向下傳送,如果一個主機要傳送數(shù)據(jù)到別的主機,每層協(xié)議都要加上一個相對應(yīng)的頭部,這個過程稱為封裝。

就好比寄信一樣,為了把“Hello”這條消息發(fā)送到目的地,首先在傳輸層我們要把這消息打包到數(shù)據(jù)段里,然后網(wǎng)絡(luò)層要將你的“寫信人地址”和“收信人地址”寫到數(shù)據(jù)段上面,即:將數(shù)據(jù)的源IP地址和目的IP地址分別打包,這樣才知道你的這條信息是要送到哪里的。接下來數(shù)據(jù)鏈路層主要負(fù)責(zé)把IP地址對應(yīng)到硬件地址(mac),因為要找到遠(yuǎn)端相應(yīng)的計算機是要根據(jù)硬件地址來查找的。最后在物理層變成比特流也就是一串0和1,也就是變成了低電壓和高電壓的信號這樣就可以通過網(wǎng)線傳送出去了。
數(shù)據(jù)被封裝并通過網(wǎng)絡(luò)傳輸后,接收設(shè)備將刪除添加的信息,并根據(jù)報頭中的信息決定如何將數(shù)據(jù)沿協(xié)議棧向上傳給合適的應(yīng)用程序。這個過程叫解封裝。最終將數(shù)據(jù)交給QQ應(yīng)用程序進行處理。這樣對方就可以看到你發(fā)送給他的“Hello”這條信息咯。

明白數(shù)據(jù)的封裝和解封裝對理解數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸相當(dāng)重要,以下以telnet遠(yuǎn)程登錄的實例講解數(shù)據(jù)包封裝和解封裝以及數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸過程。
如圖,IP設(shè)備中,PC1和PC2連接在同一個集線器上,R1和R2通過串行線路相連,集線器則連接在路由器R1上,一臺二層交換機連接在R2,在它上面連接著的PC1需要遠(yuǎn)程登錄的服務(wù)器(Server),以及另外一臺PC3:

下面是PC1使用Telnet登錄服務(wù)器的具體步驟:
1)首先,PC1封裝數(shù)據(jù)包,它用本地網(wǎng)絡(luò)號比較要去往的目的地IP(202.2.2.2),發(fā)現(xiàn)此IP不在本地網(wǎng)絡(luò)(202.1.1.0)當(dāng)中,PC1知道要發(fā)往其他網(wǎng)段的數(shù)據(jù)先要發(fā)給網(wǎng)關(guān)路由器R1的fa0/0接口(202.1.1.1),PC1先在本地ARP緩存中查找202.1.1.1的MAC地址,如果找到的話就用它封裝,如果沒有找到就發(fā)送ARP進行查詢,再利用查詢到的網(wǎng)關(guān)MAC(111111111111)進行封裝。
2)PC1將數(shù)據(jù)傳至到傳輸層,然后分段處理,由于Telnet使用的是TCP協(xié)議,所以PC1使用本地一個大于1024的任意端口作為源端口,在這里假設(shè)是1234,目的端口為23,這兩個端口添加到傳輸層的協(xié)議數(shù)據(jù)單元中;數(shù)據(jù)在傳輸層封裝好后被傳輸?shù)骄W(wǎng)絡(luò)層,網(wǎng)絡(luò)層在數(shù)據(jù)頭部添加源IP(202.1.1.2)以及目的IP(202.2.2.2);數(shù)據(jù)在網(wǎng)絡(luò)層封裝好后,被傳輸?shù)綌?shù)據(jù)鏈路層,在局域網(wǎng)中這一層主要是在數(shù)據(jù)頭部添加源MAC(AAAAAAAAAAAA)以及目的MAC(111111111111),然后數(shù)據(jù)尾部添加一個CRC效驗,封裝好后如圖:

現(xiàn)在可能大家覺得很奇怪,為什么目的MAC是網(wǎng)關(guān)的MAC而不是Server的MAC呢?由于MAC只是用于局域網(wǎng)內(nèi)尋址,發(fā)往其他網(wǎng)段的數(shù)據(jù)都要先經(jīng)過網(wǎng)關(guān),假設(shè)封裝的MAC是Server的MAC的話,數(shù)據(jù)被傳送到路由器R1后,R1檢查MAC地址,發(fā)現(xiàn)不是發(fā)往本路由的,就會直接丟棄這個數(shù)據(jù),那樣PC1就不可能和Server通信成功了。
數(shù)據(jù)鏈路層封裝后的數(shù)據(jù)幀被傳到物理層,轉(zhuǎn)換成二進制形式的比特流,從PC1的網(wǎng)卡發(fā)送出去。物理層的用途就是處理比特流,把比特轉(zhuǎn)換成電子、光學(xué)或微波信號。反之在接收端,物理層從傳輸媒體中重新得到這些信號,恢復(fù)成比特流,傳輸比特流到數(shù)據(jù)鏈路層。
3)PC1發(fā)送的比特流到達集線器,集線器將數(shù)據(jù)信號放大,并把它從接收端口之外的其他接口進行發(fā)出,PC2和R1都會收到這個數(shù)據(jù),PC2收到這個數(shù)據(jù)包,把比特流轉(zhuǎn)換成幀上傳到數(shù)據(jù)鏈路層,PC2比較數(shù)據(jù)幀的目的MAC地址,發(fā)現(xiàn)與本機網(wǎng)卡的MAC地址不同,PC2將會丟棄數(shù)據(jù)幀,放棄處理。
4)路由器R1收到該比特流,轉(zhuǎn)換成幀上傳到數(shù)據(jù)鏈路層,發(fā)現(xiàn)目的MAC地址是本機fa0/0接口的MAC地址,它將會解封裝該幀,上傳到網(wǎng)絡(luò)層,那么網(wǎng)絡(luò)層R1看到這個數(shù)據(jù)包的目的地址是202.2.2.2,并不是發(fā)給本路由的,就需要進行轉(zhuǎn)發(fā)。R1對本地路由表進行查看,發(fā)現(xiàn)需要將這個數(shù)據(jù)從s0/0接口發(fā)出,但是此時R1并不能直接將數(shù)據(jù)進行發(fā)出,原因是數(shù)據(jù)在被解封裝到網(wǎng)絡(luò)層后還需要進行再封裝才能從物理層發(fā)出;因為R1和R2之間是串行線路,串行線路與局域網(wǎng)不一樣,不是使用MAC通信,串行線路的通信協(xié)議可能為PPP或者是HDLC(這里假設(shè)是PPP協(xié)議),并且在一端發(fā)出另一端就一定能收到。所以在數(shù)據(jù)發(fā)出去之前,在R1的數(shù)據(jù)鏈路層給這個數(shù)據(jù)包封裝PPP協(xié)議頭部時,從s0/0發(fā)出,此時,數(shù)據(jù)幀格式如下圖·:

數(shù)據(jù)鏈路層封裝后的數(shù)據(jù)幀被傳到物理層,轉(zhuǎn)換成二進制形式的比特流,從路由器R1的s0/0接口發(fā)送出去。
5)路由器R2收到這個比特流,上傳至數(shù)據(jù)鏈路層處理,數(shù)據(jù)鏈路層丟棄了PPP封裝,上傳至網(wǎng)絡(luò)層處理;網(wǎng)絡(luò)層發(fā)現(xiàn)了這個數(shù)據(jù)包的目的地址并非本路由,但是目的連接在本路由的以太網(wǎng)接口上,這個時候如果R2有Server的MAC地址,就直接用Server的MAC地址封裝,否則它先發(fā)送ARP查詢,在收到回應(yīng)后進行封裝,封裝后的數(shù)據(jù)幀從fa0/0發(fā)出,源地址是fa0/0接口的MAC地址,目的地址是服務(wù)器網(wǎng)卡的MAC地址,如下圖:

數(shù)據(jù)鏈路層封裝后的數(shù)據(jù)幀被傳到物理層,轉(zhuǎn)換成二進制形式的比特流,從R2的fa0/0接口發(fā)送出去。
6)R2發(fā)出的比特流到達交換機,交換機除了對比特流進行放大外,還根據(jù)源MAC地址進行學(xué)習(xí),根據(jù)目的MAC地址進行轉(zhuǎn)發(fā)。交換機根據(jù)數(shù)據(jù)幀中的目的MAC地址查詢MAC地址表,把比特流從對應(yīng)的端口發(fā)送出去,當(dāng)交換機的MAC緩存表中存在Server的MAC和對應(yīng)端口,就直接將比特流發(fā)給Server,如果不知道Server的MAC則會發(fā)送ARP查詢,然后再進行轉(zhuǎn)發(fā);
7)Server收到了該比特流,把比特流轉(zhuǎn)換成幀格式,上傳到數(shù)據(jù)鏈路層,發(fā)現(xiàn)是本機的MAC,Server拆除數(shù)據(jù)鏈路層的封裝后,然后再上傳到網(wǎng)絡(luò)層,發(fā)現(xiàn)目的IP地址是本機的IP,Server拆除網(wǎng)絡(luò)層的封裝后,再把數(shù)據(jù)分段上傳到傳輸層,發(fā)現(xiàn)是訪問本機23端口,最后數(shù)據(jù)被傳輸?shù)綉?yīng)用層;
8)Server對PC1的應(yīng)答就剛好相反,它將目的IP、源IP以及目的端口、源端口位置對調(diào),發(fā)回的數(shù)據(jù)幀格式如下:

完整的互聯(lián)網(wǎng)Telnet數(shù)據(jù)包傳輸以及封裝解封裝過程就是這樣。從這個過程中可以看出,數(shù)據(jù)流在中間設(shè)備上執(zhí)行的是OSI模型下三層的操作,物理層設(shè)備就是集線器不對幀格式進行改變以及廣播式轉(zhuǎn)發(fā);數(shù)據(jù)鏈路層設(shè)備,即二層交換機,也不改變幀格式,但可根據(jù)幀的目的地址進行轉(zhuǎn)發(fā);網(wǎng)絡(luò)層的設(shè)備則會改變幀格式,要進行幀的解封裝再封裝,但不改變數(shù)據(jù)包中源和目的IP地址(會改變數(shù)據(jù)包中的一些字段,比如TTL字段會減1)。