1. 程式人生 > >TCP/IP協議棧模型

TCP/IP協議棧模型

路由 會話管理 add 網絡設備 源地址 解密 發的 傳輸協議 認證

OSI七層模型介紹:
下面4層(物理層、數據鏈路層、網絡層和傳輸層)主要提供數據傳輸和交換功能,即以節點到節點之間的通信為主;第4層作為上下兩部分的橋梁,是整個網絡體系結構中最關鍵的部分;而上3層(會話層、表示層和應用層)則以提供用戶與應用程序之間的信息和數據處理功能為主。 物理層的主要功能是:利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸,盡可能屏蔽掉具體傳輸介質和物理設備的差異。 數據鏈路層主要功能:建立和管理節點間的鏈路。通過各種控制協議,通過差錯控制、流量控制方法,將有差錯的物理信道變為無差錯的、能可靠傳輸數據幀的數據鏈路。 該層通常又被分為介質訪問控制(MAC)和邏輯鏈路控制(LLC)兩個子層。MAC子層的主要任務是解決共享型網絡中多用戶對信道競爭的問題,完成網絡介質的訪問控制;LLC子層的主要任務是建立和維護網絡連接,執行差錯校驗、流量控制和鏈路控制。 具體工作是接收來自物理層的位流形式的數據,並封裝成幀,傳送到上一層;同樣,也將來自上層的數據幀,拆裝為位流形式的數據轉發到物理層;並且,還負責處理接收端發回的確認幀的信息,以便提供可靠的數據傳輸。 網絡層主要任務是:通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑。該層控制數據鏈路層與傳輸層之間的信息轉發,建立、維持和終止網絡的連接。具體地說,數據鏈路層的數據在這一層被轉換為數據包,然後通過路徑選擇、分段組合、順序、進/出路由等控制,將信息從一個網絡設備傳送到另一個網絡設備。 路由算法:當源節點和目的節點之間存在多條路徑時,本層可以根據路由算法,通過網絡為數據分組選擇最佳路徑,並將信息從最合適的路徑由發送端傳送到接收端。 傳輸層主要任務: 傳輸連接管理:提供建立、維護和拆除傳輸連接的功能。傳輸層在網絡層的基礎上為高層提供“面向連接”和“面向無接連”的兩種服務。 處理傳輸差錯:提供可靠的“面向連接”和不太可靠的“面向無連接”的數據傳輸服務、差錯控制和流量控制。在提供“面向連接”服務時,通過這一層傳輸的數據將由目標設備確認,如果在指定的時間內未收到確認信息,數據將被重發。 監控服務質量。 會話層主要任務: 會話管理:允許用戶在兩個實體設備之間建立、維持和終止會話,並支持它們之間的數據交換。例如提供單方向會話或雙向同時會話,並管理會話中的發送順序,以及會話所占用時間的長短。 會話流量控制:提供會話流量控制和交叉會話功能。 尋址:使用遠程地址建立會話連接。l 出錯控制:從邏輯上講會話層主要負責數據交換的建立、保持和終止,但實際的工作卻是接收來自傳輸層的數據,並負責糾正錯誤。會話控制和遠程過程調用均屬於這一層的功能。 表示層主要功能:處理用戶信息的表示問題,如數據編碼、數據格式轉換、加密解密、壓縮和解壓縮等 應用層主要功能: 用戶接口:應用層是用戶與網絡,以及應用程序與網絡間的直接接口,使得用戶能夠與網絡進行交互式聯系。 實現各種服務:該層具有的各種應用程序可以完成和實現用戶請求的各種服務。
TCP/IP協議的工作流程如下: ●在源主機上,應用層將一串應用數據流傳送給傳輸層。 ●傳輸層將應用層的數據流截成分組,並加上TCP報頭形成TCP段,送交網絡層。 ●在網絡層給TCP段加上包括源、目的主機IP地址的IP報頭,生成一個IP數據包,並將IP數據包送交鏈路層。 ●鏈路層在其MAC幀的數據部分裝上IP數據包,再加上源、目的主機的MAC地址和幀頭,並根據其目的MAC地址,將MAC幀發往目的主機或IP路由器。 ●在目的主機,鏈路層將MAC幀的幀頭去掉,並將IP數據包送交網絡層。 ●網絡層檢查IP報頭,如果報頭中校驗和與計算結果不一致,則丟棄該IP數據包;若校驗和與計算結果一致,則去掉IP報頭,將TCP段送交傳輸層。 ●傳輸層檢查順序號,判斷是否是正確的TCP分組,然後檢查TCP報頭數據。若正確,則向源主機發確認信息;若不正確或丟包,則向源主機要求重發信息。 ●在目的主機,傳輸層去掉TCP報頭,將排好順序的分組組成應用數據流送給應用程序。這樣目的主機接收到的來自源主機的字節流,就像是直接接收來自源主機的字節流一樣。 ******************************************************************** 技術分享
既然每個以太網設備在出廠時都有一個唯一的MAC地址了,那為什麽還需要為每臺主機再分配一個IP地址呢?或者說為什麽每臺主機都分配唯一的IP地址了,為什麽還要在網絡設備(如網卡,集線器,路由器等)生產時內嵌一個唯一的MAC地址呢?主要原因有以下幾點:(1)IP地址的分配是根據網絡的拓樸結構,而不是根據誰制造了網絡設置。若將高效的路由選擇方案建立在設備制造商的基礎上而不是網絡所處的拓樸位置基礎上,這種方案是不可行的。(2)當存在一個附加層的地址尋址時,設備更易於移動和維修。例如,如果一個以太網卡壞了,可以被更換,而無須取得一個新的IP地址。如果一個IP主機從一個網絡移到另一個網絡,可以給它一個新的IP地址,而無須換一個新的網卡。(3)無論是局域網,還是廣域網中的計算機之間的通信,最終都表現為將數據包從某種形式的鏈路上的初始節點出發,從一個節點傳遞到另一個節點,最終傳送到目的節點。數據包在這些節點之間的移動都是由ARP(Address Resolution Protocol:地址解析協議)負責將IP地址映射到MAC地址上來完成的。下面我們來通過一個例子看看IP地址和MAC地址是怎樣結合來傳送數據包的。 IP地址和MAC地址相同點是它們都唯一,不同的特點主要有: 1. 對於網絡上的某一設備,如一臺計算機或一臺路由器,其IP地址可變(但必須唯一),而MAC地址不可變。 2. 長度不同。IP地址為32位,MAC地址為48位。 3. 分配依據不同。IP地址的分配是基於網絡拓樸,MAC地址的分配是基於制造商。 4. 尋址協議層不同。IP地址應用於OSI第三層,即網絡層,而MAC地址應用在OSI第二層,即數據鏈路層。 ******************************************************************** TCP/IP協議棧四層模型介紹: 鏈路層
  • 將數據封裝為幀(frame),幀是數據鏈路層的傳送單位;
  • 控制幀的傳輸,包括處理傳輸差錯,調節發送速率與接收方相匹配;
  • 在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。
差錯控制: 1.反饋重發 接收方通過對差錯編碼(奇偶校驗碼或 CRC 碼)的檢查,可以判定一幀在傳輸過程中是否發生了差錯。一旦發現差錯,一般可以采用反饋重發的方法來糾正。接受方收完一幀後,向發送方反饋一個接收是否正確的信息,發送方僅當收到接收方已正確接收的反饋信號後才能認為該幀已經正確發送完畢,否則需要重發直至正確為止。 2.計時器 引入 計時器 (Timer) 來限定接收方發回反饋消息的時間間隔。計時器超時(Timeout),則可認為傳出的幀以出錯或丟失,就要重新發送。 3.序號 防止同一幀數據被重復發送多次,對發送的幀編號 流量控制 對發送方數據流量的控制,使其發送速率不超過接收方的速率。 PPP(點對點協議) PPP(點到點協議)是為在同等單元之間傳輸數據設計的鏈路層協議。這種鏈路提供全雙工操作,並按照順序傳遞數據。設計目的主要是用來通過 撥號或專線 方式建立 點對點 連接發送數據,為在點對點連接上傳輸多協議數據包提供了一個標準方法。 SLIP 協議 SLIP 的缺陷:
  • 每一端必須知道對端的 IP 地址,沒有辦法把本端 IP 地址傳遞給對端;
  • 數據幀中無類型字段,當一條串行線路使用 SLIP 時則不能使用其他協議;
  • SLIP 數據幀中無 checksum,只能依靠上層協議來發現和糾正錯誤。
******************************************************************** 網絡層 所有的 TCP、UDP、ICMP 及 IGMP 數據都以 IP 數據報格式傳輸。 IP 協議提供的是 不可靠 、 無連接 的數據報傳送服務。
  • 不可靠:IP 協議不能保證數據包能成功地到達目的地,它僅提供傳輸服務。當發生某種錯誤時,IP 協議會丟棄該數據包。傳輸的可靠性全由上層協議(如TCP)來提供。
  • 無連接:IP 協議對每個數據包的處理是相互獨立的。這也說明, IP 數據包可以不按發送順序接收。
IP數據報頭: 標識:接收方根據分片中的標識字段相不相同來判斷這些分片是不是同一個數據報的分片,從而進行分片的重組; 標誌:用於標識數據包是否分片; 偏移:在接收方進行數據報重組時用來標識分片的順序; 生存時間(TTL) :用於設置數據報可以經過的最多的路由器個數。首部校驗和 :根據 IP 首部計算的校驗和碼; 源 IP 和目的 IP :數據報頭還會包含該數據報的發送方 IP 和接收方 IP。 IP = 網絡號 + 子網號 + 主機號 子網掩碼 來確定一個 IP 地址中哪幾位是主機號; IP 路由選擇 IP 層在內存中有一個路由表(輸入命令 route -n 可以查看路由表),當收到一份數據報並進行發送時,都要對該表進行搜索:
  • 1、搜索路由表,如果能找到和目的 IP 地址完全一致的主機,則將 IP 數據報發向該主機;
  • 2、搜索路由表,如果匹配主機失敗,則匹配同子網的路由器(這需要子網掩碼的協助)。如果找到路由器,則將 IP 該數據報發向該路由器;
  • 3、搜索路由表,如果匹配同子網路由器失敗,則匹配同網絡號路由器,如果找到路由器,則將該 IP 數據報發向該路由器;
  • 4、如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發報;
  • 6、如果都失敗了,就丟掉這個包;
  • 7、接收到數據報的路由器再按照它自己的路由表繼續轉發,直到數據報被轉發到目的主機;
  • 8、如果在轉發過程中,IP 數據報的 TTL(生命周期)已經被減為 0,則該 IP 數據報就被拋棄。
網絡層其他協議: ARP(Address Resolution Protocol)、 ICMP(Internet Control Message Protocol),控制報文協議,ping 程序(對兩臺主機之間連通性進行測試)和 traceroute 程序(偵測主機到目的主機之間所經路由情況)是兩個常見的 基於 ICMP 協議 的工具。 IGMP(Internet Group Management Protocol)組管理協議 ARAR(逆向地址解析協議) ARP地址解析協議 當主機通過數據鏈路發送數據的時候, IP 數據報會先被封裝為一個 數據幀 ,而 MAC 地址 會被添加到數據幀的 報頭 (鏈路層介紹時已講過)。 ARP 便是在這個過程中通過目標主機的 IP 地址,查詢目標主機的 MAC 地址。 在你的電腦和路由器中都有一個 ARP 緩存表 ,其中保存的是近期(20 分鐘)與自己有過通信的主機的 IP 地址與 MAC 地址的對應關系。 ARP 緩存表使用過程:
  • 當主機要發送一個 IP 數據報的時候,會首先查詢一下自己的 ARP 緩存表;
  • 如果在 ARP 緩存表中找到對應的 MAC 地址,則將 IP 數據報封裝為數據幀,把 MAC 地址放在幀首部,發送數據幀;
  • 如果查詢的 IP-MAC 值對不存在,那麽主機就向網絡中廣播發送一個 ARP 請求數據幀,ARP 請求中包含待查詢 IP 地址;
  • 網絡內所有收到 ARP 請求的主機查詢自己的 IP 地址,如果發現自己符合條件,就回復一個 ARP 應答數據幀,其中包含自己的 MAC 地址;
  • 收到 ARP 應答後,主機將其 IP - MAC 對應信息存入自己的 ARP 緩存,然後再據此封裝 IP 數據報,再發送數據幀。
******************************************************************** 傳輸層 技術分享
  • 常見的應用程序占用的系統端口號:
應用層協議: FTP TELNET SMTP DNS TFTP HTTP SNMP
系統端口號: 21 23 25 53 69 80 161
UDP(User Datagram Protocol)用戶數據報協議 主要特點有:
  • (1).UDP 是無連接的,發送數據之前不需要建立連接(而 TCP 需要),減少了開銷和時延。
  • (2).UDP盡最大努力交付,不保證交付可靠性。
  • (3).UDP 是面向報文的,對於應用層交付的數據,只做很簡單的封裝(8 字節 UDP 報頭),首部開銷小。
  • (4).UDP 沒有擁塞控制,出現網絡擁塞時發送方也不會降低發送速率。這種特性對某些實時應用是很重要的,比如 IP 電話,視頻會議等,它們允許擁塞時丟失一些數據,因為如果不拋棄這些數據,極可能造成時延的累積。
  • (5).UDP 支持一對一、一對多、多對一和多對多的交互通信。
【UDP報頭】:包含源端口、目的端口、校驗和(用於檢驗 UDP 數據報在傳輸過程中是否有出錯,有錯就丟棄); TCP傳輸控制協議: 主要特點:
  • (1) TCP 提供 可靠的 數據傳輸服務,TCP 是 面向連接的 。應用程序在使用 TCP 通信之前,先要建立連接,TCP建立連接三次握手,釋放連接四次握手。
  • (2) TCP 連接是 點對點 的,一條 TCP 連接只能連接兩個端點。
  • (3) TCP 提供可靠傳輸,無差錯、不丟失、不重復、按順序。
  • (4) TCP 提供 全雙工 通信,允許通信雙方任何時候都能發送數據,因為 TCP 連接的兩端都設有發送緩存和接收緩存。
  • (5) TCP 面向 字節流 。TCP 並不知道所傳輸的數據的含義,僅把數據看作一連串的字節序列,它也不保證接收方收到的數據塊和發送方發出的數據塊具有大小對應關系。
TCP 是面向字節流的,而 TCP 傳輸數據的單元是 報文段(Segment); 【TCP報頭】 源端口和目的端口; 序號seq: TCP 傳送的字節流中的每個字節都按順序編號,而報頭中的序號字段值則指的是本報文段數據的第一個字節的序號; 確認序號ack:占 4 字節,期望收到對方下個報文段的第一個數據字節的序號; 控制位:共有 6 個控制位,說明本報文的性質: ACK 確認:僅當 ACK=1 時確認號ack字段才有效。建立 TCP 連接後,所有報文段都必 須把 ACK 字段置為 1。 SYN 同步:用於建立和釋放連接,稍後會詳細介紹。 FIN 終止:用於釋放連接,當 FIN=1,表明發送方已經發送完畢,要求釋放 TCP 連接。 窗口:發送者自己的接收窗口大小; 檢驗和:檢查報文是否在傳輸過程中出差錯; 三、連接的建立與釋放 剛才說過,TCP 是面向連接的,在傳輸 TCP 報文段之前先要創建連接,發起連接的一方被稱為客戶端,而響應連接請求的一方被稱為服務端,而這個創建連接的過程被稱為 三次握手 : 技術分享
  • (1) 客戶端發出請求連接報文段,其中報頭控制位 SYN=1,初始序號 seq=x。客戶端進入 SYN-SENT(同步已發送)狀態。
  • (2) 服務端收到請求報文段後,向客戶端發送確認報文段。確認報文段的首部中 SYN=1,ACK=1,確認號是 ack=x+1,同時為自己選擇一個初始序號 seq=y。服務端進入 SYN-RCVD(同步收到)狀態。
  • (3) 客戶端收到服務端的確認報文段後,還要給服務端發送一個確認報文段。這個報文段中 ACK=1,確認號 ack=y+1,而自己的序號 seq=x+1。這個報文段已經可以攜帶數據,如果不攜帶數據則不消耗序號,則下一個報文段序號仍為 seq=x+1。
至此 TCP 連接已經建立,客戶端進入 ESTABLISHED(已建立連接)狀態,當服務端收到確認後,也進入 ESTABLISHED 狀態,它們之間便可以正式傳輸數據了。 當傳輸數據結束後,通信雙方都可以釋放連接,這個釋放連接過程被稱為 釋放連接 : 技術分享
  • (1) 此時 TCP 連接兩端都還處於 ESTABLISHED 狀態,客戶端停止發送數據,並發出一個 FIN 報文段。首部 FIN=1,序號 seq=u(u 等於客戶端傳輸數據最後一字節的序號加 1)。客戶端進入 FIN-WAIT-1(終止等待 1)狀態。
  • (2) 服務端回復確認報文段,確認號 ack=u+1,序號 seq=v(v 等於服務端傳輸數據最後一字節的序號加 1),服務端進入 CLOSE-WAIT(關閉等待)狀態。現在 TCP 連接處於半開半閉狀態,服務端如果繼續發送數據,客戶端依然接收。
  • (3) 客戶端收到確認報文,進入 FIN-WAIT-2 狀態,服務端發送完數據後,發出 FIN 報文段,FIN=1,確認號 ack=u+1,然後進入 LAST-ACK(最後確認)狀態。
  • (4) 客戶端回復確認確認報文段,ACK=1,確認號 ack=w+1(w 為半開半閉狀態時,收到的最後一個字節數據的編號) ,序號 seq=u+1,然後進入 TIME-WAIT(時間等待)狀態。
註意此時連接還沒有釋放,需要時間等待狀態結束後(4 分鐘) 連接兩端才會 CLOSED。設置時間等待是因為,有可能最後一個確認報文丟失而需要重傳。 TCP 可靠傳輸的實現
  • (1) TCP 報文段的長度可變,根據收發雙方的緩存狀態、網絡狀態而調整。
  • (2) 當 TCP 收到發自 TCP 連接另一端的數據,它將發送一個確認。
  • (3) 當 TCP 發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段,如果不能及時收到一個確認,將重發這個報文段。這就是稍後介紹的超時重傳。
  • (4) TCP 將保持它首部和數據的檢驗和。如果通過檢驗和發現報文段有差錯,這個報文段將被丟棄,等待超時重傳。
  • (5) TCP 將數據按字節排序,報文段中有序號,以確保順序的正確性。
  • (6) TCP 還能提供流量控制。TCP 連接的每一方都有收發緩存。TCP 的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
可見超時重發機制是 TCP 可靠性的關鍵,只要沒有得到確認報文段,就重新發送數據報,直到收到對方的確認為止。 實際應用中:發送方采用了流水線傳輸, 接收方采用累計確認方式,提升傳輸效率; ******************************************************************** 應用層 DNS (Domain Name Service 域名服務) 協議基於 UDP,使用端口號 53。 DNS 提供的是域名與 IP 地址的對應關系,而 ARP 提供的是 IP 地址和 MAC 地址的對應關系。 host 命令 進行 DNS 查詢,主機向 DNS 服務器發出的查詢叫做DNS 報文; 域名解析的的優先順序是:先在 DNS 緩存(當一個 DNS 服務器接收到一個 DNS 回答後,會將其信息緩存一段時間)查詢,若沒有找到記錄,再查詢 hosts 文件,若還是沒找到記錄,再向 DNS 服務器發出 DNS 查詢報文。 FTP (File Transfer Protocol 文件傳輸協議) 基於 TCP,使用端口號 20(數據)和 21(控制)。
  • FTP 只提供文件傳輸的基本服務,它采用 客戶端—服務器 的方式,一個 FTP 服務器可同時為多個客戶端提供服務。
  • 在進行文件傳輸時,FTP 的客戶端和服務器之間會建立兩個 TCP 連接:21 號端口建立控制連接,20 號端口建立數據連接。
  • FTP 的傳輸有兩種方式:ASCII 傳輸模式和二進制數據傳輸模式。
HTTP (HyperText Transfer Protocol 超文本傳輸協議) 基於 TCP,使用端口號 80 或 8080。
  • 點擊一個鏈接後,瀏覽器向服務器發起 TCP 連接;
  • 連接建立後瀏覽器發送 HTTP 請求報文,然後服務器回復響應報文;
  • 瀏覽器將收到的響應報文內容顯示在網頁上;
  • 報文收發結束,關閉 TCP 連接。
響應報文的狀態碼是一個 3 位數字,分為 5 類 33 種:
  • 1xx 表示通知信息,如收到或正在處理。
  • 2xx 表示成功接收。
  • 3xx 表示重定向。
  • 4xx 表示客戶的差錯,如 404 表示網頁未找到。
  • 5xx表示服務器的差錯,如常見的 502 Bad Gateway。
Telnet 協議,遠程登陸服務的標準協議和主要方式,它基於 TCP 協議,使用端口 23。 telnet 可以測試目標機器的TCP端口是否開放: telnet IP地址 端口號 TFTP 協議:簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務,它基於 UDP 協議,使用端口 69 。它只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證。 TFTP也有著它自身的優點:
  • TFTP 可用於 UDP 環境;比如當需要將程序或者文件同時向許多機器下載時就往往需要使用到 TFTP 協議。
  • TFTP 代碼所占的內存較小,這對於小型計算機或者某些特殊用途的設備來說是很重要的,TFTP 具有更多的靈活性,也減少了開銷。
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式,使用 TCP 協議,使用端口 25 ; POP3(Post Office Protocol Version 3 )即郵局協議版本3,主要用於支持使用客戶端遠程管理在服務器上的電子郵件,使用 TCP 協議,使用端口 110 。 ********************************************************************

TCP/IP協議棧模型