網路是怎樣連線的 -- 初步瞭解瀏覽器委託協議棧傳送訊息

向作業系統內部的協議棧發出委託時,需要按照指定的順序來呼叫Socket庫中的程式元件。

應用程式是透過“描述符”這一類似號碼牌的東西來識別套接字的。

描述符:應用程式用來識別套接字的機制

IP地址和埠號:客戶端和伺服器之間用來識別對方套接字的機制

資料收發操作概覽

收發數字資訊這一操作不僅限於瀏覽器,對於各種使用網路的應用程式來說是都是共通的。

收發資料的兩臺計算機之間連線了一條

資料通道

,資料沿著這條通道流動,最終到達目的地。可以把它想象成一條

管道

,資料可以從任何一端被送入管道,

資料的流動是雙向的

這條管道一開始是

不存在的

,在進行收發資料操作之前,雙方需要先

建立

起這條管道才行。建立管道的關鍵在於管道兩端的資料出入口,稱為

套接字

。所以收發操作過程為以下4步:

(1)創接套接字(建立套接字階段)

(2)將管道連線到伺服器端的套接字上(連線階段)

(3)收發資料(通訊階段)

(4)斷開管道並刪除套接字(斷開階段)

這4個操作都是

由作業系統中的協議棧

來執行的,瀏覽器等應用程式並不會自己去做連線管道,放入資料這些操作,而是委託協議棧來代勞。

這些

委託

的操作都是透過呼叫

Socket庫

中的程式元件來執行的,但這些資料通訊用的程式元件其實僅僅充當了一個

橋樑

的角色, 並

不執行任何實質性的操作

,應用程式的委託內容最終會被

原原本本

地傳遞給協議棧。

網路是怎樣連線的 -- 初步瞭解瀏覽器委託協議棧傳送訊息

創接套接字階段

客戶端建立套接字的操作非常簡單,只要呼叫Socket庫中

socket程式元件

就可以了。建立完之後,協議棧就會返回一個

描述符

,應用程式會將收到的描述符存放在

記憶體

中。

描述符是用來識別不同的套接字的

(計算機中可能會同時存在多個數據的通訊操作,就需要建立多個不同的套接字來進行區分)。

只要我們出示描述符,協議棧就能夠

判斷

出我們希望用哪一個套接字來連線或收發資料了。

網路是怎樣連線的 -- 初步瞭解瀏覽器委託協議棧傳送訊息

連線階段:把管道接上去

應用程式透過呼叫Socket庫中的名為

connect程式元件

來完成這一操作。當呼叫connect時,需要指定

描述符、伺服器IP地址和埠號

這三個引數。

當同時指定IP地址和埠號時,才可以明確識別出某臺具體的計算上的某個具體的套接字

。為什麼不直接利用描述符呢?因為描述符是和委託創接套接字的應用程式進行互動時使用的,並不是用來告訴網路連線的另一方的,因些,

另一方並不知道這個描述符

如果說

描述符

是用來在一臺

計算機內部識別

套接字的機制,那麼

埠號

就是用來讓

通訊的另一方

能夠識別出套接字的機制。

那我們又怎麼知道另一方的埠號呢?

首先,客戶端在建立套接字時,協議棧會為這個套接字隨便分配一個埠號。接下來,當協議棧執行連線操作時,會將這個隨機分配的埠號

通知給伺服器

。(以後會更詳細描述)

網路是怎樣連線的 -- 初步瞭解瀏覽器委託協議棧傳送訊息

通訊階段:傳遞訊息

只要將資料傳入套接字,資料就會被髮送到對方的套接字中

。也還是要透過Socket庫委託協議棧來完成這個操作。

傳送時利用

write這個程式元件

,接收時利用

read程式元件

,會負責將接收到響應訊息放到

接收快取區

中。接收快取區是一塊位於應用程式內部的

記憶體空間

斷開階段:收發資料結束

呼叫Socket庫中的

close程式元件

即可進入斷開階段。需要注意的是,重複的連線斷開效率是很低的,因此後來人們又設計出了能夠一次連線中收

多個請求和響應

的方法。在

HTTP1.1

中可以使用這種方法。

以上就是瀏覽器與Web伺服器之間收發資訊的過程,但實際負責收發資訊的是

協議棧

網絡卡驅動和網絡卡

,只有這3者相互配合,資料才能夠在網路上流動起來。