TCP/IP協議的創建鏈接與關閉鏈接過程

1、創建鏈接(三次握手)服務器

第一次握手:創建鏈接時,客戶端發送SYN(seq=x)包到服務器,並進入SYN_SENT狀態,等待服務器的確認。SYN:同步序列編號(Synchronize Sequence Numbers)。操作系統

第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=x+1),同時本身也發送一個SYN包(seq=y),即發送SYN+ACK包,此時服務器進入SYN_RECV狀態指針

第三次握手:客戶端收到SYN+ACK包,向服務器發送ACK(ack=y+1)包,此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。code

握手過程當中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP鏈接一旦創建,在通訊雙方中的任何一方主動關閉鏈接以前,TCP 鏈接都將被一直保持下去。blog

 

 

SYN(synchronous創建聯機)、ACK(acknowledgement 確認)、PSH(push傳送)、FIN(finish結束)、RST(reset重置)、 URG(urgent緊急)進程

Sequence number(順序號碼)   Acknowledge number(確認號碼)同步

2、關閉鏈接(四次揮手)服務器端

 

第一次揮手:客戶端發送FIN+ACK包(序號爲seq=a,確認序號ack=b)給服務端,用來關閉客戶端到服務端的數據傳送,客戶端進入FIN_WAIT_1狀態請求

第二次揮手:服務端收到FIN+ACK包後,發送ACK包給客戶端進行確認,服務端進入CLOSE_WAIT狀態客戶端收到ACK包進入FIN_WAIT_2狀態。到這裏,關閉一個單向通道。程序

第三次揮手:服務端發送FIN+ACK包給客戶端,服務端進入LAST_ACK狀態

第四次揮手:客戶端收到FIN+ACK包後,發送ACK包給服務端進行確認,客戶端進入TIME_WAIT狀態,在等待30秒(可修改)後進入CLOSED狀態服務端收到ACK包後進入CLOSED狀態,關閉另外一個單向通道。

3、TCP與IP報文結構

  ●源、目標端口號字段:佔16比特。TCP協議經過使用"端口"來標識源端和目標端的應用進程。端口號能夠使用0到65535之間的任何數字。在收到服務請求時,操做系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在"衆所周知的端口"(Well-Know Port)爲用戶提供服務。
  
  ●順序號字段:佔32比特。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。
  
  ●確認號字段:佔32比特。只有ACK標誌爲1時,確認號字段纔有效。它包含目標端所指望收到源端的下一個數據字節。
  
  ●頭部長度字段:佔4比特。給出頭部佔32比特的數目。沒有任何選項字段的TCP頭部長度爲20字節;最多能夠有60字節的TCP頭部。
  
  ●標誌位字段(U、A、P、R、S、F):佔6比特。各比特的含義以下:
  
  ◆URG:緊急指針(urgent pointer)有效。
  
  ◆ACK:確認序號有效。
  
  ◆PSH:接收方應該儘快將這個報文段交給應用層。
  
  ◆RST:重建鏈接。
  
  ◆SYN:發起一個鏈接。
  
  ◆FIN:釋放一個鏈接。
  
  ●窗口大小字段:佔16比特。此字段用來進行流量控制。單位爲字節數,這個值是本機指望一次接收的字節數。
  
  ●TCP校驗和字段:佔16比特。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。
  
  ●緊急指針字段:佔16比特。它是一個偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。
  
  ●選項字段:佔32比特。可能包括"窗口擴大因子"、"時間戳"等選項。

 

參考文章:http://aofengblog.blog.163.com/blog/static/631702120152322848786/

相關文章
相關標籤/搜索