閱讀時間:8min 閱讀目標:服務器
- 掌握TCP鏈接過程
- 學會計算seq、ack碼
TCP 協議是HTTP協議的重要基礎,充分理解TCP協議的鏈接及端口,有助於咱們深刻理解網絡請求和鏈接。今天就來看圖學習TCP請求的鏈接、數據傳輸及端口鏈接。網絡
OSI
7層網絡模型OSI是
Open System Interconnection
的縮寫,國際標準化組織(ISO)制定了OSI模型,該模型定義了不一樣計算機互聯的標準,是設計和描述計算機網絡通訊的基本框架。併發
參考模型(從上至下) | 各層含義 |
---|---|
應用層 | 爲應用程序提供服務,如HTTP、FTP、SMTP、POP3等 |
表示層 | 數據格式轉換翻譯、數據加密解密、壓縮解壓縮 |
會話層 | 不一樣機器之間的用戶創建及管理會話 |
傳輸層 | 創建管理和維護端到端的鏈接,TCP、UDP |
網絡層 | IP地址及路由選擇 |
數據鏈路層 | 物理尋址,將原始比特流轉化爲邏輯傳輸線路 |
物理層 | 機械、電子、定時接口通訊信道上上的原始比特流傳輸 |
接受上一次的數據,將數據進行分割,保證數據準確到達對端。框架
TCP是面向鏈接的無狀態的協議。爲了鏈接的可靠性,每次鏈接的創建都須要3次握手。學習
3次握手的目的:加密
- 同步鏈接雙方的序列號和確認號;
- 交換TCP窗口大小信息。
客戶端(狀態) | 創建鏈接(三次握手) | 服務端(狀態) |
---|---|---|
CLOSED |
LISTEN |
|
SYN seq=0 ==》 |
||
SYN_SENT |
||
《== SYN ACK ack=1,seq=0 |
||
SYN_RCVD |
||
ACK ack=1,seq=1 ==》 |
||
ESTABLISHED |
ESTABLISHED |
SYN_SEND
狀態,等待服務器的確認。seq+1
或者seq+L
(數據長度L))。同時,本身還要發送SYN請求信息,將seq爲0。服務器端將上述全部信息一併發送給客戶端,此時服務器進入SYN_RECV
狀態。ESTABLISHED
狀態,完成TCP三次握手。客戶端 | 數據傳輸 | 服務端 |
---|---|---|
PSH seq=1, ACK ack=1(segmentLen = 99) ==》 |
||
《== PSH seq=1, ACK ack=100 (segmentLen = 119) |
||
ACK ack=120,seq=100 ==》 |
ACK
),而且返回客戶端要請求的數據,數據的長度爲111,將seq設置爲1,ack設置爲120(1 + 119)。客戶端(狀態) | 斷開鏈接 | 服務端(狀態) |
---|---|---|
FIN ACK ack=120,seq=100 ==》 |
||
FIN_WAIT_1 |
||
《== ACK ack=101,seq=120 |
||
FIN_WAIT_2 |
CLOSE_WAIT |
|
《== ACK ack=101,seq=120 |
||
LAST_ACK |
||
ACK ack=121,seq=101 ==》 |
||
TIME_WAIT |
CLOSE |
** 計算規則: ** seq 爲序列號 ack 爲應答碼 seq = 對方上次的ack;(首次發送時seq爲系統隨機生成) ack = 對方的seq+1(無數據傳輸時) 或者 seq+L(報文數據的長度L)計算機網絡