1. 程式人生 > >TCP和Http的區別!我都搞懂了,你就別迷糊了!

TCP和Http的區別!我都搞懂了,你就別迷糊了!

相信不少初學手機聯網開發的朋友都想知道Http與Socket連線究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。

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。


相關推薦

TCPHttp區別!,迷糊!

相信不少初學手機聯網開發的朋友都想知道Http與Socket連線究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。 1、TCP連線 手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連線。TCP協議可以對上層網路提供

出於好奇,去暗網裡瞧瞧 ——

用SS+TOR就能夠進入暗網,需要注意的是暗網的網址是隨時都會死的,所以導致很多暗網網址沒得響應。暗網大部分網址是全英文。 走了一圈回來後:因為英文太菜,看不懂,並且在裡面找不到什麼新奇的學習資料,所以對暗網沒得太大的興趣。 赤裸裸的慾

106.網路分層模型及SOCKET/TCP/UDP/HTTP區別聯絡

簡介 本文主要描述了網路分層模型, 分為TCP/IP四層網路模型與OSI七層網路模型說明。還有TCP/IP, SOCKET, HTTP, TCP, UDP之間的聯絡和區別。 網路模型 TCP/IP四層網路模型 TCP/IP分層模型(TCP/IP

TCPHTTP協議的連線過程,及聯絡與區別

1、TCP連線      手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連線。TCP協議可以對上層網路提供介面,使上層網路資料的傳輸建立在“無差別”的網路之上。建立起一個TCP連線需要經過“三次握手”:第一次握手:客戶端傳送sy

總結一 shelllinux(幫助自己這些問題的)

一 什麼是shell  shell 是一個互動性命令直譯器。shell讓你在命令列鍵入命令,經過shell解釋後傳送給作業系統(核心)執行。可通過一系列的linux命令對作業系統發出相關指令的人機介面。 Shell 是一個用C語言編寫的程式,它是使用者使用Linux的橋樑。Shel

計算機網路_UDP程式設計流程&TCPUDP區別

一、 流程 1.1 伺服器端 int socket(int domain,  int type,  int pro);  //步驟一、生成套接字 int bind(int sockfd,  struct sockaddr* serad

JAVA面試-------tcphttp

1、http/1.0、http/1.1和http2.0有什麼區別。       (1)、http/1.0協議預設使用非持久連線,既在非持久連線下,伺服器處理完客戶端請求後立即斷開TCP連線,伺服器不跟蹤每個客戶,也不記錄過去的請求。 &

TCPUDP區別

TCP和UDP的區別: TCP面向連線(如打電話要先撥號建立連線) UDP是無連線的,即傳送資料之前不需要建立連線 TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付 TCP面向位元組流,

HAproxy的負載均衡,以及基於TCPHTTP的應用程式代理

HAProxy是一個使用C語言編寫的自由及開放原始碼軟體[1],其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程式代理。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy執行在當前的硬體上,完全可以支援數以萬計的

TCPUDP區別小結以及步驟

TCP與UDP區別總結: 1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線 2、TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付 3、TC

WebSocket、Socket、TCPHTTP區別

現在想起來,當時對 WebSocket 是很感興趣的,但由於服務端的限制,最終依然選擇了 LuaSocket。我後來對 LuaSocket 進行了封裝,使其更好用。 現在,面對一個全新的專案,我自然而然地選擇了 WebSocket。 因此,我需要了解下面這些問題:

網路---HttpsHttp區別對稱加密非對稱加密

Https和Http區別 眾所周知,WEB服務存在http和https兩種通訊方式,http預設採用80作為通訊埠,對於傳輸採用不加密的方式,https預設採用443,對於傳輸的資料進行加密傳輸 目前主流的網站基本上開始預設採用HTTPS作為通訊方式,一切的考慮都基於對安全的要求,那麼如何對

webservice、sockethttp 區別(一)

webservice是基於http協議的soap協議的封裝和補充,如果你考慮公共穩定的介面,你可以努力的考慮一下。至於socket和http、webservices是否放在一起比較和考慮主要還是看你關心的角度,而這個角度可以是技術層面的 ,也可以是使用者需求層面1 資料傳輸

TCPHTTP學習筆記

TCP和HTTP的區別 TCP協議對應於傳輸層,而HTTP協議對應於應用層,從本質上來說,二者沒有可比性。Http協議是建立在TCP協議基礎之上的,當瀏覽器需要從伺服器獲取網頁資料的時候,會發出一次Http請求。Http會通過TCP建立起一個到伺服器的連線通道

使用Mina2.x編寫同時支援TCPHTTP的服務端

這是一個JavaProject 首先是服務啟動類MainApp.java package com.jadyer.core; import java.io.IOException; import java.net.InetSocketAddress; impo

淺談TCPUDP區別

    一個TCP連線必須要經過三次“對話”才能建立起來,我們來看看這三次對話的簡單過程:主機A向主機B發出連線請求資料包:“我想給你發資料,可以嗎?”,這是第一次對話;主機B向主機A傳送同意連線和要求同步(同步就是兩臺主機一個在傳送,一個在接收,協調工作)的資料包:“可以,你什麼時候發?”,這是第二次對話;

面試官:換人!他連 TCP 這幾個引數

每日一句英語學習,每天進步一點點: 前言 TCP 效能的提升不僅考察 TCP 的理論知識,還考察了對於操心繫統提供的核心引數的理解與應用。 TCP 協議是由作業系統實現,所以作業系統提供了不少調節 TCP 的引數。 Linux TCP 引數 如何正確有效的使用這些引數,來提高 TCP 效能是一個不那麼

用佇列實現棧,用棧實現佇列,聽起來有點繞,掌握精髓!

[toc] #### 一、背景 棧和佇列是資料結構中最常用到的兩種結構,有非常廣泛的運用,該篇文章將通過動畫的手段,展示棧和佇列相互實現的底層原理,讓我們真正搞懂棧和佇列的特性。 #### 二、概念 ##### 2.1 棧 > **棧[Stack]**:是一種限定僅在表尾進行插入和刪除操作的線性表;即後

面試官最愛的 volatile 關鍵字,這些問題沒?

前言 volatile相關的知識點,在面試過程中,屬於基礎問題,是必須要掌握的知識點,如果回答不上來會嚴重扣分的哦。 volatile關鍵字基本介紹 volatile可以看成是synchronized的一種輕量級的實現,但volatile並不能完全代替synchronized,volatile有synchro

詳解|寫完這篇文章終於連結串列

> 一覽:本文從零介紹鏈式儲存結構的線性表——單鏈表。包括以下內容: > > - 什麼是鏈式儲存儲存結構? > - 單鏈表的結構 > - 辨析頭結點、頭指標等易混淆概念 > - 基本的增刪改查操作(不帶頭結點和帶頭結點) > - 單鏈表與順序表的對比 # 線性表的鏈