您好,登錄后才能下訂單哦!
OSI七層模型
OSI:開放系統互聯模型,是一套較為完整的網絡體系結構。
自底向上共有七層,依次是 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。其中前四層是涉及到操作系統層面涉及到數據傳遞服務的,后三層是用來對用戶提供服務的。
物理層:物理層最底層的,屬于硬件層面,設計到的主要是電信號的傳遞、物理接口、電氣特性等
數據鏈路層:數據鏈路層主要是負責在傳輸數據的過程中,向數據包添加MAC【1】包頭等信息;同時數據鏈路層還兼具錯誤檢測和修正的功能(載波監聽多路訪問),一旦數據傳輸錯誤,可以要求重新傳輸數據包,來進行數據修正。
網絡層:網絡層負責在數據包中添加IP【2】包頭,收發的IP都需要添加,用來選擇通路,即數據發送的路徑。因為數據的發送可能跨多個網段,中間要經過多個路由器的中轉。
傳輸層:傳輸層要做的是確定傳輸協議的可靠性,常見的傳輸協議有 TCP 和 UDP 【3】 。同時還要確定端口號 ,每種傳輸協議都有自己特定的端口號,Linux下有65525個端口
會話層:確定網絡服務是否要經過會話層
表示層:數據進行數據化,轉變為計算機可以是被的信息,同時實現加密、壓縮等功能
應用層:提供用戶接口
【1】:MAC地址是用來確定局域網內的某一臺主機的,局域網之間的通信由交換機實現,交換機只能識別MAC地址。
【2】:IP地址是網絡上主機的唯一標識,網絡上的通信由路由器實現,通過對IP的判斷實現。
【3】:TCP(傳輸控制協議)和UDP(用戶數據報協議)都屬于傳輸協議。UDP的傳輸速度要更快,但不面向連接,也不保證可靠性,會導致數據丟失。使用UDP協議的應用程序需要自己完成丟包重發、消息排序等過程;TCP是一種面向連接的,可靠的協議,傳輸更加的安全可靠。這就好比QQ上發送消息,通常采用的是UDP協議,因為它不在乎是否發送成功,不進行檢測,沒有網絡之后信息發送失敗;而像大型網絡游戲,數據的傳輸采用的是TCP協議!
盡管OSI模型相當的完善,但由于OSI協議實現起來太過復雜,而且效率很低,而且層析劃分不太合理,有些功能在多個層次中重復出現,導致了OSI模型最終也僅僅是一個理論模型,并沒有付諸時間。當然還有一些其他的商業管理方面的原因。
與此同時,TCP/IP協議隨著因特網在全世界的覆蓋,慢慢成了實際上的國際標準,TCP/IP協議是四層的,但也有一種五層模型,將物理層也劃入該模型,這里我們是基于協議棧的討論,不和硬件相關,所以這里以四層模型為準。(我們可以簡單的認為這里的協議棧是純軟件的概念,只涉及了邏輯和數據)
TCP/IP四層模型
OSI模型到TCP/IP四層模型的對應關系如上。每一層都呼叫它的下一層所提供的網絡來完成自己的需求,每一層的功能如下:
應用層:應用層是面向用戶的,屬于應用程序之間溝通的層,它要求數據通信必須符合某種邏輯 。常見的服務或協議有 http與https、talnet、DNS、SMTP、FTP 、代理服務器 等;
傳輸層:傳輸層與OSI模型中對應的傳輸層功能基本一致,用來確保數據傳輸方式,TCP或UDP,并且確定數據已經被送達并接收,保證了數據包的順序傳送及數據的完整性;
網際層:提供基本的數據封包,對包頭進行封裝,實現數據包可以發送到目標主機(實現跨網段,但不保證是否被正確接收),有三個重要的協議:IP、IGMP、ICMP【1】;
網絡接口層/鏈路層:網絡接口層是實際發送數據的,對數據封裝了MAC地址包頭,該層是對實際的網路媒體的管理,解決了局域網 之間的數據傳輸。(實際上,TCP/IP并未定義該層的協議,由參與互聯的各網絡使用自己的物理層和數據鏈路層協議,然后與TCP/IP的網絡接口層進行連接)
地址解析協議 ARP 工作在該層。
【1】:IGMP-->互聯網組管理協議; ICMP-->互聯網控制報文協議; IP-->網際協議
ICMP:通常我們使用的ping命令,向某一IP地址發送一個數據包,通過接收回應,判斷本地與該IP二者是否相通。
局域網
局域網內的所有主機共享同一根主線,所有信息都會發送到線上,這些信息可以被所有主機收到,當主機分析數據包不是給自己的,直接丟棄,丟棄過程對上層不可見。
局域網有以太網和令牌環網之分。
以太網:所有主機都可以向共享線上發送數據;數據發生沖突通過算法調度發送順序;
令牌環網:誰有令牌誰可以向線上發送數據,類似于線程通信中的鎖。
每個局域網都可以叫做一個碰撞域,交換機可以將局域網一分為n,每個小局域網之間任然可以通信,但可以減小碰撞。
兩個局域網之間的通信通過路由器實現。
TCP/IP協議棧與數據包的封裝
1、局域網內部的通信
TCP/IP協議棧分為四部分,應用層、傳輸層、網際層、鏈路層。
每一層都有著自己的協議,上面已經說過。這里以FTP文件傳輸協議為例,剖析局域網內基于TCP/IP協議的通訊過程。
數據發送的過程:
對于四層模型而言,傳輸層以下機制都是有內核提供,應用層由用戶進程提供。由于兩臺主機之間的通信必須依靠到最底層的bit流,因此在應用層的信息,需要從最上層依次傳遞到最下層,期間的每一次協議都會對應用層要發送的信息進程封裝(在數據前加上各自的包頭).
任何一層都認為上層交給自己的內容都是數據,我們把上一層交給自己的所有數據叫做該層的有效載荷。
Appl包頭與用戶數據類型相關,如果用戶使用的是FTP文件傳輸協議的話,Appl就是FTP頭。
不同的協議層對數據包有不同的稱謂,
在傳輸層叫做 段(segment);
在網絡層叫做 數據報(datagram);
在鏈路層/網絡接口層叫做 幀(frame)。
當數據被封裝成幀之后,會發送到傳輸介質上,至此,數據發送過程結束;到達目的主機之后,每層協議再剝離相應的首部,最后將應用層用戶數據交給應用程序處理,這個過程叫做數據接收。
數據接收的過程:
數據的發送過程,由于是自上而下進行封裝,因此當應用程序確定好發送數據之后,封裝流程是唯一,采用的協議也是確定的。
數據接收的過程中,從下向上,可能是一對多的關系,這是因為當下層獲得數據之后,不知道該給交給上層的哪個協議來進行解包,所以下層解包之后,向上傳傳輸有效載荷時,必須判斷該有效載荷對應的協議。
當網絡接口層接收到數據之后,首先根據以太幀頭首部中“上層協議”字段,確定該數據幀的有效載荷,然后交給相應的協議去處理。之后的解包過程都是如此,換句話說,以太幀包頭,IP包頭,都包含了“上層協議 ”字段。當解包到TCP包頭之后,根據TCP包頭收首部的“端口號”字段確定該該將數據交給哪個進程,也就是說,用戶層的每個協議都對應著一個端口號,端口號是同一臺主機上標識不同進程的地址。
注意:
1、相同的協議層,都認為和彼此直接溝通,上層不知道下層做了哪些事。
2、應用層屬于用戶層,由用戶提供;下三層屬于Kernel層,即內核層。下三層接口之間屬于系統調用。下三層是真正用來處理通信的過程。
2、跨網段之間的通信
為了完整性,這里還是以FTP文件傳輸協議為例,這里的跨網段使用的是以太網和令牌環網之間。
首先我們要知道的是,如果需要跨網段進行通信,需要路由器來實現。以太網和令牌環網之間除了在向共享線上發消息時防止沖突的機制不同,其他的并沒有太大的區別。
鏈路層:
鏈路層 有著以太網和令牌環網等標準。交換機是工作在鏈路層的設備,可以在不同的鏈路層網路之間轉發數據幀,但不同標準下的幀格式不同,因此交換機要將進來的數據包拆掉鏈路層,并重新封裝新的鏈路層之后再發出。
鏈路層 的主要任務:負責網卡設備的驅動,幀同步(網線上檢測什么信號算作新幀的開始),沖突檢測(如果檢測到沖突,數據自動重發),數據差錯校驗
網絡層:
網絡層的IP協議是構成Internet的基礎,在Internet上有著大量的路由器,負責根據IP地址選擇合適的路徑轉發數據包。路由器兼具交換機的功能。需要解掉鏈路層和網絡層的包頭,并重新封包。
IP協議不保證傳輸的可靠性,數據包在傳輸過程中可能丟失,可靠性可以在上層協議或應用程序中提供支持。(傳輸層的TCP,或應用程序)可靠性是綜合的,安全到達,順序到達,完整到達,不可重復。
IP:能夠提供主機到主機的服務,提供了軟件層面上的虛擬化,站在用戶的角度,任然覺得是在直接和同一層通信。類似的虛擬化功能還有(虛擬內存,Linux下一起皆文件)IP可以通過網路路由跨網段通信。對于使用者而言,感覺不到底層的網絡差異。
網絡層負責點到點的通信,即在主機和路由器,路由器和路由器之間進行通信,而再向上的傳輸層負責的是端到端之間的通信,即主機和主機之間的通信。傳輸層通過TCP協議可以實現IP層傳輸的可靠性,如果在傳輸層使用UDP,則需要應用程序需要自己完成丟包重發、消息排序等工作。
--------muhuizz整理
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。