TCP三次握手、四次揮手的理解及面試題(圖解過程)


      TCP 和 UDP是網絡協議的傳輸層上的兩種不同的協議。TCP的特點是面向連接的、可靠的字節流服務。客戶端需要和服務器之間建立一個TCP連接,之后才能傳輸數據。數據到達之前對方就一直在等待,除非對方直接關閉連接,數據有序,先發先到。UDP是一種無連接、不可靠的數據發送協議。發送方根據對方的ip地址發送數據包,但是不保證接收發接包的質量,數據無序還容易丟包。雖然UDP協議不穩定但是在即時通訊(QQ聊天、在線視頻、網絡語音電話)的場景下,可以允許偶爾的斷續,但是這種協議速度快。

TCP、UDP的報文結構   

詳細引用:https://blog.csdn.net/baidu_32045201/article/details/78021536                  

 

                          UDP的報文結構                                                                             TCP的報文結構

        這里寫圖片描述                       

 

TCP協議三次握手、四次揮手、超時重傳

通過抓包觀察TCP三次握手具體報文:https://blog.csdn.net/qq_39331713/article/details/81705890

     三次握手是指建立TCP連接協議時,需要在客戶端和服務器之間發送三個包,握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。

第一次握手:客戶端發送第一個包,其中SYN標志位為1, ACK=0,發送順序號sequence=X(隨機int)。客戶端進入SYN發送狀態,等待服務器確認。

第二次握手:服務器收到這個包后發送第二個包,其中包SYN、ACK標志位為1,發送順序號seq=Y(隨機int),接收順序號ACK=X+1,此時服務器進入SYN接收狀態。

第三次握手:客戶端收到服務器傳來的包后,向服務器發送第三個包,SYN=0, ACK=1,接收順序號ACK = Y+1,發送順序號seq=X+1。此包發送完畢,客戶端和服務器進入ESTABLISHED建立成功狀態,完成三次握手。

 

四次握手是指終止TCP連接協議時,需要在客戶端和服務器之間發送四個包

  1. 第一次揮手:主動關閉方發送第一個包,其中FIN標志位為1,發送順序號seq為X。
  2. 第二次揮手:被動關閉方收到FIN包后發送第二個包,其中發送順序號seq為Z,接收順序號ack為X+1。
  3. 第三次揮手:被動關閉方再發送第三個包,其中FIN標志位為1,發送順序號seq為Y,接收順序號ack為X。
  4. 第四次揮手:主動關閉方發送第四個包,其中發送順序號為X,接收順序號為Y。至此,完成四次揮手。

超時重傳指的是,發送數據包在一定的時間周期內沒有收到相應的ACK,等待一定的時間,超時之后就認為這個數據包丟失,就會重新發送。這個等待時間被稱為RTO.  

 

深入討論:

1、為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?

      建立連接時,ACK和SYN可以放在一個報文里來發送。而關閉連接時,被動關閉方可能還需要發送一些數據后,再發送FIN報文表示同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。

2、為什么TIME_WAIT狀態還需要等2MSL后才能返回到CLOSED狀態?

      兩個存在的理由:1、無法保證最后發送的ACK報文會一定被對方收到,所以需要重發可能丟失的ACK報文。2、關閉鏈接一段時間后可能會在相同的IP地址和端口建立新的連接,為了防止舊連接的重復分組在新連接已經終止后再現。2MSL足以讓分組最多存活msl秒被丟棄。

3、為什么必須是三次握手,不能用兩次握手進行連接?

       記住服務器的資源寶貴不能浪費!  如果在斷開連接后,第一次握手請求連接的包才到會使服務器打開連接,占用資源而且容易被惡意攻擊!防止攻擊的方法,縮短服務器等待時間。兩次握手容易死鎖。如果服務器的應答分組在傳輸中丟失,將不知道S建立什么樣的序列號,C認為連接還未建立成功,將忽略S發來的任何數據分組,只等待連接確認應答分組。而S在發出的分組超時后,重復發送同樣的分組。這樣就形成了死鎖。

 

TCP/IP五層模型和OSI網絡七層協議

1170656-df46648a7fadfa42.jpg

TCP/IP五層模型
應用層:  提供給客戶端訪問服務器網絡服務的接口 。常用協議:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等

HTTP協議(超文本傳輸協議)
詳見本篇博客:https://blog.csdn.net/sinat_41144773/article/details/89667597

傳輸層:數據傳輸協議TCP 或 UDP

網絡層 : 負責對數據包進行路由選擇和存儲轉發,負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段和用戶數據報封裝成分組(IP數據報)或包進行傳送。

IP協議:逐跳發送模式;根據數據包的目的地IP地址決定數據如何發送;如果數據包不能直接發送至目的地,IP協議負責尋找一個合適的下一跳路由器,並將數據包交付給該路由器轉發

ICMP協議:因特網控制報文協議,用於檢測網絡連接

數據鏈路層: 負責分配MAC地址常用協議:地址解析協議(ARP)和反地址解析協議(RARP),實現IP地址與機器物理地址(MAC地址)之間的轉換兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰的鏈路上傳送幀(frame)。每一幀包括數據和必要的控制信息。網卡接口的網絡驅動程序,處理數據在物理媒介上的傳輸;不同的物理網絡具有電氣特性,網絡驅動程序隱藏實現細節,為上層協議提供一致接口


物理層:所傳數據單位是比特(bit)。物理層要考慮用多大的電壓代表1 或 0 ,以及接受方如何識別發送方所發送的比特。

各網絡層對應的工作設備:
物理層:中繼器、集線器
數據鏈路層:網橋或交換機
網絡層中繼系統:路由器
網絡層以上的中繼系統:網關

 

      TCP 和 UDP是網絡協議的傳輸層上的兩種不同的協議。TCP的特點是面向連接的、可靠的字節流服務。客戶端需要和服務器之間建立一個TCP連接,之后才能傳輸數據。數據到達之前對方就一直在等待,除非對方直接關閉連接,數據有序,先發先到。UDP是一種無連接、不可靠的數據發送協議。發送方根據對方的ip地址發送數據包,但是不保證接收發接包的質量,數據無序還容易丟包。雖然UDP協議不穩定但是在即時通訊(QQ聊天、在線視頻、網絡語音電話)的場景下,可以允許偶爾的斷續,但是這種協議速度快。

TCP、UDP的報文結構   

詳細引用:https://blog.csdn.net/baidu_32045201/article/details/78021536                  

 

                          UDP的報文結構                                                                             TCP的報文結構

        這里寫圖片描述                       

 

TCP協議三次握手、四次揮手、超時重傳

通過抓包觀察TCP三次握手具體報文:https://blog.csdn.net/qq_39331713/article/details/81705890

     三次握手是指建立TCP連接協議時,需要在客戶端和服務器之間發送三個包,握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。

第一次握手:客戶端發送第一個包,其中SYN標志位為1, ACK=0,發送順序號sequence=X(隨機int)。客戶端進入SYN發送狀態,等待服務器確認。

第二次握手:服務器收到這個包后發送第二個包,其中包SYN、ACK標志位為1,發送順序號seq=Y(隨機int),接收順序號ACK=X+1,此時服務器進入SYN接收狀態。

第三次握手:客戶端收到服務器傳來的包后,向服務器發送第三個包,SYN=0, ACK=1,接收順序號ACK = Y+1,發送順序號seq=X+1。此包發送完畢,客戶端和服務器進入ESTABLISHED建立成功狀態,完成三次握手。

 

四次握手是指終止TCP連接協議時,需要在客戶端和服務器之間發送四個包

  1. 第一次揮手:主動關閉方發送第一個包,其中FIN標志位為1,發送順序號seq為X。
  2. 第二次揮手:被動關閉方收到FIN包后發送第二個包,其中發送順序號seq為Z,接收順序號ack為X+1。
  3. 第三次揮手:被動關閉方再發送第三個包,其中FIN標志位為1,發送順序號seq為Y,接收順序號ack為X。
  4. 第四次揮手:主動關閉方發送第四個包,其中發送順序號為X,接收順序號為Y。至此,完成四次揮手。

超時重傳指的是,發送數據包在一定的時間周期內沒有收到相應的ACK,等待一定的時間,超時之后就認為這個數據包丟失,就會重新發送。這個等待時間被稱為RTO.  

 

深入討論:

1、為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?

      建立連接時,ACK和SYN可以放在一個報文里來發送。而關閉連接時,被動關閉方可能還需要發送一些數據后,再發送FIN報文表示同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。

2、為什么TIME_WAIT狀態還需要等2MSL后才能返回到CLOSED狀態?

      兩個存在的理由:1、無法保證最后發送的ACK報文會一定被對方收到,所以需要重發可能丟失的ACK報文。2、關閉鏈接一段時間后可能會在相同的IP地址和端口建立新的連接,為了防止舊連接的重復分組在新連接已經終止后再現。2MSL足以讓分組最多存活msl秒被丟棄。

3、為什么必須是三次握手,不能用兩次握手進行連接?

       記住服務器的資源寶貴不能浪費!  如果在斷開連接后,第一次握手請求連接的包才到會使服務器打開連接,占用資源而且容易被惡意攻擊!防止攻擊的方法,縮短服務器等待時間。兩次握手容易死鎖。如果服務器的應答分組在傳輸中丟失,將不知道S建立什么樣的序列號,C認為連接還未建立成功,將忽略S發來的任何數據分組,只等待連接確認應答分組。而S在發出的分組超時后,重復發送同樣的分組。這樣就形成了死鎖。

 

TCP/IP五層模型和OSI網絡七層協議

1170656-df46648a7fadfa42.jpg

TCP/IP五層模型
應用層:  提供給客戶端訪問服務器網絡服務的接口 。常用協議:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等

HTTP協議(超文本傳輸協議)
詳見本篇博客:https://blog.csdn.net/sinat_41144773/article/details/89667597

傳輸層:數據傳輸協議TCP 或 UDP

網絡層 : 負責對數據包進行路由選擇和存儲轉發,負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段和用戶數據報封裝成分組(IP數據報)或包進行傳送。

IP協議:逐跳發送模式;根據數據包的目的地IP地址決定數據如何發送;如果數據包不能直接發送至目的地,IP協議負責尋找一個合適的下一跳路由器,並將數據包交付給該路由器轉發

ICMP協議:因特網控制報文協議,用於檢測網絡連接

數據鏈路層: 負責分配MAC地址常用協議:地址解析協議(ARP)和反地址解析協議(RARP),實現IP地址與機器物理地址(MAC地址)之間的轉換兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰的鏈路上傳送幀(frame)。每一幀包括數據和必要的控制信息。網卡接口的網絡驅動程序,處理數據在物理媒介上的傳輸;不同的物理網絡具有電氣特性,網絡驅動程序隱藏實現細節,為上層協議提供一致接口


物理層:所傳數據單位是比特(bit)。物理層要考慮用多大的電壓代表1 或 0 ,以及接受方如何識別發送方所發送的比特。

各網絡層對應的工作設備:
物理層:中繼器、集線器
數據鏈路層:網橋或交換機
網絡層中繼系統:路由器
網絡層以上的中繼系統:網關

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM