tcp為什么要三次握手?
tcp為什么要三次握手?
. TCP的三次握手最主要是防止已過期的連接再次傳到被連接的主機。\\x0d\\x0a\\x0d\\x0a如果采用兩次的話,會出現(xiàn)下面這種情況。
\\x0d\\x0a比如是A機要連到B機,結(jié)果發(fā)送的連接信息由于某種原因沒有到達B機;\\x0d\\x0a于是,A機又發(fā)了一次,結(jié)果這次B收到了,于是就發(fā)信息回來,兩機就連接。
\\x0d\\x0a傳完東西后,斷開。\\x0d\\x0a\\x0d\\x0a結(jié)果這時候,原先沒有到達的連接信息突然又傳到了B機,于是B機發(fā)信息給A,然后B機就以為和A連上了,這個時候B機就在等待A傳東西過去。\\x0d\\x0a\\x0d\\x0a2. 三次握手改成僅需要兩次握手,*鎖是可能發(fā)生\\x0d\\x0a\\x0d\\x0a考慮計算機A和B之間的通信,假定B給A發(fā)送一個連接請求分組,A收到了這個分組,并發(fā)送了確認(rèn)應(yīng)答分組。按照兩次握手的協(xié)定,A認(rèn)為連接已經(jīng)成功地建立了,可以開始發(fā)送數(shù)據(jù)分組。
可是,B在A的應(yīng)答分組在傳輸中被丟失的情況下,將不知道A是否已準(zhǔn)備好,不知道A建議什么樣的序列號,B甚至懷疑A是否收到自己的連接請求分組。在這種情況下,B認(rèn)為連接還未建立成功,將忽略A發(fā)來的任何數(shù)據(jù)分組,只等待連接確認(rèn)應(yīng)答分組。而A在發(fā)出的分組超時后,重復(fù)發(fā)送同樣的分組。
tcp為什么是三次握手
TCP 為什么是三次握手,而不是兩次或四次? 由圖可知,tcp三次握手的關(guān)鍵在于,序列號seq的交換確認(rèn)。 因為對于客戶端和服務(wù)端來說,雙方對對方的 序列號 的確認(rèn)是可靠傳輸?shù)年P(guān)鍵。
兩次握手的過程如下: 當(dāng)?shù)诙降膭幼魍瓿蓵r,我們可以 保證B已知曉A的序列號 ,因為第二步只有在**步成功后才執(zhí)行。
但 不能保證A知曉B的序列號 ,因為第二步的傳輸可能失敗。 所以,不管哪個選擇,都是不妥當(dāng)?shù)摹_@正是因為A沒有確認(rèn)B的序列號。 而在tcp中,通過三次握手,和丟包的處理機制,A和B都會確定自己的序列號被對方接收。
照搬自 TCP 為什么是三次握手,而不是兩次或四次? tcp除了采用三次握手,還要對丟包意外進行適當(dāng)?shù)奶幹茫员WCA、B雙方序列號的傳輸和確認(rèn)。 這樣,tcp的三次握手,加上對丟包的處理機制,就保證了A、B對雙方序列號的確認(rèn)。也就建立了可靠傳輸?shù)幕A(chǔ)。
把四次握手中的第二和第三步合并起來,就是三次握手了。為了提高效率,是可以合并第2、3步的。
tcp 為什么要三次握手?
tcp 為什么要三次握手? 我們假設(shè)A和B是通信的雙方。我理解的握手實際上就是通信,發(fā)一次信息就是進行一次握手。
**次握手:A給B打電話說,你可以聽到我說話嗎?第二次握手:B收到了A的信息,然后對A說:我可以聽得到你說話啊,你能聽得到我說話嗎?第三次握手:A收到了B的信息,然后說可以的,我要給你發(fā)信息啦!在三次握手之后,A和B都能確定這么一件事:我說的話,你能聽到;你說的話,我也能聽到。
這樣,就可以開始正常通信了。注意:HTTP是基于TCP協(xié)議的,所以每次都是客戶端發(fā)送請求,服務(wù)器應(yīng)答,但是TCP還可以給其他應(yīng)用層提供服務(wù),即可能A、B在建立鏈接之后,誰都可能先開始通信百科。如果采用兩次握手,那么只要服務(wù)器發(fā)出確認(rèn)數(shù)據(jù)包就會建立連接,但由于客戶端此時并未響應(yīng)服務(wù)器端的請求,那此時服務(wù)器端就會一直在等待客戶端,這樣服務(wù)器端就白白浪費了一定的資源。若采用三次握手,服務(wù)器端沒有收到來自客戶端的再此確認(rèn),則就會知道客戶端并沒有要求建立請求,就不會浪費服務(wù)器的資源。
2020-04-08:為什么TCP握手需要三次?
TCP握手需要三次的原因:防止已失效的連接請求又傳送到服務(wù)器端,因而產(chǎn)生錯誤。三次握手的過程既是通信雙方相互告知序列號起始值,并確認(rèn)對方已經(jīng)收到了序列號起始值的必經(jīng)步驟。
如果只是兩次握手,至多只有連接發(fā)起方的起始序列號能被確認(rèn),另一方選擇的序列號則不能得到確認(rèn)。
TCP 為什么是三次握手,而不是兩次或四次?
三次握手的目的:是為了確認(rèn)雙方都有收發(fā)數(shù)據(jù)的能力。**次:A->B,證明A有發(fā)消息的能力。
第二次:->B&&B->A,證明B有收消息,并且有發(fā)消息的能力。
第三次:A->B,證明A有收消息的能力。二次握手達不到目的,四次多余。
當(dāng)應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)?、?位字節(jié)表示的數(shù)據(jù)流,TCP則把數(shù)據(jù)流分割成適當(dāng)長度的報文段,**傳輸段大小(MSS)通常受該計算機連接的**的數(shù)據(jù)鏈路層的**傳送單元(MTU)限制。之后TCP把數(shù)據(jù)包傳給IP層,由它來通過**將包傳送給接收端實體的TCP層。
TCP為了保證報文傳輸?shù)目煽浚徒o每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實體在合理的往返時延(RTT)內(nèi)未收到確認(rèn),那么對應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會被重傳。
TCP為什么需要進行三次握手深入解析
首先簡單介紹一下TCP三次握手 在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個連接。 **次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn); 第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器 進入SYN_RECV狀態(tài); 第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進入 ESTABLISHED狀態(tài),完成三次握手。
通過這樣的三次握手,客戶端與服務(wù)端建立起可靠的雙工的連接,開始傳送數(shù)據(jù)。
三次握手的最主要目的是保證連接是雙工的,可靠更多的是通過重傳機制來保證的。 但是為什么一定要進行三次握手來保證連接是雙工的呢,一次不行么?兩次不行么?我們舉一個現(xiàn)實生活中兩個人進行語言溝通的例子來模擬三次握手。 **次對話 : 老婆讓甲出去打醬油,半路碰到一個朋友乙,甲問了一句:哥們你吃飯了么? 結(jié)果乙?guī)е鷻C聽歌呢,根本沒聽到,沒反應(yīng)。甲心里想:跟你說話也沒個音,不跟你說了,溝通失敗。
說明乙接受不到甲傳過來的信息的情況下溝通肯定是失敗的。 如果乙聽到了甲說的話,那么**次對話成功,接下來進行第二次對話。 第二次對話 : 乙聽到了甲說的話,但是他是老外,中文不好,不知道甲說的啥意思也不知道怎樣回答,于是隨便回答了一句學(xué)過的中文 :我去廁所了。
甲一聽立刻笑噴了,“去廁所吃飯”?道不同不相為謀,離你遠點吧,溝通失敗。說明乙無法做出正確應(yīng)答的情況下溝通失敗。 如果乙聽到了甲的話,做出了正確的應(yīng)答,并且還進行了反問:我吃飯了,你呢?那么第二次握手成功。
通過前兩次對話證明了乙能夠聽懂甲說的話,并且能做出正確的應(yīng)答。接下來進行第三次對話。 第三次對話 : 甲剛和乙打了個招呼,突然老婆喊他,“你個*鬼,打個醬油咋這么半天,看我回家咋收拾你”,甲是個妻管嚴(yán),聽完嚇得二話不說就跑回家了,把乙自己晾那了。
乙心想:這什么人啊,得,我也回家吧,溝通失敗。說明甲無法做出應(yīng)答的情況下溝通失敗。 如果甲也做出了正確的應(yīng)答:我也吃了。那么第三次對話成功,兩人已經(jīng)建立起了順暢的溝通渠道,接下來開始持續(xù)的聊天。
通過第二次和第三次的對話證明了甲能夠聽懂乙說的話,并且能做出正確的應(yīng)答。 可見,兩個人進行有效的語言溝通,這三次對話的過程是必須的。 同理對于TCP為什么需要進行三次握手我們可以一樣的理解: 為了保證服務(wù)端能收接受到客戶端的信息并能做出正確的應(yīng)答而進行前兩次(**次和第二次)握手,為了保證客戶端能夠接收到服務(wù)端的信息并能做出正確的應(yīng)答而進行后兩次(第二次和第三次)握手。