1.Socket是一組編程接口(API)
是對TCP/IP協議的封裝和應用。介於傳輸層和應用層,大致駐留在 OSI 模型的會話層
向應用層提供統一的編程接口。應用層不必了解TCP/IP協議細節。直接通過對Socket接口函數的調用完成數據在IP網絡的傳輸。
基於傳輸層差異,4種類型的Socket:
(1)基於TCP的Socket:提供給應用層可靠的流式數據服務,使用TCP的Socket應用程序協議:BGP,HTTP,FTP,TELNET等。優點:基於數據傳輸的可靠性。
(2)基於UDP的Socket:適用於數據傳輸可靠性要求不高的場合。基於UDP的Socket應用程序或協議有:RIP,SNMP,L2TP等。
(3)基於RawIp的Socket:非連接,不可靠的數據傳輸。特點:能使應用程序直接訪問網絡層。基於RawIp的Socket有ping ,tracert,ospf等。
(4)基於鏈路層的Socket。為IS-IS協議提供的Socket接口。使IS-IS協議可通過Socket直接訪問鏈路層。非連接,不可靠通信服務。
2.再次解讀Socket是什么?
Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
先從服務器端說起。服務器端先初始化Socket,然后與端口綁定(bind),
對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。
在這時如果有個客戶端初始化一個Socket,然后連接服務器(connect),
如果連接成功,這時客戶端與服務器端的連接就建立了。
客戶端發送數據請求,服務器端接收請求並處理請求,
然后把回應數據發送給客戶端,客戶端讀取數據,最后關閉連接,一次交互結束。
注意:發現有個大佬總結的挺好,先給出鏈接,有興趣的盆友可以看看~