TCP連接配接——三次握手和四次斷開
1.面向連接配接
TCP是一個面向連接配接的協定,面向連接配接是指任何一方向對方發送資料前必須先建立通道,比如像打電話一樣:必須要等到對方的手機響鈴,并且對方接聽電話時,才能與對方通信。而UDP則不是面向連接配接的協定,基于UDP協定的通信雙方不需要事先與對方協商建立連接配接,也不管對方的IP位址與端口号是否存在,就發送資料,這個處理方式有點像手機發短信,不管對方手機是否欠費或關機,我們就隻管發送資訊。
2.三次握手
首先看下示例圖吧!
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwIzM5YzMjVGNzITNtETO2kTLwgTMz0SNjZWMtQTZ1MDNzYzMvwFO3MDNzUzLcRnbl1GajFGd0F2LcRWYvxGc19CXt92YuUWelRXauwGZvw1LcpDc0RHaiojIsJye.png)
<!--StartFragment --> <!--StartFragment --> <!--StartFragment -->
<!--StartFragment -->
第一次握手:用戶端發送SYN包(序列号seq=100),等待伺服器的确認。
第二次握手:伺服器收到SYN包之後,必須确認用戶端,是以就要發送ACK包(ACK=101),同時,伺服器必須還必須發送SYN包(序列号seq=300)等用戶端的确認。
第三次握手:用戶端接收到SYN+ACK包之後,向伺服器發送确認包(ACK=301),次包發送完畢之後,兩者就可以進行資料交換了。
簡單的來說:
C(用戶端) S(伺服器)
C:發送SYN給S
S:如果成功,傳回給C(SYN+ACK)
C:如果成功,傳回給S(ACK)
還可用個形象的例子說下:TCP的三次握手過程可以看成是某男生追某女生的過程。第一次握手就好比是:男生向女生告白,說我喜歡你,然後男生等待女生的回應,第二次握手就好比是:女生收到男生的告白,而且該女生也喜歡次男生,她就可以給男生回應,說:我也喜歡你。第三次握手:男生收到該女生的回應,大喜,又發送消息過去,那我們正式交往吧!
3.四次斷開
同樣看下示例圖:
<!--StartFragment -->
1. 用戶端發送資料完畢之後,提出要斷開連接配接
2. 伺服器收到FIN包後,對其作出反應,發送ACK包,确認這一方向的連接配接将關閉,
3. 等伺服器的應用程式做好關閉準備時,伺服器反方向發送FIN包,請求關閉連接配接請求,
4. 客戶機對伺服器發送的請求進行确認,并發送ACK包
也可簡單的概述:
C(用戶端) S(伺服器)
C:發送FIN給S
S:如果成功,傳回給C(ACK)
S:應用程式做好關閉程式準備,發送FIN給C
C:如果成功,傳回給S(ACK)
同樣也可以用個形象的例子說明:這個過程相當于男女雙方分手的過程:1,女方向男方提出分手,等待男方的回應2,男方聽到這個消息後,就給女方回應說:好吧!分就分 3,過段時間,男方突然覺得很沒面子,想:“我一個大老爺們,應該是我提出分手”,于是,男方跟女方說:我們分手吧!4,這時,女方就直接罵了句“神經病”。