TCP/IP四層模型

文章目錄

  • TCP/IP協議族體系結構以及主要協議
  • 數據鏈路層
  • 網絡層
  • 傳輸層
  • 應用層

TCP/IP協議族體系結構以及主要協議

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文件查看所有知名的應用層協議,以及它們都能使用哪些傳輸層服務。

五層協議背后的思想:上層屏蔽下層細節,只使用其提供的服務。高內聚低耦合,每一層專注于其功能,各層之間的關系依賴不大。

數據包在每層有不同的格式,從上到下依次叫段,數據報,幀,數據從應用層通過協議棧向下傳遞,每經過一層加上對應層協議的報頭,最后封裝成幀發送到傳輸介質上,到達路由器或者目的主機剝掉頭部,交付給上層需要者。這一過程稱為封裝,傳輸,分離,分用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382577.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ STL 容器之stack簡單使用

#include <iostream> #include <stack> #include <string> using namespace std; void test1() {stack<int> s;s.push(10);s.push(20);s.push(30);while (s.size()) {cout << "stack top is" << s.top() << endl; // 棧頂…

LRU緩存算法緩存設計和實現

什么是緩存&#xff1f; 舉個例子&#xff0c;去圖書館查資料&#xff0c;一般情況下我們會集中把我們有可能查閱的幾本書從書架取下來&#xff0c;放在我們的桌面上&#xff0c;以便交叉查閱&#xff0c;從而避免頻繁的從座位上跑到書架旁去取書。在這個例子里&#xff0c;書…

C++ STL 容器之queue

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<queue> using namespace std;/*Queue所有元素的進出都必須符合”先進先出”的條件&#xff0c; 只有queue的頂端元素&#xff0c; 才有機會被外界取用。 Queue不提供遍歷功能&#xff0c; 也不提供迭…

牛客網選擇題之并發

在分時操作系統中&#xff0c;進程調度采用&#xff08;&#xff09;算法 時間片輪轉某系統中有 3 個并發進程&#xff0c;都需要同類資源 4 個&#xff0c;試問該系統不會發生死鎖的最少資源數是&#xff1a;9 有n個進程&#xff0c;共享的同類資源數為m&#xff0c;則避免死鎖…

牛客網選擇題之linux

1.在RHEL5系統中&#xff0c;小王希望將他執行的ls命令的輸出結果保存在當前目錄下文件output.ls中&#xff0c;以供日后進行分析和使用&#xff0c;但要求不覆蓋原文件的內容&#xff0c;他應該使用的命令是&#xff08; &#xff09; ls>>output.ls > …

C++ STL容器之 list 初步

#include <iostream> #include<algorithm> #include <string> #include <list> using namespace std;//3.6.4.1 list構造函數 //list<T> lstT;//list采用采用模板類實現,對象的默認構造形式&#xff1a; //list(beg, end);//構造函數將[beg, end…

C++ STL容器值set

/* 3.7.2 set常用API 3.7.2.1 set構造函數 set<T> st;//set默認構造函數&#xff1a; mulitset<T> mst; //multiset默認構造函數: set(const set& st);//拷貝構造函數 3.7.2.2 set賦值操作 set & operator(const set & st);//重載等號操作符 swap(st)…

C++ STL容器之map 簡單使用

3.8.2.1 map構造函數 map<T1, T2> mapTT;//map默認構造函數: map(const map &mp);//拷貝構造函數3.8.2.2 map賦值操作 map& operator(const map &mp);//重載等號操作符 swap(mp);//交換兩個集合容器3.8.2.3 map大小操作 size();//返回容器中元素的數目 empty…

Manacher算法圖解

看了好久的Manacher算法&#xff0c;覺得還是要自己畫一遍&#xff0c;自己把代碼寫一遍才能理解 下面分享一下&#xff0c;如果有錯&#xff0c;希望指正 簡陋版本的&#xff0c;但是他基本只是做到了求取最長回文字符串&#xff0c;嚴格來說它并不是Manacher’s Algorithm-…

Flink 客戶端操作命令及可視化工具

Flink提供了豐富的客戶端操作來提交任務和與任務進行交互。下面主要從Flink命令行、Scala Shell、SQL Client、Restful API和 Web五個方面進行整理。 在Flink安裝目錄的bin目錄下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;這些都是客戶…

ySQL挑戰搭建一個簡易的成績管理系統的數據庫

文章為自己搜索網上資源&#xff0c;再在這里進行整理&#xff0c;所以標注為轉載 [實驗步驟](https://www.shiyanlou.com/courses/reports/1347700) 總結做實驗注意事項&#xff1a; 1.添加主鍵 2.主鍵和外鍵的關系 3.注意自增的書寫添加 mysql 如何修改、添加、刪除表主鍵…

網絡之DNS協議圖解

DNS是計算機域名系統 (Domain Name System) 域名系統采用類似目錄樹的等級結構。 域名服務器是指保存有該網絡中所有主機的域名和對應IP地址&#xff0c;并具有將域名轉換為IP地址功能的服務器。 域名服務器為客戶機/服務器模式中的服務器方&#xff0c;它主要有兩種形式&am…

C++ 謂詞,

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> using namespace std;class GreaterThen20 { public:bool operator()(int val){return val > 20;} };//一元謂詞 void test01() {vector<int>v;v.push…

網絡之ARP

地址解析協議&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根據IP地址獲取物理地址的一個TCP/IP協議。 主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機&#xff0c;并接收返回消息&#xff0c;以此確定目標的物理地址…

C++ 內建函數對象

STL內建了一些函數對象。分為:算數類函數對象,關系運算類函數對象&#xff0c;邏輯運算類仿函數。這些仿函數所產生的對象&#xff0c;用法和一般函數完全相同&#xff0c;當然我們還可以產生無名的臨時對象來履行函數功能。使用內建函數對象&#xff0c;需要引入頭文件 functi…

網絡之ICMP協議

ICMP 主要功能&#xff1a; 確認IP包是否成功送達目標地址通知在發送過程當中IP包被廢棄的具體原因改善網絡設置等 在IP通信中如果某個IP包因為某種原因未到達目標地址&#xff0c;那么這個原因由ICMP通知。 過程&#xff08;圖解TCP/IP&#xff09; ICMP類型 常見的&am…

C++ 常用算法之遍歷

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <functional> using namespace std;/* 遍歷算法 遍歷容器元素 param beg 開始迭代器 param end 結束迭代器 param _callback 函數回調或者函數…

網絡之NAT協議

由來&#xff1a; 2011年2月3日中國農歷新年&#xff0c; IANA對外宣布&#xff1a;IPv4地址空間最后5個地址塊已經被分配給下屬的5個地區委員會。2011年4月15日&#xff0c;亞太區委員會APNIC對外宣布&#xff0c;除了個別保留地址外&#xff0c;本區域所有的IPv4地址基本耗盡…

C++ 常用查找算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> using namespace std; #include <vector> #include <string> #include <functional> /* find算法 查找元素 param beg 容器開始迭代器 param end 容器結束迭代器 para…

CentOS7卸載并安裝mysql教程

MySQL安裝 先卸載其他 刪除Mysql yum remove mysql mysql-server mysql-libs mysql-server;find / -name mysql 將找到的相關東西delete掉(rm -rf /var/lib/mysql)&#xff1b;rpm -qa|grep mysql(查詢出來的東東yum remove掉) rm /etc/my.cnf查看是否還有mysql軟件&#x…