那曲檬骨新材料有限公司

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

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

3天內不再提示

淺談TCP三次握手和四次揮手

jf_qwOiugB3 ? 來源:通信弱電交流學習 ? 2024-01-03 13:40 ? 次閱讀

TCP三次握手

計算機網絡體系結構

在計算機網絡的基本概念中,分層次的體系結構是最基本的。計算機網絡體系結構的抽象概念較多,在學習時要多思考。這些概念對后面的學習很有幫助。

網絡協議是什么?

在計算機網絡要做到有條不紊地交換數據,就必須遵守一些事先約定好的規則,比如交換數據的格式、是否需要發送一個應答信息。這些規則被稱為網絡協議。

為什么要對網絡協議分層?

簡化問題難度和復雜度。由于各層之間獨立,我們可以分割大問題為小問題。

靈活性好。當其中一層的技術變化時,只要層間接口關系保持不變,其他層不受影響。

易于實現和維護。

促進標準化工作。分開后,每層功能可以相對簡單地被描述。

網絡協議分層的缺點:功能可能出現在多個層里,產生了額外開銷。

為了使不同體系結構的計算機網絡都能互聯,國際標準化組織 ISO 于1977年提出了一個試圖使各種計算機在世界范圍內互聯成網的標準框架,即著名的開放系統互聯基本參考模型OSI/RM,簡稱為OSI。

OSI 的七層協議體系結構的概念清楚,理論也較完整,但它既復雜又不實用,TCP/IP 體系結構則不同,但它現在卻得到了非常廣泛的應用。TCP/IP 是一個四層體系結構,它包含應用層,運輸層,網際層和網絡接口層(用網際層這個名字是強調這一層是為了解決不同網絡的互連問題),不過從實質上講,TCP/IP 只有最上面的三層,因為最下面的網絡接口層并沒有什么具體內容,因此在學習計算機網絡的原理時往往采用折中的辦法,即綜合 OSI 和 TCP/IP 的優點,采用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚,有時為了方便,也可把最底下兩層稱為網絡接口層。

四層協議,五層協議和七層協議的關系如下:

TCP/IP是一個四層的體系結構,主要包括:應用層、運輸層、網際層和網絡接口層。

五層協議的體系結構主要包括:應用層、運輸層、網絡層,數據鏈路層和物理層。

OSI七層協議模型主要包括是:應用層(Application)、表示層(Presentation)、會話層(Session)、運輸層(Transport)、網絡層(Network)、數據鏈路層(Data Link)、物理層(Physical)。

注:五層協議的體系結構只是為了介紹網絡原理而設計的,實際應用還是 TCP/IP 四層體系結構。

TCP/IP 協議族

應用層

應用層( application-layer )的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。

對于不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如域名系統 DNS,支持萬維網應用的 HTTP 協議,支持電子郵件的 SMTP 協議等等。

運輸層

運輸層(transport layer)的主要任務就是負責向兩臺主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。

運輸層主要使用一下兩種協議

傳輸控制協議-TCP:提供面向連接的,可靠的數據傳輸服務。

用戶數據協議-UDP:提供無連接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。

4bba6f5a-a9fa-11ee-8b88-92fbcf53809c.png

每一個應用層(TCP/IP參考模型的最高層)協議一般都會使用到兩個傳輸層協議之一:

運行在TCP協議上的協議:

HTTP(Hypertext Transfer Protocol,超文本傳輸協議),主要用于普通瀏覽。

HTTPS(HTTP over SSL,安全超文本傳輸協議),HTTP協議的安全版本。

FTP(File Transfer Protocol,文件傳輸協議),用于文件傳輸。

POP3(Post Office Protocol, version 3,郵局協議),收郵件用。

SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議),用來發送電子郵件。

TELNET(Teletype over the Network,網絡電傳),通過一個終端(terminal)登陸到網絡。

SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。

運行在UDP協議上的協議:

BOOTP(Boot Protocol,啟動協議),應用于無盤設備。

NTP(Network Time Protocol,網絡時間協議),用于網絡同步。

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),動態配置IP地址。

運行在TCP和UDP協議上:

DNS(Domain Name Service,域名服務),用于完成地址查找,郵件轉發等工作。

網絡層

網絡層的任務就是選擇合適的網間路由和交換結點,確保計算機通信的數據及時傳送。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由于網絡層使用 IP 協議,因此分組也叫 IP 數據報 ,簡稱數據報。

互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接起來的。互聯網使用的網絡層協議是無連接的網際協議(Intert Prococol)和許多路由選擇協議,因此互聯網的網絡層也叫做網際層或 IP 層。

數據鏈路層

數據鏈路層(data link layer)通常簡稱為鏈路層。兩臺主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。

在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的 IP 數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。

在接收數據時,控制信息使接收端能夠知道一個幀從哪個比特開始和到哪個比特結束。

一般的web應用的通信傳輸流是這樣的:
4bcd782a-a9fa-11ee-8b88-92fbcf53809c.jpg

發送端在層與層之間傳輸數據時,每經過一層時會被打上一個該層所屬的首部信息。反之,接收端在層與層之間傳輸數據時,每經過一層時會把對應的首部信息去除。

物理層

在物理層上所傳送的數據單位是比特。物理層(physical layer)的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么。“透明傳送比特流”表示經實際電路傳送后的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。

TCP/IP 協議族

在互聯網使用的各種協議中最重要和最著名的就是 TCP/IP 兩個協議?,F在人們經常提到的 TCP/IP 并不一定是單指 TCP 和 IP 這兩個具體的協議,而往往是表示互聯網所使用的整個 TCP/IP 協議族。

4bddb74e-a9fa-11ee-8b88-92fbcf53809c.png

互聯網協議套件(英語:Internet Protocol Suite,縮寫IPS)是一個網絡通訊模型,以及一整個網絡傳輸協議家族,為網際網絡的基礎通訊架構。它常被通稱為TCP/IP協議族(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。因為該協定家族的兩個核心協定:TCP(傳輸控制協議)和IP(網際協議),為該家族中最早通過的標準。

劃重點:

TCP(傳輸控制協議)和IP(網際協議) 是最先定義的兩個核心協議,所以才統稱為TCP/IP協議族

TCP的三次握手四次揮手

TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,在發送數據前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實是客戶端和服務端保存的一份關于對方的信息,如ip地址、端口號等。

TCP可以看成是一種字節流,它會處理IP層或以下的層的丟包、重復以及錯誤問題。在連接的建立過程中,雙方需要交換一些連接的參數。這些參數可以放在TCP頭部。

一個TCP連接由一個4元組構成,分別是兩個IP地址和兩個端口號。一個TCP連接通常分為三個階段:連接、數據傳輸、退出(關閉)。通過三次握手建立一個鏈接,通過四次揮手來關閉一個連接。

當一個連接被建立或被終止時,交換的報文段只包含TCP頭部,而沒有數據。

TCP報文的頭部結構

在了解TCP連接之前先來了解一下TCP報文的頭部結構。

4bfe01de-a9fa-11ee-8b88-92fbcf53809c.png

上圖中有幾個字段需要重點介紹下:

(1)序號:seq序號,占32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

(2)確認序號:ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,ack=seq+1。

(3)標志位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:

ACK:確認序號有效。

FIN:釋放一個連接。

PSH:接收方應該盡快將這個報文交給應用層。

RST:重置連接。

SYN:發起一個新連接。

URG:緊急指針(urgent pointer)有效。

需要注意的是:

不要將確認序號ack與標志位中的ACK搞混了。

確認方ack=發起方seq+1,兩端配對。

三次握手

三次握手的本質是確認通信雙方收發數據的能力

首先,我讓信使運輸一份信件給對方,對方收到了,那么他就知道了我的發件能力和他的收件能力是可以的。

于是他給我回信,我若收到了,我便知我的發件能力和他的收件能力是可以的,并且他的發件能力和我的收件能力是可以。

然而此時他還不知道他的發件能力和我的收件能力到底可不可以,于是我最后回饋一次,他若收到了,他便清楚了他的發件能力和我的收件能力是可以的。

這,就是三次握手,這樣說,你理解了嗎?

4c1a033e-a9fa-11ee-8b88-92fbcf53809c.png

第一次握手:客戶端要向服務端發起連接請求,首先客戶端隨機生成一個起始序列號ISN(比如是100),那客戶端向服務端發送的報文段包含SYN標志位(也就是SYN=1),序列號seq=100。

第二次握手:服務端收到客戶端發過來的報文后,發現SYN=1,知道這是一個連接請求,于是將客戶端的起始序列號100存起來,并且隨機生成一個服務端的起始序列號(比如是300)。然后給客戶端回復一段報文,回復報文包含SYN和ACK標志(也就是SYN=1,ACK=1)、序列號seq=300、確認號ack=101(客戶端發過來的序列號+1)。

第三次握手:客戶端收到服務端的回復后發現ACK=1并且ack=101,于是知道服務端已經收到了序列號為100的那段報文;同時發現SYN=1,知道了服務端同意了這次連接,于是就將服務端的序列號300給存下來。然后客戶端再回復一段報文給服務端,報文包含ACK標志位(ACK=1)、ack=301(服務端序列號+1)、seq=101(第一次握手時發送報文是占據一個序列號的,所以這次seq就從101開始,需要注意的是不攜帶數據的ACK報文是不占據序列號的,所以后面第一次正式發送數據時seq還是101)。當服務端收到報文后發現ACK=1并且ack=301,就知道客戶端收到序列號為300的報文了,就這樣客戶端和服務端通過TCP建立了連接。

四次揮手

四次揮手的目的是關閉一個連接

4c2a0c66-a9fa-11ee-8b88-92fbcf53809c.jpg

比如客戶端初始化的序列號ISA=100,服務端初始化的序列號ISA=300。TCP連接成功后客戶端總共發送了1000個字節的數據,服務端在客戶端發FIN報文前總共回復了2000個字節的數據。

第一次揮手:當客戶端的數據都傳輸完成后,客戶端向服務端發出連接釋放報文(當然數據沒發完時也可以發送連接釋放報文并停止發送數據),釋放連接報文包含FIN標志位(FIN=1)、序列號seq=1101(100+1+1000,其中的1是建立連接時占的一個序列號)。需要注意的是客戶端發出FIN報文段后只是不能發數據了,但是還可以正常收數據;另外FIN報文段即使不攜帶數據也要占據一個序列號。

第二次揮手:服務端收到客戶端發的FIN報文后給客戶端回復確認報文,確認報文包含ACK標志位(ACK=1)、確認號ack=1102(客戶端FIN報文序列號1101+1)、序列號seq=2300(300+2000)。此時服務端處于關閉等待狀態,而不是立馬給客戶端發FIN報文,這個狀態還要持續一段時間,因為服務端可能還有數據沒發完。

第三次揮手:服務端將最后數據(比如50個字節)發送完畢后就向客戶端發出連接釋放報文,報文包含FIN和ACK標志位(FIN=1,ACK=1)、確認號和第二次揮手一樣ack=1102、序列號seq=2350(2300+50)。

第四次揮手:客戶端收到服務端發的FIN報文后,向服務端發出確認報文,確認報文包含ACK標志位(ACK=1)、確認號ack=2351、序列號seq=1102。注意客戶端發出確認報文后不是立馬釋放TCP連接,而是要經過2MSL(最長報文段壽命的2倍時長)后才釋放TCP連接。而服務端一旦收到客戶端發出的確認報文就會立馬釋放TCP連接,所以服務端結束TCP連接的時間要比客戶端早一些。

常見面試題

為什么TCP連接的時候是3次?2次不可以嗎?

因為需要考慮連接時丟包的問題,如果只握手2次,第二次握手時如果服務端發給客戶端的確認報文段丟失,此時服務端已經準備好了收發數(可以理解服務端已經連接成功)據,而客戶端一直沒收到服務端的確認報文,所以客戶端就不知道服務端是否已經準備好了(可以理解為客戶端未連接成功),這種情況下客戶端不會給服務端發數據,也會忽略服務端發過來的數據。

如果是三次握手,即便發生丟包也不會有問題,比如如果第三次握手客戶端發的確認ack報文丟失,服務端在一段時間內沒有收到確認ack報文的話就會重新進行第二次握手,也就是服務端會重發SYN報文段,客戶端收到重發的報文段后會再次給服務端發送確認ack報文。

為什么TCP連接的時候是3次,關閉的時候卻是4次?

因為只有在客戶端和服務端都沒有數據要發送的時候才能斷開TCP。而客戶端發出FIN報文時只能保證客戶端沒有數據發了,服務端還有沒有數據發客戶端是不知道的。而服務端收到客戶端的FIN報文后只能先回復客戶端一個確認報文來告訴客戶端我服務端已經收到你的FIN報文了,但我服務端還有一些數據沒發完,等這些數據發完了服務端才能給客戶端發FIN報文(所以不能一次性將確認報文和FIN報文發給客戶端,就是這里多出來了一次)。

為什么客戶端發出第四次揮手的確認報文后要等2MSL的時間才能釋放TCP連接?

這里同樣是要考慮丟包的問題,如果第四次揮手的報文丟失,服務端沒收到確認ack報文就會重發第三次揮手的報文,這樣報文一去一回最長時間就是2MSL,所以需要等這么長時間來確認服務端確實已經收到了。

如果已經建立了連接,但是客戶端突然出現故障了怎么辦?

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

審核編輯:湯梓紅

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

    關注

    3

    文章

    269

    瀏覽量

    21636
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79306
  • UDP
    UDP
    +關注

    關注

    0

    文章

    327

    瀏覽量

    34047
  • 計算機網絡
    +關注

    關注

    3

    文章

    341

    瀏覽量

    22245

原文標題:臥槽!牛皮了,頭一次見有大佬把TCP三次握手四次揮手解釋的這么明白

文章出處:【微信號:通信弱電交流學習,微信公眾號:通信弱電交流學習】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    講一講的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><b class='flag-5'>揮手</b>

    三次握手,四次揮手你懂嗎

    程序員面試被問到“三次握手四次揮手”怎么辦?
    發表于 04-08 07:23

    TCP三次握手的過程描述

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

    TCP/IP協議工作過程的三次握手四次揮手

    )、第三次握手:Client收到確認后,檢查ACK是否為1,如果正確則將標志位ACK置為1,并將該數據包發送給Server,Server檢查ACK是否為1,如果正確則連接建立成功,Client
    的頭像 發表于 10-25 09:49 ?7029次閱讀

    TCP三次握手過程及四次揮手過程說明

    三次握手 置位概念:根據 TCP 的包頭字段,存在 3 個重要的標識 ACK、SYN、FIN ACK:表示驗證字段 SYN:位數置 1,表示建立 TCP 連接 FIN:位數置 1,表示
    的頭像 發表于 03-01 12:00 ?4294次閱讀

    TCP三次握手四次揮手以及11種狀態資料下載

    電子發燒友網為你提供TCP三次握手四次揮手以及11種狀態資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料
    發表于 04-15 08:41 ?2次下載
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和<b class='flag-5'>四次</b><b class='flag-5'>揮手</b>以及11種狀態資料下載

    TCP三次握手四次揮手過程中的異常情況

    TCP 三次握手四次揮手過程中,途中某一步的報文丟失了,會發生什么?
    的頭像 發表于 09-05 10:23 ?1316次閱讀

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

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

    TCP建立連接概述及三次握手、四次揮手的流程

    具備上述個條件后A獲取B的信息是有要求的,根本上的要求是數據信道可靠,就是平時所說的可靠連接,那么如何保證連接的可靠性呢,TCP協議就是靠確認應答機制、超時重傳機制等保證連接可靠性的,接下來就通過TCP協議的
    的頭像 發表于 03-23 15:57 ?1181次閱讀
    <b class='flag-5'>TCP</b>建立連接概述及<b class='flag-5'>三次</b><b class='flag-5'>握手</b>、<b class='flag-5'>四次</b><b class='flag-5'>揮手</b>的流程

    用戀愛的方式解釋TCP三次握手四次揮手

    前言今天的分享,是關于前兩天讀到的心得,TCP建立連接時三次握手,斷開時為何4握手的自我理解:戀愛時連接時客戶端說:SYN(約嗎?)服務器
    的頭像 發表于 08-28 16:11 ?790次閱讀
    用戀愛的方式解釋<b class='flag-5'>TCP</b>的<b class='flag-5'>三次</b><b class='flag-5'>握手</b>和<b class='flag-5'>四次</b><b class='flag-5'>揮手</b>

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

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

    TCP三次握手協議的作用

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

    TCP三次握手的基本原理

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

    TCP三次握手安全性分析

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

    如何監測TCP三次握手過程

    在計算機網絡中,傳輸控制協議(TCP)是確保數據可靠傳輸的關鍵協議之一。TCP通過三次握手過程來建立兩個端點之間的連接,這個過程對于網絡通信的穩定性和安全性至關重要。
    的頭像 發表于 01-06 09:20 ?218次閱讀
    永吉县| 青州市| 百家乐官网筹码样式| 百家乐官网赌博规律| 24山可以正针吗| 百家乐澳门赌| 香港六合彩特码资料| 百家乐官网娱乐城提款| 法拉利百家乐官网的玩法技巧和规则| 百家乐官网吹| 将军百家乐官网的玩法技巧和规则| 百家乐官网详情| 百家乐官网娱乐网网77scs| 百家乐辅助分析软件| 玩百家乐输澳门百家乐现场| 百家乐代理条件| 大发888更名网址622| 房产| 皇冠网百家乐官网阿| 大发百家乐的玩法技巧和规则| 金世豪百家乐的玩法技巧和规则 | 澳门博彩有限公司| 百家乐官网可以算牌么| 圣淘沙百家乐官网游戏| YY百家乐官网的玩法技巧和规则| 百家乐官网注码技术打法| 金花百家乐官网娱乐城| 百家乐开户送10彩金| 金煌棋牌官网| 百家乐官网赌博策略论坛| 百家乐桌布9人| 涂山国际娱乐城| 全讯网百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城官方站| 湖北省| 百家乐打法分析| 大发888在线网址| 百家乐官网玩法教程| 百家乐博弈指| 百家乐官网输了好多钱| 澳门百家乐赢钱窍门|