在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文看懂TCP三次握手工作原理

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2025-01-09 10:19 ? 次閱讀

1.TCP為什么三次握手而不是兩次握手

1.防止已失效的連接請求又傳送到服務(wù)器端,因而產(chǎn)生錯(cuò)誤。

不幸的是, 這種解釋是不準(zhǔn)確的,TCP 采用三次握手的原因其實(shí)非常簡單, 遠(yuǎn)沒有大部分博客所描述的那樣云山霧繞。為了實(shí)現(xiàn)可靠數(shù)據(jù)傳輸,TCP 協(xié)議的通信雙方, 都必須維護(hù)一個(gè)序列號(hào), 以標(biāo)識(shí)發(fā)送出去的數(shù)據(jù)包中, 哪些是已經(jīng)被對方收到的。三次握手的過程即是通信雙方相互告知序列號(hào)起始值, 并確認(rèn)對方已經(jīng)收到了序列號(hào)起始值的必經(jīng)步驟。如果只是兩次握手, 至多只有連接發(fā)起方的起始序列號(hào)能被確認(rèn), 另一方選擇的序列號(hào)則得不到確認(rèn)。

507827aa-cda6-11ef-9310-92fbcf53809c.png

位碼即tcp標(biāo)志位,有6種標(biāo)示:

① SYN(synchronous建立聯(lián)機(jī));

ACK(acknowledgement 確認(rèn))

③ PSH(push傳送)

④ FIN(finish結(jié)束)

RST(reset重置)

⑥ URG(urgent緊急)

Sequence number(順序號(hào)碼) //Acknowledge number(確認(rèn)號(hào)碼)

第一次握手:主機(jī)A發(fā)送位碼為SYN=1,隨機(jī)產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī);

第二次握手,主機(jī)B收到請求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),SYN=1,ACK=1,隨機(jī)產(chǎn)生seq number=7654321的包;

第三次握手:主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ACK是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ACK=1,主機(jī)B收到后確認(rèn)seq值與ACK=1則連接建立成功。

sequence number:表示的是我方(發(fā)送方)這邊,這個(gè)packet的數(shù)據(jù)部分的第一位應(yīng)該在整個(gè)data stream中所在的位置。(注意這里使用的是“應(yīng)該”。因?yàn)閷τ跊]有數(shù)據(jù)的傳輸,如ACK,雖然它有一個(gè)seq,但是這次傳輸在整個(gè)data stream中是不占位置的。所以下一個(gè)實(shí)際有數(shù)據(jù)的傳輸,會(huì)依舊從上一次發(fā)送ACK的數(shù)據(jù)包的seq開始)

acknowledge number:表示的是期望的對方(接收方)的下一次sequence number是多少。

注意,SYN/FIN的傳輸,雖然沒有data,但是會(huì)讓下一次傳輸?shù)膒acket seq增加一,但是,ACK的傳輸,不會(huì)讓下一次的傳輸packet seq加一。

5093f7dc-cda6-11ef-9310-92fbcf53809c.png

題外話

有一位讀者關(guān)注到了三次握手中, 序列號(hào)變化的問題, 讓筆者臨時(shí)想起了曾經(jīng)困擾自己的一個(gè)問題

為什么三次握手最后一次握手中, 在上面的示意圖中回復(fù)的seq = x+1 。

acknowledgement number 的作用是向?qū)Ψ奖硎荆移诖盏降南乱粋€(gè)序號(hào)。如果你向?qū)Ψ交貜?fù)了ack = 31, 代表著你已經(jīng)收到了序號(hào)截止到30的數(shù)據(jù),期待的下一個(gè)數(shù)據(jù)起點(diǎn)是31 。

TCP 協(xié)議規(guī)定SYN報(bào)文雖然不攜帶數(shù)據(jù), 但是也要消耗1個(gè)序列號(hào), 所以前兩次握手客戶端和服務(wù)端都需要向?qū)Ψ交貜?fù)x+1 或y+1 。

50a88544-cda6-11ef-9310-92fbcf53809c.png

50bd8cbe-cda6-11ef-9310-92fbcf53809c.png

值得注意的是, 如上圖所說, 最后一次握手在默認(rèn)不攜帶數(shù)據(jù)的情況下, 由于SYN 不是1 , 是不消耗序列號(hào)的。所以三次握手結(jié)束后, 客戶端下一個(gè)發(fā)送的報(bào)文中seq 依舊是x+1, 示意圖如下

50d257b6-cda6-11ef-9310-92fbcf53809c.png

注意到, 上圖第四步發(fā)送的seq 和第三次握手的seq 是一樣的, 體現(xiàn)了最后一次握手, 默認(rèn)不消耗序列號(hào)的特點(diǎn)。

四次揮手

50f39782-cda6-11ef-9310-92fbcf53809c.png

四次握手是指終止TCP連接協(xié)議時(shí),需要在客戶端和服務(wù)器之間發(fā)送四個(gè)包

第一次揮手:主動(dòng)關(guān)閉方發(fā)送第一個(gè)包,其中FIN標(biāo)志位為1,發(fā)送順序號(hào)seq為X。

第二次揮手:被動(dòng)關(guān)閉方收到FIN包后發(fā)送第二個(gè)包,其中發(fā)送順序號(hào)seq為Z,接收順序號(hào)ack為X+1。

第三次揮手:被動(dòng)關(guān)閉方再發(fā)送第三個(gè)包,其中FIN標(biāo)志位為1,發(fā)送順序號(hào)seq為Y,接收順序號(hào)ack為X。

第四次揮手:主動(dòng)關(guān)閉方發(fā)送第四個(gè)包,其中發(fā)送順序號(hào)為X,接收順序號(hào)為Y。至此,完成四次揮手。

超時(shí)重傳指的是,發(fā)送數(shù)據(jù)包在一定的時(shí)間周期內(nèi)沒有收到相應(yīng)的ACK,等待一定的時(shí)間,超時(shí)之后就認(rèn)為這個(gè)數(shù)據(jù)包丟失,就會(huì)重新發(fā)送。這個(gè)等待時(shí)間被稱為RTO.

深入討論:

1、為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?

建立連接時(shí),ACK和SYN可以放在一個(gè)報(bào)文里來發(fā)送。而關(guān)閉連接時(shí),被動(dòng)關(guān)閉方可能還需要發(fā)送一些數(shù)據(jù)后,再發(fā)送FIN報(bào)文表示同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開發(fā)送的。

2、為什么TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?

兩個(gè)存在的理由:1、無法保證最后發(fā)送的ACK報(bào)文會(huì)一定被對方收到,所以需要重發(fā)可能丟失的ACK報(bào)文。2、關(guān)閉鏈接一段時(shí)間后可能會(huì)在相同的IP地址和端口建立新的連接,為了防止舊連接的重復(fù)分組在新連接已經(jīng)終止后再現(xiàn)。2MSL足以讓分組最多存活msl秒被丟棄。

3、為什么必須是三次握手,不能用兩次握手進(jìn)行連接?

記住服務(wù)器的資源寶貴不能浪費(fèi)! 如果在斷開連接后,第一次握手請求連接的包才到會(huì)使服務(wù)器打開連接,占用資源而且容易被惡意攻擊!防止攻擊的方法,縮短服務(wù)器等待時(shí)間。兩次握手容易死鎖。如果服務(wù)器的應(yīng)答分組在傳輸中丟失,將不知道S建立什么樣的序列號(hào),C認(rèn)為連接還未建立成功,將忽略S發(fā)來的任何數(shù)據(jù)分組,只等待連接確認(rèn)應(yīng)答分組。而S在發(fā)出的分組超時(shí)后,重復(fù)發(fā)送同樣的分組。這樣就形成了死鎖。

鏈接:https://www.cnblogs.com/my-first-blog-lgz/p/14788810.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9234

    瀏覽量

    85641
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1372

    瀏覽量

    79142

原文標(biāo)題:深度解析TCP三次握手工作原理

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    講的TCP三次握手和四揮手

    如果你學(xué)過網(wǎng)絡(luò)基礎(chǔ)知識(shí),那么你定對TCP三次握手不陌生。今天我想用通俗的話來給大家講TCP
    的頭像 發(fā)表于 02-03 10:43 ?2741次閱讀
    講<b class='flag-5'>一</b>講的<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>揮手

    TCP三次握手的過程描述

    本文檔主要描述TCP三次握手的過程,個(gè)完整的三次握手也就是 請求---應(yīng)答---再次確認(rèn)
    發(fā)表于 03-02 15:37 ?8次下載

    如何使用WireShark進(jìn)行TCP三次握手

    WireShark是種非常方便的網(wǎng)絡(luò)抓包工具,下面演示,使用WireShark來抓取TCP三次握手過程。
    的頭像 發(fā)表于 11-01 09:50 ?2170次閱讀

    說說TCP三次握手的過程?為什么是三次而不是兩、四

    三次而不是兩或四。 首先,我們需要了解TCP種面向連接的協(xié)議。在進(jìn)行數(shù)據(jù)傳輸之前,發(fā)送端和接收端需要建立
    的頭像 發(fā)表于 02-04 11:03 ?707次閱讀

    簡述TCP協(xié)議的三次握手機(jī)制

    TCP(Transmission Control Protocol,傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它主要用于在IP網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)傳輸。TCP協(xié)議的三次
    的頭像 發(fā)表于 08-16 10:57 ?1105次閱讀

    TCP三次握手的詳細(xì)過程

    TCP(傳輸控制協(xié)議)三次握手種在互聯(lián)網(wǎng)上建立個(gè)可靠的、有序的和錯(cuò)誤檢測能力的連接的方法。這個(gè)過程確保了兩個(gè)設(shè)備(通常是客戶端和服務(wù)器
    的頭像 發(fā)表于 01-03 17:11 ?327次閱讀

    TCP三次握手協(xié)議的作用

    在計(jì)算機(jī)網(wǎng)絡(luò)中,數(shù)據(jù)的傳輸需要在發(fā)送方和接收方之間建立個(gè)穩(wěn)定的連接,以確保數(shù)據(jù)的完整性和順序。TCP(傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它通過三次
    的頭像 發(fā)表于 01-03 17:15 ?308次閱讀

    TCP三次握手的基本原理

    在計(jì)算機(jī)網(wǎng)絡(luò)中,TCP(傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它確保了數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)目煽啃院晚樞蛐浴榱私蓚€(gè)網(wǎng)絡(luò)實(shí)體之間的通信,TCP使用種稱為
    的頭像 發(fā)表于 01-03 17:25 ?443次閱讀

    TCP三次握手與UDP的區(qū)別

    、連接管理、可靠性、效率等方面有著顯著的區(qū)別。 1. TCP三次握手 TCP種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。在數(shù)據(jù)傳輸
    的頭像 發(fā)表于 01-03 17:35 ?335次閱讀

    TCP三次握手安全性分析

    TCP三次握手的基本過程 TCP三次握手的過
    的頭像 發(fā)表于 01-03 18:10 ?448次閱讀

    TCP三次握手的網(wǎng)絡(luò)抓包分析

    在計(jì)算機(jī)網(wǎng)絡(luò)中,TCP(傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP通過三次握手過程建立兩個(gè)通信實(shí)體之間的連接
    的頭像 發(fā)表于 01-06 09:05 ?163次閱讀

    TCP三次握手與連接建立的關(guān)系

    在計(jì)算機(jī)網(wǎng)絡(luò)中,TCP(傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它負(fù)責(zé)在兩個(gè)主機(jī)之間建立、維護(hù)和終止連接,確保數(shù)據(jù)的可靠傳輸。TCP連接的建立過程是通過三次
    的頭像 發(fā)表于 01-06 09:09 ?169次閱讀

    TCP三次握手的常見問題及解決方案

    TCP三次握手(Three-way Handshake)是TCP(傳輸控制協(xié)議)建立連接時(shí)的個(gè)過程,它確保了兩個(gè)端點(diǎn)在開始通信之前都準(zhǔn)備好
    的頭像 發(fā)表于 01-06 09:11 ?234次閱讀

    TCP三次握手與負(fù)載均衡的配置

    在計(jì)算機(jī)網(wǎng)絡(luò)中,TCP(傳輸控制協(xié)議)是種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它通過三次握手(Three-way Handshake)建立連接,確保數(shù)據(jù)的可靠傳輸。而負(fù)載
    的頭像 發(fā)表于 01-06 09:15 ?173次閱讀

    如何監(jiān)測TCP三次握手過程

    在計(jì)算機(jī)網(wǎng)絡(luò)中,傳輸控制協(xié)議(TCP)是確保數(shù)據(jù)可靠傳輸?shù)年P(guān)鍵協(xié)議之TCP通過三次握手過程來建立兩個(gè)端點(diǎn)之間的連接,這個(gè)過程對于網(wǎng)絡(luò)通信
    的頭像 發(fā)表于 01-06 09:20 ?158次閱讀
    主站蜘蛛池模板: 国产h视频在线| 男人的天堂午夜| 久久semm亚洲国产| 人人干综合| 久草3| 国产免费午夜| 操综合网| 简单视频在线播放jdav| 免费网址视频在线看| 一区二区三区视频| 乱妇伦小说| 性色视频免费| 四虎色影院| 欧美性生活一级| 久久精品国产夜色| 白丝丝袜高跟国产在线视频| 亚洲国产第一区二区香蕉| 视频一区二区中文字幕| 亚洲免费资源| 99热久| 手机在线观看毛片| 美女艹逼视频| 色婷婷在线观看视频| 日本.www| 国模论坛| 天天操人人| 欧美黑人xxxx猛牲大交| 欧洲精品不卡1卡2卡三卡| 亚洲成网777777国产精品| 人人干人人看| 国产精品久久久久久久久| 天天噜天天干| 欧美一区色| 亚洲人成伊人成综合网久久| 日本三级香港三级人妇99| 国产免费成人在线视频| 天天槽任我槽免费| jizz性欧美12| 性欧美欧美之巨大69| 经典三级第一页| 日本jlzz|