網絡協議之TCP/IP

計算機網絡的結構是分層的,每層都有各種協議來規范,關于互聯網的分層以及每一層的協議介紹請參考我的另外一篇文章:現代巴別塔(互聯網)是怎么建成的。而TCP/IP是其中最重要的一個協議族,除了包括位于傳輸層的TCP/UDP協議和網絡接口層的IP/ARP協議之外,默認還包括位于應用層的http/Ftp/Telnet等協議。

TCP

1. TCP協議的定義

TCP(Transmission Control Protocol)協議是構成整個互聯網傳輸協議的重要一部分,它位于網絡分層結構的傳輸層。

其實,傳輸層的協議有兩種:TCP和UDP。但是UDP不能保證數據被準確無誤的發送到目的地,而TCP要求目標主機在收到數據后發回一個確認,如果發送方在一定時間內未收到確認信息,則會重新發送數據包。因此,UDP發送速度更快,TCP發送更可靠。

2. TCP協議實現的步驟

2.1 知識儲備

標志位(SYN flag):
  • 緊急指針(URGENT POINTER):立即處理不必排隊

  • 確認(ACKNOWLEDGEMENT):ACK=1表示確認數據包成功接收

  • 推送PUSH:關于優先級

  • 復位(RST)標志

  • 同步標志(SYNCHRONISATION FLAG):SYN=1表示申請建立連接

  • FIN 標志:拆除上一個標志SYN建立的連接

ack(acknowledge) number:只有ACK=1時才有效,建立連接后發送報文的ACK必須為1.

seq(sequence) number

MSL(Maximum segment lifetime):報文最大生存時間

2.2 三次握手

三次握手即客戶端與服務端傳送的三個數據包

  • 第一次握手:
第一次握手.png

客戶端發送數據包到服務端,其中將標志位SYN置為1,發送順序號seq=x。然后客戶端進入SYN_SENT狀態,等待服務器確認

  • 第二次握手:
第二次握手.png

服務端接收到數據包,根據標志位SYN=1知道客戶端請求建立連接。服務端發送確認數據包到客戶端,其中將標志位ACK,SYN置為1,ack=x+1,seq=y。然后服務器進入到SYN_RCVD狀態。

  • 第三次握手:
第三次握手.png

客戶端接收到來自服務端的確認后,檢查ack是否為x+1,如果正確,則發送數據包到服務端,其中ack=y+1。服務端檢查ACK是否是y+1,如果正確,則連接建立成功,客戶端和服務端同時進入ESTABLISHED狀態,完成三次握手。

2.3 數據傳輸

客戶端序列號seq=x+1,ACK=Y+1,發送數據包給服務端,服務端收到后,ACK=y+2

2.4 四次揮手

  • 第一次揮手:

客戶端發送一個數據包到服務器,其中標志位FIN=1,初始化序列號seq=u,同時客戶端進入FIN_WAIT_1狀態。

  • 第二次揮手:

服務端發回一個數據包給客戶器,其中ACK=1,ack number=u+1,序列號seq=v。然后客戶端進入FIN_WAIT_2狀態,服務端進入CLOSE_WAIT狀態。

  • 第三次揮手:

服務端斷開與客戶端的鏈接,發回客戶端一個數據包,其中FIN=1,ACK=1,seq=w,和ack number=u+1.服務器進入LAST_ACK狀態

  • 第四次揮手:

客戶端發送數據包到服務端,其中ACK=1,ack number=w+1.客戶端進入TIME_WAIT狀態,等待2MAL進入close狀態,服務器也進入close狀態。

Socket連接

socket是對TCP/IP協議的封裝成的接口,方便程序員更方便的使用TCP/IP協議。不過需要注意的是socket可以基于TCP也可以基于UDP。socket連接的建立至少需要一對套接字:Client socket和Server socket

1. 連接過程

  • 服務端監聽

  • 客戶端請求

  • 連接確認

特點

基于TCP的socket連接可能是長連接可能是短連接,長連接需要定時發送心跳包來維持。

HTTP協議

超文本傳送協議(Hypertext Transfer Protocol )建立在TCP/IP基礎上,他的特點是客戶端發送的每次請求都需要服務端的響應,請求結束后主動釋放連接,所以是一種短連接。

http的請求/響應步驟

1. 客戶端連接到web服務器

客戶端與web服務器的HTTP端口(默認80)建立一個TCP套接字連接

2. 客戶端發送HTTP請求

通過TCP套接字,客戶端向web服務器發送一個請求報文。請求報文由請求行(request line),請求頭(header),空行和請求數據四部分組成。如下圖

http請求報文.png
2.1 請求行

如圖所示,請求行由三個字段構成:請求方法,URL,HTTP協議版本。

其中HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT

2.2 請求頭

請求頭由key:value的形式構成。比如

Content-Type:請求體/響應體的類型

User-Agent:產生請求的瀏覽器類型。

Accept:客戶端可識別的內容類型列表。

Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。

2.3 空行

發送回車符和換行符,通知服務器以下不再有請求頭

2.4 請求數據

請求數據不在GET方法中使用,而是在POST方法中使用

3. 服務器接收請求并返回HTTP響應

HTTP響應報文也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文.如下圖

http響應報文.png

4. 釋放連接

若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求

5. 客戶端解析HTML內容

http與https的區別

HTTP傳輸的數據都是明文的,未加密的,https通過SSL(Secure Sockets Layer)協議對數據進行加密。此處不再展開

End。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容