日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

透彻理解Socket网络编程

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 透彻理解Socket网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂的Socket(套接字),是進程通訊的一種方式,即調用這個網絡庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。需要滿足三元組------(協議,本地地址,本地端口號)

在《計算機網絡:自頂向下方法》中,作者把socket比作門——門外是郵局,你要送信就要通過門,把信從門送出去到郵局,然后由郵局幫你送達目標的門,目的地主人再打開門,從門取出郵局送過來的信。

socket位于應用層與傳輸層之間,所以可以認為上述的比喻中,郵局就是傳輸層(及更下面的層),而門內就是應用。這樣,socket的本意,“套接字”應該也比較容易理解。

我們可以把房子比作內核,那么門(socket)就是房子之間交流的endpoint。重要的是,因為一個房子有很多個門(不同的端口),而每個門對于門后面的應用,是唯一的。在這里,一個房子是內核,里面有很多個小人(進程),而每個想與其他房子的小人溝通的小人,都要在自己住的房間開一個門,內核會給這個門分配一個門牌號(端口),這扇門這就是socket。

如果門的比喻還是不夠形象,那么想象這樣兩棟房子——兩棟房子被很多根管道連接在一起,而這些管道和房子連接起來的部分就是socket。管道是傳輸層(以及更下層),用來傳輸應用層的message。

---------------------------------------------------------------------言歸正傳--------------------------------------------------

Socket簡介

Socket是進程通訊的一種方式,即調用這個網絡庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。

幾個定義:

(1)IP地址:即依照TCP/IP協議分配給本地主機的網絡地址,兩個進程要通訊,任一進程首先要知道通訊對方的位置,即對方的IP。

(2)端口號:用來辨別本地通訊進程,一個本地的進程在通訊時均會占用一個端口號,不同的進程端口號不同,因此在通訊前必須要分配一個沒有被訪問的端口號。

(3)連接:指兩個進程間的通訊鏈路。

(4)半相關:網絡中用一個三元組可以在全局唯一標志一個進程:

(協議,本地地址,本地端口號)

這樣一個三元組,叫做一個半相關,它指定連接的每半部分。

(4)全相關:一個完整的網間進程通信需要由兩個進程組成,并且只能使用同一種高層協議。也就是說,不可能通信的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通信需要一個五元組來標識:

(協議,本地地址,本地端口號,遠地地址,遠地端口號)

這樣一個五元組,叫做一個相關(association),即兩個協議相同的半相關才能組合成一個合適的相關,或完全指定組成一連接。

二、客戶/服務器模式

在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

總結

以上是生活随笔為你收集整理的透彻理解Socket网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。