TCP三次握手

2021-09-01 20:20:41 字數 1498 閱讀 6621

首先想一種場景,在古代,a和b是非常要好的朋友,但分別住在a莊和b莊,a莊和b莊相隔千里,有一天,a甚是想念b,想要一同到長安見面,於是用信鴿帶著自己寫的信傳送給b,一段時間過去了,b在自己的院子裡散步,突然發現有乙隻信鴿飛到自己菜園子裡吃蟲,b跑過去,抓住信鴿,拆下綁在信鴿腳下的信,開啟一看,非常開心,b立刻回到書房寫下了一封同意的信綁在信鴿腳下,將信鴿放飛,放飛之後的幾天裡,b時常會想,a有沒有收到自己寫的信,會不會信鴿丟了。沒過多久,a收到了b的回信,非常開心,但是a又一想,如果b以為他寫的這一封同意信我沒有收到,他會不會不立刻啟程去往長安。於是,a就又寫了一封收到信,讓信鴿帶給b,之後,b收到a的信,又會想,會不會a以為我沒有收到他寫的收到信,不會立刻去長安,於是又寫了一封信傳送出去...............

這就是乙個惡性迴圈,彼此都會想最後一次會不會對方沒有收到,最後一次總是沒有確認應答的。tcp握手時,在最後一次應答傳送出去之後,傳送端會認為建立成功,就會開闢新空間用來儲存要接收的資料。綜上所述,可以得出沒有百分百的肯定連線建立成功。

所以,最有一次ack應答是誰傳送的,誰接收的是至關重要。

假設是兩次握手,客戶端將syn請求傳送給伺服器,伺服器收到客戶端的請求後,將ack和syn一起傳送給客戶端,這時伺服器需要開闢新的空間建立資料結構用來儲存接下來需要接收的資料,如果這時伺服器傳送的ack和syn因為各種原因,客戶端沒有接收到,連線就沒法完全建立,如果這種情況不斷的出現,伺服器建立資料結構越來越多,空間越來越不足,最終會導致伺服器崩潰。

假設是三次握手,最後一次是由客戶端傳送給伺服器的ack應答,當客戶端將ack傳送出去之後,客戶端會認為連線已經建立,客戶端會開闢新的空間建立資料結構用來儲存接下來需要接收的資料,如果這時伺服器沒有接收到ack應答,伺服器會認為連線沒有建立,客戶端認為連線建立成功並開闢空間建立了資料結構,就算沒有接收到ack應答,握手沒有成功,對伺服器也沒有什麼傷害。

假設是四次握手,跟兩次握手原因相同,假設最後一次的伺服器傳送給客戶端的ack應答沒有成功,從伺服器傳送ack出去之時,伺服器就會認為連線建立成功了,就會開闢空間,長期如此,就會導致空間不足以致伺服器崩潰。

五次呢?同三次,最後一次ack應答是客戶端向伺服器傳送的,所以假使最後一次沒有到達,伺服器也不會受到什麼影響。但是相比於三次,省時省力。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP 三次握手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手

1.伺服器準備好接受外來連線。passive open 被動開啟 需呼叫 socket bind listen 函式來完成。2.客戶端通過呼叫 connect 主動開啟 active open 這使得客戶 tcp傳送乙個 syn 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...