天天看點

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中則可以在一次連接配接中處理多個請求,并且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

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

3、SOCKET原理

3.1套接字(socket)概念

套接字(socket)是通信的基石,是支援TCP/IP協定的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種資訊:連接配接使用的協定,本地主機的IP位址,本地程序的協定端口,遠地主機的IP位址,遠地程序的協定端口。

應用層通過傳輸層進行資料通信時,TCP會遇到同時為多個應用程式程序提供并發服務的問題。多個TCP連接配接或多個應用程式程序可能需要通過同一個 TCP協定端口傳輸資料。為了差別不同的應用程式程序和連接配接,許多計算機作業系統為應用程式與TCP/IP協定互動提供了套接字(Socket)接口。應用層可以和傳輸層通過Socket接口,區分來自不同應用程式程序或網絡連接配接的通信,實作資料傳輸的并發服務。

3.2 建立socket連接配接

建立Socket連接配接至少需要一對套接字,其中一個運作于用戶端,稱為ClientSocket ,另一個運作于伺服器端,稱為ServerSocket 。

套接字之間的連接配接過程分為三個步驟:伺服器監聽,用戶端請求,連接配接确認。

伺服器監聽:伺服器端套接字并不定位具體的用戶端套接字,而是處于等待連接配接的狀态,實時監控網絡狀态,等待用戶端的連接配接請求。

用戶端請求:指用戶端的套接字提出連接配接請求,要連接配接的目标是伺服器端的套接字。為此,用戶端的套接字必須首先描述它要連接配接的伺服器的套接字,指出伺服器端套接字的位址和端口号,然後就向伺服器端套接字提出連接配接請求。

連接配接确認:當伺服器端套接字監聽到或者說接收到用戶端套接字的連接配接請求時,就響應用戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給用戶端,一旦用戶端确認了此描述,雙方就正式建立連接配接。而伺服器端套接字繼續處于監聽狀态,繼續接收其他用戶端套接字的連接配接請求。

4、SOCKET連接配接與TCP連接配接

建立Socket連接配接時,可以指定使用的傳輸層協定,Socket可以支援不同的傳輸層協定(TCP或UDP),當使用TCP協定進行連接配接時,該Socket連接配接就是一個TCP連接配接。

5、Socket連接配接與HTTP連接配接

由于通常情況下Socket連接配接就是TCP連接配接,是以Socket連接配接一旦建立,通信雙方即可開始互相發送資料内容,直到雙方連接配接斷開。但在實際網絡應用中,用戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆預設會關閉長時間處于非活躍狀态的連接配接而導緻 Socket 連接配接斷連,是以需要通過輪詢告訴網絡,該連接配接處于活躍狀态。

而HTTP連接配接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接配接,而且需要用戶端向伺服器送出請求後,伺服器端才能回複資料。

很多情況下,需要伺服器端主動向用戶端推送資料,保持用戶端與伺服器資料的實時與同步。此時若雙方建立的是Socket連接配接,伺服器就可以直接将資料傳送給用戶端;若雙方建立的是HTTP連接配接,則伺服器需要等到用戶端發送一次請求後才能将資料傳回給用戶端,是以,用戶端定時向伺服器端發送連接配接請求,不僅可以保持線上,同時也是在“詢問”伺服器是否有新的資料,如果有就将資料傳給用戶端。

二:首先,糾正一下我以前一直誤解的概念,我一直以為Http和Tcp是兩種不同的,但是地位對等的協定,雖然知道TCP是傳輸層,而http是應用層今天學習了下,知道了http是要基于TCP連接配接基礎上的,簡單的說,TCP就是單純建立連接配接,不涉及任何我們需要請求的實際資料,簡單的傳輸。http是用來收發資料,即實際應用上來的。

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

第一次:C發送一個請求連接配接的位碼SYN和一個随機産生的序列号給Seq,然後S收到了這些資料。

第二次:S收到了這個請求連接配接的位碼,啊呀,有人向我送出請求了麼,那我要不要接受他的請求,得實作确認一下,于是,發送了一個确認碼 ACN(seq+1),和SYN,Seq給C,然後C收到了,這個是第二次連接配接。

第三次:C收到了确認的碼和之前發送的SYN一比較,偶喲,對上了麼,于是他又發送了一個ACN(SEQ+1)給S,S收到以後就确定建立連接配接,至此,TCP連接配接建立完成。

簡單就是:請求,确認,連接配接。

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

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

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

第一:發送一個http請求給S,這個請求包括請求頭和請求内容:

request header:

包括了,1.請求的方法是POST/GET,請求的URL,http協定版本2.請求的資料,和編碼方式3是否有cookie和cooies,是否緩存等。

post和get請求方式的差別是,get把請求内容放在URL後面,但是URL長度有限制。而post是以表單的形勢,适合要輸入密碼之類的,因為不在URL中顯示,是以比較安全。

request body:

即請求的内容.

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

response header:包括了1.cookies或者sessions2.狀态嗎3.内容大小等

response body:

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

第三,C收到了以後,就由浏覽器完成一系列的渲染,包括執行JS腳本等。

這就是我所了解的webTCP,HTTP基礎知識,待續。。。。。

三、TCP是底層通訊協定,定義的是資料傳輸和連接配接方式的規範

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

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

HTTP支援的是www服務 

而TCP/IP是協定 

它是Internet國際網際網路絡的基礎。TCP/IP是網絡中使用的基本的通信協定。 

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

繼續閱讀