目前最詳細的tcp三次握手跟四次揮手詳解

  閒來無事,整理下之前的筆記,發現當初學習時作的關於tcp三次握手跟四次揮手的筆記挺詳細的。開博三年以來,都是向廣大博友源源汲取,而不曾奉獻一字一語,實感慚愧,博主始終堅信,應該懷有感恩之心,當本身弱小時,你從他人以及這個社會學得知識,待本身有能力時,應該去反哺這個社會,受人於好反之以更多人好,應該有達則兼濟天下這個覺悟,這樣世界纔會變成美好的人間嘛。說了這麼多,讓咱們言歸正傳,開始此次的主題。服務器

  如下涉及的有關部份內容或者圖片有的來自網絡,若有侵權還請聯繫博主。網絡

  關於tcp三次握手跟四次揮手,不少學網絡和計算機的人應該都熟悉,可是有的只是只知其一;不知其二,固然這裏說的只知其一;不知其二隻是相對於初學者以及像博主這種菜鳥,大神就另當別論了,要想完全搞清楚tcp三次握手跟四次揮手,首先要弄清楚的是網絡體系結構,這對於咱們更好的理解tcp三次握手跟四次揮手有重大意義,下面就讓咱們一一道來。socket

.OSI與TCP/IP體系結構模型:tcp

     

  功能:採用分層的思想,每一層向上層提供服務,同時使用下層提供的服務學習

  1.物理層:爲數據端設備提供原始比特流的傳輸的通路編碼

       例如:網絡通訊的數據傳輸介質,由電纜與設備共同構成加密

       常見:主要設備有中繼器,集線器,網線,HUB等spa

 

  2.數據鏈路層:在通訊的實體間創建數據鏈路連接操作系統

    例如:將數據分幀,並處理流控制,物理地址尋址,重發等3d

    常見:網卡,網橋,二層交換機(協議解析只會解析到數據鏈路層)

 

  3.網絡層:實現點到點的傳輸,爲數據在結點之間傳輸建立邏輯鏈路,並分組轉發數據

        例如:對子網間的數據包進行路由選擇

        常見:路由器(只能解析網絡層),多層交換機,防火牆

 

  4.傳輸層:提供應用進程之間的邏輯通訊,實現端到端的傳輸,最重要的是端口port,port決定將數據交給那一個進程

    例如:創建鏈接,處理數據包錯誤,數據包次序

    常見:TCP, UDP, 進程,端口(socket)

 

  5.會話層:創建端鏈接並提供訪問驗證和會話管理(SESSION)

    例如:使用校驗點可使會話在通訊失效時從校驗點恢復通訊

    常見:服務器驗證用戶登陸,斷點續傳

 

  6.表示層:提供數據格式轉換服務

    例如:解密與加密,圖片解碼和編碼,數據的壓縮和解壓縮

    常見:URL加密,口令加密,圖片編解碼

 

  7.應用層:訪問網絡服務的接口

    例如:爲操做系統或網絡應用程序提供訪問網絡服務的接口

    常見:Telnet, FTP, HTTP, SNMP, DNS等。 

.Wireshark抓包圖解 (TCP三次握手四次揮手詳解): 

 (一)前導

    wireshark抓到的包與對應的協議層以下圖所示:

            

    1. Frame:物理層的數據幀概況

    2. Ethernet II:數據鏈路層以太網幀頭部信息

    3. Internet Protocol Version 4:互聯網層IP包頭部信息

    4. Transmission Control Protocol:傳輸層的數據段頭部信息,此處是TCP

    5. Hypertext Transfer Protocol:應用層的信息,此處是HTTP協議

 (二)TCP協議

       TCP是一種面向鏈接(鏈接導向)的、可靠的基於字節流的傳輸層通訊協議。TCP將用戶數據打包成報文段,它發送後啓動一個        定時器,另外一端收到的數據進行確認、對失序的數據從新排序、丟棄重複數據。

    TCP的特色有:

   1. TCP是面向鏈接的運輸層協議

   2. 每一條TCP鏈接只能有兩個端點,每一條TCP鏈接只能是點對點的

   3. TCP提供可靠交付的服務

   4. TCP提供全雙工通訊。數據在兩個方向上獨立的進行傳輸。所以,鏈接的每一端必須保持每一個方向上的傳輸數據序號。

   5. 面向字節流。面向字節流的含義:雖然應用程序和TCP交互是一次一個數據塊,但TCP把應用程序交下來的數據僅僅是一連串的         無結構的字節流

    TCP報文首部,以下圖所示:

  

   1. 源端口號:數據發起者的端口號,16bit

   2. 目的端口號:數據接收者的端口號,16bit

   3. 序號:32bit的序列號,由發送方使用

   4. 確認序號:32bit的確認號,是接收數據方指望收到發送方的下一個報文段的序號,所以確認序號應當是上次已成功收到數據         字節序號加1。

   5. 首部長度:首部中32bit字的數目,可表示15*32bit=60字節的首部。通常首部長度爲20字節。

   6. 保留:6bit, 均爲0

   7. 緊急URG:當URG=1時,表示報文段中有緊急數據,應儘快傳送。

   8. 確認比特ACK:ACK = 1時表明這是一個確認的TCP包,取值0則不是確認包。

   9. 推送比特PSH:當發送端PSH=1時,接收端儘快的交付給應用進程。

   10. 復位比特(RST):當RST=1時,代表TCP鏈接中出現嚴重差錯,必須釋放鏈接,再從新創建鏈接。

   11. 同步比特SYN:在創建鏈接是用來同步序號。SYN=1, ACK=0表示一個鏈接請求報文段。SYN=1,ACK=1表示贊成創建連         接。

   12. 終止比特FIN:FIN=1時,代表此報文段的發送端的數據已經發送完畢,並要求釋放傳輸鏈接。

   13. 窗口:用來控制對方發送的數據量,通知發放已肯定的發送窗口上限。

   14. 檢驗和:該字段檢驗的範圍包括首部和數據這兩部分。由發端計算和存儲,並由收端進行驗證。

   15. 緊急指針:緊急指針在URG=1時纔有效,它指出本報文段中的緊急數據的字節數。

   16. 選項:長度可變,最長可達40字節

  wireshark捕獲到的TCP包中的每一個字段以下圖所示:

   

 (三)TCP三次握手

   下圖是tcp三次握手的基本示意圖:

   

   三次握手包:

    

   第一次握手:

         客戶端向服務器發送連接請求包,發送SYN報文並置發送初始序號爲0(seq=0) 

   

   第二次握手:

         服務器收到客戶端發過來報文,由SYN=1知道客戶端要求創建聯機。向客戶端發送一個SYN和ACK都置爲1的TCP報文,設           置初始序號 Y=0,即Seq=0,將確認序號設置爲客戶的序列號加1,即X+1 = 0+1=1, 也就是Ack=1以下圖:

   

   第三次握手:

         客戶端收到服務器發來的包後檢查確認序號(Acknowledgement Number)是否正確,即第一次發送的序號加1(X+1=               1)。以及標誌位ACK是否爲1。若正確,客戶端再次發送確認包,ACK標誌位爲1,SYN標 志位爲0。確認序號(Acknowledgeme         nt Number)=Y+1=0+1=1,發送序號爲X+1=1。服務器收到後確認序號值與ACK=1則鏈接創建成功,能夠傳送數據了。

   

 (四)tcp四次揮手

   

   第一次揮手:

         客戶端給服務器發送TCP包,用來關閉客戶端到服務器的數據傳送。將標誌位FIN和ACK置爲1,序號爲X=393,確認序號爲          Z=355。

   

   第二次揮手:

         服務器收到FIN後,發回一個ACK(標誌位ACK=1),確認序號爲收到的序號加1,即X=X+1=394。序號爲收到的確認序號=           Z=355。

    

   第三次揮手:

         服務器關閉與客戶端的鏈接,發送一個FIN和ACK。標誌位FIN和ACK置爲1,序號爲Y=355,確認序號爲X=394。

   

   第四次揮手:

         客戶端收到服務器發送的FIN以後,發回ACK確認(標誌位ACK=1),確認序號爲收到的序號加1,即Y+1=356。序號爲收到的          確認序號X=394。

   

   但願對剛接觸的學習者有所幫助,若有問題歡迎你們指出,共同交流學習,創做不易,轉載還請註明出處!

相關文章
相關標籤/搜索