問題一:TCP為什么是三次握手?而不是兩次或者四次?
回答:TCP作為一種可靠傳輸控制協議,其核心思想:既要保證數據可靠傳輸,又要提高傳輸的效率,而用三次恰恰可以滿足以上兩方面的需求!
TCP可靠傳輸的精髓: TCP連接的 發送方A,由操作系統動態隨機選取-個32位長的序列號(InitialSequence Number),假設A的初始序列號為1000,以該序列號為原點,對自己將要發送的每個字節的數據進行編號,1001, 1002, 100... 并把自己的初始序列號ISN告訴B,讓B有一個思想準備,什么樣編號的數據是合法的,什么編號是非法的,比如編號900就是非法的,同時B還可以對A每一個編號的字節數據進行確認。 如果A收到B確認編號為2001,則意味著字節編號為1001-2000,共1000個字節已經安全到達。
同理B也是類似的操作,假設B的初始序列號ISN為2000, 以該序列號為原點,對自己將要發送的每個字節的數據進行編號,2001. 2002, 200....并把自己的初始序列號ISN告訴A,以便A可以確認B發送的每一 個字節。如果B收到A確認編號為4001,則意味著字節編號為2001-4000共2000個字節已經安全到達。
一句話概括,TCP連接握手, 握的是啥?
通信雙方數據原點的序列號。(ISN)
問題二:TCP為什么是四次揮手?(三次揮手/同時揮手)
回答:因為TCP是全雙工通信的
(1)第一次揮手
因此當主動方發送斷開連接的請求(即FIN報文)給被動方時,僅僅代表主動方不會再發送數據報文了,但主動方仍可以接收數據報文。
(2)第二次揮手
被動方此時有可能還有相應的數據報文需要發送,因此需要先發送ACK報文,告知主動方“我知道你想斷開連接的請求了”。這樣主動方便不會因為沒有收到應答而繼續發送斷開連接的請求(即FIN報文)。
(3)第三次揮手
被動方在處理完數據報文后,便發送給主動方FIN報文;這樣可以保證數據通信正常可靠地完成。發送完FIN報文后,被動方進入LAST_ACK階段(超時等待)。
(4)第四揮手
如果主動方及時發送ACK報文進行連接中斷的確認,這時被動方就直接釋放連接,進入可用狀態。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。