1. 程式人生 > >TCP/IP協議原理與介紹

TCP/IP協議原理與介紹

因此 關註 數據量 fin end F5 編號 它的 巨人

一、什麽是TCP/IP?

顧名思義 TCP/IP(Transmission Control Protocol/Internet Protocol),傳輸控制協議/網際協議,TCP/IP是現代Internet的核心技術,由IETF定義。所有的系統、終端、線路、用戶、開發者,都必須遵守TCP/IP協議族所規定的法則!IP世界的根本法就是TCP/IP協議族。這裏我又扯到協議族了,就像快樂家族,不僅僅我們很熟悉的何炅、謝娜。不僅包括主持人,還有導演、攝像等等其他工作人員。TCP/IP也就像一個組,協議族。其中還包括HTTP、Telnet、FTP、RIP、UDP等等。其名字來源於其中最主要的兩個協議-------TCP與IP。它們分別在TCP/IP模型的第二層與第三層。

二、OSI參考模型和TCP/IP參考模型

   IP世界是由通信實體過程的,而通信實體,是要分層的。分層的好處在於:

1、各層之間是獨立的。

2、靈活性好。

3、結構上可分割開。

4、易於實現和維護。

5、能促進標準化工作。

所以通信實體必須分出層次,以保證各種網絡技術能和諧地共存和良好地配合,並不斷激勵技術創新。所以在1984年,國際標準化組織(ISO)建立了一套非常抽象的分層結構,這就是著名的ISO/OSI(國際標準化組織的開發網絡架構),這對我們分析網絡通信是非常有幫助的。
技術分享圖片
物理層(第一層):物理層解決最基礎的傳送通道,涉及問題主要是建立、維護和釋放物理鏈路所需的機械的、電氣的/光學的、功能的和規程的特性,如光纜如何抗衰耗,無線設備如何提高發射功率,為什麽雙絞線要有屏蔽層等。

數據鏈路層(第二層):數據鏈路在物理層按“位”服務的基礎上,在相鄰的網絡節點直接提供簡單的、傳輸以幀為單位的數據,同時還負責流量控制、差錯控制(信號會因機器、電器氣等原因出現錯誤)。以我們經常聽到的“以太網幀”可以知道以太網就是屬於這層的。

網絡層(第三層):網絡層對上層-----傳輸層提供兩種服務,一種叫做“面向連接”的網絡服務,一種叫做“無連接”的網絡服務。網絡層擔負著四大任務:1.路由選擇 2.擁塞控制 3.局域網間互聯 4.統計和控制。我們津津樂道的IP協議就在這層起著重要的作用。

傳輸層(第四層):傳輸層的任務是向用戶提供可靠地、透明的端到端的數據傳輸以及差錯控制和流量控制機制。由於它的存在會話層、表示層、應用層的設計不必考慮底層細節,因此起到“承上啟下”的作用。假如兩臺計算機A、B需要通信,那麽A、B之間進行直接的傳輸層的通信,而在A、B之間如果有若幹網絡節點,如路由器X、Y、Z那麽A與X,X與Y,Y與Z,Z與B之間都要進行第三層的通信。TCP與UDP就屬於傳輸層。

會話層(第五層):會話層提供許多增值服務,如交互式對話管理,允許一路交互、兩路交換、兩路同時回話;管理用戶登錄遠程分時系統;在兩機器之間傳輸文件,進行同步控制等。

表示層(第六層):表示層就處理通信進程之間交換數據的表示方法,包括語法轉換、數據格式的轉換、加密與解密、壓縮與解壓縮等。

第七層(應用層):應用層正所謂站在巨人的肩膀上面的產物,底層所有協議的最終目的都是為應用層提供可靠的傳送手段,底層協議並沒有直接瞞住用戶的任何實際需求。我們日常使用的收發電子郵件、傳送文件、流量網頁、交互及時信息等都屬於應用層,是用戶體驗最直觀的服務。

 正所謂“優勝劣汰,適者生存”,OSI由於體系比較復雜,不太方便計算機軟件實現,逐漸退出人們關註的視野,TCP/IP得到了廣泛的應用。
![blockchain](https://pic3.zhimg.com/80/v2-e3e6da6551e8178d4244a272b1765efa_hd.jpg)
  對比ISO/OSI的七層結構,讀者會奇怪了:怎麽沒有表示層和會話層了呢?的確,在TCP/IP參考模型中這兩層並不是必需的。其中還有個四層模型的說法數據鏈路層與物理層表示成網絡接口層。TCP\IP體系結構最核心的部分就是上面三層:應用層、傳輸層、網絡層。

(1)網絡接口層:TCP/IP並沒有嚴格定義該層,它只是要求能夠提供給其上層-----網絡層的一個訪問接口,以便在其上傳遞IP分組。由於這一層次未被定義,所以其具體的實現方法將隨著網絡類型的不同而不同。以太網是IP通信中數據鏈路層最常見的形式,除此之外還有PPP、HDLC等10Gbit/s以下的以太網一般應用於局域網,而PPP、HDLC則應用於廣域網居多。

(2)網絡層:俗稱IP層,它處理機器之間的通信。IP是一個不可靠的、無連接協議,它接收來自傳輸層的請求,傳輸某個具有目的地址信息的分組。IP負責給互聯網的每一臺計算機或者終端分配一個地址,並將信息以IP包的形式傳送到正確的目的地。這是TCP/IP的核心。IP協議族中最關鍵的是路由協議。

(3)傳輸層:傳輸層控制協議(TCP)與用戶數據報協議(UDP)是該層的重要協議。TCP是一個面向連接的,可靠地協議。它將一臺主機發出的字節流無差錯地發往互聯網上的其他主機。在發送端,它負責把上層傳送下來的字節流分成報文段並傳遞給下層。在接收端,它負責把收到的報文進行重組後遞交給上層。TCP還要處理端到端的流量控制(滑動窗口機制)。UDP則是一個不靠譜,無連接的協議,主要適用於不需要對報文進行排序和流量控制的場合。(比如在信息傳輸中像重要文檔與短信等等適用於TCP而視頻傳輸可使用UDP)。

各個層次也對應著不同的協議如圖:。
技術分享圖片

三TCP報文格式

 TCP報文包括首部(報頭)和數據部分,其中首部的具體字段如下。

技術分享圖片

(1)源端口號和目的端口字段-----各占16bit。

(2)序號字段-----SEQ序號,占32bit。TCP連接中傳送的的數據流中的每一個字節都編上序號,序號字段的值則是本報文段所發送的數據的第一個字節的序號。

(3)確認序號-----ACK序號,32bit,是期望收到對方的寫下一個報文段的數據的第一個字節的序號。只有ACK的標誌位為1是,確認序號字段才有效,ACK=SEQ+1。

(4)標誌位:有6個如下

URG-----緊急信號表明緊急指針(urgent pointer),它能告訴系統此報文段有緊急數據,應盡快傳送。

ACK-----確認信號只有當ACK=1時確認號字段才有效。當ACK=0時,確認號無效。

PSH-----推送信號接收TCP推送bit置1的報文段,則盡快交付給接收應用進程,無需緩存。

RST-----復位信號當RST=1時,表明TCP連接中有嚴重錯誤,則釋放連接,然後再重新建立連接。

SYN-----同步信號SYN表示一個連接請求或連接接收報文。

FIN-----終止信號用來釋放一個連接。當FIN=1,表明報文段的發送端的數據已發送完畢,要求釋放運輸連接。

(5)數據偏移-----占4bit,它自出報文段的數據起始處距離TCP報文段起始處的位置。

(6)窗口字段-----占16bit,用來控制對方發送的數據量,單位為字節。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然後通知對方確定對方的發送窗口上限。

(7)檢驗和-----占16bit,檢驗報文段的首部和數據,在檢驗之前要加上12字節的偽首部。

(8)緊急指針字段-----16bit。緊急指針指出在本報文段的緊急數據的最後一個字節的序號。

(9)選項字段-----無固定長度,TCP只規定了一種選項最大報文段長度MSS。

(10)保留字段-----占6位,暫無。

四、TCP的三次握手和四次揮手

TCP的連接和建立都是采用客戶端服務器方式。主動發起連接建立的進程叫做客戶端(Client)。被動等待連接建立的叫做服務器(Server)。

建立TCP連接需要三次握手如圖
技術分享圖片

 第一次握手:Client(主機A)想Server(主機B)發送一個連接請求,在這個包中標誌位SYN=1,發送序號SEQ=x,上圖中令x=200,Client進入SYN_SEND狀態,等待Server確認。

 第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置為1,確認序號ACK=x+1=201,隨機闡釋一個發送序號y,令y=500。並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

 第三次握手:Client收到去人後,檢查確認序號ACK是否為x+1=201;標誌位ACK是否為1,如果正確,則將標誌位ACK置1,確認序號ACK=y+1=501,並將該數據包發送給Server,Server檢查確認需號ACK是否為y+1=501,標誌位是否為1,如果正確則 連接建立成功,Client和Server進入ESTABLISHED狀態。

 形象地來理解,加入客戶端是小明,服務器是小紅,小明寄了一份郵件給小紅郵件的標號就是SEQ,SYN就是短信裏面小明想處對象的意圖。小紅收到後,也寄了信給小明,SEQ同樣是小紅郵件的編號,ACK=SEQ+1就是表面自己已經收到小明前一份信息,ACK標誌位置1表明小紅同意了小明處對象的請求,SYN也表示小紅有相處對象的意圖。於是同理小明就開始寄信說我要開始追你了。然後兩人開始聊起未來······。三次握手走向未來~~~~~~!所以男生還是要主動點。

(形象理解會有小出入)

斷開TCP連接的四次揮手
技術分享圖片

第一次揮手:當客戶端A要斷開TCP連接時,發送一個包,其中標誌位FIN=1,ACK=1,發送序號SEQ=X,確認序號ACK=Z,Client進入FIN_WAIT狀態。

  第二次揮手:客戶B知道A要斷開後,發送一個確認包,其中標誌位ACK=1,發送序號SEQ=Z確認序號ACK=x+1,Server進入CLOSE_WAIT狀態。

  第三次揮手:客戶B也斷開TCP連接,此時發送一個包,其中,標誌位FIN=1,發送序號SEQ=Z+1

,Server進入LAST_ACK狀態。

  第四次揮手:客戶A收到B的斷開請求後,Client進入TIME_WAIT狀態,接著發送一個確認包,標誌位ACK=1,發送序號SEQ=x+1,確認序號ACK=Z+2,Server進入CLOSE狀態。

 同樣舉個栗子,就不拿小紅和小明作比較了畢竟剛剛才進入熱戀狀態,接下來是小濤和小翠。男人有錢就變壞,小濤是個渣男,所以首先簽了離婚協議書還有自己的一些證件(要求一個人小翠去辦理)(ack),然後附帶自己的分手信(seq)寄給小翠。ACK置1,FIN置1。小翠收到信件後,也二話沒說,先回了一份信並且說明已經收到小濤的分手信且同意了(seq+1)然後也把證件先遞過去(ack)。最後等待離婚證下來(ack+1)然後再把離婚證給小濤寄過去(ACK=1,FIN=1)。最後小濤還可恥的嘲笑了小翠一番(seq+1)ACK=1。

五、TCP/IP協議體系的常見術語

 (1)包

 包(Packet)是網絡上傳輸的數據片段,也稱為分組。包是一種統稱,在不同的協議,不同層次,包有不同的名字,如TCP/IP中,數據鏈路層的包叫做幀(Frame),IP層的包稱為IP數據報,TCP層的包常稱為TCP報文等。大多數包都由包頭和信息組成:包頭常常包括源地址和目的地址、包的長度和類型指示符等。

 (2)封裝

 不同設備的對等層之間依靠封裝和解封裝來實現相互間的通信。封裝就像洗完澡光著身子穿衣服,解封裝就像洗澡前脫衣服,脫了一層又一層直到脫光。TCP/IP也是一種計算機數據打包和尋址的標準方法。在數據傳送中,可以形象的理解為有兩個信封,TCP和IP就像信封,要傳遞的信息被劃分成若幹段,每一段塞入一個TCP信封,並在上面記錄分段信息,然後再塞入IP大信封裏面。同理接收端一步一步拆開來並校驗,若發現錯誤,TCP機制則會要求重發。因此,TCP/IP在互聯網中幾乎可以無差錯地傳送數據。

 (3)數據段,數據包.數據幀

 通信過程中,TCP/IP層與層之間有協議數據單元(Protocol Data Unit)來交換彼此的信息,確保網絡設備之間能夠通信。傳輸層在上層數據的基礎上加上TCP報頭得到的PDU叫做數據段(Segment),依次往下數據段傳給網絡層,並添加IP報頭得到的PDU叫做數據包(Packet),數據包傳給數據鏈路層添加報頭得到的PDU稱作數據幀(Frame)。最後Frame被轉換為bit在物理層通過網絡介質傳播。

TCP/IP協議原理與介紹