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三次握手和四次揮手

jf_qwOiugB3 ? 來(lái)源:通信弱電交流學(xué)習(xí) ? 2024-01-03 13:40 ? 次閱讀

TCP三次握手

計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)

在計(jì)算機(jī)網(wǎng)絡(luò)的基本概念中,分層次的體系結(jié)構(gòu)是最基本的。計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)的抽象概念較多,在學(xué)習(xí)時(shí)要多思考。這些概念對(duì)后面的學(xué)習(xí)很有幫助。

網(wǎng)絡(luò)協(xié)議是什么?

在計(jì)算機(jī)網(wǎng)絡(luò)要做到有條不紊地交換數(shù)據(jù),就必須遵守一些事先約定好的規(guī)則,比如交換數(shù)據(jù)的格式、是否需要發(fā)送一個(gè)應(yīng)答信息。這些規(guī)則被稱(chēng)為網(wǎng)絡(luò)協(xié)議。

為什么要對(duì)網(wǎng)絡(luò)協(xié)議分層?

簡(jiǎn)化問(wèn)題難度和復(fù)雜度。由于各層之間獨(dú)立,我們可以分割大問(wèn)題為小問(wèn)題。

靈活性好。當(dāng)其中一層的技術(shù)變化時(shí),只要層間接口關(guān)系保持不變,其他層不受影響。

易于實(shí)現(xiàn)和維護(hù)。

促進(jìn)標(biāo)準(zhǔn)化工作。分開(kāi)后,每層功能可以相對(duì)簡(jiǎn)單地被描述。

網(wǎng)絡(luò)協(xié)議分層的缺點(diǎn):功能可能出現(xiàn)在多個(gè)層里,產(chǎn)生了額外開(kāi)銷(xiāo)。

為了使不同體系結(jié)構(gòu)的計(jì)算機(jī)網(wǎng)絡(luò)都能互聯(lián),國(guó)際標(biāo)準(zhǔn)化組織 ISO 于1977年提出了一個(gè)試圖使各種計(jì)算機(jī)在世界范圍內(nèi)互聯(lián)成網(wǎng)的標(biāo)準(zhǔn)框架,即著名的開(kāi)放系統(tǒng)互聯(lián)基本參考模型OSI/RM,簡(jiǎn)稱(chēng)為OSI。

OSI 的七層協(xié)議體系結(jié)構(gòu)的概念清楚,理論也較完整,但它既復(fù)雜又不實(shí)用,TCP/IP 體系結(jié)構(gòu)則不同,但它現(xiàn)在卻得到了非常廣泛的應(yīng)用。TCP/IP 是一個(gè)四層體系結(jié)構(gòu),它包含應(yīng)用層,運(yùn)輸層,網(wǎng)際層和網(wǎng)絡(luò)接口層(用網(wǎng)際層這個(gè)名字是強(qiáng)調(diào)這一層是為了解決不同網(wǎng)絡(luò)的互連問(wèn)題),不過(guò)從實(shí)質(zhì)上講,TCP/IP 只有最上面的三層,因?yàn)樽钕旅娴木W(wǎng)絡(luò)接口層并沒(méi)有什么具體內(nèi)容,因此在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的原理時(shí)往往采用折中的辦法,即綜合 OSI 和 TCP/IP 的優(yōu)點(diǎn),采用一種只有五層協(xié)議的體系結(jié)構(gòu),這樣既簡(jiǎn)潔又能將概念闡述清楚,有時(shí)為了方便,也可把最底下兩層稱(chēng)為網(wǎng)絡(luò)接口層。

四層協(xié)議,五層協(xié)議和七層協(xié)議的關(guān)系如下:

TCP/IP是一個(gè)四層的體系結(jié)構(gòu),主要包括:應(yīng)用層、運(yùn)輸層、網(wǎng)際層和網(wǎng)絡(luò)接口層。

五層協(xié)議的體系結(jié)構(gòu)主要包括:應(yīng)用層、運(yùn)輸層、網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層和物理層。

OSI七層協(xié)議模型主要包括是:應(yīng)用層(Application)、表示層(Presentation)、會(huì)話層(Session)、運(yùn)輸層(Transport)、網(wǎng)絡(luò)層(Network)、數(shù)據(jù)鏈路層(Data Link)、物理層(Physical)。

注:五層協(xié)議的體系結(jié)構(gòu)只是為了介紹網(wǎng)絡(luò)原理而設(shè)計(jì)的,實(shí)際應(yīng)用還是 TCP/IP 四層體系結(jié)構(gòu)。

TCP/IP 協(xié)議族

應(yīng)用層

應(yīng)用層( application-layer )的任務(wù)是通過(guò)應(yīng)用進(jìn)程間的交互來(lái)完成特定網(wǎng)絡(luò)應(yīng)用。應(yīng)用層協(xié)議定義的是應(yīng)用進(jìn)程(進(jìn)程:主機(jī)中正在運(yùn)行的程序)間的通信和交互的規(guī)則。

對(duì)于不同的網(wǎng)絡(luò)應(yīng)用需要不同的應(yīng)用層協(xié)議。在互聯(lián)網(wǎng)中應(yīng)用層協(xié)議很多,如域名系統(tǒng) DNS,支持萬(wàn)維網(wǎng)應(yīng)用的 HTTP 協(xié)議,支持電子郵件的 SMTP 協(xié)議等等。

運(yùn)輸層

運(yùn)輸層(transport layer)的主要任務(wù)就是負(fù)責(zé)向兩臺(tái)主機(jī)進(jìn)程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù)。應(yīng)用進(jìn)程利用該服務(wù)傳送應(yīng)用層報(bào)文。

運(yùn)輸層主要使用一下兩種協(xié)議

傳輸控制協(xié)議-TCP:提供面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)。

用戶(hù)數(shù)據(jù)協(xié)議-UDP:提供無(wú)連接的,盡最大努力的數(shù)據(jù)傳輸服務(wù)(不保證數(shù)據(jù)傳輸?shù)目煽啃裕?/p>

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

每一個(gè)應(yīng)用層(TCP/IP參考模型的最高層)協(xié)議一般都會(huì)使用到兩個(gè)傳輸層協(xié)議之一:

運(yùn)行在TCP協(xié)議上的協(xié)議:

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

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

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

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

SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議),用來(lái)發(fā)送電子郵件。

TELNET(Teletype over the Network,網(wǎng)絡(luò)電傳),通過(guò)一個(gè)終端(terminal)登陸到網(wǎng)絡(luò)。

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

運(yùn)行在UDP協(xié)議上的協(xié)議:

BOOTP(Boot Protocol,啟動(dòng)協(xié)議),應(yīng)用于無(wú)盤(pán)設(shè)備。

NTP(Network Time Protocol,網(wǎng)絡(luò)時(shí)間協(xié)議),用于網(wǎng)絡(luò)同步。

DHCP(Dynamic Host Configuration Protocol,動(dòng)態(tài)主機(jī)配置協(xié)議),動(dòng)態(tài)配置IP地址。

運(yùn)行在TCP和UDP協(xié)議上:

DNS(Domain Name Service,域名服務(wù)),用于完成地址查找,郵件轉(zhuǎn)發(fā)等工作。

網(wǎng)絡(luò)層

網(wǎng)絡(luò)層的任務(wù)就是選擇合適的網(wǎng)間路由和交換結(jié)點(diǎn),確保計(jì)算機(jī)通信的數(shù)據(jù)及時(shí)傳送。在發(fā)送數(shù)據(jù)時(shí),網(wǎng)絡(luò)層把運(yùn)輸層產(chǎn)生的報(bào)文段或用戶(hù)數(shù)據(jù)報(bào)封裝成分組和包進(jìn)行傳送。在 TCP/IP 體系結(jié)構(gòu)中,由于網(wǎng)絡(luò)層使用 IP 協(xié)議,因此分組也叫 IP 數(shù)據(jù)報(bào) ,簡(jiǎn)稱(chēng)數(shù)據(jù)報(bào)。

互聯(lián)網(wǎng)是由大量的異構(gòu)(heterogeneous)網(wǎng)絡(luò)通過(guò)路由器(router)相互連接起來(lái)的?;ヂ?lián)網(wǎng)使用的網(wǎng)絡(luò)層協(xié)議是無(wú)連接的網(wǎng)際協(xié)議(Intert Prococol)和許多路由選擇協(xié)議,因此互聯(lián)網(wǎng)的網(wǎng)絡(luò)層也叫做網(wǎng)際層或 IP 層。

數(shù)據(jù)鏈路層

數(shù)據(jù)鏈路層(data link layer)通常簡(jiǎn)稱(chēng)為鏈路層。兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專(zhuān)門(mén)的鏈路層的協(xié)議。

在兩個(gè)相鄰節(jié)點(diǎn)之間傳送數(shù)據(jù)時(shí),數(shù)據(jù)鏈路層將網(wǎng)絡(luò)層交下來(lái)的 IP 數(shù)據(jù)報(bào)組裝成幀,在兩個(gè)相鄰節(jié)點(diǎn)間的鏈路上傳送幀。每一幀包括數(shù)據(jù)和必要的控制信息(如同步信息,地址信息,差錯(cuò)控制等)。

在接收數(shù)據(jù)時(shí),控制信息使接收端能夠知道一個(gè)幀從哪個(gè)比特開(kāi)始和到哪個(gè)比特結(jié)束。

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

發(fā)送端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)會(huì)被打上一個(gè)該層所屬的首部信息。反之,接收端在層與層之間傳輸數(shù)據(jù)時(shí),每經(jīng)過(guò)一層時(shí)會(huì)把對(duì)應(yīng)的首部信息去除。

物理層

在物理層上所傳送的數(shù)據(jù)單位是比特。物理層(physical layer)的作用是實(shí)現(xiàn)相鄰計(jì)算機(jī)節(jié)點(diǎn)之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質(zhì)和物理設(shè)備的差異。使其上面的數(shù)據(jù)鏈路層不必考慮網(wǎng)絡(luò)的具體傳輸介質(zhì)是什么?!巴该鱾魉捅忍亓鳌北硎窘?jīng)實(shí)際電路傳送后的比特流沒(méi)有發(fā)生變化,對(duì)傳送的比特流來(lái)說(shuō),這個(gè)電路好像是看不見(jiàn)的。

TCP/IP 協(xié)議族

在互聯(lián)網(wǎng)使用的各種協(xié)議中最重要和最著名的就是 TCP/IP 兩個(gè)協(xié)議。現(xiàn)在人們經(jīng)常提到的 TCP/IP 并不一定是單指 TCP 和 IP 這兩個(gè)具體的協(xié)議,而往往是表示互聯(lián)網(wǎng)所使用的整個(gè) TCP/IP 協(xié)議族。

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

互聯(lián)網(wǎng)協(xié)議套件(英語(yǔ):Internet Protocol Suite,縮寫(xiě)IPS)是一個(gè)網(wǎng)絡(luò)通訊模型,以及一整個(gè)網(wǎng)絡(luò)傳輸協(xié)議家族,為網(wǎng)際網(wǎng)絡(luò)的基礎(chǔ)通訊架構(gòu)。它常被通稱(chēng)為T(mén)CP/IP協(xié)議族(英語(yǔ):TCP/IP Protocol Suite,或TCP/IP Protocols),簡(jiǎn)稱(chēng)TCP/IP。因?yàn)樵搮f(xié)定家族的兩個(gè)核心協(xié)定:TCP(傳輸控制協(xié)議)和IP(網(wǎng)際協(xié)議),為該家族中最早通過(guò)的標(biāo)準(zhǔn)。

劃重點(diǎn):

TCP(傳輸控制協(xié)議)和IP(網(wǎng)際協(xié)議) 是最先定義的兩個(gè)核心協(xié)議,所以才統(tǒng)稱(chēng)為T(mén)CP/IP協(xié)議族

TCP的三次握手四次揮手

TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,在發(fā)送數(shù)據(jù)前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實(shí)是客戶(hù)端和服務(wù)端保存的一份關(guān)于對(duì)方的信息,如ip地址、端口號(hào)等。

TCP可以看成是一種字節(jié)流,它會(huì)處理IP層或以下的層的丟包、重復(fù)以及錯(cuò)誤問(wèn)題。在連接的建立過(guò)程中,雙方需要交換一些連接的參數(shù)。這些參數(shù)可以放在TCP頭部。

一個(gè)TCP連接由一個(gè)4元組構(gòu)成,分別是兩個(gè)IP地址和兩個(gè)端口號(hào)。一個(gè)TCP連接通常分為三個(gè)階段:連接、數(shù)據(jù)傳輸、退出(關(guān)閉)。通過(guò)三次握手建立一個(gè)鏈接,通過(guò)四次揮手來(lái)關(guān)閉一個(gè)連接。

當(dāng)一個(gè)連接被建立或被終止時(shí),交換的報(bào)文段只包含TCP頭部,而沒(méi)有數(shù)據(jù)。

TCP報(bào)文的頭部結(jié)構(gòu)

在了解TCP連接之前先來(lái)了解一下TCP報(bào)文的頭部結(jié)構(gòu)。

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

上圖中有幾個(gè)字段需要重點(diǎn)介紹下:

(1)序號(hào):seq序號(hào),占32位,用來(lái)標(biāo)識(shí)從TCP源端向目的端發(fā)送的字節(jié)流,發(fā)起方發(fā)送數(shù)據(jù)時(shí)對(duì)此進(jìn)行標(biāo)記。

(2)確認(rèn)序號(hào):ack序號(hào),占32位,只有ACK標(biāo)志位為1時(shí),確認(rèn)序號(hào)字段才有效,ack=seq+1。

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

ACK:確認(rèn)序號(hào)有效。

FIN:釋放一個(gè)連接。

PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層。

RST:重置連接。

SYN:發(fā)起一個(gè)新連接。

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

需要注意的是:

不要將確認(rèn)序號(hào)ack與標(biāo)志位中的ACK搞混了。

確認(rèn)方ack=發(fā)起方seq+1,兩端配對(duì)。

三次握手

三次握手的本質(zhì)是確認(rèn)通信雙方收發(fā)數(shù)據(jù)的能力

首先,我讓信使運(yùn)輸一份信件給對(duì)方,對(duì)方收到了,那么他就知道了我的發(fā)件能力和他的收件能力是可以的。

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

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

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

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

第一次握手:客戶(hù)端要向服務(wù)端發(fā)起連接請(qǐng)求,首先客戶(hù)端隨機(jī)生成一個(gè)起始序列號(hào)ISN(比如是100),那客戶(hù)端向服務(wù)端發(fā)送的報(bào)文段包含SYN標(biāo)志位(也就是SYN=1),序列號(hào)seq=100。

第二次握手:服務(wù)端收到客戶(hù)端發(fā)過(guò)來(lái)的報(bào)文后,發(fā)現(xiàn)SYN=1,知道這是一個(gè)連接請(qǐng)求,于是將客戶(hù)端的起始序列號(hào)100存起來(lái),并且隨機(jī)生成一個(gè)服務(wù)端的起始序列號(hào)(比如是300)。然后給客戶(hù)端回復(fù)一段報(bào)文,回復(fù)報(bào)文包含SYN和ACK標(biāo)志(也就是SYN=1,ACK=1)、序列號(hào)seq=300、確認(rèn)號(hào)ack=101(客戶(hù)端發(fā)過(guò)來(lái)的序列號(hào)+1)。

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

四次揮手

四次揮手的目的是關(guān)閉一個(gè)連接

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

比如客戶(hù)端初始化的序列號(hào)ISA=100,服務(wù)端初始化的序列號(hào)ISA=300。TCP連接成功后客戶(hù)端總共發(fā)送了1000個(gè)字節(jié)的數(shù)據(jù),服務(wù)端在客戶(hù)端發(fā)FIN報(bào)文前總共回復(fù)了2000個(gè)字節(jié)的數(shù)據(jù)。

第一次揮手:當(dāng)客戶(hù)端的數(shù)據(jù)都傳輸完成后,客戶(hù)端向服務(wù)端發(fā)出連接釋放報(bào)文(當(dāng)然數(shù)據(jù)沒(méi)發(fā)完時(shí)也可以發(fā)送連接釋放報(bào)文并停止發(fā)送數(shù)據(jù)),釋放連接報(bào)文包含F(xiàn)IN標(biāo)志位(FIN=1)、序列號(hào)seq=1101(100+1+1000,其中的1是建立連接時(shí)占的一個(gè)序列號(hào))。需要注意的是客戶(hù)端發(fā)出FIN報(bào)文段后只是不能發(fā)數(shù)據(jù)了,但是還可以正常收數(shù)據(jù);另外FIN報(bào)文段即使不攜帶數(shù)據(jù)也要占據(jù)一個(gè)序列號(hào)。

第二次揮手:服務(wù)端收到客戶(hù)端發(fā)的FIN報(bào)文后給客戶(hù)端回復(fù)確認(rèn)報(bào)文,確認(rèn)報(bào)文包含ACK標(biāo)志位(ACK=1)、確認(rèn)號(hào)ack=1102(客戶(hù)端FIN報(bào)文序列號(hào)1101+1)、序列號(hào)seq=2300(300+2000)。此時(shí)服務(wù)端處于關(guān)閉等待狀態(tài),而不是立馬給客戶(hù)端發(fā)FIN報(bào)文,這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,因?yàn)榉?wù)端可能還有數(shù)據(jù)沒(méi)發(fā)完。

第三次揮手:服務(wù)端將最后數(shù)據(jù)(比如50個(gè)字節(jié))發(fā)送完畢后就向客戶(hù)端發(fā)出連接釋放報(bào)文,報(bào)文包含F(xiàn)IN和ACK標(biāo)志位(FIN=1,ACK=1)、確認(rèn)號(hào)和第二次揮手一樣ack=1102、序列號(hào)seq=2350(2300+50)。

第四次揮手:客戶(hù)端收到服務(wù)端發(fā)的FIN報(bào)文后,向服務(wù)端發(fā)出確認(rèn)報(bào)文,確認(rèn)報(bào)文包含ACK標(biāo)志位(ACK=1)、確認(rèn)號(hào)ack=2351、序列號(hào)seq=1102。注意客戶(hù)端發(fā)出確認(rèn)報(bào)文后不是立馬釋放TCP連接,而是要經(jīng)過(guò)2MSL(最長(zhǎng)報(bào)文段壽命的2倍時(shí)長(zhǎng))后才釋放TCP連接。而服務(wù)端一旦收到客戶(hù)端發(fā)出的確認(rèn)報(bào)文就會(huì)立馬釋放TCP連接,所以服務(wù)端結(jié)束TCP連接的時(shí)間要比客戶(hù)端早一些。

常見(jiàn)面試題

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

因?yàn)樾枰紤]連接時(shí)丟包的問(wèn)題,如果只握手2次,第二次握手時(shí)如果服務(wù)端發(fā)給客戶(hù)端的確認(rèn)報(bào)文段丟失,此時(shí)服務(wù)端已經(jīng)準(zhǔn)備好了收發(fā)數(shù)(可以理解服務(wù)端已經(jīng)連接成功)據(jù),而客戶(hù)端一直沒(méi)收到服務(wù)端的確認(rèn)報(bào)文,所以客戶(hù)端就不知道服務(wù)端是否已經(jīng)準(zhǔn)備好了(可以理解為客戶(hù)端未連接成功),這種情況下客戶(hù)端不會(huì)給服務(wù)端發(fā)數(shù)據(jù),也會(huì)忽略服務(wù)端發(fā)過(guò)來(lái)的數(shù)據(jù)。

如果是三次握手,即便發(fā)生丟包也不會(huì)有問(wèn)題,比如如果第三次握手客戶(hù)端發(fā)的確認(rèn)ack報(bào)文丟失,服務(wù)端在一段時(shí)間內(nèi)沒(méi)有收到確認(rèn)ack報(bào)文的話就會(huì)重新進(jìn)行第二次握手,也就是服務(wù)端會(huì)重發(fā)SYN報(bào)文段,客戶(hù)端收到重發(fā)的報(bào)文段后會(huì)再次給服務(wù)端發(fā)送確認(rèn)ack報(bào)文。

為什么TCP連接的時(shí)候是3次,關(guān)閉的時(shí)候卻是4次?

因?yàn)橹挥性诳蛻?hù)端和服務(wù)端都沒(méi)有數(shù)據(jù)要發(fā)送的時(shí)候才能斷開(kāi)TCP。而客戶(hù)端發(fā)出FIN報(bào)文時(shí)只能保證客戶(hù)端沒(méi)有數(shù)據(jù)發(fā)了,服務(wù)端還有沒(méi)有數(shù)據(jù)發(fā)客戶(hù)端是不知道的。而服務(wù)端收到客戶(hù)端的FIN報(bào)文后只能先回復(fù)客戶(hù)端一個(gè)確認(rèn)報(bào)文來(lái)告訴客戶(hù)端我服務(wù)端已經(jīng)收到你的FIN報(bào)文了,但我服務(wù)端還有一些數(shù)據(jù)沒(méi)發(fā)完,等這些數(shù)據(jù)發(fā)完了服務(wù)端才能給客戶(hù)端發(fā)FIN報(bào)文(所以不能一次性將確認(rèn)報(bào)文和FIN報(bào)文發(fā)給客戶(hù)端,就是這里多出來(lái)了一次)。

為什么客戶(hù)端發(fā)出第四次揮手的確認(rèn)報(bào)文后要等2MSL的時(shí)間才能釋放TCP連接?

這里同樣是要考慮丟包的問(wèn)題,如果第四次揮手的報(bào)文丟失,服務(wù)端沒(méi)收到確認(rèn)ack報(bào)文就會(huì)重發(fā)第三次揮手的報(bào)文,這樣報(bào)文一去一回最長(zhǎng)時(shí)間就是2MSL,所以需要等這么長(zhǎng)時(shí)間來(lái)確認(rèn)服務(wù)端確實(shí)已經(jīng)收到了。

如果已經(jīng)建立了連接,但是客戶(hù)端突然出現(xiàn)故障了怎么辦?

TCP設(shè)有一個(gè)?;钣?jì)時(shí)器,客戶(hù)端如果出現(xiàn)故障,服務(wù)器不能一直等下去,白白浪費(fèi)資源。服務(wù)器每收到一次客戶(hù)端的請(qǐng)求后都會(huì)重新復(fù)位這個(gè)計(jì)時(shí)器,時(shí)間通常是設(shè)置為2小時(shí),若兩小時(shí)還沒(méi)有收到客戶(hù)端的任何數(shù)據(jù),服務(wù)器就會(huì)發(fā)送一個(gè)探測(cè)報(bào)文段,以后每隔75秒鐘發(fā)送一次。若一連發(fā)送10個(gè)探測(cè)報(bào)文仍然沒(méi)反應(yīng),服務(wù)器就認(rèn)為客戶(hù)端出了故障,接著就關(guān)閉連接。

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 網(wǎng)絡(luò)協(xié)議

    關(guān)注

    3

    文章

    263

    瀏覽量

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

    關(guān)注

    8

    文章

    1347

    瀏覽量

    78933
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    322

    瀏覽量

    33849
  • 計(jì)算機(jī)網(wǎng)絡(luò)

    關(guān)注

    3

    文章

    335

    瀏覽量

    22099

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

文章出處:【微信號(hào):通信弱電交流學(xué)習(xí),微信公眾號(hào):通信弱電交流學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    如果你學(xué)過(guò)網(wǎng)絡(luò)基礎(chǔ)知識(shí),那么你一定對(duì)TCP三次握手不陌生。今天我想用通俗的話來(lái)給大家講一講TCP三次握手
    的頭像 發(fā)表于 02-03 10:43 ?2667次閱讀
    講一講的<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戀愛(ài)史:三次握手四次分手

    ,心想:我他媽又沒(méi)要鏈接,你返回這個(gè)是不是瘋了。于是不置一詞。服務(wù)器過(guò)一段時(shí)間還沒(méi)有收到第三次握手的數(shù)據(jù),知道客戶(hù)端并沒(méi)有要求建立鏈接的請(qǐng)求,含淚離開(kāi)。然后是四次分手:現(xiàn)在雙方的狀態(tài)都是
    發(fā)表于 09-28 10:07

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

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

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

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

    tcp協(xié)議三次握手詳細(xì)過(guò)程

    TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接:第一握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq
    發(fā)表于 12-08 11:53 ?9889次閱讀
    <b class='flag-5'>tcp</b>協(xié)議<b class='flag-5'>三次</b><b class='flag-5'>握手</b>詳細(xì)過(guò)程

    TCP/IP協(xié)議工作過(guò)程的三次握手四次揮手

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

    TCP三次握手過(guò)程及四次揮手過(guò)程說(shuō)明

    三次握手 置位概念:根據(jù) TCP 的包頭字段,存在 3 個(gè)重要的標(biāo)識(shí) ACK、SYN、FIN ACK:表示驗(yàn)證字段 SYN:位數(shù)置 1,表示建立 TCP 連接 FIN:位數(shù)置 1,表示
    的頭像 發(fā)表于 03-01 12:00 ?4187次閱讀

    TCP三次握手四次揮手以及11種狀態(tài)資料下載

    電子發(fā)燒友網(wǎng)為你提供TCP三次握手四次揮手以及11種狀態(tài)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料
    發(fā)表于 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種狀態(tài)資料下載

    TCP三次握手四次揮手過(guò)程中的異常情況

    TCP 三次握手四次揮手過(guò)程中,途中某一步的報(bào)文丟失了,會(huì)發(fā)生什么?
    的頭像 發(fā)表于 09-05 10:23 ?1203次閱讀

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

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

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

    具備上述個(gè)條件后A獲取B的信息是有要求的,根本上的要求是數(shù)據(jù)信道可靠,就是平時(shí)所說(shuō)的可靠連接,那么如何保證連接的可靠性呢,TCP協(xié)議就是靠確認(rèn)應(yīng)答機(jī)制、超時(shí)重傳機(jī)制等保證連接可靠性的,接下來(lái)就通過(guò)TCP協(xié)議的
    的頭像 發(fā)表于 03-23 15:57 ?1027次閱讀
    <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>的流程

    用戀愛(ài)的方式解釋TCP三次握手四次揮手

    前言今天的分享,是關(guān)于前兩天讀到的心得,TCP建立連接時(shí)三次握手,斷開(kāi)時(shí)為何4握手的自我理解:戀愛(ài)時(shí)連接時(shí)客戶(hù)端說(shuō):SYN(約嗎?)服務(wù)器
    的頭像 發(fā)表于 08-28 16:11 ?663次閱讀
    用戀愛(ài)的方式解釋<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/IP三次握手四次揮手講解

    第一握手:Client將標(biāo)志位SYN置為1,隨機(jī)產(chǎn)生一個(gè)值seq=J,并將該數(shù)據(jù)包發(fā)送給Server,Client進(jìn)入SYN_SENT狀態(tài),等待Server確認(rèn)。
    發(fā)表于 08-22 09:42 ?323次閱讀
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>三次</b><b class='flag-5'>握手</b>與<b class='flag-5'>四次</b><b class='flag-5'>揮手</b>講解

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

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

    簡(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 ?498次閱讀