TCP三次握手與四次揮手

                                                                          TCP三次握手與四次揮手

TCP三次握手

一、什么是三次握手

        三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。

二、三次握手的目的

        三次握手的目的是連接服務器指定端口,建立TCP連接,并同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息??蛻舳藞绦羞B接請求時。將觸發三次握手。

三、三次握手過程

    TCP三次握手與四次揮手

第一次握手:
     客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。
第二次握手:
     服務器發回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的ISN加1以.即X+1。
第三次握手.
     客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1。如果正確則連接建立成功,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,隨后客戶端與服務器之間可以開始傳輸數據了。把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.并且在數據段放寫ISN的+1。

TCP四次揮手

一、什么是四次揮手

      TCP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,任何一方執行close操作即可產生揮手操作。

二、四次揮手過程

 TCP三次握手與四次揮手

第一次揮手:

     客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳送,客戶機進入FIN_WAIT_1狀態。
第二次揮手:

     服務器收到FIN后,發送一個ACK給客戶端,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),服務器進入CLOSE_WAIT狀態。
第三次揮手:

     服務器發送一個FIN,用來關閉服務器到客戶端的數據傳送,服務器進入LAST_ACK狀態。
第四次揮手:

     客戶端收到FIN后,客戶端進入TIME_WAIT狀態,接著發送一個ACK給服務器,確認序號為收到序號+1,服務器進入CLOSED狀態,完成四次揮手。

有限狀態機FSM:Finite State Machine
1、CLOSED 沒有任何連接狀態
2、LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
3 、SYN-SENT 在發送連接請求后,等待對方確認
4、SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
5、ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
6、FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
7 、FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
8、 TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
9、CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
10、LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失

11、CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認

附加問題:

【問題1】為什么連接的時候是三次握手,關閉的時候卻是四次揮手?
答:因為當服務器收到客戶端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來回應的,SYN報文是用來同步的。但是關閉連接時,當服務器收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴客戶端,”發送的FIN報文已經收到”。只有等到客戶端所有的報文都發送完了,客戶端才能發送FIN報文,因此不能一起發送。故需要四步揮手。
【問題2】為什么TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?
答:四個報文都發送完畢,客戶端和服務器可以直接進入CLOSE狀態了,但有可能最后一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文,確保之前的數據不會丟失后再進入close狀態。

原創文章,作者:Light Yagami,如若轉載,請注明出處:http://www.www58058.com/85976

(2)
Light YagamiLight Yagami
上一篇 2017-09-03
下一篇 2017-09-04

相關推薦

  • N22-第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題      vim是模式化的文本編輯器。在不同模式下,每一次按鍵的效果都不一樣。vim有三種工作模式,分別是編輯模式,插入模式和末行模式。編輯模式是打開vim后的默認模式,用于查看文本或進行復制,粘貼,刪除等編輯命令。插入模式是為了向文本中輸入信息。末行模式是vim自帶的命令行接口,能…

    Linux干貨 2016-09-26
  • bash基礎 if elif 多條件判斷 for循環

    bash基礎 if elif 多條件判斷 for循環

    Linux干貨 2017-10-31
  • redis + keepalived 雙主模型

    redis + keepalived 雙主模型 架構圖:    1.vip默認綁定在redis主上,由redis主提供服務,redis從為備用節點。(實際上提供服務的只是vip) 2.當redis主掛掉,vip會默認漂移至redis從。由redis從提供服務,redis主已經掛掉。 3.當redis主已經恢復,redis從繼續提供服務和掛…

    Linux干貨 2016-06-23
  • 自制簡易linux系統

    一、環境準備 1.筆記本電腦 2.vmware12軟件 3.CentOS 6虛擬機 4.大于5G空間的物理磁盤分區 二、分區并掛載文件系統 1.添加磁盤 在vmware中選中CentOS 6系統并右擊鼠標選擇設置,添加–>硬盤–>SCSI(推薦)–>創建新虛擬磁盤–>大小改為5G–>完成 2.分區并…

    Linux干貨 2016-09-20
  • N25第一周博客作業

    本文主要闡述了以下幾個知識點: l  計算機的組成及功能; l  介紹各不同發行版的linux及其聯系; l  描述linux的哲學思想,及其本人對其個人理解; l  介紹一些linux基本命令及相關選項; l  如何在linux上使用幫助命令; l  羅列出發行版linux上的一些基礎目錄及其功用…

    Linux干貨 2016-11-29
  • Mysql之運用MHA的功能實現服務高可用

    MHA介紹 (Master High Availability) MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復制架構提供 了 automating master failover 功能。MHA 在監控到 master 節點故障時,會提升其中擁有最新數據的 slave 節點成為新的 master 節點,在此期間,…

    2017-09-14
欧美性久久久久