TCP/IP 之TCP協議(2):連接和狀態

1、連接建立階段的三次握手

一般情況下,客戶端連到服務器叫做主動打開,服務器上的端口監聽叫做被動打開

a、準備,服務器進程被動打開端口
b、第一次:客戶發送SYN報文,主動打開連接。這個報文中的序號叫做ISN(初始序號),是隨機產生的。(SYN報文不帶數據,但是消耗一個序號)
c、第二次:服務器收到後,發送SYN+ACK報文。
d、第三次:客戶段收到後,發送ACK報文進行確認。

2、連接正常終止的三次握手協議:(以客戶主動關閉爲例)

a、客戶:發送FIN,主動關閉
b、服務器:發送FIN+ACK(當然可以加最後一塊報文)
c、客戶:發ACK確認

3、半關閉與四次握手:

半關閉:一方雖然關閉了發送數據,但還是可以接收數據

a、客戶:發送FIN
b、服務器:發ACK,同時通知應用進程
c、服務器繼續傳數據
d、服務器發FIN
e、客戶發ACK


4、連接復位與RST標記:在一端的TCP可以請求拒絕一個連接,或者 異常終止一條連接 或者 終止一條空閒連接時候,這些都可以用RST標記位完成。


5、狀態轉移(有限狀態機制)

(1)、正常流程的狀態轉移:(C表示客戶端,S表示服務器,+表示接收,-表示發送)

C: CLOSED--(-SYN)-->SYN-SEND--(+"SYN+ACK", -ACK)-->ESTABLISHED--(-FIN)-->
FIN-WAIT-1--(+ACK)-->FIN-WAIT-2--(+FIN, -ACK)-->TIME_WAIT--(2MSL之後)-->CLOSED

S: CLOSED--(被動打開)-->LISTEN--(+SYN, -"SYN+ACK")-->SYN-RCVD--(+ACK)-->ESTABLISHED--(+FIN, -ACK)-->CLOSE-WAIT--(-FIN)-->LAST-ACK--(+ACK)-->CLOSED

其中,CLOSE-WAIT表示收到第一個FIN,發送了ACK,等應用進程關閉

(2)、拒絕連接時的狀態轉移:

C: CLOSED--(-SYN)-->SYN-SEND--(+"RST+ACK")-->CLOSED
S: CLOSED--(被動打開)-->LISTEN--(-"ACK+RST")-->SYN-RCVD--(過段時間)-->LISTEN

(3)、異常終止時候的狀態轉移

C: ...ESTABLISHED--(-"ACK+RST")-->CLOSED
S: ...ESTABLISHED--(+"ACK+RST")-->CLOSED


發佈了54 篇原創文章 · 獲贊 16 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章