這篇具有很好參考價(jià)值的文章主要介紹了【好書精讀】網(wǎng)絡(luò)是怎樣連接的 之 連接服務(wù)器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

(該圖由AI制作 學(xué)習(xí)AI繪圖 聯(lián)系我)?
目錄
1 連接是什么意思
1.1 連接實(shí)際上是通信雙方交換控制信息
2 負(fù)責(zé)保存控制信息的頭部
2.1 客戶端與服務(wù)器之間交換的控制信息
連接操作的實(shí)際過程
1 連接是什么意思
創(chuàng)建套接字之后
,
應(yīng)用程序
(
瀏覽器
)
就會(huì)調(diào)用
connect
,
隨后協(xié)議棧會(huì)將本地的套接字與服務(wù)器的套接字進(jìn)行連接
連接操作的目的之一:
把服務(wù)器的 IP 地址和端口號(hào)等信息告知協(xié)議棧
套接字剛剛創(chuàng)建完成
的時(shí)候
,
里面并沒有存放任何數(shù)據(jù)
,
也不知道通信的對(duì)象是誰
。
在這個(gè)狀態(tài)下
,
即便應(yīng)用程序要求發(fā)送數(shù)據(jù)
,
協(xié)議棧也不知道數(shù)據(jù)應(yīng)該發(fā)送給誰
。
瀏覽器可以根據(jù)網(wǎng)址來查詢服務(wù)器的
IP
地址
,
而且根據(jù)規(guī)則也知道應(yīng)該使用
80
號(hào)端口
,
但只有瀏覽器知道這些必要的信息
是不夠的
,
因?yàn)樵谡{(diào)用
socket
創(chuàng)建套接字時(shí)
,
這些信息并沒有傳遞給協(xié)議
棧
。
因此
,
我們需要把服務(wù)器的
IP
地址和端口號(hào)等信息告知協(xié)議棧
連接操作的目的之二:客戶端向服務(wù)器傳達(dá)開始通信的請(qǐng)求
服務(wù)器上也會(huì)創(chuàng)建套接字,但是
不知道應(yīng)該和誰進(jìn)行通信,
而且
,
和客戶端不同的是
,
在服務(wù)器上
,
連應(yīng)用程序也不知道通信對(duì)象是誰
于是
,
我們需要讓客戶端向服務(wù)器告知必要的信息
1.1 連接實(shí)際上是通信雙方交換控制信息
上面提到的客戶端,將
IP地址,和端口號(hào),告知服務(wù)器,這樣的過程——就屬于,交換控制信息的一個(gè)具體的例
子
。
控制信息:
用來控制數(shù)據(jù)收發(fā)操作所需的一些信息
,
IP
地址
和端口號(hào)就是典型的例子
連接操作中,所交換的控制信息,是根據(jù)通信規(guī)則,來確定的
此外
,
當(dāng)執(zhí)行數(shù)據(jù)收發(fā)操作時(shí)
,
我們還需要一塊,用來臨時(shí)存放要收發(fā)的數(shù)據(jù)的內(nèi)存空間
,
這塊內(nèi)存空間稱為緩沖區(qū)
,
它也是在連接操作
的過程中分配的
2 負(fù)責(zé)保存控制信息的頭部
控制信息分為兩類
第一類
是,客戶端,和服務(wù)器,相互聯(lián)絡(luò)時(shí),交換的控制信息
連接時(shí)需要
,
包括數(shù)據(jù)收發(fā)和斷開連接操作在內(nèi)
,
整個(gè)通信過程中都需要
這些內(nèi)容在
TCP
協(xié)議的規(guī)格中進(jìn)行了定義
。
具體來說
,
表
中的這些字段就是
TCP
規(guī)格中,定義的控制信息

這些字段是固定的,在連接、收發(fā)、斷開等各個(gè)階段中,每次客戶端和服務(wù)器之間進(jìn)行通信時(shí),都需要提供這些控制信息
2.1 客戶端與服務(wù)器之間交換的控制信息

如圖
(
a
)
所示
,
這些信息,會(huì)被添加在,客戶端與
服務(wù)器之間,傳遞的,網(wǎng)絡(luò)包的開頭
在連接階段
,
由于數(shù)據(jù)收發(fā)還沒有開始
,所以如圖
(
b
)
所示
,
網(wǎng)絡(luò)包中沒有實(shí)際的數(shù)據(jù)
,
只有控制信息
為了避免各種不同的頭部發(fā)生混淆
,我們一般會(huì)記作
TCP 頭部、以太網(wǎng)頭部 B、IP 頭部
頭部是用來記錄和交換控制信息的
另外一類
,
那就是保存在套接字中
,
用來控制協(xié)議棧操
作的信息
通信操作中使用的控制信息分為兩類。
(1)?頭部中記錄的信息
(2)?套接字(協(xié)議棧中的內(nèi)存空間)中記錄的信息
連接操作的實(shí)際過程
過程是從應(yīng)用程序調(diào)用 Socket 庫(kù)的 connect 開始的
(
圖
②
)。
connect(< 描述符 >, < 服務(wù)器 IP 地址和端口號(hào) >, …)
提供了服務(wù)器的 IP 地址和端口號(hào)? 會(huì)傳遞給協(xié)議棧中的 TCP 模塊
TCP
模塊會(huì)與該
IP
地址對(duì)應(yīng)的對(duì)象
,
也就是與服務(wù)器的
TCP
模塊交換控制信息
-
客戶端先創(chuàng)建一個(gè)包含表示開始數(shù)據(jù)收發(fā)操作的控制信息的頭部
(客戶端(發(fā)送方)的套接字就準(zhǔn)確找到了服務(wù)器(接收方)的套接字,也就是搞清楚了我應(yīng)該連接哪個(gè)套接字)
連接操作的第一步是在 TCP 模塊處創(chuàng)建表示連接控制信息的頭部。
-
將頭部中的控制位的
SYN
比特設(shè)置為
1
,
大家可以認(rèn)為它表示連接

?文章來源:http://www.zghlxwxcb.cn/news/detail-498786.html
當(dāng)
TCP
頭部創(chuàng)建好之后
,
接下來
TCP
模塊會(huì)將信息傳遞給
IP
模塊并委托它進(jìn)行發(fā)送
IP
模塊執(zhí)行網(wǎng)絡(luò)包發(fā)送操作后
網(wǎng)絡(luò)包就會(huì)通過網(wǎng)絡(luò)到達(dá)服務(wù)器
服務(wù)器上的
IP
模塊會(huì)將接收到的數(shù)據(jù)傳遞給
TCP
模塊
服務(wù)器的 TCP 模塊根據(jù) TCP 頭部中的信息找到端口號(hào)對(duì)應(yīng)的套接字文章來源地址http://www.zghlxwxcb.cn/news/detail-498786.html
從處于等待連接狀態(tài)的套接字中找到與
TCP
頭部中記錄的端口號(hào)相同的套接字就可以了
當(dāng)找到對(duì)應(yīng)的套接字之后
,
套接字中會(huì)寫入相應(yīng)的信息
,
并將狀態(tài)改為正在連接
此時(shí):
服務(wù)器的
TCP
模塊會(huì)
返回響應(yīng)
這個(gè)過程和客戶端一樣
,
需要在
TCP
頭部中設(shè)置發(fā)送方和接收方端口號(hào)以及
SYN
比特
還需要將
ACK 控制位設(shè)為1,這表示已經(jīng)接收到相應(yīng)的網(wǎng)絡(luò)包
網(wǎng)絡(luò)中經(jīng)常會(huì)發(fā)生錯(cuò)誤
,
網(wǎng)絡(luò)包也會(huì)發(fā)生丟失
,因此雙方在通信時(shí)必須相互確認(rèn)網(wǎng)絡(luò)包是否已經(jīng)送達(dá),
而設(shè)置
ACK
比特就是用來進(jìn)行這一確認(rèn)的
服務(wù)器
TCP
模塊會(huì)將
TCP頭部傳遞給
IP
模塊
,
并委托
IP
模塊向客戶端返回響應(yīng)
網(wǎng)絡(luò)包就會(huì)返回到客戶端
-
通過 IP 模塊到達(dá) TCP 模塊,并通過 TCP 頭部的信息確認(rèn)連接服務(wù)器的操作是否成功
-
向套接字中寫入服務(wù)器的 IP 地址、端口號(hào)等信息
- 將狀態(tài)改為連接完畢
客戶端的操作就已經(jīng)完成
客戶端也需要將
ACK
比特設(shè)置為
1
并發(fā)回服務(wù)器
,
告訴服務(wù)器剛才的響應(yīng)包已經(jīng)收到
套接字就已經(jīng)進(jìn)入隨時(shí)可以收發(fā)數(shù)據(jù)的狀態(tài)了,大家可以認(rèn)為
這時(shí)有一根管子把兩個(gè)套接字連接了起來
建立連接之后,協(xié)議棧的連接操作就結(jié)束了,
也就是說 connect 已經(jīng) 執(zhí)行完畢,控制流程被交回到應(yīng)用程序
到了這里,關(guān)于【好書精讀】網(wǎng)絡(luò)是怎樣連接的 之 連接服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!