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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP三次握手的理論知識

科技綠洲 ? 來源:Linux開發架構之路 ? 作者:Linux開發架構之路 ? 2023-11-09 11:27 ? 次閱讀

關于TCP三次握手的理論知識,往上一搜一大片,本文就跳過理論,直接上手。Let’s go。

準備知識

抓一個TCP三次握手的包

開啟三個窗口,窗口1執行命令:

sudo tcpdump -i lo -nn -s0 -vvv port 7899 -A -X

這個命令用來抓包,抓的是7899端口的包。-A和-X是為了顯示詳細的包內容,方便分析。如果不習慣用tcpdump直接分析,也可以使用wireshark,更加直觀一些。

窗口2執行命令:

nc -l 7899

該命令監聽7899端口,相當于啟動了一個監聽7899端口的server。當然你要是有興趣的話,可以用代碼寫一個server。

窗口3執行命令:

telnet 127.0.0.1 7899

這個命令是向127.0.0.1:7899建立連接,相當于client執行connect函數。

這個命令一執行,就會連接到7899端口上 ,在第一個窗口上立即就會抓到連續的三個包,如下圖所示:

圖片

如上步驟,演示了TCP建立連接的過程,tcpdump抓到的三個包,正好就是三次握手。

很多資料講解三次握手時,都會有一幅類似于這樣的圖:

圖片

我們對應抓到的三個包來看。

第一個包:

  • 127.0.0.1.48448 > 127.0.0.1.7899 說明是從client 發往server的, client的端口是48448

第二個包:

  • 127.0.0.1.7899 > 127.0.0.1.48448 說明是從server發往client的

第三個包:

  • 127.0.0.1.48448 > 127.0.0.1.7899 從client發往server

這個步驟,和上圖大致是能一一對應上的。

除了這些簡而易見的信息,還有一些 可能一時半會兒看不懂的東西,比如:

Flags [S], cksum 0xfe30 (incorrect -> 0x2d48), seq 3051156309, win 65495, options [mss 65495,sackOK,TS val 2052530964 ecr 0,nop,wscale 7], length 0

要了解這些東西,需要先了解TCP協議棧。

相關視頻推薦

tcpip,accept,11個狀態,細枝末節的秘密

手寫一個用戶態協議棧以及零拷貝的實現

netmap到dpdk,硬件到協議棧,4個維度構建網絡體系

需要C/C++ Linux服務器架構師學習資料加qun812855908獲?。?a href="http://m.xsypw.cn/soft/special/" target="_blank">資料包括C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg等),免費分享

圖片

了解一下TCP協議棧

首先,我們應該知道,一個完整的以太網幀,包含了ethdr + iphdr + tcpdhr + data + etend

其中,以太網頭占14字節,IP頭占20字節,TCP頭占20字節,以太網尾占4字節,應用數據大小不定,但不會超過一個MTU。

因為我們只研究三次握手,所以關于以太網幀,了解這些就夠了。

圖片

我們再來看看具體的TCP協議棧:

圖片

TCP協議棧包含:

16位源端口號,占2字節

16位目的端口號,占2字節

32位序號(seq),占4字節

32位確認序號(ack),占4字節

4位首部長度,占0.5字節

6位保留位,占0.75字節

6位標志位,占0.75字節, 以上:4位首部長度+6位保留長度+6位標志位,合計16位,計2字節

標志位包括:

 URG
  • 緊急指針標志
  • 此標志用于將輸入數據標識為“緊急”。這樣的進入段不必等待直到先前段被接收端消耗,而是直接發送并立即處理。
    ACK
  • 用于確認數據包的成功接收
    PSH
  • 推送標志
  • 就是指數據包到達接收端以后,不對其進行隊列處理,而是盡可能的將數據交給應用程序處理
    RST
  • 重置標志
  • 當段到達不用于當前連接時,使用復位標志,表示主機已重置連接
    SYN
  • 發送/同步標志
  • 用來建立連接,一般和ACK搭配使用
    FIN
  • 結束標志
  • 用于結束一個TCP會話, 一般用于四次揮手

16位窗口大?。╳indow size),占2字節

16位校驗和(checksum),占2字節

16位緊急指針,占2字節

庖丁解牛,深度剖析TCP協議棧的三次握手

有了以上這些知識,我們再來解析上面的協議棧。

第一個包

127.0.0.1.48448 > 127.0.0.1.7899: Flags [S], cksum 0xfe30 (incorrect -> 0x2d48), seq 3051156309, win 65495, options [mss 65495,sackOK,TS val 2052530964 ecr 0,nop,wscale 7], length 0
0x0000: 4510 003c dbf7 4000 4006 60b2 7f00 0001 E..<..@.@.`.....
0x0010: 7f00 0001 bd40 1edb b5dc f355 0000 0000 .....@.....U....
0x0020: a002 ffd7 fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 7a57 2314 0000 0000 0103 0307 zW#.........

十六進制報文中,前20個字節是IP協議頭,后20個字節雖然也屬于TCP協議 ,但是是可選項option,并非標準的TCP協議一定有的內容,所以我們真正關心的內容 , 是下面高亮的部分:

圖片

即:

bd40 1edb b5dc f355 0000 0000 a002 ffd7 fe30 0000

接下來,我們逐個字節解析:

16位源端口, 即 bd40, 轉換成10進制為48448

16位目的端口,即1edb,轉換成10進制為7899

  • 從以上信息可知,該條消息是從48448發往7899端口,即客戶端發往服務端

32位序號:b5dc f355, 即3051156309

32位確認號:0000 0000,即0

后面三個域由于不是 完整的字節,放在一塊解析:

  • a002翻譯成二進制 ,為:1010 0000 0000 0010
  • 其中,4位首部長度,為1010,即10
  • 6位保留字段,即0000 00,不做解釋
  • 6位標志位,即00 0010
    標志位要解釋一下 :
    

圖片

標志位哪一位設置為1,就代表當前屬于什么包

由上面對應關系,可知當前是一個SYN包。

16位窗口大小:ffd7, 即65495

16位校驗和,即:fe30

16位緊急指針,即0000

由以上內容,我們提取一些關鍵信息:

第一次握手:

  • 客戶端發往服務端
  • 標志位為SYN
  • seq為3051156309
  • ack為0

第二個包

127.0.0.1.7899 > 127.0.0.1.48448: Flags [S.], cksum 0xfe30 (incorrect -> 0xd4f6), seq 2031501770, ack 3051156310, win 65483, options [mss 65495,sackOK,TS val 2052530964 ecr 2052530964,nop,wscale 7], length 0
0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001 E..<..@.@.<.....
0x0010: 7f00 0001 1edb bd40 7916 41ca b5dc f356 .......@y.A....V
0x0020: a012 ffcb fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 7a57 2314 7a57 2314 0103 0307 zW#.zW#.....

由上面的知識,我們知道TCP報文主要是下面這段:

1edb bd40 7916 41ca b5dc f356 a012 ffcb fe30 0000

通過同樣的方法,可以解析出:

第二次握手:

  • 服務端發往客戶端
  • 標志位為ACK+SYN
  • seq為2031501770
  • ack為3051156310, 正好是第一次握手的seq+1

第三個包

127.0.0.1.48448 > 127.0.0.1.7899: Flags [.], cksum 0xfe28 (incorrect -> 0xfbb2), seq 1, ack 1, win 512, options [nop,nop,TS val 2052530964 ecr 2052530964], length 0
0x0000: 4510 0034 dbf8 4000 4006 60b9 7f00 0001 E..4..@.@.`.....
0x0010: 7f00 0001 bd40 1edb b5dc f356 7916 41cb .....@.....Vy.A.
0x0020: 8010 0200 fe28 0000 0101 080a 7a57 2314 .....(......zW#.
0x0030: 7a57 2314 zW#.

TCP協議部分:

bd40 1edb b5dc f356 7916 41cb 8010 0200 fe28 0000

可以解析出 :

第三次握手:

  • 客戶端發往服務端
  • 標志位:ACK
  • seq為3051156310,為第一次我收的 seq+1,也是第二次握手的ack
  • ack為2031501771, 為 第二次握手的seq+1

歸納:

以上內容,如果用比較直觀的方式總結一下 ,大約如下圖:

圖片

為什么需要三次握手

又回到老生常談的話題:為什么需要三次握手?少一次行不行?只握手一次成不成?

在聊這個話題之前,我們引入一下著名科幻小說《三體》中葉文杰教主和三體文明建立聯系的過程。

首先,葉教主向三體文明發送了一條消息,緊接著,三體人回復了一條消息,內容是“不要回答,不要回答,不要回答!”然后葉教主回復了這條消息 ,導致地球成功被三體人定位。

不得不說,大劉是懂TCP協議的。至少他懂三次握手的重要性。

第一次發消息,你說三體人收到沒有?肯定是收到了的。但這個連接可靠不?明顯不可靠。對于三體人來說,他怎么知道這個消息是誰發的?發消息的文明是否還活著?對于地球來說,更是如此,他怎么知道 這條消息對方肯定收到了?又沒有人收?

第二次發消息,三體人差不多要把ACK標志寫在臉上了,就是明明白白告訴你,我這是一個ACK消息,你只要不應答這個ACK,我們這個連接就建立不成,三體小說就全劇終。這就相當于三體人告訴葉教主:我活著,并且能收到你的消息,但是我還不知道你是誰,你能不能收到我這條消息。

所以第三條消息,狡猾的大劉當然不會讓三體就此game over,就是老葉告訴三體人,我也能收到你的消息,從此以后,咱們是“同志”了。

類比三次握手,和這個步驟非常相似,缺少其中任意一環,這個連接都是不可靠的,因為你不知道對方能不能收到我的消息。所以三次握手,并不是表示連接“可達”的,而是表示連接“可靠”的。這之間是有區別的,可達很簡單,UDP也能可達,一次握手也是可達的,但是并不可靠。因為無法知道這條消息對方能不能正確接收到。只有這樣反復確認后,才能表示這個連接是可靠的連接。

有杠精肯定表示不服,說理雖然是這么個理,但是會不會有巧合啊。比如某個服務既是客戶端又是服務端,我在給你發第一次握手的時候,你也恰好在給我發第一次握手,讓我誤以為你給我的消息是第二次握手的回包,從而建立了一個不可靠的連接?

而杠精之所以是杠精,就是因為木有腦子。你考慮的問題,咱們祖師爺肯定都考慮到了。

我們在前面分析三次握手的過程的時候,為什么要強調ack = 上一次的seq+1?就是代表我不僅收到了你的,我還在你的seq上加1,代表我收到的確實是你的消息,這就相當于給這條消息打上了獨一無二的標志,別人想魚目混珠都不可能。

最后,咱們說說,三體人和葉文杰建立的是TCP連接嗎?咳咳,明顯不是。本文只是舉例類比。要知道,葉文杰第一個包可是broadcast,誰都能收到的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79309
  • 端口
    +關注

    關注

    4

    文章

    990

    瀏覽量

    32211
  • 窗口
    +關注

    關注

    0

    文章

    66

    瀏覽量

    10898
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
收藏 人收藏

    評論

    相關推薦

    講一講的TCP三次握手和四揮手

    如果你學過網絡基礎知識,那么你一定對TCP三次握手不陌生。今天我想用通俗的話來給大家講一講TCP三次
    的頭像 發表于 02-03 10:43 ?2781次閱讀
    講一講的<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>揮手

    TCP三次握手的過程描述

    本文檔主要描述TCP三次握手的過程,一個完整的三次握手也就是 請求---應答---再次確認
    發表于 03-02 15:37 ?8次下載

    如何使用WireShark進行TCP三次握手

    WireShark是一種非常方便的網絡抓包工具,下面演示,使用WireShark來抓取TCP三次握手過程。
    的頭像 發表于 11-01 09:50 ?2199次閱讀

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

    說說TCP三次握手的過程?為什么是三次而不是兩、四? T
    的頭像 發表于 02-04 11:03 ?773次閱讀

    簡述TCP協議的三次握手機制

    TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它主要用于在IP網絡中進行數據傳輸。TCP協議的三次握手
    的頭像 發表于 08-16 10:57 ?1214次閱讀

    TCP三次握手的詳細過程

    TCP(傳輸控制協議)三次握手是一種在互聯網上建立一個可靠的、有序的和錯誤檢測能力的連接的方法。這個過程確保了兩個設備(通常是客戶端和服務器)在數據傳輸開始之前能夠相互確認對方的存在和狀態。以下
    的頭像 發表于 01-03 17:11 ?394次閱讀

    TCP三次握手協議的作用

    在計算機網絡中,數據的傳輸需要在發送方和接收方之間建立一個穩定的連接,以確保數據的完整性和順序。TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,它通過三次握手協議來建立
    的頭像 發表于 01-03 17:15 ?360次閱讀

    TCP三次握手的基本原理

    在計算機網絡中,TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它確保了數據在網絡中傳輸的可靠性和順序性。為了建立兩個網絡實體之間的通信,TCP使用一種稱為“三次
    的頭像 發表于 01-03 17:25 ?518次閱讀

    TCP三次握手與UDP的區別

    、連接管理、可靠性、效率等方面有著顯著的區別。 1. TCP三次握手 TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。在數據傳輸之前,T
    的頭像 發表于 01-03 17:35 ?439次閱讀

    TCP三次握手安全性分析

    TCP(傳輸控制協議)的三次握手是建立可靠連接的重要機制,它確保了通信雙方在數據傳輸前的連接狀態是可靠和準確的。然而,從安全性的角度來分析,TCP
    的頭像 發表于 01-03 18:10 ?548次閱讀

    TCP三次握手的網絡抓包分析

    在計算機網絡中,TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。TCP通過三次握手過程建立兩個通信實體之間的連接,確保數據傳輸的可靠性和順序性。
    的頭像 發表于 01-06 09:05 ?238次閱讀

    TCP三次握手與連接建立的關系

    在計算機網絡中,TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它負責在兩個主機之間建立、維護和終止連接,確保數據的可靠傳輸。TCP連接的建立過程是通過三次握手
    的頭像 發表于 01-06 09:09 ?232次閱讀

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

    TCP三次握手(Three-way Handshake)是TCP(傳輸控制協議)建立連接時的一個過程,它確保了兩個端點在開始通信之前都準備好了。這個過程包括
    的頭像 發表于 01-06 09:11 ?339次閱讀

    TCP三次握手與負載均衡的配置

    在計算機網絡中,TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它通過三次握手(Three-way Handshake)建立連接,確保數據的可靠傳輸。而負載均衡(Load
    的頭像 發表于 01-06 09:15 ?234次閱讀

    如何監測TCP三次握手過程

    在計算機網絡中,傳輸控制協議(TCP)是確保數據可靠傳輸的關鍵協議之一。TCP通過三次握手過程來建立兩個端點之間的連接,這個過程對于網絡通信的穩定性和安全性至關重要。
    的頭像 發表于 01-06 09:20 ?220次閱讀
    主站蜘蛛池模板: 日韩高清在线日韩大片观看网址 | 足控免费视频xxav | 四虎影在永久地址在线观看 | 高清视频在线观看+免费 | 97se亚洲综合 | 精品一区二区三区免费爱 | 久久久免费观看 | 黄视频网站免费观看 | 欧美五月激情 | 色偷偷尼玛图亚洲综合 | 热九九精品 | 沟沟人体一区二区 | 视频免费在线 | 午夜国产精品福利在线观看 | 午夜影院亚洲 | 韩国精品videosex性韩国 | 国产黄在线观看 | 亚欧乱色束缚一区二区三区 | 男啪女r18肉车文 | 人人爱人人爽 | 午夜精品网站 | 国产hs免费高清在线观看 | 中文字幕不卡免费高清视频 | 久久亚洲国产成人精品性色 | 性欧美性| 人人做人人爽 | 国产网站免费视频 | 看黄免费在线 | 开心激情小说 | 特级毛片aaaaaa蜜桃 | 不卡中文字幕在线 | 二十年等一人小说在线观看 | 视频在线观看高清免费看 | 欧美视频一区二区三区四区 | 性欧美护士18xxxxhd视频 | 黄色毛片免费看 | 天天摸天天碰色综合网 | 亚洲综合成人网 | 一级特黄aaa大片在线观看 | 五月激情婷婷网 | 中国人69xxx大全 |