国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

三次握手詳解,全網(wǎng)最全

這篇具有很好參考價值的文章主要介紹了三次握手詳解,全網(wǎng)最全。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

三次握手詳解,全網(wǎng)最全

?一、TCP 報文段簡介

在介紹三次握手和四次揮手之前,先來簡單認(rèn)識一下 TCP 報文段的結(jié)構(gòu)

?

三次握手詳解,全網(wǎng)最全

TCP報文段也分為首部和數(shù)據(jù)兩部分,首部默認(rèn)情況下一般是20字節(jié)長度,但在一些需求情況下,會使用“可選字段”,這時,首部長度會有所增加,但最長不超過60字節(jié)。

TCP 首部包含以下內(nèi)容,請留意其中的控制位,在三次握手和四次揮手過程中會頻繁出現(xiàn):

  • 端口號 (Source Port and Destination Port):每個 TCP 報文段都包含源端和目的端的端口號,用于尋找發(fā)送端和接收端應(yīng)用進程。這兩個值加上 IP 首部中的源端 IP 地址和目的端 IP 地址就可以確定一個唯一的 TCP 連接。
  • 序號 (Sequence Number):這個字段的主要作用是用于將失序的數(shù)據(jù)重新排列。TCP 會隱式地對字節(jié)流中的每個字節(jié)進行編號,而 TCP 報文段的序號被設(shè)置為其數(shù)據(jù)部分的第一個字節(jié)的編號。序號是 32 bit 的無符號數(shù),取值范圍是0到 232 - 1。
  • 確認(rèn)序號 (Acknowledgment Number):接收方在接受到數(shù)據(jù)后,會回復(fù)確認(rèn)報文,其中包含確認(rèn)序號,作用就是告訴發(fā)送方自己接收到了哪些數(shù)據(jù),下一次數(shù)據(jù)從哪里開始發(fā),因此,確認(rèn)序號應(yīng)當(dāng)是上次已成功收到數(shù)據(jù)字節(jié)序號加 1。只有 ACK 標(biāo)志為 1 時確認(rèn)序號字段才有效。
  • 首部長度 (Header Length):首部中的選項部分的長度是可變的,因此首部的長度也是可變的,所以需要這個字段來明確表示首部的長度,這個字段占 4 bit,4 位的二進制數(shù)最大可以表示 15,而首部長度是以 4 個字節(jié)為一個單位的,因此首部最大長度是 15 * 4 = 60 字節(jié)。
  • 保留字段 (Reserved):占 6 位,未來可能有具體用途,目前默認(rèn)值為0.
  • 控制位 (Control Bits):在三次握手和四次揮手中會經(jīng)常看到 SYN、ACK 和 FIN 的身影,一共有 6 個標(biāo)志位,它們表示的意義如下:

    • URG (Urgent Bit):值為 1 時,緊急指針生效
    • ACK (Acknowledgment Bit):值為 1 時,確認(rèn)序號生效
    • PSH (Push Bit):接收方應(yīng)盡快將這個報文段交給應(yīng)用層
    • RST (Reset Bit):發(fā)送端遇到問題,想要重建連接
    • SYN (Synchronize Bit):同步序號,用于發(fā)起一個連接
    • FIN (Finish Bit):發(fā)送端要求關(guān)閉連接
  • 窗口大小 (Window): TCP的流量控制由連接的每一端通過聲明的窗口大小來提供。窗口大小為字節(jié)數(shù),起始于確認(rèn)序號字段指明的值,這個值是接收端正期望接收的字節(jié)。窗口大小是一個 16 bit 字段,單位是字節(jié), 因而窗口大小最大為 65535 字節(jié)。
  • 檢驗和 (Checksum):功能類似于數(shù)字簽名,用于驗證數(shù)據(jù)完整性,也就是確保數(shù)據(jù)未被修改。檢驗和覆蓋了整個 TCP 報文段,包括 TCP 首部和 TCP 數(shù)據(jù),發(fā)送端根據(jù)特定算法對整個報文段計算出一個檢驗和,接收端會進行計算并驗證。
  • 緊急指針 (Urgent Pointer):當(dāng) URG 控制位值為 1 時,此字段生效,緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數(shù)據(jù)最后一個字節(jié)的序號。 TCP 的緊急方式是發(fā)送端向另一端發(fā)送緊急數(shù)據(jù)的一種方式。
  • 選項 (Options):這一部分是可選字段,也就是非必須字段,最常見的可選字段是“最長報文大小 (MSS,Maximum Segment Size)”。
  • 有效數(shù)據(jù)部分 (Data):這部分也不是必須的,比如在建立和關(guān)閉 TCP 連接的階段,雙方交換的報文段就只包含 TCP 首部。

關(guān)于 TCP

  • TCP 提供一種面向連接的、可靠的字節(jié)流服務(wù)
  • 在一個 TCP 連接中,僅有兩方進行彼此通信。廣播和多播不能用于 TCP
  • TCP 使用校驗和,確認(rèn)和重傳機制來保證可靠傳輸
  • TCP 給數(shù)據(jù)分節(jié)進行排序,并使用累積確認(rèn)保證數(shù)據(jù)的順序不變和非重復(fù)
  • TCP 使用滑動窗口機制來實現(xiàn)流量控制,通過動態(tài)改變窗口的大小進行擁塞控制

TCP并不能保證數(shù)據(jù)一定會被對方接收到,因為這是不可能的。它不是100%可靠的協(xié)議,它所能提供的是數(shù)據(jù)的可靠傳遞或故障的可靠通知。

三次握手常見問題:

1。說一說三次握手

三次握手是TCP協(xié)議用于建立可靠連接的過程,其步驟如下:

  1. 第一次握手(SYN):客戶端向服務(wù)器發(fā)送SYN包,請求建立連接。該包中包含一個隨機生成的初始序列號ISN(Initial Sequence Number)。

  2. 第二次握手(SYN+ACK):服務(wù)器收到SYN包后,向客戶端發(fā)送SYN+ACK包,表示同意建立連接。該包中也包含一個隨機生成的序列號ISN,同時將確認(rèn)序列號ACK設(shè)置為客戶端的ISN+1。

  3. 第三次握手(ACK):客戶端收到服務(wù)器的SYN+ACK包后,向服務(wù)器發(fā)送ACK包,表示客戶端也同意建立連接。該包的序列號設(shè)置為服務(wù)器的ISN+1,確認(rèn)序列號設(shè)置為服務(wù)器的ISN+1。

在三次握手完成后,TCP連接建立成功,雙方可以開始進行數(shù)據(jù)傳輸。這個過程可以確保連接的可靠性和完整性,防止數(shù)據(jù)包的丟失或重復(fù)傳輸。

三次握手詳解,全網(wǎng)最全

2.三次握手的作用?

三次握手的作用如下:

  1. 建立可靠連接:三次握手可以確保客戶端和服務(wù)器之間建立起可靠的連接,防止數(shù)據(jù)包的丟失或重復(fù)傳輸。

  2. 防止舊連接的混淆:由于網(wǎng)絡(luò)延遲等原因,可能會出現(xiàn)舊連接的數(shù)據(jù)包在新連接中被誤認(rèn)為是有效數(shù)據(jù)包的情況。而三次握手過程中隨機生成的ISN可以防止這種情況的發(fā)生。

  3. 防止惡意連接:三次握手可以防止未經(jīng)授權(quán)的惡意連接,例如SYN洪泛攻擊等。如果服務(wù)器收到的SYN包并沒有相應(yīng)的ACK包,那么服務(wù)器就不會認(rèn)為這是一條有效的連接請求,從而防止惡意連接。

總之,三次握手是TCP協(xié)議用于建立可靠連接的基本過程,其作用在于確保連接的可靠性、完整性和安全性。

3.ISN是固定的嗎

ISN(Initial Sequence Number)是隨機生成的,通常由操作系統(tǒng)的偽隨機數(shù)生成器生成。因此,每次建立連接時都會生成一個新的ISN。ISN的目的是防止舊連接的混淆和防止惡意連接,因此它需要是隨機的、不可預(yù)測的。

ISN的長度通常為32位(4字節(jié)),因此ISN的取值范圍為0~2^32-1。在TCP連接建立的過程中,ISN會被客戶端和服務(wù)器分別使用,以確保連接的可靠性和完整性。

需要注意的是,ISN是由操作系統(tǒng)生成的,而不是由應(yīng)用程序生成的。這意味著在同一臺計算機上運行的不同應(yīng)用程序,它們建立的連接的ISN是不同的。同時,在不同的計算機上生成的ISN也可能不同,這取決于操作系統(tǒng)實現(xiàn)ISN的方式。

4.什么是半鏈接序列

"半連接序列"是指在TCP三次握手過程中,當(dāng)服務(wù)器收到客戶端的SYN包后,它會發(fā)送一個SYN+ACK包作為響應(yīng),此時連接處于半開狀態(tài),即服務(wù)器已經(jīng)準(zhǔn)備好接收客戶端的數(shù)據(jù),但客戶端還沒有發(fā)送ACK包確認(rèn)連接的建立。

在這種情況下,服務(wù)器會在等待一段時間(通常稱為“半連接超時時間”),等待客戶端發(fā)送ACK包,如果在規(guī)定的時間內(nèi)沒有收到客戶端的ACK包,服務(wù)器會認(rèn)為客戶端沒有接收到SYN+ACK包,進而關(guān)閉連接并釋放資源。這個過程被稱為半連接隊列(Half-open queue),其中等待ACK包的連接稱為半連接(Half-open connection)。

半連接隊列是用于存儲等待客戶端ACK的連接隊列。在Linux操作系統(tǒng)中,可以使用netstat命令查看半連接隊列的大小。當(dāng)半連接隊列的大小超過一定閾值時,服務(wù)器可能會拒絕新的連接請求,以避免資源耗盡。因此,在設(shè)計應(yīng)用程序時需要注意合理設(shè)置半連接隊列的大小,以確保系統(tǒng)的穩(wěn)定性和可靠性。

5.三次握手過程中可以攜帶數(shù)據(jù)嗎

在TCP三次握手的過程中,不會攜帶應(yīng)用層數(shù)據(jù)。三次握手的過程是在TCP協(xié)議層次進行的,而應(yīng)用層的數(shù)據(jù)傳輸是在TCP連接建立之后進行的。

三次握手的過程中,客戶端和服務(wù)器之間僅僅交換了一些控制信息,例如序列號、確認(rèn)號等,用于建立可靠的連接和確認(rèn)連接的建立。在第三次握手之后,雙方的TCP協(xié)議都已經(jīng)確認(rèn)了連接的建立,可以進行數(shù)據(jù)傳輸。

一旦TCP連接建立完成,應(yīng)用程序就可以使用該連接進行數(shù)據(jù)的傳輸。在傳輸數(shù)據(jù)時,數(shù)據(jù)會被封裝在TCP的數(shù)據(jù)段中,然后通過TCP連接進行傳輸。因此,在TCP連接建立完成之前,應(yīng)用程序不能進行數(shù)據(jù)的傳輸。

6.三次握手的安全性怎么樣

TCP三次握手是一種可靠的連接建立方式,也是一種安全的連接建立方式。它可以確保連接建立時,雙方的TCP協(xié)議棧都已經(jīng)認(rèn)可了對方的身份,從而避免了連接被第三方篡改或冒充的風(fēng)險。

在TCP三次握手的過程中,第三次握手中的ACK包中確認(rèn)號(ACK number)是根據(jù)第二次握手中的序列號(Sequence number)加1生成的,這樣可以確保雙方都能夠正確地識別對方的身份和數(shù)據(jù)傳輸?shù)恼_性。同時,TCP還使用隨機的ISN(Initial Sequence Number)來防止重放攻擊,這使得攻擊者很難猜測序列號,從而防止攻擊者模擬另一方進行連接。

雖然三次握手是一種安全可靠的連接建立方式,但在實際應(yīng)用中,仍然存在一些安全威脅。例如,攻擊者可能通過偽造IP地址或端口號等方式進行欺騙或攻擊。因此,在實際應(yīng)用中,還需要使用一些其他的安全機制來保護TCP連接的安全,例如TLS(Transport Layer Security)協(xié)議等。

7.三次握手最大的問題是什么

TCP三次握手的最大問題是SYN洪泛攻擊(SYN flood attack)。SYN洪泛攻擊是一種常見的網(wǎng)絡(luò)攻擊,攻擊者向服務(wù)器發(fā)送大量的SYN包,但并不發(fā)送ACK包來完成連接建立,從而導(dǎo)致服務(wù)器的半連接隊列滿,無法接受新的連接請求,最終導(dǎo)致服務(wù)不可用或崩潰。

SYN洪泛攻擊利用了TCP三次握手的過程中,服務(wù)器需要為每一個收到的SYN包創(chuàng)建一個半連接的特點。當(dāng)攻擊者發(fā)送大量的SYN包時,服務(wù)器需要為每一個SYN包都創(chuàng)建一個半連接,而由于攻擊者不發(fā)送ACK包,這些半連接會一直保持,直到超時才會被清除,從而消耗服務(wù)器的資源,導(dǎo)致服務(wù)器無法正常處理新的連接請求。

為了防止SYN洪泛攻擊,可以使用一些防御措施,例如在網(wǎng)絡(luò)邊界處使用防火墻、使用SYN cookie技術(shù)、調(diào)整半連接隊列的大小、限制同一IP地址的連接數(shù)量等等。這些措施可以有效地緩解SYN洪泛攻擊對服務(wù)器的影響。

8.你覺得三次握手還有哪些需要注意的問題

除了SYN洪泛攻擊這個已經(jīng)提到過的問題,TCP三次握手還有一些需要注意的問題,如下:

  1. 超時重傳:在三次握手的過程中,如果一方?jīng)]有收到對方發(fā)送的數(shù)據(jù)包,則需要重傳該數(shù)據(jù)包,直到成功建立連接或達(dá)到最大重傳次數(shù)。超時重傳的時間應(yīng)該根據(jù)實際情況進行調(diào)整,以確保在網(wǎng)絡(luò)環(huán)境不穩(wěn)定或延遲較高的情況下仍能夠成功建立連接。

  2. 中間人攻擊:TCP三次握手中的數(shù)據(jù)包可以被攻擊者劫持,從而實施中間人攻擊。為了防止中間人攻擊,可以使用TLS協(xié)議等加密通信機制來確保通信的安全性。

  3. 處理半連接隊列:在TCP三次握手的過程中,服務(wù)器需要維護一個半連接隊列來處理未完成的連接請求。如果半連接隊列滿了,則無法處理新的連接請求,從而導(dǎo)致服務(wù)不可用。因此,在實際應(yīng)用中,需要根據(jù)實際情況來調(diào)整半連接隊列的大小,以避免出現(xiàn)此類問題。

  4. 不同操作系統(tǒng)實現(xiàn)的差異:不同操作系統(tǒng)在實現(xiàn)TCP協(xié)議棧時可能存在一些細(xì)微的差異,例如超時時間的設(shè)置、ISN的生成方式等。在開發(fā)應(yīng)用程序時,需要考慮這些差異,以確保程序在不同操作系統(tǒng)上都能夠正常工作。

綜上所述,TCP三次握手是一種可靠的連接建立方式,但在實際應(yīng)用中,還需要注意一些細(xì)節(jié)問題,以確保連接的安全和穩(wěn)定。

9.TCP 建立連接為什么要三次握手而不是兩次?

網(wǎng)上大多數(shù)資料對這個問題的回答只有簡單的一句:防止已過期的連接請求報文突然又傳送到服務(wù)器,因而產(chǎn)生錯誤,這既不夠全面也不夠具體。下面給出比較詳細(xì)而全面的回答:

  1. 防止已過期的連接請求報文突然又傳送到服務(wù)器,因而產(chǎn)生錯誤

    在雙方兩次握手即可建立連接的情況下,假設(shè)客戶端發(fā)送 A 報文段請求建立連接,由于網(wǎng)絡(luò)原因造成 A 暫時無法到達(dá)服務(wù)器,服務(wù)器接收不到請求報文段就不會返回確認(rèn)報文段,客戶端在長時間得不到應(yīng)答的情況下重新發(fā)送請求報文段 B,這次 B 順利到達(dá)服務(wù)器,服務(wù)器隨即返回確認(rèn)報文并進入 ESTABLISHED 狀態(tài),客戶端在收到 確認(rèn)報文后也進入 ESTABLISHED 狀態(tài),雙方建立連接并傳輸數(shù)據(jù),之后正常斷開連接。此時姍姍來遲的 A 報文段才到達(dá)服務(wù)器,服務(wù)器隨即返回確認(rèn)報文并進入 ESTABLISHED 狀態(tài),但是已經(jīng)進入 CLOSED 狀態(tài)的客戶端無法再接受確認(rèn)報文段,更無法進入 ESTABLISHED 狀態(tài),這將導(dǎo)致服務(wù)器長時間單方面等待,造成資源浪費。

  2. 三次握手才能讓雙方均確認(rèn)自己和對方的發(fā)送和接收能力都正常

    第一次握手:客戶端只是發(fā)送處請求報文段,什么都無法確認(rèn),而服務(wù)器可以確認(rèn)自己的接收能力和對方的發(fā)送能力正常;

    第二次握手:客戶端可以確認(rèn)自己發(fā)送能力和接收能力正常,對方發(fā)送能力和接收能力正常;

    第三次握手:服務(wù)器可以確認(rèn)自己發(fā)送能力和接收能力正常,對方發(fā)送能力和接收能力正常;

    可見三次握手才能讓雙方都確認(rèn)自己和對方的發(fā)送和接收能力全部正常,這樣就可以愉快地進行通信了。

  3. 告知對方自己的初始序號值,并確認(rèn)收到對方的初始序號值

    TCP 實現(xiàn)了可靠的數(shù)據(jù)傳輸,原因之一就是 TCP 報文段中維護了序號字段和確認(rèn)序號字段,也就是圖中的 seq 和 ack,通過這兩個字段雙方都可以知道在自己發(fā)出的數(shù)據(jù)中,哪些是已經(jīng)被對方確認(rèn)接收的。這兩個字段的值會在初始序號值得基礎(chǔ)遞增,如果是兩次握手,只有發(fā)起方的初始序號可以得到確認(rèn),而另一方的初始序號則得不到確認(rèn)。

10.網(wǎng)絡(luò)是不可靠的,那建立連接不是會經(jīng)過三次握手嗎?那要是在中途丟了,怎么辦?

假設(shè)第一個包丟了,客戶端發(fā)送給服務(wù)端的 SYN 包丟了(簡而要之就是服務(wù)端沒接收到客戶端的SYN包)??蛻舳诉t遲收不到服務(wù)端的ACK包,那會周期性超時重傳,直到收到服務(wù)端的ACK。假設(shè)第二個包丟了,服務(wù)端發(fā)送的SYN+ACK包丟了(簡而要之就是客戶端沒接收到服務(wù)端的SYN+ACK包)。服務(wù)端遲遲收不到客戶端的ACK包,那會周期性超時重傳,直到收到客戶端的ACK。假設(shè)第三個包丟了(ACK包),客戶端發(fā)送完第三個包后單方面進入了 ESTABLISHED 狀態(tài),而服務(wù)端也認(rèn)為此時連接是正常的,但第三個包沒到達(dá)服務(wù)端。

一、如果此時客戶端與服務(wù)端都還沒數(shù)據(jù)發(fā)送,那服務(wù)端會認(rèn)為自己發(fā)送的SYN+ACK的包沒發(fā)送至客戶端,所以會超時重傳自己的SYN+ACK包。

二、如果這時候客戶端已經(jīng)要發(fā)送數(shù)據(jù)了,服務(wù)端接收到了ACK + Data數(shù)據(jù)包,那自然就切換到 ESTABLISHED 狀態(tài)下,并且接收客戶端的Data數(shù)據(jù)包。

三、如果此時服務(wù)端要發(fā)送數(shù)據(jù)了,但發(fā)送不了,會一直周期性超時重傳SYN + ACK,直到接收到客戶端的ACK包。文章來源地址http://www.zghlxwxcb.cn/news/detail-426001.html

到了這里,關(guān)于三次握手詳解,全網(wǎng)最全的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包