Http三次握手和四次揮手

前置:1、Http請求是基於Tcp connection這個鏈接的

       2、位碼即tcp標誌位,有6種標示:

                 SYN(synchronous建立聯機) 、ACK(acknowledgement 確認)、 PSH(push傳送)

                 FIN(finish結束)、RST(reset重置)、 URG(urgent緊急)

                Sequence number(順序號碼) 

                 Acknowledge number(確認號碼)

(一)三次握手:
在這裏插入圖片描述

第一次握手:主機A發送位碼爲syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求後要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否爲1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連接建立成功。

注:爲什麼要採用三次握手,兩次不行嗎?
在這裏插入圖片描述

(二)四次揮手:

在這裏插入圖片描述

第一次揮手:TCP發送一個FIN(結束),用來關閉客戶到服務端的連接。

第二次揮手:服務端收到這個FIN,他發回一個ACK(確認),確認收到序號爲收到序號+1,和SYN一樣,一個FIN將佔用一個序號。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。(服務器端繼續發送未發送完的數據)

第三次揮手:服務端發送一個FIN(結束)到客戶端,服務端關閉客戶端的連接。

第四次揮手:客戶端發送ACK(確認)報文確認,並將確認的序號+1,這樣關閉完成。

注:1、那麼爲什麼是4次揮手呢?tcp握手的時候爲何ACK(確認)和SYN(建立連接)是一起發送。揮手的時候爲什麼是分開的時候發送呢?

因爲當Server端收到Client端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能並不會立即關閉 SOCKET,所以只能先回復一個ACK報文,告訴Client端,“你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。

2、爲什麼客戶端最後還要等待2MSL?

第一,保證客戶端發送的最後一個ACK報文能夠到達服務器,因爲這個ACK報文可能丟失,站在服務器的角度看來,我已經發送了FIN+ACK報文請求斷開了,客戶端還沒有給我回應,應該是我發送的請求斷開報文它沒有收到,於是服務器又會重新發送一次,而客戶端就能在這個2MSL時間段內收到這個重傳的報文,接着給出迴應報文,並且會重啓2MSL計時器。

第二,防止類似與“三次握手”中提到了的“已經失效的連接請求報文段”出現在本連接中。客戶端發送完最後一個確認報文後,在這個2MSL時間中,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失。這樣新的連接中不會出現舊連接的請求報文。

三、TCP和UDP的區別
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

(連接和無連接)

2、TCP提供可靠的服務。即通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;

 UDP盡最大努力交付,即不保證可靠交付

(可靠和不可靠)

3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的

UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)

(字節流和報文加擁塞)

4、每一條TCP連接只能是點到點的; UDP支持一對一,一對多,多對一和多對多的交互通信

(一對一和一對多)

5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

(開銷問題)

6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

簡單再瞭解
1、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

2、靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

3.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

4.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

5、支持B/S及C/S模式。

鏈接:https://www.jianshu.com/p/bd31d3b23725

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章