Socket簡介
Socket是進程通訊的一種方式,即調用這個網絡庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。
幾個定義:
(1)IP地址:即依照TCP/IP協議分配給本地主機的網絡地址,兩個進程要通訊,任一進程首先要知道通訊對方的位置,即對方的IP。
(2)端口號:用來辨別本地通訊進程,一個本地的進程在通訊時均會占用一個端口號,不同的進程端口號不同,因此在通訊前必須要分配一個沒有被訪問的端口號。
(3)連接:指兩個進程間的通訊鏈路。
(4)半相關:網絡中用一個三元組可以在全局唯一標志一個進程:
(協議,本地地址,本地端口號)
這樣一個三元組,叫做一個半相關,它指定連接的每半部分。
(4)全相關:一個完整的網間進程通信需要由兩個進程組成,並且只能使用同一種高層協議。也就是說,不可能通信的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通信需要一個五元組來標識:
(協議,本地地址,本地端口號,遠地地址,遠地端口號)
這樣一個五元組,叫做一個相關(association),即兩個協議相同的半相關才能組合成一個合適的相關,或完全指定組成一連接。
鏈接:https://www.zhihu.com/question/29637351/answer/67610424
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
二、客戶/服務器模式
在TCP/IP網絡應用中,通信的兩個進程間相互作用的主要模式是客戶/服務器(Client/Server,
C/S)模式,即客戶向服務器發出服務請求,服務器接收到請求后,提供相應的服務。客戶/服務器模式的建立基於以下兩點:
(1)首先,建立網絡的起因是網絡中軟硬件資源、運算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用。
(2)其次,網間進程通信完全是異步的,相互通信的進程間既不存在父子關系,又不共享內存緩沖區,因此需要一種機制為希望通信的進程間建立聯系,為二者的數據交換提供同步,這就是基於客戶/服務器模式的TCP/IP。
服務器端:
其過程是首先服務器方要先啟動,並根據請求提供相應服務:
(1)打開一通信通道並告知本地主機,它願意在某一公認地址上的某端口(如FTP的端口可能為21)接收客戶請求;
(2)等待客戶請求到達該端口;
(3)接收到客戶端的服務請求時,處理該請求並發送應答信號。接收到並發服務請求,要激活一新進程來處理這個客戶請求(如UNIX系統中用fork、exec)。新進程處理此客戶請求,並不需要對其它請求作出應答。服務完成后,關閉此新進程與客戶的通信鏈路,並終止。
(4)返回第(2)步,等待另一客戶請求。
(5)關閉服務器
客戶端:
(1)打開一通信通道,並連接到服務器所在主機的特定端口;
(2)向服務器發服務請求報文,等待並接收應答;繼續提出請求......
(3)請求結束后關閉通信通道並終止。
從上面所描述過程可知:
(1)客戶與服務器進程的作用是非對稱的,因此代碼不同。
(2)服務器進程一般是先啟動的。只要系統運行,該服務進程一直存在,直到正常或強迫終止。
作者:郭無心
鏈接:https://www.zhihu.com/question/29637351/answer/67610424
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。