天天看點

TCP程式設計

TCP的工作過程:首先TCP是一種面向連接配接的,可靠的,基于位元組流的傳輸層通信協定。TCP的工作過程可以分為三個階段:一、連接配接的建立;  二、傳輸資料; 三、斷開連接配接,下面就對這三個過程分别介紹下:

1.1 連接配接的建立

TCP的連接配接建立就像打電話一樣, 我們打電話時,撥一個号碼的号碼并不是立即就可以接通的,期間會有一個“嘟 嘟”的呼叫過程, 這就好比是TCP協定的連接配接的建立階段。當我們用TCP編寫的程式,必須先建立TCP連接配接。TCP協定的連接配接建立通過三次握手來完成的。

下面就對這三次握手簡單的介紹:

第一次握手:建立連接配接時,用戶端發送SYN包(seq=x)到伺服器,并進入SYN_Send狀态,等待伺服器确認

第二次握手:伺服器收到SYN包,必須确認客戶的SYN(ACK=x+1),同時自己也發送一個SYN包(SEQ=y),即SYN+ACK包,此時伺服器進入SYN_Recv狀态

第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ACK=y+1),此包發送完畢,用戶端和伺服器進入Established(建立)狀态,完成三次握手。

簡單了解三次握手就是發送一個檢驗包給對方然後互相确認,雙方都接到确認的一個信号時,這時候雙方就建立了連接配接(就像我們打電話時,如果沒人說話時就會說下 “喂”,說這句“喂” 也就是希望得到對方的一個确認,雖然這裡雙方已經建立了連接配接的,這裡隻是更形象的說明下三次握手的過程)。

1.2 傳輸資料

雙方建立了連接配接,即在雙方建立了一個通信通道(就像一座橋一樣),在兩端建立了一個通路,建立連接配接之後,當然是傳輸我們需要傳輸的資料到對方的,這裡就開始簡單介紹下傳輸資料的過程。

利用TCP傳輸資料時,資料是以位元組流的形式進行傳輸,用戶端與伺服器端建立連接配接後,發送方需要先将發送的資料轉換為位元組流,然後将其發送給對方,發送資料時,可以通過程式不斷地将資料流陸續寫入TCP的發送緩沖中,然後TCP自動從發送緩沖中提取一定量的資料,将其組成TCP封包段發送到IP層,再通過IP層(也就是網絡層)之下的網絡接口發送出去;接受端從IP層接收到TCP封包段後,将其暫時儲存在接受緩沖中,然後我們通過程式依次讀取接受緩沖中的資料,進而達到互相通信的目的(簡單的說就發送方把資料轉換為資料流,再把資料流存儲在發送緩沖中,然後傳輸層低層的協定從發送緩沖中讀取資料把資料發送出去,然後接收端從底層接受到資料把資料存儲在接收端的緩沖中,然後我們寫的程式隻是從緩沖中依次讀取資料,然後顯示出來,在用戶端我們寫代碼做的事情是把資料寫入Write寫入發送端的緩沖中,然後伺服器端(接收端)用Read方法在自己的緩沖中讀取資料,用一句話概括,TCP的傳輸就是對資料的寫——讀操作)括号中的内容隻是我個人了解,因為這樣我感覺了解起來比較容易,對于剛開始接觸TCP的朋友可以這樣了解,然後再一句句話去擴充。

1.3 斷開連接配接

發送完資料之後,最後就是斷開連接配接了,下面是網上斷開的連接配接的一張圖檔(斷開一個連接配接需要經過四次握手)。

TCP的工作過程就分為上面三個過程,TCP程式設計是作為上層應用程式設計的基礎,就像之前專題中基于HTTP協定的Web伺服器,Web浏覽器,其傳輸層都用的是TCP協定進行傳輸的,還有基于FTP(檔案傳輸協定),IMAP(互動式郵件存取協定) POP3(郵局協定的第3個版本) 和SMTP(簡單郵件傳輸協定)的網絡應用其傳輸層都用的是TCP協定,而不是UDP等其他傳輸層協定。

轉載自:http://www.cnblogs.com/zhili/archive/2012/08/25/TCP.html