欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

TCP三次握手的理論知識(shí)

科技綠洲 ? 來(lái)源:Linux開(kāi)發(fā)架構(gòu)之路 ? 作者:Linux開(kāi)發(fā)架構(gòu)之路 ? 2023-11-09 11:27 ? 次閱讀

關(guān)于TCP三次握手的理論知識(shí),往上一搜一大片,本文就跳過(guò)理論,直接上手。Let’s go。

準(zhǔn)備知識(shí)

抓一個(gè)TCP三次握手的包

開(kāi)啟三個(gè)窗口,窗口1執(zhí)行命令:

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

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

窗口2執(zhí)行命令:

nc -l 7899

該命令監(jiān)聽(tīng)7899端口,相當(dāng)于啟動(dòng)了一個(gè)監(jiān)聽(tīng)7899端口的server。當(dāng)然你要是有興趣的話,可以用代碼寫(xiě)一個(gè)server。

窗口3執(zhí)行命令:

telnet 127.0.0.1 7899

這個(gè)命令是向127.0.0.1:7899建立連接,相當(dāng)于client執(zhí)行connect函數(shù)。

這個(gè)命令一執(zhí)行,就會(huì)連接到7899端口上 ,在第一個(gè)窗口上立即就會(huì)抓到連續(xù)的三個(gè)包,如下圖所示:

圖片

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

很多資料講解三次握手時(shí),都會(huì)有一幅類(lèi)似于這樣的圖:

圖片

我們對(duì)應(yīng)抓到的三個(gè)包來(lái)看。

第一個(gè)包:

  • 127.0.0.1.48448 > 127.0.0.1.7899 說(shuō)明是從client 發(fā)往server的, client的端口是48448

第二個(gè)包:

  • 127.0.0.1.7899 > 127.0.0.1.48448 說(shuō)明是從server發(fā)往client的

第三個(gè)包:

  • 127.0.0.1.48448 > 127.0.0.1.7899 從client發(fā)往server

這個(gè)步驟,和上圖大致是能一一對(duì)應(yīng)上的。

除了這些簡(jiǎn)而易見(jiàn)的信息,還有一些 可能一時(shí)半會(huì)兒看不懂的東西,比如:

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協(xié)議棧。

相關(guān)視頻推薦

tcpip,accept,11個(gè)狀態(tài),細(xì)枝末節(jié)的秘密

手寫(xiě)一個(gè)用戶態(tài)協(xié)議棧以及零拷貝的實(shí)現(xiàn)

netmap到dpdk,硬件到協(xié)議棧,4個(gè)維度構(gòu)建網(wǎng)絡(luò)體系

需要C/C++ Linux服務(wù)器架構(gòu)師學(xué)習(xí)資料加qun812855908獲?。?a href="http://www.delux-kingway.cn/soft/special/" target="_blank">資料包括C/C++,Linux,golang技術(shù),Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK,ffmpeg等),免費(fèi)分享

圖片

了解一下TCP協(xié)議棧

首先,我們應(yīng)該知道,一個(gè)完整的以太網(wǎng)幀,包含了ethdr + iphdr + tcpdhr + data + etend

其中,以太網(wǎng)頭占14字節(jié),IP頭占20字節(jié),TCP頭占20字節(jié),以太網(wǎng)尾占4字節(jié),應(yīng)用數(shù)據(jù)大小不定,但不會(huì)超過(guò)一個(gè)MTU。

因?yàn)槲覀冎谎芯咳挝帐郑躁P(guān)于以太網(wǎng)幀,了解這些就夠了。

圖片

我們?cè)賮?lái)看看具體的TCP協(xié)議棧:

圖片

TCP協(xié)議棧包含:

16位源端口號(hào),占2字節(jié)

16位目的端口號(hào),占2字節(jié)

32位序號(hào)(seq),占4字節(jié)

32位確認(rèn)序號(hào)(ack),占4字節(jié)

4位首部長(zhǎng)度,占0.5字節(jié)

6位保留位,占0.75字節(jié)

6位標(biāo)志位,占0.75字節(jié), 以上:4位首部長(zhǎng)度+6位保留長(zhǎng)度+6位標(biāo)志位,合計(jì)16位,計(jì)2字節(jié)

標(biāo)志位包括:

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

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

16位校驗(yàn)和(checksum),占2字節(jié)

16位緊急指針,占2字節(jié)

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

有了以上這些知識(shí),我們?cè)賮?lái)解析上面的協(xié)議棧。

第一個(gè)包

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 [email protected]....
0x0020: a002 ffd7 fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 7a57 2314 0000 0000 0103 0307 zW#.........

十六進(jìn)制報(bào)文中,前20個(gè)字節(jié)是IP協(xié)議頭,后20個(gè)字節(jié)雖然也屬于TCP協(xié)議 ,但是是可選項(xiàng)option,并非標(biāo)準(zhǔn)的TCP協(xié)議一定有的內(nèi)容,所以我們真正關(guān)心的內(nèi)容 , 是下面高亮的部分:

圖片

即:

bd40 1edb b5dc f355 0000 0000 a002 ffd7 fe30 0000

接下來(lái),我們逐個(gè)字節(jié)解析:

16位源端口, 即 bd40, 轉(zhuǎn)換成10進(jìn)制為48448

16位目的端口,即1edb,轉(zhuǎn)換成10進(jìn)制為7899

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

32位序號(hào):b5dc f355, 即3051156309

32位確認(rèn)號(hào):0000 0000,即0

后面三個(gè)域由于不是 完整的字節(jié),放在一塊解析:

  • a002翻譯成二進(jìn)制 ,為:1010 0000 0000 0010
  • 其中,4位首部長(zhǎng)度,為1010,即10
  • 6位保留字段,即0000 00,不做解釋
  • 6位標(biāo)志位,即00 0010
    標(biāo)志位要解釋一下 :
    

圖片

標(biāo)志位哪一位設(shè)置為1,就代表當(dāng)前屬于什么包

由上面對(duì)應(yīng)關(guān)系,可知當(dāng)前是一個(gè)SYN包。

16位窗口大?。篺fd7, 即65495

16位校驗(yàn)和,即:fe30

16位緊急指針,即0000

由以上內(nèi)容,我們提取一些關(guān)鍵信息:

第一次握手:

  • 客戶端發(fā)往服務(wù)端
  • 標(biāo)志位為SYN
  • seq為3051156309
  • ack為0

第二個(gè)包

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 [email protected]
0x0020: a012 ffcb fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 7a57 2314 7a57 2314 0103 0307 zW#.zW#.....

由上面的知識(shí),我們知道TCP報(bào)文主要是下面這段:

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

通過(guò)同樣的方法,可以解析出:

第二次握手:

  • 服務(wù)端發(fā)往客戶端
  • 標(biāo)志位為ACK+SYN
  • seq為2031501770
  • ack為3051156310, 正好是第一次握手的seq+1

第三個(gè)包

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 [email protected].
0x0020: 8010 0200 fe28 0000 0101 080a 7a57 2314 .....(......zW#.
0x0030: 7a57 2314 zW#.

TCP協(xié)議部分:

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

可以解析出 :

第三次握手:

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

歸納:

以上內(nèi)容,如果用比較直觀的方式總結(jié)一下 ,大約如下圖:

圖片

為什么需要三次握手

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

在聊這個(gè)話題之前,我們引入一下著名科幻小說(shuō)《三體》中葉文杰教主和三體文明建立聯(lián)系的過(guò)程。

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

不得不說(shuō),大劉是懂TCP協(xié)議的。至少他懂三次握手的重要性。

第一次發(fā)消息,你說(shuō)三體人收到?jīng)]有?肯定是收到了的。但這個(gè)連接可靠不?明顯不可靠。對(duì)于三體人來(lái)說(shuō),他怎么知道這個(gè)消息是誰(shuí)發(fā)的?發(fā)消息的文明是否還活著?對(duì)于地球來(lái)說(shuō),更是如此,他怎么知道 這條消息對(duì)方肯定收到了?又沒(méi)有人收?

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

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

類(lèi)比三次握手,和這個(gè)步驟非常相似,缺少其中任意一環(huán),這個(gè)連接都是不可靠的,因?yàn)槟悴恢缹?duì)方能不能收到我的消息。所以三次握手,并不是表示連接“可達(dá)”的,而是表示連接“可靠”的。這之間是有區(qū)別的,可達(dá)很簡(jiǎn)單,UDP也能可達(dá),一次握手也是可達(dá)的,但是并不可靠。因?yàn)闊o(wú)法知道這條消息對(duì)方能不能正確接收到。只有這樣反復(fù)確認(rèn)后,才能表示這個(gè)連接是可靠的連接。

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

而杠精之所以是杠精,就是因?yàn)槟居心X子。你考慮的問(wèn)題,咱們祖師爺肯定都考慮到了。

我們?cè)谇懊娣治鋈挝帐值倪^(guò)程的時(shí)候,為什么要強(qiáng)調(diào)ack = 上一次的seq+1?就是代表我不僅收到了你的,我還在你的seq上加1,代表我收到的確實(shí)是你的消息,這就相當(dāng)于給這條消息打上了獨(dú)一無(wú)二的標(biāo)志,別人想魚(yú)目混珠都不可能。

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

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

    關(guān)注

    8

    文章

    1378

    瀏覽量

    79335
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    990

    瀏覽量

    32233
  • 窗口
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    10899
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4831

    瀏覽量

    69112
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    TCP三次握手的過(guò)程描述

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

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

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

    說(shuō)說(shuō)TCP三次握手的過(guò)程?為什么是三次而不是兩、四?

    說(shuō)說(shuō)TCP三次握手的過(guò)程?為什么是三次而不是兩、四? T
    的頭像 發(fā)表于 02-04 11:03 ?785次閱讀

    簡(jiǎn)述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 ?1226次閱讀

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

    TCP(傳輸控制協(xié)議)三次握手是一種在互聯(lián)網(wǎng)上建立一個(gè)可靠的、有序的和錯(cuò)誤檢測(cè)能力的連接的方法。這個(gè)過(guò)程確保了兩個(gè)設(shè)備(通常是客戶端和服務(wù)器)在數(shù)據(jù)傳輸開(kāi)始之前能夠相互確認(rèn)對(duì)方的存在和狀態(tài)。以下
    的頭像 發(fā)表于 01-03 17:11 ?411次閱讀

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

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

    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 ?529次閱讀

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

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

    TCP三次握手安全性分析

    TCP(傳輸控制協(xié)議)的三次握手是建立可靠連接的重要機(jī)制,它確保了通信雙方在數(shù)據(jù)傳輸前的連接狀態(tài)是可靠和準(zhǔn)確的。然而,從安全性的角度來(lái)分析,TCP
    的頭像 發(fā)表于 01-03 18:10 ?563次閱讀

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

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

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

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

    TCP三次握手的常見(jiàn)問(wèn)題及解決方案

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

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

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

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

    在計(jì)算機(jī)網(wǎng)絡(luò)中,傳輸控制協(xié)議(TCP)是確保數(shù)據(jù)可靠傳輸?shù)年P(guān)鍵協(xié)議之一。TCP通過(guò)三次握手過(guò)程來(lái)建立兩個(gè)端點(diǎn)之間的連接,這個(gè)過(guò)程對(duì)于網(wǎng)絡(luò)通信的穩(wěn)定性和安全性至關(guān)重要。
    的頭像 發(fā)表于 01-06 09:20 ?230次閱讀