問題一:TCP為什么是三次握手?而不是兩次或者四次?
成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、陸良網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5響應式網(wǎng)站、商城網(wǎng)站制作、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為陸良等各大城市提供網(wǎng)站開發(fā)制作服務。
回答:TCP作為一種可靠傳輸控制協(xié)議,其核心思想:既要保證數(shù)據(jù)可靠傳輸,又要提高傳輸?shù)男?,而用三次恰恰可以滿足以上兩方面的需求!
TCP可靠傳輸?shù)木? TCP連接的 發(fā)送方A,由操作系統(tǒng)動態(tài)隨機選取-個32位長的序列號(InitialSequence Number),假設A的初始序列號為1000,以該序列號為原點,對自己將要發(fā)送的每個字節(jié)的數(shù)據(jù)進行編號,1001, 1002, 100... 并把自己的初始序列號ISN告訴B,讓B有一個思想準備,什么樣編號的數(shù)據(jù)是合法的,什么編號是非法的,比如編號900就是非法的,同時B還可以對A每一個編號的字節(jié)數(shù)據(jù)進行確認。 如果A收到B確認編號為2001,則意味著字節(jié)編號為1001-2000,共1000個字節(jié)已經(jīng)安全到達。
同理B也是類似的操作,假設B的初始序列號ISN為2000, 以該序列號為原點,對自己將要發(fā)送的每個字節(jié)的數(shù)據(jù)進行編號,2001. 2002, 200....并把自己的初始序列號ISN告訴A,以便A可以確認B發(fā)送的每一 個字節(jié)。如果B收到A確認編號為4001,則意味著字節(jié)編號為2001-4000共2000個字節(jié)已經(jīng)安全到達。
一句話概括,TCP連接握手, 握的是啥?
通信雙方數(shù)據(jù)原點的序列號。(ISN)
問題二:TCP為什么是四次揮手?(三次揮手/同時揮手)
回答:因為TCP是全雙工通信的
(1)第一次揮手
因此當主動方發(fā)送斷開連接的請求(即FIN報文)給被動方時,僅僅代表主動方不會再發(fā)送數(shù)據(jù)報文了,但主動方仍可以接收數(shù)據(jù)報文。
(2)第二次揮手
被動方此時有可能還有相應的數(shù)據(jù)報文需要發(fā)送,因此需要先發(fā)送ACK報文,告知主動方“我知道你想斷開連接的請求了”。這樣主動方便不會因為沒有收到應答而繼續(xù)發(fā)送斷開連接的請求(即FIN報文)。
(3)第三次揮手
被動方在處理完數(shù)據(jù)報文后,便發(fā)送給主動方FIN報文;這樣可以保證數(shù)據(jù)通信正??煽康赝瓿?。發(fā)送完FIN報文后,被動方進入LAST_ACK階段(超時等待)。
(4)第四揮手
如果主動方及時發(fā)送ACK報文進行連接中斷的確認,這時被動方就直接釋放連接,進入可用狀態(tài)。