TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析

TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了黃浦免費(fèi)建站歡迎大家使用!

一步一個(gè)腳印。

先簡單介紹一下TCP協(xié)議。

  TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。很復(fù)雜,但屬于不論程序員還是運(yùn)維人員都必會(huì)的基本功。

  面向?qū)ο蟮摹B接雙方在通信前需要預(yù)先建立一條連接,這猶如實(shí)際生活中的打電話,電話必須撥通了以后才能交流。

  可靠的——TCP協(xié)議中有諸多的規(guī)則來保障通信鏈路的可靠性,含應(yīng)用數(shù)據(jù)分隔、重傳機(jī)制、對首部和數(shù)據(jù)校驗(yàn)、對收到的數(shù)據(jù)進(jìn)行排序,然后交給應(yīng)用層、接收端會(huì)丟棄重復(fù)的數(shù)據(jù)、可進(jìn)行流量控制。

TCP數(shù)據(jù)被封裝在一個(gè)IP數(shù)據(jù)報(bào)中,格式如下: 

TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析

含:端口號(hào)[16bit]、序號(hào)[32bit]、偏移[4bit]、Reserved [6bit]、標(biāo)志[6bit]、窗口大小(window)[16bit]、校驗(yàn)和[16bit]、緊急指針[16bit]、TCP選項(xiàng)

這里需要注意的:

  • TCP的包是沒有IP地址的,那是IP層上的事,但是有源端口和目標(biāo)端口。

  • 一個(gè)TCP連接需要四個(gè)元組來表示是同一個(gè)連接(src_ip, src_port, dst_ip, dst_port)準(zhǔn)確說是五元組,還有一個(gè)是協(xié)議。但因?yàn)檫@里只是說TCP協(xié)議,所以,這里我只說四元組。

  • Sequence Number是包的序號(hào),用來解決網(wǎng)絡(luò)包亂序(reordering)問題。

  • Acknowledgement Number就是ACK——用于確認(rèn)收到,用來解決不丟包的問題。

  • Window又叫Advertised-Window,也就是著名的滑動(dòng)窗口(Sliding Window),用于解決流控的。

  • TCP Flag ,也就是包的類型,主要是用于操控TCP的狀態(tài)機(jī)的。

     URG: 緊急指針有效

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

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

     RST:重建連接

     SYN:同步序號(hào),用來發(fā)起一個(gè)連接

     FIN: 發(fā)端完成發(fā)送任務(wù)(主動(dòng)關(guān)閉)  

三次握手建立鏈接

1.請求端(client客戶端)發(fā)送一個(gè)SYN=1指明客戶打算連接的服務(wù)器的端口,TCP規(guī)定SYN=1時(shí)不能攜帶數(shù)據(jù),但要消耗一個(gè)序號(hào),因此聲明自己的初始序號(hào)seq為一個(gè)隨機(jī)數(shù)假定為seq=x。

2.服務(wù)端(server)對客戶端報(bào)文段進(jìn)行確認(rèn),將確認(rèn)序號(hào)設(shè)置為ACK=x+1。同時(shí)也請求連接客戶端,發(fā)送SYN=1,并且發(fā)送初始seq號(hào)假定為seq=y。

3.客戶端對服務(wù)端報(bào)文段進(jìn)行確認(rèn),發(fā)送確認(rèn)序號(hào)并同意與服務(wù)端建立連接ACK=y+1。

這三個(gè)報(bào)文段完成連接的建立。這個(gè)過程也稱為三次握手(three-way handshake)

四次揮手?jǐn)嚅_鏈接

1.主機(jī)1(可以使客戶端,也可以是服務(wù)器端),設(shè)置Sequence Number和Acknowledgment Number,向主機(jī)2發(fā)送一個(gè)FIN報(bào)文段;此時(shí),主機(jī)1進(jìn)入FIN_WAIT_1狀態(tài);這表示主機(jī)1沒有數(shù)據(jù)要發(fā)送給主機(jī)2了;

2.主機(jī)2收到了主機(jī)1發(fā)送的FIN報(bào)文段,向主機(jī)1回一個(gè)ACK報(bào)文段,Acknowledgment Number為Sequence Number加1;主機(jī)1進(jìn)入FIN_WAIT_2狀態(tài);主機(jī)2告訴主機(jī)1,我也沒有數(shù)據(jù)要發(fā)送了,可以進(jìn)行關(guān)閉連接了;

3.主機(jī)2向主機(jī)1發(fā)送FIN報(bào)文段,請求關(guān)閉連接,同時(shí)主機(jī)2進(jìn)入CLOSE_WAIT狀態(tài);

4.第主機(jī)1收到主機(jī)2發(fā)送的FIN報(bào)文段,向主機(jī)2發(fā)送ACK報(bào)文段,然后主機(jī)1進(jìn)入TIME_WAIT狀態(tài);主機(jī)2收到主機(jī)1的ACK報(bào)文段以后,就關(guān)閉連接;此時(shí),主機(jī)1等待2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,那好,主機(jī)1也可以關(guān)閉連接了。

至此,TCP的四次分手就這么愉快的完成了。

建立鏈接和斷開鏈接圖示如下:

TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析

下面來分解一下為什么是三次握手呢?

為了防止已失效的鏈接請求報(bào)文段突然又傳送到了服務(wù)器端,因而產(chǎn)生錯(cuò)誤。舉一個(gè)“栗”子。

client發(fā)出的第一個(gè)連接請求報(bào)文段并沒有丟失,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server。本來這是一個(gè)早已失效的報(bào)文段。但server收到此失效的連接請求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個(gè)新的連接請求。于是就向client發(fā)出確認(rèn)報(bào)文段,同意建立連接。假設(shè)不采用“三次握手”,那么只要server發(fā)出確認(rèn),新的連接就建立了。由于現(xiàn)在client并沒有發(fā)出建立連接的請求,因此不會(huì)理睬server的確認(rèn),也不會(huì)向server發(fā)送數(shù)據(jù)。但server卻以為新的運(yùn)輸連接已經(jīng)建立,并一直等待client發(fā)來數(shù)據(jù)。這樣,server的很多資源就白白浪費(fèi)掉了。采用“三次握手”的辦法可以防止上述現(xiàn)象發(fā)生。例如剛才那種情況,client不會(huì)向server的確認(rèn)發(fā)出確認(rèn)。server由于收不到確認(rèn),就知道client并沒有要求建立連接。"

這就很明白了,防止了服務(wù)器端的一直等待而浪費(fèi)資源。

那么又為什么是四次揮手呢?

TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP是全雙工模式,這就意味著,當(dāng)主機(jī)1發(fā)出FIN報(bào)文段時(shí),只是表示主機(jī)1已經(jīng)沒有數(shù)據(jù)要發(fā)送了,主機(jī)1告訴主機(jī)2, 它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢了;但是,這個(gè)時(shí)候主機(jī)1還是可以接受來自主機(jī)2的數(shù)據(jù);當(dāng)主機(jī)2返回ACK報(bào)文段時(shí),表示它已經(jīng)知道主機(jī)1沒有數(shù)據(jù)發(fā)送了,但是主機(jī)2還是可以發(fā)送數(shù)據(jù)到主機(jī)1的;當(dāng)主機(jī)2也發(fā)送了FIN 報(bào)文段時(shí),這個(gè)時(shí)候就表示主機(jī)2也沒有數(shù)據(jù)要發(fā)送了,就會(huì)告訴主機(jī)1,我也沒有數(shù)據(jù)要發(fā)送了,之后彼此 就會(huì)愉快的中斷這次TCP連接。如果要正確的理解四次分手的原理,就需要了解四次分手過程中的狀態(tài)變化。

關(guān)于TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

網(wǎng)頁題目:TCP三次握手建立鏈接與四次揮手?jǐn)嚅_鏈接的示例分析
網(wǎng)站鏈接:http://muchs.cn/article10/iicdgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)建站公司、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站