委托協(xié)議棧發(fā)送消息

1.1 數(shù)據(jù)收發(fā)數(shù)據(jù)概覽

知道了IP地址,就可以委托操作系統(tǒng)內(nèi)部的協(xié)議棧向這個目標(biāo)IP地址,也就是要訪問的Web服務(wù)器發(fā)送消息。這一過程需要按照指定的順序來調(diào)用Socket庫中的程序組件。收發(fā)數(shù)據(jù)的兩臺計算機(jī)之間連接了一條數(shù)據(jù)通道,數(shù)據(jù)的流動是雙向的。要建立連接的通道,需要向建立通道兩端的數(shù)據(jù)出入口,這些出入口稱為套接字。

8AF99E8A1751C5A5280AD1E14A39BA08.png

首先,服務(wù)器一方先創(chuàng)建套接字,然后等待客戶端向該套接字連接管道。當(dāng)服務(wù)器進(jìn)入等待狀態(tài)時,客戶端就可以連接管道??蛻舳艘矔?chuàng)建一個套接字,然后從該套接字延伸出管道,最后管道連接到服務(wù)器端的套接字上。連接是客戶端發(fā)起,但是斷開時可以由客戶端或者服務(wù)器任意一方發(fā)起。一方斷開,另一方也會隨之?dāng)嚅_,當(dāng)管道斷開后,套接字也會被刪除。

收發(fā)數(shù)據(jù)可以分為以下4個階段:

  • 1 創(chuàng)建套接字(創(chuàng)建套接字階段)
  • 2 將管道連接到服務(wù)器的套接字上(連接階段connect)
  • 3 收發(fā)數(shù)據(jù)(通信階段write,read)
  • 4 斷開管道并刪除套接字(斷開階段close)

?創(chuàng)建套接字階段:創(chuàng)建套接字是調(diào)用Socket庫中的socket程序組件,如同調(diào)用解析器向DNS服務(wù)器查詢IP一樣。創(chuàng)建完成后,協(xié)議棧會返回一個描述符,描述符是用來識別不同套接字的。計算機(jī)可以同時進(jìn)行多個數(shù)據(jù)的通信操作,比如打開兩個個瀏覽器窗口可能就是訪問兩臺Web服務(wù)器,也就是需要創(chuàng)建兩個不同的套接字。應(yīng)用程序是通過描述符來設(shè)別套接字的。

連接階段:通過調(diào)用Socket庫中connect的程序組件來完成。調(diào)用connect時,需要指定描述符、服務(wù)器IP地址和端口號3個參數(shù)。
IP地址是為了區(qū)分網(wǎng)絡(luò)中各個計算機(jī)而分配的數(shù)值。但是,連接操作的對象是某個具體的套接字,而端口號就是用來讓通信的另一方能夠識別出套接字的機(jī)制。描述符則是用來在一臺計算機(jī)內(nèi)部識別套接字的機(jī)制。當(dāng)同時指定IP地址和端口號時,就可以明確識別出某臺具體的計算機(jī)上的某個具體的套接字。服務(wù)器上所使用的端口號是根據(jù)應(yīng)用的種類事先規(guī)定好的,比如Web是80號端口,電子郵件是25號端口。

總結(jié):描述符:應(yīng)用程序用來識別套接字的機(jī)制。IP地址和端口號:客戶端和服務(wù)器之間用來識別對方套接字的機(jī)制。

通信階段:根據(jù)用戶輸入的網(wǎng)址生成HTTP請求消息就是我們要發(fā)送的數(shù)據(jù)。接下來調(diào)用Socket庫的write組件時,需要指定描述符和發(fā)送數(shù)據(jù),然后協(xié)議棧就會將數(shù)據(jù)發(fā)送到服務(wù)器。接下來,服務(wù)器執(zhí)行接收操作,解析收到的數(shù)據(jù)內(nèi)容并執(zhí)行相應(yīng)的操作,向客戶端返回響應(yīng)消息。當(dāng)消息返回后,客戶端接收消息的操作是通過Socket庫中的read程序組件委托協(xié)議棧來完成。read負(fù)責(zé)將接收到的響應(yīng)消息存放到接收緩沖區(qū)中。

斷開階段:當(dāng)瀏覽器收到數(shù)據(jù)后,收發(fā)數(shù)據(jù)的過程就結(jié)束了。接下來,需要調(diào)用Socket庫的close程序組件進(jìn)入斷開階段。最終,連接的套接字之間的通道和套接字本身都會被刪除。


A6E47D5540730125EB2A85FA92DC42C6.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容