TCP/IP 學習筆記 · TCP/IP 是什麼?

TCP/IP 是什麼?

TCP/IP 全程是 Transfer Control Protocol/Internet Protocol,即傳輸控制協議/網際協議。

  • OSI 參考模型
    在這裏插入圖片描述

  • OSI 與 TCP/OP 參考模型對照圖
    OSI與TCP/IP參考模型對照圖

OSI由於體系比較複雜,不太方便計算機軟件實現,逐漸退出人們關注的視野,TCP/IP 得到了廣泛的應用。
TCP/IP 是 Internet 的核心技術,所有的系統、終端、線路、用戶、開發者,都必須遵守 TCP/IP 協議族所規定的法則,否則,將不被 IP 世界所接受。

TCP/IP 是一個協議組,不僅包括TCP、IP,還包括 HTTP、TELNET、FTP、UDP、pop3 等,只不過 TCP/IP 這個名字來源於協議組中最重要的兩個協議—— TCP(傳輸控制協議)和 IP (網際協議)。

在這裏插入圖片描述

TCP/IP 各層主要功能

  1. 網絡接口層(數據鏈路層)

    TCP/IP 並沒有嚴格定義該層,他只要求能夠提供給其上層——網絡層一個訪問接口,以便在其上傳遞 IP 分組。由於這一層未被定義,所以其具體的實現方法將隨着網絡類型的不同而不同。

    以太網是 IP 通信中數據鏈路層最常見的形式,除此之外,還有PPP、HDLC等,10Gbit/s 以下的以太網一般用於局域網,而PPP、HDLC 則應用於廣域網範圍更多。

  2. 網絡層(Internet Layer)
    網絡層俗稱 IP 層,它處理機器之間的通信。IP 是一個不可靠,無連接協議,它接受來自傳輸層的請求,傳輸某個具有目的地址信息的分組。該層把分組封裝到 IP 數據報中,填入數據報的首部(也稱爲報頭),使用路由算法來選擇是直接把數據報發送到目標及還是

  3. 傳輸層
    傳輸控制協議(Transmission Control Protocol,TCP)和用戶數據報協議(User Datagram Protocol,UDP)是該層的重要協議。

    TCP 是一個面向連接的、可靠的協議。
    在發送端:它負責把上層傳輸下來的的字接口分成報文段並傳遞給下層。在接收端:它負責把收到的報文進行重組後遞交給上層。TCP 還要處理端到端的流量控制。
    UDP 是一個不可靠、無連接協議,主要適用於不需要對報文進行排序和流量控制的場合。

TCP 報文格式

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

TCP 報文

  1. 源端口與目的端口字段——各佔 16bit。端口是傳輸層與應用層的服務接口。
  2. 序號字段—— SEQ 序號,佔 32bit。TCP 連接中傳輸的數據流中的每一個字節都編上一個序號,序號字段的值則值得是本報文段所發送的數據的第一個字節的序號。
  3. 確認序號:ACK 序號,佔 32bit,是期望收到對方的下一個報文段的數據的第一個字節的序號。只有 ACK 標誌位爲 1 的時候,確認序號字段纔有效,ACK = SEQ + 1。
  4. 標誌位:共 6 個,即 URG、ACK、PSH、RST、SYN、FIN 等。
  5. 數據偏移——佔 4bit ,它指出TCP報文段的數據起始處距離 TCP 報文段段起始處有多遠。
  6. 窗口字段——佔 16bit,窗口字段用來控制對方發送的數量,單位爲字節。TCP 連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然後通知對方以確定對方的發送窗口的上限。
  7. 檢驗和——佔 16bit。檢驗和字段檢驗的範圍包括首部和數據這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節的僞首部。
  8. 緊急指針字段——佔 16bit。緊急指針在本報文段中的緊急數據的最後一個字節的序號。
  9. 選項字段——長度可變。
    10.保留字段——佔 6bit,保留爲今後使用,但目前應置爲 0 。

TCP 的三次握手和四次揮手

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

建立 TCP 需要三次握手才能建立,而斷開連接則需要四次揮手。整個過程見下圖:
TCP 建立連接、傳輸數據、釋放連接

(1)三次握手

在 TCP/IP 中,採用三次握手建立一個連接三次握手

第一次握手: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,隨機產生一個發送序號 SEQ = 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,標誌位 ACK 是否爲 1,如果正確則連接建立成功,Client 和 Server 進入 ESTABLISHED 狀態。

完成三次握手,客戶端與服務器開始傳輸數據。

(2)四次揮手

四次揮手(Four-Way Wavehand)即終止 TCP 連接,就是指斷開一個 TCP 連接時,需要客戶端和服務端總共發出 4 個包以確認連接的斷開,如下圖:
四次揮手

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

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

第三次揮手:客戶 B 也斷開 TCP 連接,此時發送一個包,其中,標誌位 FIN = 1,發送序號 SEQ = y+1 = 500,Server 也進入 LAST_ACK 狀態。

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

TCP/IP 協議體系常見術語


  1. 包(packet)是網絡上傳輸的數據片段,也成位分組。包是一種統稱,在不同的協議不同的層次,包有不同的名字。
    如 TCP/IP ,數據鏈路層的包叫幀(Frame)。IP 層的包稱爲 IP 數據報,TCP 層的包通常被稱爲 TCP 報文等,大多數包都有包頭和信息組成。包頭常常包括諸如源和目的地址、包的長度和類型指示符等信息;信息部分可以是原始數據,也可以包含另一個包。

  2. 封裝
    不同設備的對等層之間依靠封裝和解封來實現相互間的通信。

    TCP/IP 也是一種計算機書籍打包和尋址的標準方法,在數據傳輸過程中,可以形象地理解爲有兩個信封,這兩個信封分別是 TCP 和 IP。

    在發送端,要傳遞的信息被劃分成若干段,每一段塞入一個 TCP 信封,並在該信封上記錄有分段號的信息,再將 TCP 信封塞入 IP 大信封,發送到網上。

    在接收端,一個 TCP 軟件包收集信息,抽出數據,按發送前的順序還原,並加以校驗,若發現差錯,TCP 將會要求重新發送。因此,TCP/IP 在互聯網中幾乎可以無差錯的傳輸數據。

主機通信過程

在通信過程中,TCP/IP 每一層都讓數據得以通過網絡進行傳輸,這些層之間使用協議數據單元(Protocol Data Unit,PDU)彼此交換信息,確保網絡設備之間能夠通信。
不同層的 PDU 中包含有不同的信息,因此 PDU 在不同層被賦予了不同的名稱。

  • 封裝過程

傳輸層在上層數據中加入 TCP 報頭後得到的 PDU 被稱爲數據段(Segment);

數據段被傳遞給網絡層,網絡層添加 IP 包頭得到的 PDU 被稱爲數據包(Packet);

數據包被傳遞到數據鏈路層,封裝數據鏈路層報頭得到的 PDU 被稱爲數據幀(Frame);

最後,幀被轉換成比特(Bit),通過網絡介質傳輸。這種協議棧向下傳遞數據,並添加報頭和報尾的過程,稱爲“封裝”

  • 解封裝過程

數據被封裝並通過網絡介質傳輸後,接收設備將刪除添加的信息,並根據報頭中的信息,決定如何將數據沿協議棧上傳給合適的應用程序,這個過程稱爲“解封裝”。


參考文獻:《一本書讀懂TCP/IP》

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