TCP報(bào)文段傳輸控制協(xié)議(TCP,Transmission ControlProtocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793 定義。TCP協(xié)議建立的是一種點(diǎn)到點(diǎn)的,一對(duì)一的可靠連接,與UDP相比以犧牲效率為代價(jià)換取高可靠性的服務(wù)。
在阜新等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè),阜新網(wǎng)站建設(shè)費(fèi)用合理。
TCP報(bào)文段也叫TCP分組,是TCP協(xié)議傳輸和接收數(shù)據(jù)的一種封裝格式,只有按照該格式發(fā)送的數(shù)據(jù)才可以被TCP協(xié)議通信的雙方正確的接收與解析。
TCP報(bào)文的組成部分描述如下:
TCP連接的建立是通過三次握手的過程完成的,下面將具體講解何為三次握手:
第一次握手第一次握手由客戶端向服務(wù)器 發(fā)出:客戶端發(fā)送一個(gè)TCP數(shù)據(jù)報(bào),其中,TCP分組的源端口為客戶端發(fā)起通信建立的進(jìn)程端口,而目的端口為服務(wù)器處理請(qǐng)求的進(jìn)程端口號(hào),比如80端口。在表示建立連接的TCP分組中,SYN標(biāo)志位為被置1,則告知服務(wù)器發(fā)送該分組的目的是請(qǐng)求建立連接,并且當(dāng)SYN置1時(shí),該分組中的seq字段發(fā)送的是初始序列號(hào)cilent_isn,初始序列號(hào)的取值方案有多種,一般取隨機(jī)值。
第二次握手第二次握手由服務(wù)器向客戶端發(fā)出:服務(wù)器在成功接收了客戶端第一次握手發(fā)送的分組后,首先需要解析收到的TCP分組,發(fā)現(xiàn)SYN置1后,得知這個(gè)客戶端發(fā)送分組的目的是為了建立連接,在確認(rèn)完畢分組信息后,服務(wù)器也會(huì)向客戶端發(fā)送一個(gè)TCP分組來代表第二次握手。
這個(gè)由服務(wù)器發(fā)送的TCP分組包含以下內(nèi)容:
第三次握手由客戶端向服務(wù)器發(fā)出:客戶端在接收到服務(wù)器第二次握手的回復(fù)之后,同樣會(huì)接收來自于服務(wù)器的TCP分組并進(jìn)行解讀:由SYN為1解讀該TCP分組的目的是繼續(xù)建立連接,由分組中的ACK確認(rèn)號(hào)了解到服務(wù)器已經(jīng)成功接收了前cilent_isn個(gè)字節(jié)的內(nèi)容,并期望接收第cilent_isn+1個(gè)字節(jié)的字節(jié)序號(hào),同時(shí)累計(jì)確認(rèn)來自服務(wù)器的初始序列號(hào)。并發(fā)送最后一個(gè)TCP分組給服務(wù)器來完成第三次握手。
這個(gè)由客戶端發(fā)送給服務(wù)器的最后一個(gè)TCP分組的內(nèi)容有:
為什么TCP的連接必須進(jìn)行三次握手,而不是一次或兩次?
為了防止建立重復(fù)的連接而損耗資源或造成其他問題
謝希仁版《計(jì)算機(jī)網(wǎng)絡(luò)》中的例子:“已失效的連接請(qǐng)求報(bào)文段”的產(chǎn)生在這樣一種情況下:client發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒有丟失,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server。本來這是一個(gè)早已失效的報(bào)文段。但server收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個(gè)新的連接請(qǐng)求。于是就向client發(fā)出確認(rèn)報(bào)文段,同意建立連接。假設(shè)不采用“三次握手”,那么只要server發(fā)出確認(rèn),新的連接就建立了。由于現(xiàn)在client并沒有發(fā)出建立連接的請(qǐng)求,因此不會(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并沒有要求建立連接?!?/p>
也就是說,假如只采用兩次握手,會(huì)讓因網(wǎng)絡(luò)錯(cuò)誤延時(shí)到達(dá)的客戶端連接請(qǐng)求被服務(wù)器接收時(shí),服務(wù)器無從得知這是一個(gè)失效的請(qǐng)求而與客戶端建立一個(gè)無效的連接。在三次握手機(jī)制的情形下,這樣無效的請(qǐng)求分組會(huì)被返回給客戶端來確認(rèn),而客戶端不在等待該由該分組產(chǎn)生第三次握手的狀態(tài),服務(wù)器得不到客戶端的回應(yīng),等待超時(shí)后會(huì)取消本次連接的建立。從而避免了錯(cuò)誤連接的建立
TCP拆除連接的過程(四次揮手)四次握手的連接關(guān)閉過程與三次握手相類似:
四次揮手的過程簡(jiǎn)述如下:
第一次揮手: 客戶端因?yàn)椴辉儆袛?shù)據(jù)發(fā)送給服務(wù)器,所以向服務(wù)器發(fā)送FIN報(bào)文表示想要關(guān)閉連接,不會(huì)再發(fā)送數(shù)據(jù)了。同時(shí)包含客戶端的報(bào)文序號(hào)M
第二次揮手: 服務(wù)器在接收了來自客戶端的FIN報(bào)文后,得知客戶端不再發(fā)送數(shù)據(jù),將要關(guān)閉連接。但是,此時(shí)服務(wù)器端獲取還有部分?jǐn)?shù)據(jù)沒有回傳給客戶端,服務(wù)器可能還要向客戶端發(fā)送一部分?jǐn)?shù)據(jù)才能關(guān)閉連接。所以服務(wù)器不會(huì)立馬同意關(guān)閉連接,而是先發(fā)送表示確認(rèn)信息的ACK報(bào)文,該ACK報(bào)文中包含了值為M+1的確認(rèn)號(hào)。
第三次揮手: 在服務(wù)器端完成向客戶端傳送最后的數(shù)據(jù)后,此時(shí)不再有數(shù)據(jù)需要傳輸了。那么服務(wù)器也準(zhǔn)備關(guān)閉連接,所以向客戶端發(fā)送表示關(guān)閉連接的FIN報(bào)文,報(bào)文中包含了服務(wù)器端的序號(hào)N
第四次揮手: 在客戶端也收到了服務(wù)器端發(fā)送的FIN報(bào)文之后,得知服務(wù)器端也可以關(guān)閉連接了,此時(shí)再向服務(wù)器發(fā)送最后一次確認(rèn)報(bào)文ACK,使連接成功關(guān)閉,ACK報(bào)文中的確認(rèn)號(hào)為N+1
為什么需要四次揮手?為什么需要中間兩次揮手?
為什么需要其中的第二次和第三次的原因其實(shí)已經(jīng)提到,假如在服務(wù)器收到客戶端的第一次揮手就準(zhǔn)備關(guān)閉連接發(fā)送FIN報(bào)文,不再發(fā)送數(shù)據(jù)。那么只是客戶端單方面提出了中斷通信的請(qǐng)求而導(dǎo)致連接關(guān)閉,使服務(wù)器中要發(fā)往客戶端的最后數(shù)據(jù)不能正常傳送,會(huì)導(dǎo)致通信不完整。
為什么需要第四次揮手?
第四次揮手同樣是用來解決一個(gè)因網(wǎng)絡(luò)時(shí)延滯后到達(dá)的失效請(qǐng)求的問題。
請(qǐng)分析這樣一個(gè)情形:即假如客戶端一次發(fā)送了兩個(gè)關(guān)閉請(qǐng)求,其中一個(gè)滯后了很久才到達(dá),此時(shí)它們當(dāng)時(shí)建立的連接已經(jīng)被第一個(gè)請(qǐng)求關(guān)閉。而服務(wù)器又再次和客戶端建立了新的連接,并且此時(shí)不需要關(guān)閉,但是這個(gè)失效的關(guān)閉請(qǐng)求滯后到達(dá)了。
假如沒有最后一次揮手,那么服務(wù)器以為客戶端要關(guān)閉連接,一次發(fā)送ACK和FIN報(bào)文后連接就被錯(cuò)誤關(guān)閉了,這樣顯然是存在問題的。
假如有最后一次握手,服務(wù)器在收到失效報(bào)文后仍然會(huì)發(fā)送ACK和FIN報(bào)文給客戶端來確認(rèn)客戶端是否真的要關(guān)閉連接。而客戶端此時(shí)的狀態(tài)并不是等待關(guān)閉連接的狀態(tài),所以不會(huì)給服務(wù)器發(fā)送ACK報(bào)文進(jìn)行關(guān)閉連接的確認(rèn)回復(fù),服務(wù)器在等待一段時(shí)間超時(shí)后會(huì)取消連接的關(guān)閉,從而不會(huì)因?yàn)槭У膱?bào)文讓連接錯(cuò)誤地關(guān)閉。
TCP數(shù)據(jù)的發(fā)送過程也與建立連接的過程相類似:
發(fā)送數(shù)據(jù)的過程采用了累計(jì)確認(rèn)的機(jī)制,其中ACK表示的是累積確認(rèn)的字節(jié)序號(hào)。
如上圖,發(fā)送的TCP分組中可以包含數(shù)據(jù),也可以不包含數(shù)據(jù),但是一定需要包含seq序號(hào)和確認(rèn)號(hào)。seq序號(hào)表示數(shù)據(jù)區(qū)中第一個(gè)字節(jié)的序號(hào),而回傳的ack確認(rèn)號(hào)的值為seq的值加上發(fā)送的數(shù)據(jù)字節(jié)數(shù)。表示這些字節(jié)的數(shù)據(jù)已經(jīng)被確認(rèn)接受了,并表達(dá)了期望接收的下一個(gè)字節(jié)序號(hào)位置。
發(fā)送TCP分組的一方會(huì)在發(fā)送分組時(shí)設(shè)置超時(shí)時(shí)間并開啟計(jì)時(shí)器,當(dāng)在超時(shí)時(shí)間內(nèi)未收到該分組的ACK回復(fù)時(shí),會(huì)認(rèn)為該分組丟失,并重發(fā)該分組。假如之前的分組被連續(xù)發(fā)送,而該分組及之后的分組已經(jīng)被接收端確認(rèn),那么本次重復(fù)分組收到的ACK是累計(jì)確認(rèn)的字節(jié)序號(hào)值,而非該分組的seq+數(shù)據(jù)字節(jié)數(shù),如上圖右側(cè)所示。
感謝閱讀,求關(guān)注收藏,等期末考試結(jié)束后會(huì)再出關(guān)于TCP流量控制和擁塞控制等方面更加詳細(xì)的內(nèi)容。超鏈接寫好后會(huì)附在下面。
本文參考了哈工大mooc計(jì)算機(jī)網(wǎng)絡(luò)的內(nèi)容
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章標(biāo)題:TCP協(xié)議詳解-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article26/jdhjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站改版、微信公眾號(hào)、App設(shè)計(jì)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容