1. 程式人生 > >OSI 中的數據轉發

OSI 中的數據轉發

作用 操作 ces 會話 表示 簡單的 watermark 這也 們的

OSI 中的數據轉發過程
書接上回,上次簡單的了解了OSI以及各個層次的作用。這次我們了解一下,數據是如何在OSI各個層次之間穿梭,又是如何在網絡中傳遞的。

一、 封裝:
我們還是將應用層、表示層、會話層看成一個整體,合並為應用層看待。當數據又應用程序產生之後,面臨的問題是什麽呢?是傳遞給誰?如何傳遞?目標在哪裏?這幾個問題當中的哪一個呢?舉個簡單的例子,我們在天貓買了東西,接下來,你會擔心對方不知道東西借給誰嗎?會擔心對方不知道您的收貨地址嗎?估計不會的,因此,應用層數據產生後,接下來的問題就是確定數據該以何種方式進行轉發和控制,這也就是傳輸層的基本作用了。

傳輸層提供了多種傳輸方式,其中TCP和UDP是最常用的,當數據需要保證傳遞的完整性,有序性或者簡單來講是可靠性的時候,就需要TCP這種協議去為應用程序服務,而面對多種應用程序,TCP如何區分數據是那個應用的呢?總不能把QQ的數據交給優酷打開吧。於是定義了提供TCP或者UDP 與應用程序對接的接口,即端口。同時,應用程序,會通過增加一些說明性的,控制性的內容在數據的前面,即增加頭部給數據,此過程就是封裝。這時,封裝之後的數據就成為了一個分段。

同理,數據經過每一層,向下傳遞的時候,都會告訴下面一層需要進行何種操作,也就是要進行封裝,直到數據成為比特。因此上一層對下一層的控制,體現在封裝的內容當中。

技術分享圖片
二、網關和下一跳
技術分享圖片

由於網絡層進行了網絡劃分,而路由器則是連接不同網絡的邊界。因此,對於內部網絡而言,路由器則是連接內網與外網的邊界,即網關。

網絡中,路由器互相連接構成網絡拓撲,猶如將不同網絡連接而成的地圖。因此要實現此地圖中任意兩點之間的通信,就必須要讓圖中每個路由器了解完整的網絡信息,這就是路由表。因此,不同網絡間通信,需網關路由器根據路由表進行路徑的選擇,然後通過合理的路由器接口將數據轉發出去,將數據轉發到轉發路徑中的下一個路由器或者接收者。

我們出行之時,欲達某地,需要在某地換乘公交或者地鐵,換乘點就相當於我們的路由器,同時這個換乘點就是到達目標的下一站。從常識來判斷,這個換乘點可以是距離起點最近的一站,也可以是距離終點最近的一站,只要是路徑上的站點都可以稱之為下一站。網絡中,數據轉發路徑上的路由器,依理,亦可以作為轉發的下一站路徑,稱之為下一跳路由器。下一跳也可以是距離起點最近的下一跳,即直連下一跳;同時也可以是轉發路徑中其他節點路由器,即非直連下一跳。由此觀之,網關實際上就是直連的下一跳路由器,網絡層是一跳一跳的經過路由器的選擇而進行數據轉發的。
技術分享圖片

三、地址解析協議
數據的轉發無非是子網內通信,或者不同子網間通信兩種情況。

數據的轉發最終歸結於從接口發出,從接口接收。所以,數據轉發發生的時候,確定數據發送的接口以及接收的接口就非常重要。此時就需要地址解析協議了。

技術分享圖片

子網內部通信雙方,處於同一個廣播域,若要確認對方接收信息的接口,可直接通過廣播進行詢問。畢竟對方和我在同一個小區,我只需要在小區內吶喊,確定對方在幾號樓幾樓就可以了。

技術分享圖片
不同子網通信,如何確定目標的接口?首先,使用廣播直接詢問對方地址肯定不合適,因為雙方並不在同一廣播域。ARP提供了另一種方式---代理ARP。簡而言之,就是讓處於邊界的路由器代替目標響應ARP應答,從而由路由器作為代理,將數據轉發至目標。此種做法存在安全隱患,因此通常會將代理ARP功能關閉。此時,若想要實現對於外部數據的訪問,就需要指明網關,或者指定下一跳轉發地址,讓網關或下一跳路由器接收數據的接口代替目標響應一跳跳轉發至目標。

OSI 中的數據轉發