什麼是OSI參考模型?

範柯左


OSI模型概述:

1、OSI模型(Open System Interconnection Reference Model,縮寫為OSI),全名"開放式系統互聯通信參考模型"

2、OSI模型是國際標準化組織(ISO)①和國際電報電話諮詢委員會(CCITT)②聯合制定的開放系統互連參考模型,為開放式互連信息系統提供了一種功能結構的框架,它從高到低分別為:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。

3、那麼OSI究竟是用來幹什麼的?

OSI模型定義了開放系統的層次結構以及各層之間的相互關係及各層所包含的服務,OSI模型是作為一個框架來協調和組織各層協議的制定,也是對網絡內部結構最精練的概括與描述進行整體修改。

OSI的服務定義詳細說明了各層所提供的服務。某一層的服務就是該層及其下各層的一種能力,它通過接口提供給更高一層。各層所提供的服務與這些服務是怎麼實現的無關。同時,各種服務定義還定義了層與層之間的接口和各層的所使用的原語,但是不涉及接口是怎麼實現的。

簡言之OSI模型就是一套標準,互聯網大部分協議都是基於OSI模型進行開發。

當今的互聯網有著各式各樣的應用,誇張一點可以說是隻有你想不到,沒有你找不到的,OSI模型就是為了網絡的互相通信以及形形色色的網絡應用的實現而建立的。

網絡設備需要運行許許多多的網絡協議以實現當今互聯網所需要的各種功能,面對種類繁多的功能,我們可以將各式各樣的功能按照不同的功能劃分為一個整體模型,有著相似的功能的劃分為同一層次。

二、OSI七層

OSI參考模型的各個層次的劃分遵循下列原則:

同一層中的各網絡節點都有相同的層次結構,具有同樣的功能。

同一節點內相鄰層之間通過接口(可以是邏輯接口)進行通信。

七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。

不同節點的同等層按照協議實現對等層之間的通信。

1、 物理層

物理層主要是指傳輸數據所需要的物理硬件鏈路,如光纜、電纜、雙絞線、無線電波(WiFi)等方式。

物理層的作用就是通過物理手段把硬件設備(如電腦、路由器、交換機等)連接起來,它主要規定了網絡的一些電氣特性,作用是負責傳送0和1的電信號。

在這裡說明一下,通過物理手段將設備連接起來組成局域網,物理手段就是光纜、電纜、雙絞線、無線電波(WiFi)等,比如中美之間的網絡通信是通過海底光纜。

兩個不同的局域網(比如電信的網絡和移動的網絡)通訊,電信手機先連接電信的服務器,移動手機連接到移動服務器,電信和移動之間是通過物理手段鏈接的,這樣電信和移動的網絡就能夠實現互相通訊了。

下圖是全球互聯網跨國通信光纜的連接情況:

從上圖可以看到國家與國家,大洲與大洲之間都通過各種密密麻麻的線路進行連接,可以說整個互聯網就是就無數臺硬件設備和無數條線路所組成的一個龐大的局域網,大至運營商的高性能網絡,小至家裡的無線路由器,這些都是組成互聯網的一部分。

2、 數據鏈路層

二層交換機就是工作在數據鏈路層

通過上面對物理層的講解,我們都知道物理只是負責傳送0和1的電信號,單單這些0和1的電信號是沒有任何意義的,所有必須要規定解讀方式:多少個0和1算一組?每個信號有什麼意義?——這就是鏈路層的意義,它在物理層的上方,確定了0和1的分組方式。

2.1、MAC地址

大約在20世界70、80年代的時候,有很多家公司都有自己研發的網絡類型,每家公司都有自己的電信號分組方式。例如大名鼎鼎IBM的令牌環網絡,但是逐漸地,各式各樣的網絡都被一種叫做"以太網"(Ethernet)的協議,佔據了主導地位。

以太網規定,一組電信號構成一個數據包,再由數據包組成一個數據鏈路層的數據協議單元,這個單元叫做"幀"(Frame)。每一幀分成兩個部分:標頭(Head)和數據(Data)。把數據包封裝成幀的目的是為了數據包的可靠傳輸。

"標頭"包含數據包的一些說明項,比如發送者、接受者、數據類型等等;"數據"則是數據包的具體內容。

"標頭"的長度,固定為18字節。"數據"的長度,最短為46字節,最長為1500字節。因此,整個"幀"最短為64字節,最長為1518字節。如果數據很長,就必須分割成多個幀進行發送。

上面提到,以太網數據包的"標頭",包含了發送者和接受者的信息。那麼,發送者和接受者是如何標識呢?

以太網規定,連入網絡的所有設備,都必須具有"網卡"接口。數據包必須是從一塊網卡,傳送到另一塊網卡。網卡的地址,就是數據包的發送地址和接收地址,這叫做MAC地址。

每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,通常用12個十六進制數表示。

前6個十六進制數是廠商編號,後6個是該廠商的網卡流水號。有了MAC地址,就可以定位網卡和數據包的路徑了。

2.2、廣播

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

首先,一塊網卡怎麼會知道另一塊網卡的MAC地址?有一種叫做ARP的協議,可以解決這個問題。這個留到後面介紹,這裡只需要知道就可以了,以太網數據包必須知道接收方的MAC地址,然後才能發送幀。

其次,就算有了MAC地址,系統怎樣才能把數據包準確送到接收方?以太網採用了一種很"原始"的方式,它不是把數據包準確送到接收方,而是向本網絡內所有計算機發送,讓每臺計算機自己分析自己是不是這個數據包的接收方。

上圖中,計算機1向計算機2發送一個數據包,同一個子網絡的3、4、5計算機都會收到這個包。它們讀取這個包的"標頭",找到接收方的MAC地址,然後與自身的MAC地址相比較,如果兩者相同,就接收這個包,做進一步處理,若不是就丟棄這個包。這種發送方式就叫做"廣播"(broadcasting)。(這就是二層交換機的工作方式,以後的文章會作詳細的介紹敬請關注。)

有了數據包的定義、網卡的MAC地址、廣播的發送方式,"鏈接層"就可以在多臺計算機之間傳送數據了。

3、 網絡層

三層交換機和路由器就是工作在網絡層。

根據上面的講解,理論上只需要依靠MAC地址和廣播這兩項技術,在廣州的網卡發出的數據包就可以被在上海的網卡接收了這樣就可以互相通信了,但如果全世界的計算機都是在用這種方式進行通訊的話,那麼每一臺計算機發出的數據包都會以廣播的形式被全世界的電腦接收,全世界的電腦再一一進行分析,這種方式是非常低效的,且間接造成了非常大的資源浪費。

因此我們必須找到一種方法,區分哪些MAC地址屬於同一個子網,如果是同一個子網就採用廣播,如果不是,則採用"路由"的方式發送,但是這個功能不是MAC地址技術所具備的,這也間接地導致了網絡層的出現,網絡層的作用是引入一套新的地址,使我們能夠區分哪些計算機屬於同一個子網,這個套機制就叫做"網絡地址",也就是我們常說的"IP地址"。 (下面會對路由作出解析)

3.1、IP協議

規定網絡地址的協議,叫IP協議。他定義的地址,就叫做"IP地址"。IP協議目前有兩根版本,IPv4和IPv6,而目前較為廣泛使用的是IP協議版本4,也就是IPv4,IPv4由32位二進制所組成,IPv6目前正普及,IPv6由128位組成,長度是IPv4的4倍之多號稱可以為全世界的每一粒沙子編上一個IP地址。

在2011年,IPv4的地址已經完全分配完畢,但IPv6目前仍處於部署的初期,仍然不能大規模使用。

IPv4地址由32個二進制位組成,習慣上,我們分成四段十進制數表示IPV4地址,從0.0.0.0到255.255.255.255。

【拓展一下IPv4地址在家裡一直在用啊,192.168.1.1路由器上的這個地址不就是IPv4地址嗎?怎麼會已經分發完畢了?事實上家裡路由器所使用的192.168.1.1 這個網段被稱為私有地址,私有地址在互聯網上是不能進行通信的,私有地址只能在內部局域網使用,那麼問題又來了,如果私有地址不能在互聯網進行通信,那麼我在和家裡是怎樣上網的?家裡上網普遍的形式都是撥號,通過撥號運營商會分配一個"真正"的IPv4地址給你,然後通過路由器內置的"NAT"協議進行地址、端口轉換進行上網。(NAT是什麼東西這裡就不詳細說明了,以後的文章會詳細說明的,現在你只需要知道,NAT協議是對於IPv4地址短缺的問題的救星,另一方面也可以理解為IPv6普及的最大的障礙之一。)】

互聯網上的每一臺計算機,都會分配到一個IP地址。這個地址分成兩個部分,前一部分代表網絡,後一部分代表主機。比如,IP地址192.168.1.1,這是一個32位的地址,它的網絡部分是前24位(192.168.1),那麼主機部分就是後8位(最後的那個1)。處於同一個子網絡的電腦,它們IP地址的網絡部分必定是相同的,也就是說192.168.1.1與192.168.1.100是處在同一個子網絡。

3.2、子網掩碼

但是,問題在於單從IP地址,我們無法判斷網絡部分。還是以192.168.1.1為例,它的網絡部分,到底是前24位,還是前16位,甚至前28位,單從IP地址上是看不出來的,那麼,怎樣才能從IP地址,判斷兩臺計算機是否屬於同一個子網絡呢?這就要用到另一個參數"子網掩碼"(subnet mask)。

所謂"子網掩碼",就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP地址192.168.1.1,如果已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是

11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

知道"子網掩碼",我們就能判斷,任意兩個IP地址是否處在同一個子網絡。較為簡單的方法是已知 192.168.1.10和192.168.1.100 兩個IP的子網掩碼都是255.255.255.0(

11111111.11111111.11111111.00000000),兩個IP地址都在同一子網的前提條件是網絡位相同,網絡位就是255(二進制中的"1"),主機位就是0(二進制中的"0"),這樣就能判斷出192.168.1.10和192.168.1.100的網絡位都是192.168.1這就就能知道兩個IP是否同屬於一個子網(這個方法對於"可變子網長度掩碼"也就是VLSM不適用)。

總結一下,IP協議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些IP地址在同一個子網絡。

3.3、IP數據包

根據IP協議發送的數據,就叫做IP數據包。想必,其中肯定包含有IP地址的信息。

但是前面說過,以太網數據包只包含MAC地址,並沒有IP地址的欄位。那麼是否需要修改數據定義,再添加一個欄位呢?不需要,我們可以把IP數據包直接放進以太網數據包的"數據"部分,因此完全不用修改以太網的規格。這就是互聯網分層結構的好處:上層的變動完全不涉及下層的結構。

具體來說,IP數據包也分為"標頭"和"數據"兩個部分。

"標頭"部分主要包括版本、長度、IP地址等信息,"數據"部分則是IP數據包的具體內容。它放進以太網數據包後,以太網數據包就變成了下面這樣。

IP數據包的"標頭"部分的長度為20到60字節,整個數據包的總長度最大為65,535字節。因此,理論上,一個IP數據包的"數據"部分,最長為65,515字節。前面說過,以太網數據包的"數據"部分,最長只有1500字節。因此,如果IP數據包超過了1500字節,它就需要分割成幾個以太網數據包,分開發送了。

3.4、ARP協議

因為IP數據包是放在以太網數據包裡發送的,所以我們必須同時知道對方的MAC地址和IP地址。正常情況下,對方的IP地址是已知的,但是我們不知道它的MAC地址。

所以,我們需要一種協議,能夠從IP地址得到MAC地址。

這裡又可以分成兩種情況。第一種情況,如果兩臺主機不在同一個子網絡,那麼事實上沒有辦法得到對方的MAC地址,只能把數據包傳送到兩個子網絡連接處的"網關"(gateway),讓網關去處理(網關下面會解析)。

第二種情況,如果兩臺主機在同一個子網絡,那麼我們就可以使用ARP協議,得到對方的MAC地址,ARP協議也是發出一個數據包(包含在以太網數據包中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個"廣播"地址。它所在子網中的每一臺主機,都會收到這個數據包,從中取出IP地址,與自身的IP地址進行比較。如果兩者相同,都做出回覆,並向對方報告自己的MAC地址,若與自身IP不符合就丟棄這個包。

總之,有了ARP協議之後,我們就可以得到同一個子網絡內的主機MAC地址,可以把數據包發送到任意一臺主機之上了。

3.5、網關or路由

路由器:

上面我們提到若兩臺計算機處於兩個不同的子網就需要使用路由來進行通信,那麼路由究竟為何物呢?下面我們一一道來。

路由器(Router)是用於連接多個處於不同子網網絡的網絡,當數據從一個子網傳輸到另一個子網時,可通過路由器來完成。因此,路由器具有判斷網絡地址和選擇路徑的功能,它能在多子網互聯環境中為各個子網直接建立連接。

路由器的主要工作就是為經過路由器的每個數據幀尋找一條最佳傳輸路徑,並將該數據有效地傳送到目的站點。由此可見,選擇最佳路徑的策略即路由算法是路由器的關鍵所在。為了完成這項工作,在路由器中保存著各種傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用,路由表中保存著子網的信息和下一個路由器的名字等內容。路由表可以是由系統管理員固定設置好的,也可以由系統動態修改,可以由路由器自動調整,也可以由主機控制。(路由表為何物?可以看一下我發表的文章《如何配置靜態路由?》)

網關:

網關是路由器中的一種,一般來說網關既可以用於廣域網互連,也可以用於局域網互連。 網關是一種充當轉換重任的計算機系統或設備。在使用不同的通信協議、數據格式或語言,甚至體系結構完全不同的兩種系統之間,網關是一個翻譯器。

家裡所使用的無線路由器的LAN接口的IP地址(一般為192.168.1.1和192.168.0.1)就是你所在局域網中的網關,當你所在的局域網的計算機需要和其它局域網中的計算機,或者需要訪問互聯網的時候,你所在局域網的計算機會先把數據包傳輸到網關(路由器的LAN接口),然後再由網關進行轉發。

舉個簡單的例子,一套房子內部有三個房間、一個大門,房子可以比喻成是你的電腦所在的局域網,三個房間可以比喻成你所在局域網中的三臺電腦,房子的大門可以比喻成網關。當你在房子內的一個房間進入另一個房間的時候並不需要經過房子的大門,在局域網中也是一樣的,處在同一局域網的中計算機進行通信的時候並不需要用到網關。(使用MAC地址和廣播技術通信)當你需要到鄰居家去玩的時候需要要從你家房子的大門出去(IP協議),相應的,局域網中的計算機需要和其它局域網中的計算機、和互聯網上的計算機進行通信的時候,數據包必須要通過網關才可以到達。

這就是為什麼我們在有路由器上網的時候,必須要把計算機中的默認網關地址設置成路由器LAN接口的地址的原因,因為路由器的LAN接口就是你所在網絡的網關,你的電腦要上網,數據包必須要經過網關轉發出去。目前家用路由器一般使用192.168.1.1和192.168.0.1作為LAN接口的地址,這兩個地址也是最常見的網關地址。

作為普通的用戶,只需要記住,手動配置ip地址的時候,默認網關的地址就是路由器的LAN接口的地址,也就是你路由器的管理頁面登陸地址。如果你選擇自動獲取ip地址,那麼就不需要關注默認網關地址了,但路由器的DHCP服務器分配下來的默認網關也一定是路由器的LAN接口的ip地址。

4、 傳輸層

4.1、端口號

有了MAC地址和IP地址,我們已經可以在互聯網上任意兩臺主機上建立通信。

接下來的問題是,同一臺主機上有許多程序都需要用到網絡,比如,你一邊瀏覽網頁,一邊與朋友在線聊天。當一個數據包從互聯網上發來的時候,你怎麼知道,它是表示網頁的內容,還是表示在線聊天的內容?

也就是說,我們還需要一個參數,表示這個數據包到底供哪個程序(進程)使用。這個參數就叫做"端口"(port),它其實是每一個使用網卡的程序的編號。每個數據包都發到主機的特定端口,所以不同的程序就能取到自己所需要的數據。

"端口"是0到65535之間的一個整數,正好16個二進制位。0到1023的端口被系統佔用,用戶只能選用大於1023的端口。不管是瀏覽網頁還是在線聊天,應用程序會隨機選用一個端口,然後與服務器的相應端口聯繫。

"傳輸層"的功能,就是建立"端口到端口"的通信。相比之下,"網絡層"的功能是建立"主機到主機"的通信。只要確定主機和端口,我們就能實現程序之間的交流。因此,Unix系統就把主機+端口,叫做"套接字"(socket)。有了它,就可以進行網絡應用程序開發了。(那麼Socket是什麼這問題就不在這文章所討論的範圍內了,有興趣的朋友可以百度一下)

0.0.0.0:135其中135就是被佔用的端口號,一次類推。

4.2、TCP\\UDP

UDP和TCP協議都是傳輸層的協議,他們的主要作用就是在應用層的數據包標頭加上端口號(或者在IP協議的數據包中插入端口號)。

UDP協議的優點是比較簡單,容易實現,但是缺點是可靠性較差,一旦數據包發出,無法知道對方是否收到。

TCP協議可以近似認為是有確認機制的UDP協議。每發出一個數據包都要求確認。如果有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了。

TCP協議主要的確認機制是"三次握手,四次揮手\

網絡技術棧


“我是喲喲吼說科技,專注於數據網絡的回答,歡迎大家與我交流數據網絡的問題”

OSI(Open System Interconnect,開放系統互聯)是ISO組織研究的網絡互聯模型,將網絡通信過程定義成七層模型。

如題,什麼是OSI參考模型?

喲喲認為OSI參考模型就是將網絡通信的完整過程採用分層的體系結構進行細分,方便人們理解網絡具體的通信過程。

OSI參考模型分為七層,分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層,每一層都有對應的功能。

下面喲喲來詳細介紹一下:

1、物理層

就是為設備之間的數據通信提供可靠的傳輸環境;

2、數據鏈路層

就是為數據傳輸提供數據通道;

3、網絡層

完成數據包的路由轉發功能,以及負責處理分片和錯誤檢測;

4、傳輸層

提供端到端傳輸的服務;

5、會話層

提供會話的建立和維持服務;

6、表示層

將數據轉化為應用層可以讀取的內容格式;

7、應用層

實現應用進程之間的信息交換;

每一層會有對應的協議,通過將網絡通信過程細分至七層,可以更好的去理解網絡通信的過程以及各協議的應用過程。

歡迎大家多多關注我,在下方評論區說出自己的見解。


分享到:


相關文章: