Socket是什么?
socket是應用層與傳輸層的一個抽象,將復雜的TCP/IP協議隱藏在Socket接口之后,只對應用層暴露簡單的接口
socket是一種特殊的文件,它也有文件描述符,進程可以打開一個socket,並且像處理文件一樣對它進行read()和write()操作,而不必關心數據是怎么在網絡上傳輸的
socket是一個tcp連接的兩端
Socket如何唯一標識一個進程?
socket基於tcp協議實現,網絡層的ip地址唯一標識一台主機,而傳輸層的協議+端口號可以唯一標識綁定到這個端口的進程
通信雙方如何進行端口綁定?
通常服務端啟動時會綁定一個端口提供服務,而客戶端在發起連接請求時會被隨機分配一個端口號
Socket屬於網絡的哪一層?
Socket不算是一個協議,它是應用層與傳輸層間的一個抽象層。它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用,以實現進程在網絡中通信
Socket是全雙工的嗎?
基於TCP協議,是全雙工的
HTTP協議是全雙工的嗎?
HTTP 協議設計的初衷本身就是請求/響應模式,這是規范決定的。不過在技術上是可以利用下層的 TCP 來進行全雙工通信的。
Socket與WebSocket的區別
Socket是應用層與傳輸層的一個抽象,將復雜的TCP/IP協議隱藏在Socket接口之后,只對用戶暴露簡單的接口
而WebScoket是應用層協議,它也是基於TCP實現,同時借助了HTTP協議建立連接
WebSocket連接過程:
- 服務端與客戶端建立TCP連接(三次握手)、建立HTTP連接
- 客戶端(瀏覽器)向服務端發送一個請求頭包含
的HTTP請求,申請升級到Websocket連接Upgrade: websocket Connection: Upgrade - 服務端回應的響應頭:
同意升級協議,至此雙方將基於WebSocket協議通信HTTP/1.1 101 Switching Protocals Connection: Upgrade Upgrade: websocket
參考資料
https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
