TCP/IP,http,socket,長連接,短連接——小結。

概要:

    之前對這幾個概念有點糊塗,查閱了些資料,稍微概括下他們的區別吧。如有錯誤,請拍~~~

先看圖:



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),但還是無狀態的,或者說是不可以信任的。



參考資料:

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個字節的網絡整型碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章