Socket能夠支持不一樣的傳輸層協議(TCP或UDP),當使用TCP協議進行鏈接時,該Socket鏈接就是一個TCP鏈接。程序員
socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操做抽象爲幾個簡單的接口供應用層調用已實現進程在網絡中通訊編程
實際上socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API),經過Socket,咱們才能使用TCP/IP協議。服務器
socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API),經過Socket,咱們才能使用TCP/IP協議。 實際上,Socket跟TCP/IP協議沒有必然的聯繫。Socket編程接口在設計的時候,就但願也能適應其餘的網絡協議。因此說,Socket的出現 只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而造成了咱們知道的一些最基本的函數接口,好比create、 listen、connect、accept、send、read和write等等。網絡
socket通訊流程socket
TCP/IP協議函數
握手過程當中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP鏈接一旦創建,在通訊雙方中的任何一方主動關閉鏈接以前,TCP 鏈接都將被一直保持下去。斷開鏈接時服務器和客戶端都可以主動發起斷開TCP鏈接的請求,斷開過程須要通過「四次握手」(過程就不細寫了,就是服務器和客戶端交互,最終肯定斷開).設計
============================================================視頻
http 爲短鏈接:客戶端發送請求都須要服務器端回送響應.請求結束後,主動釋放連接,所以爲短鏈接。blog
一般的作法是,不須要任何數據,也要保持每隔一段時間向服務器發送"保持鏈接"的請求。這樣能夠保證客戶端在服務器端是"上線"狀態。接口
若服務器長時間沒法收到客戶端的請求,則認爲客戶端「下線」,若客戶端長時間沒法收到服務器的回覆,則認爲網絡已經斷開。
HTTP與Socket的區別:一個傳輸的快,一個傳輸的慢。可是他們都是基於TCP/IP/UDP的三種協議,進行數據傳輸的。
什麼狀況下用socket或http
好比:視頻,圖片,斷點續傳的狀況下要用socket
http的協議的無狀態性實現不了這個功能。
http協議是應用層的協義,有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。