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 | 應用層 | 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP |
6 | 表示層 | 例如XDR、ASN.1、SMB、AFP、NCP |
5 | 會話層 | 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets |
4 | 傳輸層 | 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL |
3 | 網路層 | 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 |
2 | 資料鏈路層 | 例如乙太網、令牌環、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP |
1 | 物理層 | 例如線路、無線電、光纖、信鴿 |