什麼是TCP/IP協議?TCP的三次握手指的是什麼,爲何必定要三次握手,而不是四次或者是兩次?

這裏是修真院後端小課堂,每篇分享文從java

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】程序員

八個方面深度解析後端知識/技能,本篇分享的是:算法

【什麼是TCP/IP協議?TCP的三次握手指的是什麼,爲何必定要三次握手,而不是四次或者是兩次? 】後端

標題:瀏覽器

【修真院java 小課堂】什麼是TCP/IP協議?TCP的三次握手指的是什麼,爲何必定要三次握手,而不是四次或者是兩次?安全

開場語:服務器

你們好,我是IT修真院鄭州分院第12期的學員張泉良,一枚正直純潔善良的JAVA程序員,今天給你們分享一下,修真院官網JAVA任務二,深度思考中的知識點—— 什麼是TCP/IP協議?TCP的三次握手指的是什麼,爲何必定要三次握手,而不是四次或者是兩次?網絡

 

  1. 背景介紹:

 網絡協議:app

書本上的定義:網絡協議是爲計算機網絡中進行數據交換而創建的規則、標準或約定的集合編碼

網絡協議就是人爲規定的一套通訊規範,只要雙方都遵循這個規範,就能實現交流

 

TCP/IP具體含義:利用ip進行通訊時所必須用到的協議羣的統稱。

具體來講,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬於 TCP/IP 協議。

 

  1. 知識剖析:

 

TCP/IP協議族是一個四層協議系統,自底而上是數據鏈路層、網絡層、傳輸層和應用層。上層協議使用下層協議提供的輔助。

  (1) 數據鏈路層實現了網卡接口的網絡驅動程序,以處理數據在物理媒介上的傳輸

  (2) 網絡層實現數據包的選路和轉發。網絡層的任務就是選擇中間節點(路由器),以肯定兩臺主機之間的通訊路徑

  (3) 傳輸層爲兩臺主機上的應用程序提供端到端的通訊。傳輸層只關心通訊的起始端和目的端,忽略數據包的中轉過程

       傳輸層協議主要有三個:TCP協議、UDP協議和SCTP協議

 (4) 應用層負責處理應用程序的邏輯。

      數據鏈路層、網絡層和傳輸層負責處理網絡通訊細節,這部分必須既穩定又高效,所以在內核空間中實現。

      而應用層則在用戶空間,由於它負責處理衆多邏輯,好比文件傳輸、名稱查詢等。

 

 

  1. 常見問題:

   (1)TCP/IP協議通訊的過程?

     瀏覽器訪問服務器服務流程:

             一、瀏覽器訪問網址

              二、dns協議解析域名

             三、http協議---http數據,肯定數據傳輸格式等

             四、TCP協議---加TCP首部----端口之間發送數據包----三次握手達成鏈接

             五、IP協議---加IP首部----經過IP地址肯定網絡地址

             六、以太網協議--加以太網首部----肯定mac地址(主機網卡的惟一標識)

(2)如何創建TCP/IP鏈接?

      TCP協議提供可靠的鏈接服務,鏈接是經過三次握手進行初始化的。

      所謂三次握手是指創建一個 TCP 鏈接時須要客戶端和服務器端總共發送三個包以確認鏈接的創建。 

      基礎信息:

                TCP報文格式

                (1)序列號:Sql序號,用來標識數據包,發起方發送數據時對此進行標記。

                (2)確認序號:Ack序號,只有ACK標誌位爲1時,確認序號字段纔有效,Ack=Seq+1。

                (3)標誌位:共6個,即SYN、ACK、PSH、RST、URG、FIN

(3)爲何要三次握手?

        在《計算機網絡》一書中其中有提到,三次握手的目的是「爲了防止已經失效的鏈接請求報文段忽然又傳到服務端,

         於是產生錯誤」

         三次握手是在安全可靠的基礎上,握手次數最少的方案。兩次握手並不能保證可靠性。四次握手又浪費了效率

 

  1. 編碼實戰:
  2. 拓展思考:

(1) TCP創建鏈接爲何須要三次握手而結束要四次揮手?

          三次握手:client請求鏈接SYN---server確認收到,發送ACK和SYN---client確認收到

          四次揮手:client請求關閉FIN---(server確認收到,發送ACK---server繼續發送數據直到完畢,發送FIN)

                            ----client確認收到

(2)TCP與UDP的區別

  (3) TCP的可靠傳輸原理

      中止等待協議

      連續ARQ協議

  1. 參考文獻:

     (1)  https://www.jianshu.com/p/e7f...

    (2) https://blog.csdn.net/be_happ...

     (3) 計算機網絡第6版

 

7.  更多討論:

Q1:Sequence number序列號是什麼?

A1:Sql序號,用來標識數據包,發起方發送數據時對此進行標記。數據包的序號,有操做系統根據必定的算法生成,至關於id的做用。

   

Q2:acknowledgement number和ACK區別?

A2:ACK:標識符,只有0和1,只要有數據包的傳輸,ACK就要set爲1;

        acknowledgement number:ack序號,只有ACK標誌位爲1時,確認序號字段纔有效,ack=Seq+1;

        在數據包傳輸過程當中ack=seq+len;

Q3:TCP與UDP的區別

A3:TCP協議提供面向鏈接的,可靠的傳輸服務,但速度較慢,適合文件下載等傳輸任務;UDP協議提供無鏈接的,不可靠的傳輸服務,但速度較快,適合媒體流等看重傳輸速度的傳輸任務

 

8.  鳴謝:

9.  結束語:

今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~

相關文章
相關標籤/搜索