TCP鏈接創建與釋放

 

TCP面向字節流的(就是說TCP傳送時是按照一個一個字節來傳送的)緩存

 

TCP鏈接的創建(三次握手)服務器

1:客戶機的TCP先向服務器的TCP發送一個鏈接請求報文段。不含應用層數據,首部中的SYN標誌位被置爲1.另外,客戶機會隨機選擇一個起始序號seq=x(鏈接請求報文不攜帶數據,但要消耗一個序號)。spa

2:服務器的TCP收到鏈接請求報文段後,如贊成創建鏈接,就像客戶機發回確認,並做爲該TCP鏈接分配TCP緩存和變量。在確認報文段中,SYN和ACK位都被置爲1,確認號字段的值爲x+1,而且服務器隨機產生起始序號seq=y(確認報文不攜帶數據,但也要消耗掉一個序號)。確認報文段一樣不包含應用層數據。blog

3:當客戶機收到確認報文段後,還要向服務器給出確認,而且也要給該鏈接分配緩存和變量。這個報文段的ACK標誌位被置爲1,序號字段爲x+1,確認號字段ack=y+1.該報文段能夠攜帶數據,若不攜帶數據則不消耗序號。事件

 

TCP鏈接的釋放(四次揮手)變量

一、客戶機打算關閉鏈接,就向其TCP發送一個鏈接釋放報文段,並中止再發送數據,主動關閉TCP鏈接,該報文段的FIN標誌位被置爲1,seq=u,等於前面已傳送過的數據的最後一個字節的序號加1。(TCP是全雙工的,便可以想象成是一條TCP鏈接上有兩條數據通路。當發送FIN報文時,發送FIN的一端就不能再發送數據,也就關閉了其中一條數據通路,但對方還能夠發送數據)。請求

二、服務器收到鏈接釋放報文段後即發出確認,確認號是ack=u+1,而這個報文段本身的序號是w,等於它前面已發送過的數據的最後一個字節序號加1。此時,從客戶機到服務器這個方向的鏈接就釋放了,TCP鏈接處於半關閉狀態。但服務器若發送數據,客戶機仍要接收。im

三、若服務器沒有要向客戶機發送的數據,就通知TCP釋放鏈接,此時其發出FIN=1的鏈接釋放報文段。總結

四、客戶機收到鏈接釋放報文段後,必須發出確認。在確認報文段中,ACK字段被置爲1,確認號ack=w+1,序號seq=u+1.此時TCP鏈接尚未釋放掉,必須通過時間等待計時器設置的事件2MSL後,客戶機才進入到鏈接關閉狀態。數據

 

總結:

鏈接創建:

  1)SYN=1,seq=x.

  2) SYN=1,ACK=1,seq=y,ack=x+1.

  3) ACK=1,seq=x+1,ack=y+1.

釋放鏈接:

  1)FIN=1,seq=u。

  2)ACK=1,seq=v,ack=u+1.

  3)  ACK=1,FIN=1,seq=w,ack=u+1.

  4)  ACK=1,seq=u+1,ack=w+1.

相關文章
相關標籤/搜索