建立TCP連接:三次握手
連接的過程可以卻確保通信雙方在發(fā)送應(yīng)用數(shù)據(jù)包之前靜靜準(zhǔn)備好了傳送和接收數(shù)據(jù)。對于一個要建立的連
接,通信雙方必須用彼此的初始化序列號seq和來自對方成功傳輸確認(rèn)的應(yīng)答號ack來同步。(ack號致命希望收到的下一個八位組的編號)習(xí)慣上將同步信號寫為SYN,應(yīng)答信號為ACK。整個同步的過程稱為三次握手。
1)主機A發(fā)送SYN給主機B:我的序列號seq是X。
2)主機B發(fā)送SYN、ACK給主機A:我的序列號seq是X+1,應(yīng)答號是X+1(等待接收第X+1號八位組)。
3)主機B發(fā)送SYN、ACK給主機B:我的序列號seq是X+1,應(yīng)答號是Y+1.
通過以上3個步驟(三次握手),TCP連接連接建立,開始傳輸數(shù)據(jù)。任何機器上的TCP都能被動地等待握手或主動地發(fā)起握手。一旦連接建立,數(shù)據(jù)可以對等地雙向流動。
如果TCP使用1作為每次建立連接的初始化序列號,當(dāng)本地系統(tǒng)重啟后,遠(yuǎn)程系統(tǒng)會認(rèn)為以前的連接依然存在。所以每次連接時,主機都會隨機選擇一個初始化序列號,用它來辨別所傳輸?shù)陌宋唤M在數(shù)據(jù)流中的位置。然后雙方要對各自的序列號進行協(xié)商,因為接收收到第一個SYN時,他并不知道這是否一個被延遲的舊信號。所以它必須要求發(fā)送驗證這個SYN。
一般情況下,TCP使用最少信息的報文段來實現(xiàn)三次握手,這對減少網(wǎng)絡(luò)通信流量是有效的??傊?,三次握手使通信雙方做好了傳輸數(shù)據(jù)的準(zhǔn)備,并且使通信通信雙方統(tǒng)一了初始化序列號。
關(guān)閉TCP連接:改進的三次握手
對于一個已經(jīng)建立的連接,TCP使用改進的三次握手來結(jié)束通話(使用一個帶有FIN附加標(biāo)記的報文段)。
1)當(dāng)主機A的應(yīng)用程序通知TCP數(shù)據(jù)已經(jīng)完畢時,TCP向主機B發(fā)送一個帶有FIN附加標(biāo)記的報文段(FIN理解為
finish)。
2)主機B收到這個FIN報文段之后,并不立即用FIN報文段回復(fù)主機A,而是向主機A發(fā)送一個確認(rèn)ACK,同時
同時通知自己相應(yīng)的應(yīng)用程序:對方要求關(guān)閉連接(先發(fā)送ACK為了防止在這段時間內(nèi),對方重傳FIN報文段)。
3)主機B的應(yīng)用程序告訴TCP:我要徹底的關(guān)閉的關(guān)閉連接,TCP向主機A送第二個FIN報文段。
4)主機A收到第二個FIN報文段后,向主機B發(fā)送一個ACK表示連接徹底關(guān)閉。
TCP的可靠性
TCP是面向流的,即數(shù)據(jù)段被當(dāng)作字節(jié)的序列化進行傳輸。
在通過三次握手建立連接時,序列號被初始化。在傳輸過程中,TCP繼續(xù)使用這個序列號來標(biāo)記每一個發(fā)送的數(shù)據(jù)段每發(fā)送一個數(shù)據(jù)段,序列號加1.接收站點一句序列號重新組裝縮所收到數(shù)據(jù)段。為什么要依靠序列號來重組數(shù)據(jù)段呢?
例如,在一個告訴高速鏈路與低速鏈路并存的網(wǎng)絡(luò)上,可能會出現(xiàn)高速鏈路比低速鏈路上的數(shù)據(jù)段提前到達的情況,此時就必須依靠序列號來重組數(shù)據(jù)段,這就是序列號的作用之一。
在傳輸過程中,確認(rèn)號ACK的作用是告訴發(fā)送端那些數(shù)據(jù)包已經(jīng)成功接收,并且確認(rèn)號會向發(fā)送端指出了接收端希望收到的下一個數(shù)據(jù)段的序列號,這種機制稱為預(yù)期確認(rèn),即確認(rèn)號等于下一個預(yù)期的位元組。
在 TCP/IP網(wǎng)絡(luò)中,存在超時與重傳兩種現(xiàn)象。如果在傳輸過程中丟失了某個序列號的數(shù)據(jù)段,導(dǎo)致發(fā)送端在給定時間間隔內(nèi)得不到那個數(shù)據(jù)段的應(yīng)答,那么那個丟失數(shù)據(jù)段就會被要求重發(fā)。數(shù)據(jù)段會被保存在發(fā)送端的緩沖區(qū)中,直到發(fā)送端接收到應(yīng)答號,它才會釋放這個緩沖區(qū)。這種機制被稱為肯定確認(rèn)與重新傳輸 (Positive Acknowledgement and Retransimission,PAR),他是虛脫通信協(xié)議用來確??尚哦鹊囊环N技術(shù)。
序列號的第二個作用就是消除網(wǎng)絡(luò)中的重復(fù)包(同步復(fù)制)。例如在網(wǎng)絡(luò)擁塞時,發(fā)送端遲遲沒有收到接收端某個數(shù)據(jù)段的ACK包,它可能會認(rèn)為這個序列號的數(shù)據(jù)段丟失了,于是它會重新發(fā)送,這種情況可能會導(dǎo)致接收端在網(wǎng)絡(luò)恢復(fù)正常后收到兩個同樣序列號的數(shù)據(jù)段,此時接收端會自動丟棄第二個一樣數(shù)據(jù)段。
序列號和應(yīng)答號為TCP提供了一種糾錯機制,提高了TCP的可靠性。
評論