1. 程式人生 > >TCP和HTTP協議的連線過程,及聯絡與區別

TCP和HTTP協議的連線過程,及聯絡與區別

1、TCP連線

      手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連線。TCP協議可以對上層網路提供介面,使上層網路資料的傳輸建立在“無差別”的網路之上。

建立起一個TCP連線需要經過“三次握手”:

第一次握手:客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連 接之前,TCP 連線都將被一直保持下去。斷開連線時伺服器和客戶端均可以主動發起斷開TCP連線的請求,斷開過程需要經過“四次握手”(見下)

2、HTTP連線

HTTP協議即超文字傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連線最顯著的特點是客戶端傳送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連線。從建立連線到關閉連線的過程稱為“一次連線”。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連線,在處理完本次請求後,就自動釋放連線。

       2)在HTTP 1.1中則可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

第一:從傳輸層,先說下TCP連線,我們要和服務端連線TCP連線,需要通過三次連線,包括:請求,確認,建立連線。即傳說中的“三次握手協議”。

第二:從實際上的資料應用來說http。

在前面客戶端和應用伺服器建立TCP連線之後,就需要用http協議來傳送資料了,HTTP協議簡單來說,還是請求,確認,連線。

總體就是C傳送一個HTTP請求給S,S收到了這個http請求,然後返回給C http響應,然後C的中介軟體或者說瀏覽器把這些資料渲染成為了網頁,展示在使用者面前。

第一步:傳送一個http請求給S,這個請求包括請求頭和請求內容:

request header:

包括了:1.請求的方法是POST/GET,請求的URL,http協議版本

2.請求的資料,和編碼方式

3.是否有cookie和cooies,是否快取等。

request body:

即請求的內容:

第二步:S收到了http請求,然後根據請求頭,返回http響應。

response header:

應答頭包括了:1.cookies或者sessions2.狀態碼3.內容大小等

response body:

即響應的內容,包括,JS什麼的。

第三步:C收到了以後,就由瀏覽器完成一系列的渲染,包括執行JS指令碼等。

HTTP、TCP聯絡與區別:

       TCP是傳輸層, http是要基於TCP連線基礎上的。簡單的說,TCP就是單純建立連線,不涉及任何我們需要請求的實際資料,簡單的傳輸;http是用來收發資料,即實際應用上來的。

      TCP是底層通訊協議,定義的是資料傳輸和連線方式的規範;

HTTP是應用層協議,定義的是傳輸資料的內容的規範;

HTTP協議中的資料是利用TCP協議傳輸的,所以支援HTTP也就一定支援TCP; 

      HTTP支援的是www服務,而TCP/IP是協議,它是Internet國際網際網路絡的基礎。TCP/IP是網路中使用的基本的通訊協議。 

TCP/IP實際上是一組協議,它包括上百個各種功能的協議,如:遠端登入、檔案傳輸和電子郵件等,而TCP協議和IP協議是保證資料完整傳輸的兩個基本的重要協議。通常說TCP/IP是Internet協議族,而不單單是TCP和IP。


由於HTTP在每次請求結束後都會主動釋放連線,因此HTTP連線是一種“短連線”,要保持客戶端程式的線上狀態,需要不斷地向伺服器發起連線請求。通常的 做法是即時不需要獲得任何資料,客戶端也保持每隔一段固定的時間向伺服器傳送一次“保持連線”的請求,伺服器在收到該請求後對客戶端進行回覆,表明知道客 戶端“線上”。若伺服器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到伺服器的回覆,則認為網路已經斷開。



【問題】為什麼連線的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連線請求報文後,可以直接傳送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連線時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端所有的報文都發送完了,我才能傳送FIN報文,因此不能一起傳送。故需要四步握手。

下面的圖表試圖顯示不同的TCP/IP和其他的協議在最初OSI模型中的位置:

7應用層例如HTTPSMTPSNMPFTPTelnetSIPSSHNFSRTSPXMPPWhoisENRP
6表示層例如XDRASN.1SMBAFPNCP
5會話層例如ASAPTLSSSH、ISO 8327 / CCITT X.225、RPCNetBIOSASPWinsockBSD sockets
4傳輸層例如TCPUDPRTPSCTPSPXATPIL
3網路層例如IPICMPIGMPIPXBGPOSPFRIPIGRPEIGRPARPRARP、 X.25
2資料鏈路層例如乙太網令牌環HDLC幀中繼ISDNATMIEEE 802.11FDDIPPP
1物理層例如線路無線電光纖信鴿