那曲檬骨新材料有限公司

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

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

3天內不再提示

TCP三次握手與四次揮手的細節理解

GReq_mcu168 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2021-03-25 14:11 ? 次閱讀

簡介

TCP提供面向有連接的通信傳輸,面向有連接是指在數據通信開始之前先做好通信兩端之間的準備工作。

TCP在數據通信之前,通過TCP首部發送一個SYN包作為建立連接的請求等待確認應答(TCP中發送第一個SYN包的一方叫做客戶端,接收這個的一方叫做服務端)。如果對端發來確認應答,則認為可以進行數據通信。如果對端的確認應答未能到達,就不會進行數據通信。此外,在通信結束時會進行斷開連接的處理(FIN包)。

一個連接的建立與斷開,正常過程至少需要來回發送7個包才能完成(建立一個TCP連接需要發送3個包,這個過程也稱作“三次握手”,斷開一個TCP連接需要發送4個包,這個過程也稱作“四次揮手”)。

af0d6c02-8cec-11eb-8b86-12bb97331649.png

TCP報文段首部

在具體理解三次握手與四次揮手的細節時,需要先了解一下TCP報文段的首部格式:

af854cd6-8cec-11eb-8b86-12bb97331649.jpg

主要需要了解的是:

序號 seq

占4個字節,范圍[0,223-1],共223(42 9496 7296)個序號。TCP是面向字節流的,在一個TCP連接中傳送的字節流中的每一個字節都按順序編號。

確認號 ack

占4個字節,是期望收到對方下一個報文段的第一個數據字節的序號。

確認 ACK

僅當ACK=1時確認號字段才有效,當ACK=0時,確認號無效。TCP規定,在建立連接后所傳送的報文都必須把ACK置1。

同步 SYN

在連接時用來同步序號,當SYN=1而ACK=0時,表明這是一個連接請求報文段,對方若同意連接,在應在響應的報文段中使用SYN=1和ACK=1。因此,SYN置為1就表示這是一個連接請求或連接接受報文。

終止 FIN

用來釋放一個連接,當FIN=1時,表明此報文段的發送方的數據已發送完畢,并要求釋放運輸連接。

三次握手

afdd4238-8cec-11eb-8b86-12bb97331649.jpg

最初兩端的TCP進程都處于CLOSE(關閉)狀態。上圖中A主動打開連接,B被動打開連接。

B打開連接后處于LISTEN(監聽狀態),等待客戶的連接請求。

A向B發送請求報文,SYN=1,ACK=0,選擇一個初始序號seq=x。

B 收到連接請求報文,如果同意建立連接,則向 A 發送連接確認報文,SYN=1,ACK=1,確認號為ack= x+1,同時也選擇一個初始的序號 seq=y。

A 收到 B 的連接確認報文后,還要向 B 發出確認,確認號為ack= y+1,序號為 seq=x+1。

B 收到 A 的確認后,連接建立。

必須握手三次而不是兩次的原因

主要是防止已經失效的連接請求報文突然又傳送到了服務器,從而產生錯誤

如果使用的是兩次握手建立連接,假設有這樣一種場景,客戶端發送了第一個請求連接并且沒有丟失,只是因為在網絡結點中滯留的時間太長了,由于TCP的客戶端遲遲沒有收到確認報文,以為服務器沒有收到,此時重新向服務器發送這條報文,此后客戶端和服務器經過兩次握手完成連接,傳輸數據,然后關閉連接。此時此前滯留的那一次請求連接,網絡通暢了到達了服務器,這個報文本該是失效的,但是,兩次握手的機制將會讓客戶端和服務器再次建立連接,這將導致不必要的錯誤和資源的浪費。

如果采用的是三次握手,就算是那一次失效的報文傳送過來了,服務端接受到了那條失效報文并且回復了確認報文,但是客戶端不會再次發出確認。由于服務器收不到確認,就知道客戶端并沒有請求連接。

建立連接后,客戶端出現故障時的機制

TCP設有一個保活計時器,顯然,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源。服務器每收到一次客戶端的請求后都會重新復位這個計時器,時間通常是設置為2小時,若2小時還沒有收到客戶端的任何數據,服務器就會發送一個探測報文段,以后每隔75秒發送一次。若一連發送10個探測報文仍然沒反應,服務器就認為客戶端出了故障,接著就關閉連接。

四次揮手

b055125e-8cec-11eb-8b86-12bb97331649.jpg

A 發送連接釋放報文,FIN=1。

B 收到之后發出確認,此時 TCP 屬于半關閉狀態,B 能向 A 發送數據但是 A 不能向 B 發送數據。

當 B 不再需要連接時,發送連接釋放報文,FIN=1。

A 收到后發出確認,進入 TIME-WAIT 狀態,等待 2 MSL(最大報文存活時間)后釋放連接。

B 收到 A 的確認后釋放連接。

四次揮手的細節

CLOSE-WAIT

客戶端發送了 FIN 連接釋放報文之后,服務器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是為了讓服務器端發送還未傳送完畢的數據,傳送完畢之后,服務器會發送 FIN 連接釋放報文。

TIME-WAIT

客戶端接收到服務器端的 FIN 報文后進入此狀態,此時并不是直接進入 CLOSED 狀態,還需要等待一個時間計時器設置的時間 2MSL。原因有二:

為保證A發送的最后一個ACK報文段能夠到達B

A發送的這個ACK報文段有可能丟失,如果 B 沒收到 A 發送來的確認報文,那么A就會重新發送連接釋放請求報文,A 等待一段時間就是為了處理這種情況的發生。

防止“已經失效的連接請求報文段”出現在本鏈接中

A在發送完最后一個ACK報文段后,再經過時間2MSL,就可以使本連接的時間內所產生的所有報文段都從網絡中消失。這樣下一個新的連接中就不會出現這種舊的連接請求報文段。

為何建立連接協議是三次握手,而關閉連接卻是四次揮手?

因為服務端B的LISTEN狀態下的SOCKET當收到SYN報文的連接請求后,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文里來發送。但關閉連接時,當B收到對方A的FIN報文通知時,它僅表示客戶端A沒有數據發送給B了;但未必B的數據都全部發送給A了,所以B可能未必會馬上會關閉SOCKET,而是先發送一個ACK應答信號,繼續將剩余的數據發送給A之后,再發送FIN報文給A表示B同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。

原文標題:TCP的三次握手與四次揮手

文章出處:【微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    18

    文章

    6072

    瀏覽量

    136432
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79305

原文標題:TCP的三次握手與四次揮手

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

    1.TCP?為什么三次握手而不是兩握手 1.防止已失效的連接請求又傳送到服務器端,因而產生錯誤。 不幸的是, 這種解釋是不準確的,?
    的頭像 發表于 01-09 10:19 ?190次閱讀
    一文看懂<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>工作原理

    如何監測TCP三次握手過程

    在計算機網絡中,傳輸控制協議(TCP)是確保數據可靠傳輸的關鍵協議之一。TCP通過三次握手過程來建立兩個端點之間的連接,這個過程對于網絡通信的穩定性和安全性至關重要。
    的頭像 發表于 01-06 09:20 ?218次閱讀

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

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

    TCP三次握手如何影響網絡性能

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

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

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

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

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

    TCP三次握手的步驟詳解

    1.TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。在兩個主機之間建立通信之前,必須通過三次握手過程來建立一個穩定的連接。這個過程確保了兩個端點都準備好發送和接收數據。 2. 第一
    的頭像 發表于 01-06 09:07 ?235次閱讀

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

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

    TCP三次握手安全性分析

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

    TCP三次握手與UDP的區別

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

    TCP三次握手的基本原理

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

    TCP三次握手協議的作用

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

    TCP三次握手的詳細過程

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

    DHCP 四次握手

    DHCP的四次握手過程大白話大致如下: 客戶端:剛開機,還沒有IP地址,哪位佬能給個IP? 這個過程中,客戶端就是一個網絡小白,它也不知道自己IP是多少,就開始喊話,問有沒有DHCP服務器能給它分配
    的頭像 發表于 12-25 10:11 ?172次閱讀

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

    TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它主要用于在IP網絡中進行數據傳輸。TCP協議的三次握手
    的頭像 發表于 08-16 10:57 ?1212次閱讀
    百家乐高手长胜攻略| 姚记百家乐官网的玩法技巧和规则 | 大发888娱乐鸿博娱乐| 巴黎百家乐地址| 百家乐官网扎金花现金| 马龙县| 大发888娱乐游戏注册| 百家乐怎么下注能赢| 百家乐官网高级技巧| 深泽县| 德州扑克算法| 百家乐的玩法技巧和规则| 免费百家乐官网计划| 专业百家乐官网筹码| 富川| 大发888客服电话| 188金宝博| 大发888娱乐场奖金| 百家乐和| 百家乐能战胜吗| 新锦江百家乐官网娱乐场| 百家乐官网技术秘籍| 互联星空棋牌中心| 新世纪百家乐的玩法技巧和规则 | 澳门百家乐官网娱乐城开户| 博彩网络| 德州扑克高级技巧| 百家乐游戏| 百家乐高科技出千工具| 百家乐代理每周返佣| 百威百家乐官网的玩法技巧和规则 | 林口县| 在线玩轮盘| 大发888娱乐场下载 df888ylc3403| 百家乐新庄| 皇冠百家乐客户端皇冠| 太阳百家乐官网网| 真人百家乐官网博弈| 百家乐官网太阳城球讯网| 靖安县| 银泰娱乐城|