TCP/IP網絡協議基礎

2017年的春天來了,看到大部分公司在春季招聘都偏愛計算機網絡,來複習一波做一個小總結!

目錄就在上面,請點擊閱讀!


一、TCP/IP 簡介

1.1、背景介紹

TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協議和網絡協議的簡稱,它定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。
簡單的說TCP/IP就是一種在各個計算機間進行鏈接的手段,但是【注】TCP/IP 不是一個協議,而是一個協議族的統稱,裏面包括了 IP 協議、ICMP 協議、TCP 協議、以及 http、ftp、pop3 協議等。網絡中的計算機都採用這套協議族進行互聯。

1.2、網絡協議棧架構

祖傳osi七層模型和tcp/ip4層模型對性圖


TCP/IP 被分爲 4 層,每層承擔的任務不一樣,各層的協議的工作方式也不一樣,每層封裝上層數據的方式也不一樣:

  • (1)應用層:應用程序通過這一層訪問網絡,常見 FTP、HTTP、DNS 和 TELNET 協議;

  • (2)傳輸層:TCP 協議和 UDP 協議;

  • (3)網絡層:IP 協議,ARP、RARP 協議,ICMP 協議等;

  • (4)網絡接口層:是 TCP/IP 協議的基層,負責數據幀的發送和接收。


1.3、封裝和分用

封裝當應用程序發送數據的時候,數據在協議層次當中從頂向下通過每一層,每一層都會對數據增加一些首部或尾部信息,這樣的信息稱之爲協議數據單元(Protocol Data Unit,縮寫爲PDU),在分層協議系統裏,在指定的協議層上傳送的數據單元,包含了該層的協議控制信息和用戶信息。如下圖所示:


分用:當主機收到一個數據幀時,數據就從協議層底向上升,通過每一層時,檢查並去掉對應層次的報文首部或尾部,與封裝過程正好相反。

1.4、RFC

RFC(Request for Comment)文檔是所有以太網協議的正式標準,並在其官網上面公佈,由 IETF 標準協會制定。大量的 RFC 並不是正式的標準,出版的目的只是爲了提供信息。RFC 的篇幅不一,從幾頁到幾百頁不等。每一種協議都用一個數字來標識,如 RFC 3720 是 iSCSI 協議的標準,數字越大說是 RFC 的內容越新或者是對應的協議(標準)出現的比較晚。


二、鏈路層介紹

2.1、簡介


網絡層的數據單元是IP數據報,而數據鏈路層的主要工作就是將IP數據報封裝成幀,這一過程就要求數據鏈路層具有一下幾個功能要求

·        將數據封裝爲幀(frame),幀是數據鏈路層的傳送單位;

·        控制幀的傳輸,包括處理傳輸差錯,調節發送速率與接收方相匹配;

·        在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。

2.2、制幀的傳輸

2.2.1差錯控制

反饋重發

接收方通過對差錯編碼(奇偶校驗碼或 CRC)的檢查,可以判定一幀在傳輸過程中是否發生了差錯。一旦發現差錯,一般可以採用反饋重發的方法來糾正。這就要求接受方收完一幀後,向發送方反饋一個接收是否正確的信息,使發送方據此做出是否需要重新發送的決定。發送方僅當收到接收方已正確接收的反饋信號後才能認爲該幀已經正確發送完畢,否則需要重發直至正確爲止。

計時器

如果某一幀發送出現問題,一直不能發送成功,爲了避免傳輸過程停滯不前,通常引入 計時器 (Timer)來限定接收方發回反饋消息的時間間隔。當發送方發送一幀的同時也啓動計時器,若在限定時間間隔內未能收到接收方的反饋信息,即計時器超時(Timeout),則可認爲傳出的幀以出錯或丟失,就要重新發送。

序號

由於同一幀數據可能被重複發送多次,就可能引起接收方多次收到同一幀並將其遞交給網絡層的情況。爲了防止這種情況,可以採用對發送的幀編號的方法,即賦予每幀一個序號,從而使接收方能從該序號來區分是新發送來的幀還是重發的幀,以此來確定要不要將接收到的幀遞交給網絡層。

2.2.1流量控制

由於收發雙方各自使用的設備工作速率和緩衝存儲空間的差異,可能出現發送方的發送能力大於接收方接收能力的現象,此時若不對發送方的發送速率做適當的限制,前面來不及接收的幀將被後面不斷髮送來的幀淹沒,從而造成幀的丟失而出錯。

由此可見,流量控制實際上是對發送方數據流量的控制,使其發送速率不超過接收方的速率。所以需要一些規則使得發送方知道在什麼情況下可以接着發送下一幀,而在什麼情況下必須暫停發送,以等待收到某種反饋信息後再繼續發送。這就是流量控制。

2.3、PPP協議

傳說中的3P協議:

PPP(點到點協議)是爲在同等單元之間傳輸數據設計的鏈路層協議。這種鏈路提供全雙工操作,並按照順序傳遞數據。設計目的主要是用來通過 撥號或專線 方式建立 點對點 連接發送數據,使其成爲各種主機、網橋和路由器之間簡單連接的一種共通的解決方案。

點對點協議(PPP)爲在點對點連接上傳輸多協議數據包提供了一個標準方法。PPP最初設計是爲兩個對等節點之間的 IP流量傳輸提供一種封裝協議。在 TCP/IP協議集中它是一種用來同步調製連接的數據鏈路層協議。

 

2.4、SLIP協議和PPP協議

 

2.5、MTU

爲了提供足夠快的響應時間,以太網和 IEEE802.3對數據幀長度都有限制,其最大值分別爲 1500字節和 1492字節,鏈路層的這個特性稱作 MTU ,即 最大傳輸單元 

爲了提供足夠快的響應時間,以太網和 IEEE802.3對數據幀長度都有限制,其最大值分別爲 1500字節和 1492 字節,鏈路層的這個特性稱作 MTU ,即 最大傳輸單元 

當網絡層傳下來一個 IP數據報,並且其長度比鏈路層的 MTU大,那麼網絡層就需要對數據報進行分片,使每一片都小於 MTU

MTU 分爲接口 MTU和路徑MTU:接口 MTU是所指定的接口所允許發送的最大數據長度;路徑 MTU指兩臺通信主機路徑中最小的 MTU值。路徑 MTU 是不對稱的,它在兩個方向上不一定一致。

用命令 netstat -in 可以查看網絡接口的 MTU:


三、IP網際協議

IP 協議位於網絡層,它是 TCP/IP協議族中最爲核心的協議,所有的 TCPUDPICMP IGMP 數據都以 IP數據報格式傳輸。IP協議提供的是 不可靠  無連接 的數據報傳送服務。

不可靠unreliable):IP協議不能保證數據報能成功地到達目的地,它僅提供傳輸服務。當發生某種錯誤時,IP協議會丟棄該數據報。傳輸的可靠性全由上層協議來提供。

無連接connectionless):IP協議對每個數據報的處理是相互獨立的。這也說明, IP數據報可以不按發送順序接收。如果發送方向接收方發送了兩個連續的數據報(先是 A,然後是 B),每個數據報可以選擇不同的路線,因此 B可能在 A 到達之前先到達。

3.1、P數據報


版本號 4位,用於標明 IP版本號,0100表示 IPv40110表示 IPv6。目前常見的是 IPv4

首部長度 4位,表示 IP 報頭長度,包括選項字段。

服務類型(TOS) :分別有:最小時延、最大吞吐量、最高可靠性、最小花費 4種服務,如下圖所示。4個標識位只能有一個被置爲 1

總長度 16位,報頭長度加上數據部分長度,便是數據報的總長度。IP數據報最長可達 65535字節。

標識 16位,接收方根據分片中的標識字段相不相同來判斷這些分片是不是同一個數據報的分片,從而進行分片的重組。通常每發送一份報文它的值就會加 1

標誌 3位,用於標識數據報是否分片。其中的第 2位是不分段(DF)位。當 DF位被設置爲 1時,則不對數據包進行分段處理;第 3位是分段(MF)位,除了最後一個分段的 MF位被設置爲 0外,其他的分段的 MF位均設置爲 1

偏移 13位,在接收方進行數據報重組時用來標識分片的順序。

生存時間(TTL) 8位,用於設置數據報可以經過的最多的路由器個數。TTL的初始值由源主機設置(通常爲 32 64),每經過一個處理它的路由器,TTL值減 1。如果一個數據報的 TTL 值被減至 0,它將被丟棄。

協議 8位,用來標識是哪個協議向 IP傳送數據。ICMP 1IGMP 2TCP 6UDP 17GRE 47ESP 50

首部校驗和 :根據 IP首部計算的校驗和碼。

IP和目的 IP :數據報頭還會包含該數據報的發送方 IP和接收方 IP

選項 :是數據報中的一個可變長、可選的信息,不常用,多用於安全、軍事等領域。

3.2、IP地址劃分

A IP地址範圍:1.0.0.0---127.255.255.255

B IP地址範圍:128.0.0.0---191.255.255.255

C IP地址範圍:192.0.0.0---223.255.255.255

3.3、子網劃分


3.4、IP路由選擇

如果發送方與接收方直接相連(點對點)或都在一個共享網絡上(以太網),那麼 IP數據報就能直接送達。而大多數情況則是發送方與接收方通過若干個路由器(router)連接,那麼數據報就需要經過若干個路由器的轉發才能送達,它是怎麼選擇一個合適的路徑來"送貨"的呢?

IP 層在內存中有一個路由表(輸入命令 route-n 可以查看路由表),當收到一份數據報並進行發送時,都要對該表進行搜索:

  • 1、搜索路由表,如果能找到和目的 IP 地址完全一致的主機,則將 IP 數據報發向該主機;
  • 2、搜索路由表,如果匹配主機失敗,則匹配同子網的路由器(這需要子網掩碼的協助)。如果找到路由器,則將 IP 該數據報發向該路由器;
  • 3、搜索路由表,如果匹配同子網路由器失敗,則匹配同網絡號路由器,如果找到路由器,則將該 IP 數據報發向該路由器;
  • 4、如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發報;
  • 6、如果都失敗了,就丟掉這個包;
  • 7、接收到數據報的路由器再按照它自己的路由表繼續轉發,直到數據報被轉發到目的主機;
  • 8、如果在轉發過程中,IP 數據報的 TTL(生命週期)已經被減爲 0,則該 IP 數據報就被拋棄。

3.5、NAT技術

當你用 ifconfig查看 IP地址時,有時你會發現自己的 IP地址是這樣的———192.186.X.X 172.16.X.X
這是 C類網和 B類網的私有地址,這就是俗稱的內網 IP。這是因爲你的路由器採用了 NAT技術。

NATNetwork Address Translation,網絡地址轉換)是 1994年提出的。當在專用網內部的一些主機本來已經分配到了內網 IP地址,但現在又想和因特網上的主機通信時,NAT技術將其內網 IP地址轉換成全球 IP地址,然後與因特網連接,也就是說,內網的數臺主機使用了同一個全球 IP地址在上網。

NAT 技術實現了寬帶共享,而且有助於緩解 IP地址空間枯竭的問題。



四、網絡層其他協議

網絡層同樣也存在其他協議,這裏給出標題,百度都可以搜索得到所以不再一一闡述

4.4、 ARP地址解析協議

當主機通過數據鏈路發送數據的時候, IP數據報 會先被封裝爲一個 數據幀 ,而 MAC地址 會被添加到數據幀的 報頭 (鏈路層介紹時已講過)。 ARP 便是在這個過程中通過目標主機的 IP地址,查詢目標主機的 MAC地址。

4.2、RARP逆向地址解析協議


4.3、ICMP控制報文協議

通信過程中的發生各種問題時,ICMP將問題反饋,通過這些信息,管理者可以對所發生的問題作出診斷,然後採取適當的措施去解決它。

Ping+ip實際就是利用ICMP回顯請求和回顯應答報文

4.4、IGMP控制報文協議

IGMP是用於管理多播組成員的一種協議,它的作用在於,讓其他所有需要知道自己處於哪個多播組的主機和路由器知道自己的狀態。只要某一個多播組還有一臺主機,多播路由器就會把數據傳輸出去,這樣,接受方就會通過網卡過濾功能來得到自己想要的數據。爲了知道多播組的信息,多播路由器需要定時的發送 IGMP 查詢,各個多播組裏面的主機要根據查詢來回復自己的狀態。路由器來決定有幾個多播組,自己要對某一個多播組發送什麼樣的數據。


五、傳輸層:UDP協議


UDP(User Datagram Protocol)用戶數據報協議,它只在 IP數據報服務之上增加了很少一點功能,它的主要特點有:

  • (1).UDP 是無連接的,發送數據之前不需要建立連接(而 TCP 需要),減少了開銷和時延。
  • (2).UDP盡最大努力交付,不保證交付可靠性。
  • (3).UDP 是面向報文的,對於從網絡層交付下來的 IP 數據報,只做很簡單的封裝(8 字節 UDP 報頭),首部開銷小。
  • (4).UDP 沒有擁塞控制,出現網絡擁塞時發送方也不會降低發送速率。這種特性對某些實時應用是很重要的,比如 IP 電話,視頻會議等,它們允許擁塞時丟失一些數據,因爲如果不拋棄這些數據,極可能造成時延的累積。
  • (5).UDP 支持一對一、一對多、多對一和多對多的交互通信。

六、傳輸層:TCP協議

6.1、 概述

TCP 和 UDP 處在同一層——運輸層,但是它們有很多的不同。TCP 是 TCP/IP 系列協議中最複雜的部分,它具有以下特點:

  • (1) TCP 提供 可靠的 數據傳輸服務,TCP 是 面向連接的 。應用程序在使用 TCP 通信之前,先要建立連接,這是一個類似“打電話”的過程,通信結束後還要“掛電話”。

  • (2) TCP 連接是 點對點 的,一條 TCP 連接只能連接兩個端點。

  • (3) TCP 提供可靠傳輸,無差錯、不丟失、不重複、按順序。

  • (4) TCP 提供 全雙工 通信,允許通信雙方任何時候都能發送數據,因爲 TCP 連接的兩端都設有發送緩存和接收緩存。

  • (5) TCP 面向 字節流 。TCP 並不知道所傳輸的數據的含義,僅把數據看作一連串的字節序列,它也不保證接收方收到的數據塊和發送方發出的數據塊具有大小對應關係。

6.2 、報文結構

6.3、  連接的建立與釋放(3握手4揮手)

剛纔說過,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。設置時間等待是因爲,有可能最後一個確認報文丟失而需要重傳。

6.4、可靠傳輸的實現

  • (1) TCP 報文段的長度可變,根據收發雙方的緩存狀態、網絡狀態而調整。

  • (2) 當 TCP 收到發自 TCP 連接另一端的數據,它將發送一個確認。

  • (3) 當 TCP 發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段,如果不能及時收到一個確認,將重發這個報文段。這就是稍後介紹的超時重傳

  • (4) TCP 將保持它首部和數據的檢驗和。如果通過檢驗和發現報文段有差錯,這個報文段將被丟棄,等待超時重傳。

  • (5) TCP 將數據按字節排序,報文段中有序號,以確保順序的正確性。

  • (6) TCP 還能提供流量控制。TCP 連接的每一方都有收發緩存。TCP 的接收端只允許另一端發送接收端緩衝區所能接納的數據。這將防止較快主機致使較慢主機的緩衝區溢出。

可見超時重發機制是 TCP 可靠性的關鍵,只要沒有得到確認報文段,就重新發送數據報,直到收到對方的確認爲止。

6.5、超時重傳

爲了實現超時間重傳,需要注意:

  • 1.發送者發送一個報文段後,暫時保存該報文段的副本,爲發生超時重傳時使用,收到確認報文後刪除該報文段。

  • 2.確認報文段也需要序號,才能明確是發出去的那個數據報得到了確認。

  • 3.超時計時器比傳輸往返時間略長,但具體值是不確定的,根據網絡情況而變。

6.6、連續ARQ協議

也許你也發現了,按上面的介紹,超時重傳機制很費時間,每發送一個數據報都要等待確認。

在實際應用中的確不是這樣的,真實情況是,採用了流水線傳輸:發送方可以連續發送多個報文段(連續發送的數據長度叫做窗口),而不必每發完一段就停下來等待確認。

實際應用中,接收方也不必對收到的每個報文都做回覆,而是採用累積確認方式:接收者收到多個連續的報文段後,只回復確認最後一個報文段,表示在這之前的數據都已收到。

這樣,傳輸效率得到了很大的提升。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章