『壹』 TCP連接建立過程中為什麼需要「三次握手」
傳輸控制協議 TCP)是一種面向連接的、可靠的、基於位元組流的運輸層(Transport layer)通信協議。是專門為了在不可靠的互聯網路上提供一個可靠的端到端位元組流而設計的。互聯網路與單個網路不同,因為互聯網路的不同部分可能有著截然不同的拓撲、帶寬、延遲、分組大小和其他參數。TCP的設計目標是能夠動態的適應互聯網路的這些特性,而且當面對多種失敗的時候仍然能夠健壯。 每一次TCP連接都需要三個階段:連接建立、數據傳送和連接釋放。三次握手就發生在連接建立階段。 在謝希仁著《計算機網路》第四版中講三次握手的目的是 為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。在另一部經典的《計算機網路》一書中講三次握手的目的是為了解決 網路中存在延遲的重復分組的問題。 這兩種不用的表述其實闡明的是同一個問題。 謝希仁版《計算機網路》中的例子是這樣的,已失效的連接請求報文段的產生在這樣一種情況下:client發出的第一個連接請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連接釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認為是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。假設不採用三次握手,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。但server卻以為新的運輸連接已經建立,並一直等待client發來數據。這樣,server的很多資源就白白浪費掉了。採用三次握手的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連接。 這個例子很清晰的闡釋了三次握手對於建立可靠連接的意義。 在Google Groups的 TopLanguage 中看到一帖討論TCP三次握手覺得很有意思。貼主提出 的問題,在眾多回復中,有一條回復寫道:這個問題的本質是, 信道不可靠, 但是通信雙發需要就某個問題達成一致. 而要解決這個問題, 無論你在消息中包含什麼信息, 三次通信是理論上的最小值. 所以三次握手不是TCP本身的要求, 而是為了滿足"在不可靠信道上可靠地傳輸信息"這一需求所導致的. 請注意這里的本質需求,信道不可靠, 數據傳輸要可靠. 三次達到了, 那後面你想接著握手也好, 發數據也好, 跟進行可靠信息傳輸的需求就沒關系了. 因此,如果信道是可靠的, 即無論什麼時候發出消息, 對方一定能收到, 或者你不關心是否要保證對方收到你的消息, 那就能像UDP那樣直接發送消息就可以了. 。這可視為對三次握手目的的另一種解答思路。
『貳』 怎樣生動描述 TCP 的「三次握手」
不要抖機靈,三次握手即是在最快最省力的情況下做出的選擇
比如在紅軍時代,A連和B連分在左右翼,約定在幾時幾分一同發起打擊。這個幾時幾分的信息就需要人工通過通訊員來走路傳遞。所以A連指揮官派出通訊員。
這是第一次。
這就是三次握手
『叄』 計算機網路題:什麼是三次握手方法
傳輸控制協議(Transport Control Protocol)是一種面向連接的,可靠的傳輸層協議。面向連接是指一次正常的TCP傳輸需要通過在TCP客戶端和TCP服務端建立特定的虛電路連接來完成,該過程通常被稱為「三次握手」。
『肆』 詳細說明tcp的三次握手過程.說明為什麼不用兩次握手替代三次握手
建立連接的過程是利用客戶伺服器模式,假設主機A為客戶端,主機B為伺服器端。
(1)TCP的三次握手過程:主機A向B發送連接請求;主機B對收到的主機A的報文段進行確認;主機A再次對主機B的確認進行確認。
(2)採用三次握手是為了防止失效的連接請求報文段突然又傳送到主機B,因而產生錯誤。失效的連接請求報文段是指:主機A發出的連接請求沒有收到主機B的確認,於是經過一段時間後,主機A又重新向主機B發送連接請求,且建立成功,順序完成數據傳輸。考慮這樣一種特殊情況,主機A第一次發送的連接請求並沒有丟失,而是因為網路節點導致延遲達到主機B,主機B以為是主機A又發起的新連接,於是主機B同意連接,並向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A發送數據,導致主機B的資源浪費。
(3)採用兩次握手不行,原因就是上面說的失效的連接請求的特殊情況。
『伍』 TCP 為什麼是三次握手,而不是兩次或四次
三次握手的目的:是為了確認雙方都有收發數據的能力。第一次:A->B,證明A有發消息的能力。第二次:->B&&B->A,證明B有收消息,並且有發消息的能力。第三次:A->B,證明A有收消息的能力。二次握手達不到目的,四次多餘。
當應用層向TCP層發送用於網間傳輸的、用8位位元組表示的數據流,TCP則把數據流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連接的網路的數據鏈路層的最大傳送單元(MTU)限制。之後TCP把數據包傳給IP層,由它來通過網路將包傳送給接收端實體的TCP層。
TCP為了保證報文傳輸的可靠,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的位元組發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。
『陸』 計算機網路中的「三次握手」是什麼
TCP握手協議
在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
SYN: 同步序列編號(Synchronize Sequence Numbers)
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念:
未連接隊列:在三次握手協議中,伺服器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
Backlog參數:表示未連接隊列的最大容納數目。
SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。
半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。
『柒』 tcp協議的三次握手
三次握手-簡介所謂的「三握手」:對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據 量而確定的數據確認數及數據發送、接收完畢後何時撤消聯系,並建立虛連接。為了提供可靠的傳送,TCP 在發送新的數據之前,以特定的順序將數據包的序號,並需要這些包傳送給目標機之後的確認消息。TCP 總是用來發送大批量的數據。當應用程序在收到數據後要做出確認時也要用到TCP。 TCP握手協議 在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。 第一次握手:建立連接時,客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認; 第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態; 三次握手協議 第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念: 未連接隊列:在三次握手協議中,伺服器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。 Backlog參數:表示未連接隊列的最大容納數目。 SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。 半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。 [1] * SYN:同步標志 同步序列編號(Synchronize Sequence Numbers)欄有效。該標志僅在三次握手建立TCP連接時有效。它提示TCP連接的服務端檢查序列編號,該序列編號為TCP連接初始端(一般是客戶端)的初始序列編號。在這里,可以把TCP序列編號看作是一個范圍從0到4,294,967,295的32位計數器。通過TCP連接交換的數據中每一個位元組都經過序列編號。在TCP報頭中的序列編號欄包括了TCP分段中第一個位元組的序列編號。 *ACK:確認標志 確認編號(Acknowledgement Number)欄有效。大多數情況下該標志位是置位的。TCP報頭內的確認編號欄內包含的確認編號(w+1,Figure-1)為下一個預期的序列編號,同時提示遠端系統已經成功接收所有數據。 *RST:復位標志 復位標志有效。用於復位相應的TCP連接。 *URG:緊急標志 緊急(The urgent pointer) 標志有效。緊急標志置位, *PSH:推標志 該標志置位時,接收端不將該數據進行隊列處理,而是盡可能快將數據轉由應用處理。在處理 telnet 或 rlogin 等交互模式的連接時,該標志總是置位的。 *FIN:結束標志 帶有該標志置位的數據包用來結束一個TCP回話,但對應埠仍處於開放狀態,准備接收後續數據。 [編輯本段]三次握手協議-工作原理 由於TCP 需要時刻跟蹤,這需要額外開銷,使得TCP 的格式有些顯得復雜。下面就讓我們看一個TCP 的 三次握手協議 經典案例,這是後來被稱為MITNICK 攻擊中KEVIN 開創了兩種攻擊技術: TCP 會話劫持和SYN FLOOD(同步洪流) 在這里我們討論的是TCP 會話劫持的問題。 先讓我們明白TCP 建立連接的基本簡單的過程。為了建設一個小型的模仿環境我們假設有3 台接入互聯網的機器。A 為攻擊者操縱的攻擊機。B 為中介跳板機器(受信任的伺服器)。C 為受害者使用的機器(多是伺服器),這里把C 機器鎖定為目標機器。A 機器向B機器發送SYN 包,請求建立連接,這時已經響應請求的B 機器會向A 機器回應SYN/ACK表明同意建立連接,當A 機器接受到B 機器發送的SYN/ACK 回應時,發送應答ACK 建立 A 機器與B 機器的網路連接。這樣一個兩台機器之間的TCP 通話信道就建立成功了。B 終端受信任的伺服器向C 機器發起TCP 連接,A 機器對伺服器發起SYN 信息,使C 機器不能響應B 機器。在同時A 機器也向B 機器發送虛假的C 機器回應的SYN 數據包,接收到SYN 數據包的B 機器(被C 機器信任)開始發送應答連接建立的SYN/ACK 數據包,這時C 機器正在忙於響應以前發送的SYN 數據而無暇回應B 機器,而A 機器的攻擊者預測出B 機器包的序列號(現在的TCP 序列號預測難度有所加大)假冒C 機器向B 機器發送應答ACK 這時攻擊者騙取B 機器的信任,假冒C 機器與B 機器建立起TCP 協議的對話連接。這個時候的C 機器還是在響應攻擊者A 機器發送的SYN 數據。 TCP 協議棧的弱點:TCP 連接的資源消耗,其中包括:數據包信息、條件狀態、序列號等。通過故意不完成建立連接所需要的三次握手過程,造成連接一方的資源耗盡。通過攻擊者有意的不完成建立連接所需要的三次握手的全過程,從而造成了C 機器的資源耗盡。序列號的可預測性,目標主機應答連接請求時返回的SYN/ACK 的序列號是可預測的。