TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析

TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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

一步一個腳印。

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

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

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

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

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

TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析

含:端口號[16bit]、序號[32bit]、偏移[4bit]、Reserved [6bit]、標志[6bit]、窗口大小(window)[16bit]、校驗和[16bit]、緊急指針[16bit]、TCP選項

這里需要注意的:

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

  • 一個TCP連接需要四個元組來表示是同一個連接(src_ip, src_port, dst_ip, dst_port)準確說是五元組,還有一個是協(xié)議。但因為這里只是說TCP協(xié)議,所以,這里我只說四元組。

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

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

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

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

     URG: 緊急指針有效

     ACK:確認序號有效

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

     RST:重建連接

     SYN:同步序號,用來發(fā)起一個連接

     FIN: 發(fā)端完成發(fā)送任務(主動關(guān)閉)  

三次握手建立鏈接

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

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

3.客戶端對服務端報文段進行確認,發(fā)送確認序號并同意與服務端建立連接ACK=y+1。

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

四次揮手斷開鏈接

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

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

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

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

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

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

TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析

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

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

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

這就很明白了,防止了服務器端的一直等待而浪費資源。

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

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

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

網(wǎng)頁題目:TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析
網(wǎng)站鏈接:http://bm7419.com/article10/iicdgo.html

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

廣告

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

成都做網(wǎng)站