網絡協議-TCP


TCP協議


TCP(Transmission Control Protocol)傳輸控制協議:提供面向連接的可靠的數據傳輸、適合傳輸大數據、速度慢


Tcp三次握手


TCP是面向連接的,無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。
在TCP/IP協議中,TCP協議提供可靠的連接服務,連接是通過三次握手進行初始化的。
三次握手的目的是同步連接雙方的序列號和確認號並交換 TCP窗口大小信息。

 


1. 第一次握手:建立連接。客戶端發送連接請求報文,將SYN位置為1,Seq (Sequence Number)為x;然后,客戶端進入SYN_SEND狀態,等待服務器的確認;
2. 第二次握手:服務器收到SYN報文段。服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Ack (Acknowledgment Number)為x+1(Seq+1);同時,自己自己還要發送SYN請求信息,將SYN位置為1,Seq為y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一並發送給客戶端,此時服務器進入SYN_RECV狀態;
3. 第三次握手:客戶端收到服務器的SYN+ACK報文段。然后將Ack設置為y+1,向服務器發送ACK報文段,這個報文段發送完畢以后,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。

完成了三次握手,客戶端和服務器端就可以開始傳送數據。

 

Tcp四次揮手

 


由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

 


客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。


1. 第一次揮手:主機1(可以使客戶端,也可以是服務器端),設置Seqr和Ack,向主機2發送一個FIN報文段, 主機1進入FIN_WAIT_1狀態
主機1告訴主機2: 我沒有數據要發送了,請求關閉連接
2. 第二次揮手:主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Ackr為Seq加1;主機1進入FIN_WAIT_2狀態;
主機2回復主機1,我收到你的關閉請求了
3. 第三次揮手:主機2向主機1發送FIN報文段,請求關閉連接,同時主機2進入LAST_ACK狀態;
主機2告訴主機1: 我也沒有數據要發送了,請求關閉連接
4. 第四次揮手:主機1收到主機2發送的FIN報文段,向主機2發送ACK報文段,然后主機1進入TIME_WAIT狀態;
主機2收到主機1的ACK報文段以后,就關閉連接;此時,主機1等待2MSL后依然沒有收到回復,則證明主機2已正常關閉,那好,主機1也可以關閉連接了。


各個狀態的意義

 


LISTEN - 偵聽來自遠方TCP端口的連接請求;
SYN-SENT -在發送連接請求后等待匹配的連接請求;
SYN-RECEIVED - 在收到和發送一個連接請求后等待對連接請求的確認;
ESTABLISHED- 代表一個打開的連接,數據可以傳送給用戶;
FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;
CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;
CLOSING -等待遠程TCP對連接中斷的確認;
LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;
TIME-WAIT -等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
CLOSED - 沒有任何連接狀態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM