圖解TCP/IP協(xié)議 幫助大家輕松理解三次握手

本文通過兩個(gè)圖來梳理TCP-IP協(xié)議相關(guān)知識(shí)。TCP通信過程包括三個(gè)步驟:建立TCP連接通道,傳輸數(shù)據(jù),斷開TCP連接通道。如圖1所示,給出了TCP通信過程的示意圖。
圖1 TCP 三次握手四次揮手
圖1主要包括三部分:建立連接、傳輸數(shù)據(jù)、斷開連接。
1)建立TCP連接很簡(jiǎn)單,通過三次握手便可建立連接。
2)建立好連接后,開始傳輸數(shù)據(jù)。TCP數(shù)據(jù)傳輸牽涉到的概念很多:超時(shí)重傳、快速重傳、流量控制、擁塞控制等等。
3)斷開連接的過程也很簡(jiǎn)單,通過四次握手完成斷開連接的過程。
三次握手建立連接:
第一次握手:客戶端發(fā)送syn包(seq=x)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(seq=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。
傳輸數(shù)據(jù)過程:
a.超時(shí)重傳
超時(shí)重傳機(jī)制用來保證TCP傳輸?shù)目煽啃?。每次發(fā)送數(shù)據(jù)包時(shí),發(fā)送的數(shù)據(jù)報(bào)都有seq號(hào),接收端收到數(shù)據(jù)后,會(huì)回復(fù)ack進(jìn)行確認(rèn),表示某一seq號(hào)數(shù)據(jù)已經(jīng)收到。發(fā)送方在發(fā)送了某個(gè)seq包后,等待一段時(shí)間,如果沒有收到對(duì)應(yīng)的ack回復(fù),就會(huì)認(rèn)為報(bào)文丟失,會(huì)重傳這個(gè)數(shù)據(jù)包。
b.快速重傳
接受數(shù)據(jù)一方發(fā)現(xiàn)有數(shù)據(jù)包丟掉了。就會(huì)發(fā)送ack報(bào)文告訴發(fā)送端重傳丟失的報(bào)文。如果發(fā)送端連續(xù)收到標(biāo)號(hào)相同的ack包,則會(huì)觸發(fā)客戶端的快速重傳。比較超時(shí)重傳和快速重傳,可以發(fā)現(xiàn)超時(shí)重傳是發(fā)送端在傻等超時(shí),然后觸發(fā)重傳;而快速重傳則是接收端主動(dòng)告訴發(fā)送端數(shù)據(jù)沒收到,然后觸發(fā)發(fā)送端重傳。
c.流量控制
這里主要說TCP滑動(dòng)窗流量控制。TCP頭里有一個(gè)字段叫Window,又叫Advertised-Window,這個(gè)字段是接收端告訴發(fā)送端自己還有多少緩沖區(qū)可以接收數(shù)據(jù)。于是發(fā)送端就可以根據(jù)這個(gè)接收端的處理能力來發(fā)送數(shù)據(jù),而不會(huì)導(dǎo)致接收端處理不過來。 滑動(dòng)窗可以是提高TCP傳輸效率的一種機(jī)制。
d.擁塞控制
滑動(dòng)窗用來做流量控制。流量控制只關(guān)注發(fā)送端和接受端自身的狀況,而沒有考慮整個(gè)網(wǎng)絡(luò)的通信情況。擁塞控制,則是基于整個(gè)網(wǎng)絡(luò)來考慮的。考慮一下這樣的場(chǎng)景:某一時(shí)刻網(wǎng)絡(luò)上的延時(shí)突然增加,那么,TCP對(duì)這個(gè)事做出的應(yīng)對(duì)只有重傳數(shù)據(jù),但是,重傳會(huì)導(dǎo)致網(wǎng)絡(luò)的負(fù)擔(dān)更重,于是會(huì)導(dǎo)致更大的延遲以及更多的丟包,于是,這個(gè)情況就會(huì)進(jìn)入惡性循環(huán)被不斷地放大。試想一下,如果一個(gè)網(wǎng)絡(luò)內(nèi)有成千上萬的TCP連接都這么行事,那么馬上就會(huì)形成“網(wǎng)絡(luò)風(fēng)暴”,TCP這個(gè)協(xié)議就會(huì)拖垮整個(gè)網(wǎng)絡(luò)。為此,TCP引入了擁塞控制策略。擁塞策略算法主要包括:慢啟動(dòng),擁塞避免,擁塞發(fā)生,快速恢復(fù)。
四次握手?jǐn)嚅_連接:
第一次揮手:主動(dòng)關(guān)閉方發(fā)送一個(gè)FIN,用來關(guān)閉主動(dòng)方到被動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是主動(dòng)關(guān)閉方告訴被動(dòng)關(guān)閉方:我已經(jīng)不會(huì)再給你發(fā)數(shù)據(jù)了(當(dāng)然,在fin包之前發(fā)送出去的數(shù)據(jù),如果沒有收到對(duì)應(yīng)的ack確認(rèn)報(bào)文,主動(dòng)關(guān)閉方依然會(huì)重發(fā)這些數(shù)據(jù)),但此時(shí)主動(dòng)關(guān)閉方還可以接受數(shù)據(jù)。
第二次揮手:被動(dòng)關(guān)閉方收到FIN包后,發(fā)送一個(gè)ACK給對(duì)方,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào))。
第三次揮手:被動(dòng)關(guān)閉方發(fā)送一個(gè)FIN,用來關(guān)閉被動(dòng)關(guān)閉方到主動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是告訴主動(dòng)關(guān)閉方,我的數(shù)據(jù)也發(fā)送完了,不會(huì)再給你發(fā)數(shù)據(jù)了。
第四次揮手:主動(dòng)關(guān)閉方收到FIN后,發(fā)送一個(gè)ACK給被動(dòng)關(guān)閉方,確認(rèn)序號(hào)為收到序號(hào)+1,至此,完成四次揮手。
圖2給出了TCP通信過程中的狀態(tài)轉(zhuǎn)移圖,理解此圖是我們理解TCP-IP協(xié)議的關(guān)鍵。
圖2 TCP狀態(tài)轉(zhuǎn)移圖
狀態(tài)圖詳細(xì)解讀:
1.CLOSED:起始點(diǎn),在超時(shí)或者連接關(guān)閉時(shí)候進(jìn)入此狀態(tài)。
2.LISTEN:服務(wù)端在等待連接過來時(shí)候的狀態(tài),服務(wù)端為此要調(diào)用socket,bind,listen函數(shù),就能進(jìn)入此狀態(tài)。此稱為應(yīng)用程序被動(dòng)打開(等待客戶端來連接)。
3.SYN_SENT:客戶端發(fā)起連接,發(fā)送SYN給服務(wù)器端。如果服務(wù)器端不能連接,則直接進(jìn)入CLOSED狀態(tài)。
4.SYN_RCVD:跟3對(duì)應(yīng),服務(wù)器端接受客戶端的SYN請(qǐng)求,服務(wù)器端由LISTEN狀態(tài)進(jìn)入SYN_RCVD狀態(tài)。同時(shí)服務(wù)器端要回應(yīng)一個(gè)ACK,同時(shí)發(fā)送一個(gè)SYN給客戶端;另外一種情況,客戶端在發(fā)起SYN的同時(shí)接收到服務(wù)器端得SYN請(qǐng)求,客戶端就會(huì)由SYN_SENT到SYN_RCVD狀態(tài)。
5.ESTABLISHED:服務(wù)器端和客戶端在完成3次握手進(jìn)入狀態(tài),說明已經(jīng)可以開始傳輸數(shù)據(jù)了。
以上是建立連接時(shí)服務(wù)器端和客戶端產(chǎn)生的狀態(tài)轉(zhuǎn)移說明。相對(duì)來說比較簡(jiǎn)單明了,如果你對(duì)三次握手比較熟悉,建立連接時(shí)的狀態(tài)轉(zhuǎn)移還是很容易理解。
相關(guān)文章
- 本文將詳細(xì)介紹TCP為什么需要進(jìn)行三次握手,需要深入了解的朋友可以參考下2012-11-19
- 有internet協(xié)議版本(TCP/IPv4)及internet協(xié)議版本(TCP/IPv6),這些稱之為傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個(gè)工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(WAN)設(shè)計(jì)的2013-06-04
- 這篇文章主要為大家介紹了什么是tcp?tcp協(xié)議的基礎(chǔ)知識(shí)有哪些?與udp的區(qū)別在哪里?以下將詳細(xì)介紹tcp的基礎(chǔ)知識(shí),需要的朋友可以參考下2014-09-16
TCP協(xié)議的一些認(rèn)識(shí)及實(shí)踐知識(shí)簡(jiǎn)介
本文來探討一下TCP協(xié)議方面的一些認(rèn)識(shí)及實(shí)踐2012-10-25- 本文詳細(xì)來探討TCP建立拆除連接的知識(shí)2012-10-25
- 這篇文章主要為大家介紹了如何解決TCP窗口大小的調(diào)節(jié)與擁塞控制的辦法,有圖有步驟,很詳細(xì),需要的朋友可以參考下2014-09-17
- 這篇文章主要介紹了圖解TCP通信三次握手和四次分手,對(duì)正在學(xué)習(xí)TPC通信的同學(xué)會(huì)有些幫助,需要的朋友可以參考下2014-09-24
- 最常見的是TCP和UDP端口,這是用來在互聯(lián)網(wǎng)上的計(jì)算機(jī)之間的數(shù)據(jù)交換,3688/udp端口使用服務(wù)類型簡(jiǎn)單的推- S- S簡(jiǎn)單的推協(xié)議,基礎(chǔ)概念不是很了解的朋友可以參考下本文2013-11-20
網(wǎng)絡(luò)協(xié)議 TCP三次握手與四次斷開的詳細(xì)觀察
這篇文章主要為大家介紹了網(wǎng)絡(luò)協(xié)議之tcp協(xié)議,TCP三次握手與四次斷開是怎么的一種情況呢,下面我們來看看觀察TCP三次握手與四次斷開,需要的朋友可以參考下2015-04-29TCP/IP協(xié)議棧與數(shù)據(jù)包封裝圖文教程
TCP/IP網(wǎng)絡(luò)協(xié)議即網(wǎng)絡(luò)中(包括互聯(lián)網(wǎng))傳遞、管理信息的一些規(guī)范,TCP/IP協(xié)議是網(wǎng)絡(luò)的基礎(chǔ),是Internet的語言,可以說互聯(lián)網(wǎng)的發(fā)展全靠TCP/IP2016-07-04