TCP建立連接
1.請求端(通常稱為客戶)發(fā)送一個SYN段指明客戶打算連接的服務(wù)器的端口吧秕,以及初始序號(ISN)郑兴。這個SYN段為報文段1
2.服務(wù)器發(fā)會包含服務(wù)器初始序號SYN報文段(報文段2)作為應(yīng)答俱尼。同時將確認設(shè)置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將占用一個序號
3.客戶必須將確認序號設(shè)置為服務(wù)器的ISN加1以對服務(wù)器的SYN報文段確認(報文段3)
這三個報文段完成連接的建立,這個過程稱為三次握手
TCP連接終止
建立一個連接需要3次握手梧税,而終止一個連接需要經(jīng)過4次握手.這是由于TCP的半關(guān)閉造成的部默。既然是一個TCP連接是全雙工(數(shù)據(jù)在兩個方向上能同時傳遞)侵蒙,因此每個方向必須單獨的進行關(guān)閉。這原則就是當一方完成他的數(shù)據(jù)發(fā)送任務(wù)就能發(fā)送一個FIN來終止這個方向的連接傅蹂。當一端收到一個FIN纷闺,他必須通知應(yīng)用層另一端終止了那個方向的數(shù)據(jù)傳送算凿。發(fā)送FIN通常是應(yīng)用層進行關(guān)閉的結(jié)果。
收到一個FIN只是意味著在這一方向上沒有數(shù)據(jù)流動犁功。一個TCP鏈接收到一個FIN后仍能發(fā)送數(shù)據(jù)氓轰。而這對利用半關(guān)閉的應(yīng)用來說是可能的,盡管在實際應(yīng)用中只有很少的TCP應(yīng)用程序這樣做浸卦。
正常的關(guān)閉過程:
首先進行關(guān)閉的一方(即發(fā)送第一個FIN)將執(zhí)行主動關(guān)閉署鸡,而另一方(收到這個FIN)執(zhí)行被動關(guān)閉。通常一方主動關(guān)閉而另一方完成被動關(guān)閉镐躲。
圖18-3中的報文段4發(fā)起終止連接储玫,它由Te lnet客戶端關(guān)閉連接時發(fā)出。這在我們鍵入quit命令后發(fā)生萤皂。它將導(dǎo)致TCP客戶端發(fā)送一個FIN撒穷,用來關(guān)閉從客戶到服務(wù)器的數(shù)據(jù)傳送。
當服務(wù)器收到這個FIN裆熙,它發(fā)回一個ACK端礼,確認序號為收到的序號加1(報文段5)。和SYN一樣入录,一個FIN將占用一個序號蛤奥。同時TCP服務(wù)器還向應(yīng)用程序(即丟棄服務(wù)器)傳送一個文件結(jié)束符。接著這個服務(wù)器程序就關(guān)閉它的連接僚稿,導(dǎo)致它的TCP端發(fā)送一個FIN(報文段6)凡桥,客戶必須發(fā)回一個確認,并將確認序號設(shè)置為收到序號加1(報文段7)蚀同。