概要:html
以前對這幾個概念有點糊塗,查閱了些資料,稍微歸納下他們的區別吧。若有錯誤,請拍~~~數據庫
先看圖:瀏覽器
TCP/IP是什麼?
安全
TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。
在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。
在傳輸層中有TCP協議與UDP協議。
在應用層有FTP、HTTP、TELNET、SMTP、DNS等協議。服務器
Socket是什麼呢?
網絡
Socket是應用層與TCP/IP協議族通訊的中間軟件抽象層,一組接口,把複雜的TCP/IP協議族隱藏在Socket接口後面。併發
因此HTTP就是TCP/IP應用層的協議。Socket是他們的軟件抽象層。異步
短鏈接:
鏈接->傳輸數據->關閉鏈接
HTTP是無狀態的,瀏覽器和服務器每進行一次HTTP操做,就創建一次鏈接,但任務結束就中斷鏈接。
也能夠這樣說:短鏈接是指SOCKET鏈接後發送後接收完數據後立刻斷開鏈接。
長鏈接:
鏈接->傳輸數據->保持鏈接 -> 傳輸數據-> 。。。 ->關閉鏈接。
長鏈接指創建SOCKET鏈接後不論是否使用都保持鏈接,但安全性較差。
http的長鏈接:
HTTP也能夠創建長鏈接的,使用Connection:keep-alive,HTTP 1.1默認進行持久鏈接。HTTP1.1和HTTP1.0相比較而言,最大的區別就是增長了持久鏈接支持(貌
似最新的 http1.0 能夠顯示的指定 keep-alive),但仍是無狀態的,或者說是不能夠信任的。socket
參考資料:ide
http://blog.csdn.net/xijiaohuangcao/article/details/6105623——《寫給那些讓我糊里糊塗的HTTP、TCP、UDP、Socket》
http://hi.baidu.com/loleafver/blog/item/a222c9d853d4f1e638012fa0.html——《http長鏈接和短鏈接》
http://hi.baidu.com/einsof/blog/item/f2f3a84b5d1a30fb82025ca0.html——《什麼是短鏈接、長鏈接、Socket》
================================================
socket
Socket協議的形象描述 socket的英文原義是「孔」或「插座」。在這裏做爲4BDS UNIX的進程通訊機制,取後一種意思。socket很是相似於電話插座。以一個國家級電話網爲例。電話的通話雙方至關於相互通訊的2個進程,區號是它的網絡地址;區內一個單位的交換機至關於一臺主機,主機分配給每一個用戶的局內號碼至關於socket號。任何用戶在通話以前,首先要佔有一部電話機,至關於申請一個socket;同時要知道對方的號碼,至關於對方有一個固定的socket。而後向對方撥號呼叫,至關於發出鏈接請求(假如對方不在同一區內,還要撥對方區號,至關於給出網絡地址)。對方假如在場並空閒(至關於通訊的另外一主機開機且能夠接受鏈接請求),拿起電話話筒,雙方就能夠正式通話,至關於鏈接成功。雙方通話的過程,是一方向電話機發出信號和對方從電話機接收信號的過程,至關於向socket發送數據和從socket接收數據。通話結束後,一方掛起電話機至關於關閉socket,撤消鏈接。
詳細內容見百科。
一般短鏈接是這樣:鏈接->傳輸數據->關閉鏈接 那什麼是長鏈接?通常長鏈接相對短鏈接而言的,長鏈接在傳輸完數後不關閉鏈接,而不斷的發送包保持鏈接等待處理下一個數據包。 such as: 鏈接->傳輸數據->保持鏈接 -> 傳輸數據-> 。。。 ->關閉鏈接。
那何時用短鏈接呢? 通常長鏈接用於少數client-end to server-end的頻繁的通訊,例如:數據庫的鏈接用長鏈接, 若是用短鏈接頻繁的通訊會形成socket錯誤,並且頻繁的socket 建立也是對資源的浪費。 而像WEB網站的http服務通常都用短連接,由於長鏈接對於服務端來講會耗費必定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的鏈接用短鏈接會更省一些資源。(查看來源)
TCP/IP通訊解讀長短連接一。通訊方式主要有如下三大類:(一)SERVER/CLIENT方式1.一個Client方鏈接一個Server方,或稱點對點(peer to peer):2.多個Client方鏈接一個Server方,這也是一般的併發服務器方式。3.一個Client方鏈接多個Server方,這種方式不多見,主要用於一個客戶向多個服務器發送請求狀況。(二)鏈接方式1.長鏈接Client方與Server方先創建通信鏈接,鏈接創建後不斷開,而後再進行報文發送和接收。這種方式下因爲通信鏈接一直存在,能夠用下面命令查看鏈接是否創建:netstat –f inet|grep 端口號(如5678)。此種方式經常使用於點對點通信。2.短鏈接Client方與Server每進行一次報文收發交易時才進行通信連接,交易完畢後當即斷開鏈接。此種方式經常使用於一點對多點通信,好比多個Client鏈接一個Server.(三)發送接收方式1.異步報文發送和接收是分開的,相互獨立的,互不影響。這種方式又分兩種狀況:(1)異步雙工:接收和發送在同一個程序中,有兩個不一樣的子進程分別負責發送和接收(2)異步單工:接收和發送是用兩個不一樣的程序來完成。2.同步報文發送和接收是同步進行,既報文發送後等待接收返回報文。同步方式通常須要考慮超時問題,即報文發上去後不能無限等待,須要設定超時時間,超過該時間發送方再也不等待讀返回報文,直接通知超時返回。實際通訊方式是這三類通訊方式的組合。好比通常書上提供的TCP/IP範例程序大都是同步短鏈接的SERVER/CLIENT程序。有的組合是基本不用的,比較經常使用的有價值的組合是如下幾種:同步短鏈接Server/Client同步長鏈接Server/Client異步短鏈接Server/Client異步長鏈接雙工Server/Client異步長鏈接單工Server/Client其中異步長鏈接雙工是最爲複雜的一種通訊方式,有時候經常會出如今不一樣銀行或不一樣城市之間的兩套系統之間的通訊。好比金卡工程。因爲這幾種通訊方式比較固定,因此能夠預先編制這幾種通訊方式的模板程序。二.報文格式通訊報文格式多樣性更多,相應地就必須設計對應的讀寫報文的接收和發送報文函數。(一)阻塞與非阻塞方式 1.非阻塞方式讀函數不停地進行讀動做,若是沒有報文接收到,等待一段時間後超時返回,這種狀況通常須要指定超時時間。2.阻塞方式若是沒有報文接收到,則讀函數一直處於等待狀態,直到有報文到達。(二)循環讀寫方式1.一次直接讀寫報文在一次接收或發送報文動做中一次性不加分別地所有讀取或所有發送報文字節。2.不指定長度循環讀寫這通常發生在短鏈接進程中,受網絡路由等限制,一次較長的報文可能在網絡傳輸過程當中被分解成了好幾個包。一次讀取可能不能所有讀完一次報文,這就須要循環讀報文,直到讀完爲止。3.帶長度報文頭循環讀寫這種狀況通常是在長鏈接進程中,因爲在長鏈接中沒有條件可以判斷循環讀寫何時結束,因此必需要加長度報文頭。讀函數先是讀取報文頭的長度,再根據這個長度去讀報文.實際狀況中,報頭的碼制格式還常常不同,若是是非ASCII碼的報文頭,還必須轉換成ASCII,常見的報文頭碼制有:(1)n個字節的ASCII碼(2)n個字節的BCD碼(3)n個字節的網絡整型碼 |