tcp/ip參考模型分為4層,分別為:1、資料鏈結層,實現網卡介面的網路驅動程序,以處理資料在實體媒介上的傳輸;2、網路層,實現資料包的選路與轉送;3、傳輸層,為兩台主機上的應用程式提供端對端的通訊;4、應用層,負責處理應用程式的邏輯。
TCP/IP協定族是四層協定係統,自底而上分別是資料鏈結層、網路層、傳輸層、應用層。每一層完成不同
的功能,且透過若干協定來實現,上層協定使用下層協定提供的服務。
資料鏈結層(網路介面層)
#資料鏈結層實作了網路卡接口的網路驅動程序,以處理資料在實體媒介(如乙太網路、令牌環等)上的傳輸。
資料鏈結層兩個常用的協定是ARP協定(Address Resolve Protocol,位址解析協定)和RARP協定(ReverseAddress Resolve Protocol,逆位址解析協定)。它們實現了IP位址和機器實體位址(通常是MAC位址,乙太網路、令牌環和802.11無線網路都使用MAC位址)之間的相互轉換。
網路層使用IP位址尋址一台機器,而資料鏈結層使用實體位址尋址一台機器,因此網路層必須先將目標機器的IP位址轉換成其實體位址,才能使用資料鏈結層提供的服務,這就是ARP協定的用途。
RARP協定僅用於網路上的某些無磁碟工作站。因為缺乏儲存設備,無磁碟工作站無法記住自己的IP位址,但它們可以利用網路卡上的實體位址來向網
絡管理者(伺服器或網路管理軟體)查詢自身的IP位址。運行RARP服務的網路管理者通常存有該網路上所有機器的實體位址到IP位址的對應。
網路層
網路層實作封包的選路與轉送。
WAN(Wide Area Network,廣域網路)通常使用眾多分級的路由器來連接分散的主機或LAN(Local Area Network,區域網路),因此,通訊的兩台主機一般不是直接相連的,而是透過多個中間節點(路由器)連接的。網路層的任務就是選擇這些中間節點,以決定兩台主機之間的通訊路徑。同時,網路層對上層協定隱藏了網路拓撲連接的細節,使得在傳輸層和網路應用程式看來,通訊的雙方是直接相連的。
網路層最核心的協定是IP協定(Internet Protocol,因特網協定)。 IP協定根據封包的目的IP位址來決定如何投遞它。如果封包無法直接傳送給目標主機,那麼IP協定就為它尋找一個合適的下一跳(next hop)路由器,並將封包交付給該路由器來轉送。多次重複此過程,資料包最終到達目標主機,或因發送失敗而被丟棄。可見,IP協定使用逐跳(hop by hop)的方式來決定通訊路徑。
網路層另一個重要的協定是ICMP協定(Internet Control Message Protocol,因特網控制封包協定)。它是IP協定的重要補充,主要用於偵測網路連線。
8位元類型欄位用於區分封包類型。它將ICMP封包分為兩大類
錯誤封包,這類封包主要用來回應網路錯誤,例如目標無法到達(類型值為3)和重定向(類型值為5);
查詢封包,這類封包用來查詢網路信息,例如ping程式就是使用ICMP封包查看目標是否可到達(類型值為8)的。
有的ICMP封包也使用8位元代碼欄位來進一步細分不同的條件。例如重定向封包使用代碼值0表示對網路重定向,代碼值1表示對主機重定向。
ICMP封包使用16位元校驗和欄位對整個封包(包括頭部和內容部分)進行循環冗餘校驗(Cyclic Redundancy Check,CRC),以檢驗封包在傳輸過程中是否損壞。不同的ICMP封包類型有不同的正文內容。
傳輸層
傳輸層為兩台主機上的應用程式提供端到端(end to end)的通信。與網路層所使用的逐跳通訊方式不同,傳輸層只關心通訊的起始端和目的端,而不在乎封包的中轉過程。
#垂直的實線箭頭表示TCP/IP協定族各層之間的實體通訊(資料包確實是沿著這些線路傳遞的),而水平的虛線箭頭表示邏輯通訊線路。此圖中也附帶描述了不同實體網路的連接方法。可見,
資料鏈結層(驅動程式)封裝了實體網路的電氣細節;網路層封裝了網路連接的細節;傳輸層則為應用程式封裝了一條端到端的邏輯通訊鏈路,它負責資料的收發、連結的超時重連等。
傳輸層協定:TCP協定、UDP協定。
TCP協定(Transmission Control Protocol,傳輸控制協定)為應用層提供可靠的、連接導向的和基於流(stream)的服務。 TCP協定使用逾時重傳、資料確認等方式來確保資料包正確地傳送至目的端,因此TCP服務是可靠的。使用TCP協定通訊的雙方必須先建立TCP連接,並在核心中為此連接維持一些必要的資料結構,例如連接的狀態、讀寫緩衝區,以及諸多定時器等。當通訊結束時,雙方必須關閉連線以釋放這些核心資料。 TCP服務是基於流的。基於流的資料沒有邊界(長度)限制,它源源不斷地從通訊的一端流入另一端。發送端可以逐個位元組地向資料流中寫入數據,接收端也可以逐個位元組地將它們讀出。
UDP協定(User Datagram Protocol,使用者資料報協定)則與TCP協定完全相反,它為應用層提供不可靠、無連線和基於資料報的服務。 「不可靠」表示UDP協定無法保證資料從傳送端正確傳送到目的端。如果資料在中途遺失,或者目的端透過資料校驗發現資料錯誤而將其丟棄,則UDP協定只是單地通知應用程式發送失敗。因此,使用UDP協定的應用程式通常要自行處理資料確認、逾時重傳等邏輯。 UDP協定是無連線的,即通訊雙方不保持一個長久的聯繫,因此應用程式每次發送資料都要明確指定接收端的位址(IP位址等資訊)。基於數據報的服務,是相對基於流的服務而言的。每個UDP資料封包都有一個長度,接收端必須以該長度為最小單位將其所有內容一次讀出,否則資料將被截斷。
應用層
#應用程式層負責處理應用程式的邏輯。
資料鏈結層、網路層和傳輸層負責處理網路通訊細節,這部分必須既穩定又高效,因此它們都在核心空間中實現。而應用層則在用戶空間實現,因為它負責處理眾多邏輯,例如檔案傳輸、名稱查詢和網路管理等。如果應用層也在核心中實現,則會使核心變得非常龐大。當然,也有少數伺服器程式是在核心中實現的,這樣程式碼就無須在用戶空間和核心空間來回切換(主要是資料的複製),大大提高了工作效率。不過這種程式碼實現起來較複雜,不夠靈活,且不便於移植。
ping是應用程序,而不是協議,前面說過它利用ICMP報文檢測網路連接,是調試網路環境的必備工具。
telnet協議是一種遠端登入協議,它使我們可以在本地完成遠端任務。
OSPF(Open Shortest Path First,開放最短路徑優先)協議是一種動態路由更新協議,用於路由器之間的通信,以告知對方各自的路由資訊。
DNS(Domain Name Service,網域名稱服務)協定提供機器網域到IP位址的轉換。
應用層協定(或程式)可能會跳過傳輸層直接使用網路層提供的服務,例如ping程式和OSPF協定。應用層協定(或程式)通常既可以使用TCP服務,又可以使用UDP服務,例如DNS協定。我們可以透過/etc/services檔案查看所有知名的應用層協議,以及它們都能使用哪些傳輸層服務。
五層協定背後的想法:上層屏蔽下層細節,只使用其提供的服務。 高內聚低耦合,每一層專注於其功能,各層之間的關係依賴不大。
封包在每層有不同的格式,從上到下依序叫段,資料報,幀,資料從應用層透過協定堆疊向下傳遞,每經過一層加上對應層協定的報頭,最後封裝成訊框發送到傳輸媒體上,到達路由器或目的主機剝掉頭部,交付給上層需要者。 這個過程稱為封裝,傳輸,分離,分用。
以上是tcp/ip參考模型分為哪幾層?的詳細內容。更多資訊請關注PHP中文網其他相關文章!