TCP三次握手

2022-07-29 12:57:09 字數 2715 閱讀 5263

1. tcp的三次握手最主要是防止已過期的連線再次傳到被連線的主機。

如果採用兩次的話,會出現下面這種情況。

比如是a機要連到b機,結果傳送的連線資訊由於某種原因沒有到達b機;

於是,a機又發了一次,結果這次b收到了,於是就發資訊回來,兩機就連線。

傳完東西後,斷開。

結果這時候,原先沒有到達的連線資訊突然又傳到了b機,於是b機發資訊給a,然後b機就以為和a連上了,這個時候b機就在等待a傳東西過去。

2. 三次握手改成僅需要兩次握手,死鎖是可能發生

考慮計算機a和b之間的通訊,假定b給a傳送乙個連線請求分組,a收到了這個分組,並傳送了確認應答分組。按照兩次握手的協定,a認為連線已經成功地建立了,可以開始傳送資料分組。可是,b在a的應答分組在傳輸中被丟失的情況下,將不知道a是否已準備好,不知道a建議什麼樣的序列號,b甚至懷疑a是否收到自己的連線請求分組。在這種情況下,b認為連線還未建立成功,將忽略a發來的任何資料分組,只等待連線確認應答分組。而a在發出的分組超時後,重**送同樣的分組。這樣就形成了死鎖

第三次握手——革命鬥爭中的通訊故事

在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊「長江長江,我是黃河,聽到請回答。」很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃河的呼叫後要回答「黃河黃河,我是長江,我聽到了你,請回答。」這叫做第二次握手。黃河聽到長江的呼叫後還要回答「長江長江,我是黃河,我聽到了你,現在請你收報」,這是第三次握手,三次握手成功後,才能在電台裡傳送工作報文。為什麼必須三次握手後才能工作呢?聽我慢慢道來。

《英雄兒女》

第一次握手:黃河發起呼叫,長江收到了。這時長江可以確認的是,黃河的發信機和自己的收信機是好的,否則的話他收不到黃河的呼叫;黃河能確認什麼呢?他什麼也不能確認,有可能自己的電台除了指示燈是好的,其它都是壞的,他在對著一台鐵疙瘩發功。

第二次握手:長江回應,黃河收到了。這時黃河可以確認的是,自己和長江的收發信機都是好的,否則的話他收不到長江的回應訊號。這時黃河可以說正事了嗎?還不能,雖然長江發出了回應,但他並不能確認自己的發信機和黃河的收信機都是好的。

第三次握手:黃河對長江的回應進行回應。這時黃河很清楚,雙方收發信機都是好的,自己的這次回應長江肯定能收到,這個回應的目的只是消除長江對黃河的收信機和長江自己的發信機的擔心。然後,黃河不必等長江的再次回應就可以說正事了。

有些讀者看到這裡,心裡會想「且慢,你憑什麼說第三次握手後,長江肯定會收到?長江剛才的狀態好,不代表後來的狀態好,俗話說人算不如天算,我看再多握幾次手會更可靠些。」這種想法有道理,幾句話還真說不清,那麼不妨先講乙個與此有關的戰鬥小故事。

戰場態勢是這樣的:

駐紮在兩個山頭上的紅1團和紅2團分別有兩個營,而在山谷的藍團有三個營,若紅1團和紅2團孤軍下山作戰會失敗,而兩個團同時進攻就會勝利,對於紅方來說,問題的關鍵是要同時發起進攻。

戰鬥前的準備過程是這樣的:

紅1團團長找了個傳令兵,命令他跑到紅2團,告訴紅2團團長明早9時發起進攻。傳令兵沒有被藍團俘虜,成功地跑到了紅2團的山頭,告訴紅2團團長明早9時兩個團同時進攻。紅2團團長一邊握著傳令兵的手激動地說「太好了!我早就等著這個訊息呢!」,一邊心裡暗自核計「雖然我知道了這個訊息,但是紅1團的團長並不知道我已經知道了,誰都知道傳令兵有可能被俘,訊息很有可能傳不過來,若明天總攻前,紅1團團長不知道我已經得到了訊息,他一定不會貿然進攻的,換成我也不會」。於是,紅2團團長對傳令兵說「兄弟,你辛苦了,先抽袋煙吧,抽完後再辛苦你跑回去,告訴你們團長,說我已經得到訊息了,明天按時總攻。」

傳令兵又跑回到紅1團,僥倖又沒被藍團俘獲,他告訴紅1團團長有關紅2團團長已經獲知明早進攻的訊息,但紅1團團長明早敢發起攻擊嗎?他不敢,因為他心裡清楚,紅2團團長並不知道他(紅1團團長)已經知道了「紅2團團長已獲知明早9時發起攻擊」這個訊息,紅1團團長繼續想,如果是他本人是紅2團團長,就不會貿然攻擊,因為自己已經獲知明早9時發起攻擊這件事,對方未必知道,而有可能因為傳令兵回團時被抓,敵人反而知道了,自己貿然攻擊,有可能就會失敗。於是,紅1團團長對傳令兵說「兄弟,你辛苦了,先抽袋煙吧,抽完後再辛苦你跑一趟紅2團,告訴他們團長,就說我已經知道他已經知道了明早9點進攻這件事,讓他放心地打吧。」

寫到這裡,聰明的讀者已經猜到了,即使傳令兵再次來到紅2團,紅2團團長也不敢開戰,還是要傳令兵再次回紅1團報信,因為紅2團團長擔心紅1團團長不知道他(紅2團團長)已經知道了紅1團團長知道他(紅2團團長)知道明早9點發生攻擊的事。(此句53個字,想到松鼠們多用短句的建議,心裡嚴重疚結中……)

回到三次握手問題上,紅1團和紅2團其實就是通訊的雙方,這場永遠也達不成協議的戰鬥,說明了乙個重要的通訊道理:世界上不存在完全可靠的通訊協議

「三次握手」是電台點對點通訊的一般規則,但即使三次握手成功後,以後的通訊就能保證正常嗎?當然不能,握手成功後的裝置故障、干擾、話務員的**等,無數種可能性會導致通訊失敗。三次握手成功只說明了之前的通訊條件和環境,而不能決定和**之後的通訊條件和環境。根據經驗,兩個電台之間的通訊失敗,最大的可能性是兩個電台本身的故障,三次握手的成功排除了這種可能。以後的情況很難**的,通訊協議只能做到盡可能的可靠,而不能做到理論上的完全可靠。

電台通訊一定要三次握手嗎?當然不一定。潛伏者為了不暴露自己,可以只使用收信機而不發信,回應總部時可以採用其它手段,例如在指定電線桿上貼個尋人啟示。如果電台的發信機出了故障,也可能不經過三次握手而達成通訊,在對越自衛反擊戰中,某部的電台發信機壞了,指揮所在沒有收到對方握手訊號的情況下,連續盲發14份報文,該部全部收到,並按指示順利地完成了任務,該電台台長因此榮立了二等功。

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 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...