TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
目前成都創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、閩清網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。一步一個腳印。
先簡單介紹一下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ù)報中,格式如下:
含:端口號[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ā)送任務(主動關閉)
三次握手建立鏈接
1.請求端(client客戶端)發(fā)送一個SYN=1指明客戶打算連接的服務器的端口,TCP規(guī)定SYN=1時不能攜帶數(shù)據(jù),但要消耗一個序號,因此聲明自己的初始序號seq為一個隨機數(shù)假定為seq=x。
2.服務端(server)對客戶端報文段進行確認,將確認序號設置為ACK=x+1。同時也請求連接客戶端,發(fā)送SYN=1,并且發(fā)送初始seq號假定為seq=y。
3.客戶端對服務端報文段進行確認,發(fā)送確認序號并同意與服務端建立連接ACK=y+1。
這三個報文段完成連接的建立。這個過程也稱為三次握手(three-way handshake)
四次揮手斷開鏈接
1.主機1(可以使客戶端,也可以是服務器端),設置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ā)送了,可以進行關閉連接了;
3.主機2向主機1發(fā)送FIN報文段,請求關閉連接,同時主機2進入CLOSE_WAIT狀態(tài);
4.第主機1收到主機2發(fā)送的FIN報文段,向主機2發(fā)送ACK報文段,然后主機1進入TIME_WAIT狀態(tài);主機2收到主機1的ACK報文段以后,就關閉連接;此時,主機1等待2MSL后依然沒有收到回復,則證明Server端已正常關閉,那好,主機1也可以關閉連接了。
至此,TCP的四次分手就這么愉快的完成了。
建立鏈接和斷開鏈接圖示如下:
下面來分解一下為什么是三次握手呢?
為了防止已失效的鏈接請求報文段突然又傳送到了服務器端,因而產(chǎn)生錯誤。舉一個“栗”子。
client發(fā)出的第一個連接請求報文段并沒有丟失,而是在某個網(wǎng)絡結(jié)點長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段后,就誤認為是client再次發(fā)出的一個新的連接請求。于是就向client發(fā)出確認報文段,同意建立連接。假設不采用“三次握手”,那么只要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)變化。
關于TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文名稱:TCP三次握手建立鏈接與四次揮手斷開鏈接的示例分析-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.rwnh.cn/article14/dddhge.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、服務器托管、Google、小程序開發(fā)、網(wǎng)站收錄、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)