計算機網路 3 服務端的應用是如何接受資料報的

2021-10-10 16:02:22 字數 2336 閱讀 7872

針對計算機網路的分層,我們看下各層是由誰實現的

上圖比較清晰的給出了答案,應用層由使用者程序實現(比如tomgcat、netty等伺服器元件),傳輸層和網路層由核心實現,鏈路層由網絡卡驅動實現,物理層就是網絡卡以及網線等物理材料。

伺服器接收客戶端的請求之前,要做一系列的準備工作。

伺服器需要同時和多個客戶端通訊, 但乙個程式來處理多個客戶端的請求是很難的, 因為伺服器必須把握每乙個客戶端的操作狀態。 每有乙個客戶端連線進來, 就啟動乙個新的伺服器程式。首先, 我們將程式分成兩個模組, 即等待連線模組和負責與客戶端通訊的模組。當伺服器程式啟動並讀取配置檔案完成初始化操作後, 就會執行等待連線模組。接下來, 當客戶端連發起連線時, 這個模組會恢復執行並接受連線,然後啟動客戶端通訊模組, 並移交完成連線的套接字。

在資料收發層面, 客戶端和服務端是能夠以左右對稱的方式自由傳送資料,也就是說tcp及以下層級在傳送資料這一方面對於客戶端和服務端並無二樣。但是有乙個層面是無法左右對稱的,那就是連線,只有乙個端在等待接收連線,另乙個端才可以發起連線。我們稱等待連線的一方為服務端,發起請求的一端是客戶端。

服務端主要的步驟有:

1、建立套接字

2、呼叫 bind 將埠號寫入套接字中

3、協議棧會呼叫 listen 向套接字寫入等待連線狀態這一控制資訊

4、協議棧會呼叫 accept 來接受連線

5、包達到後,複製乙個副本(即建立乙個新的套接字)與客戶端通訊

伺服器接收到電訊號並還原成數字資訊是在網絡卡上完成的, 還原後的數字資訊被儲存在網絡卡內部的緩衝區中。在這個過程中, 伺服器的 cpu 並不是一直在監控網路包的到達, 而是

在執行其他的任務, 因此 cpu 並不知道此時網路包已經到達了。接下來,網絡卡會通過硬中斷將網路包到達的事件通知給cpu,然後,cpu會切換到網絡卡任務,網絡卡驅動會將網路包從緩衝區讀出來,根據頭部的以太型別判斷協議的種類將包轉交給網路層的某個協議(比如鏈路層判斷出來包的型別是ip協議,就會調ip模組,將包轉交給它)。

當網路包轉交到協議棧時, ip 模組會首先開始工作, 檢查 ip 頭部。 ip模組首先會檢查 ip 頭部的格式是否符合規範, 然後檢查接收方 ip 位址,看包是不是發給自己的。 確認包是發給自己的之後, 接下來需要檢查包有沒有被分片。檢查 ip頭部的內容就可以知道是否分片 , 如果是分片的包, 則將包暫時存放在記憶體中, 等所有分片全部到達之後將分片組裝起來還原成原始包; 如果沒有

分片, 則直接保留接收時的樣子, 不需要進行重組。然後ip協議會檢查 ip 頭部的協議號字段, 並將包轉交給相應的模組。 例如, 如果協議號為 06( 十六進製制), 則將包轉交給 tcp 模組; 如果是 11( 十六進製制), 則轉交給 udp 模組。 

傳輸層以tcp為例,tcp模組會檢查包的頭部中控制位 syn 字段,為1時,表示這是乙個發起連線的包,這時tcp模組會確認該埠上有沒有與接收方埠號相同且正在處於等待連線狀態的套接字。如果沒有,則會向客戶端返回乙個表示接收方埠不存在等待連線的套接字的 icmp 訊息。如果存在等待連線的套接字, 則為這個套接字複製乙個新的副本, 並將傳送方 ip 位址、 埠號、 序號初始值、 視窗大小等必要的引數寫入這個套接字中, 同時分配用於傳送緩衝區和接收緩衝區的記憶體空間。然後生成代表接收確認的 ack 號, 用於從伺服器向客戶端傳送資料的序號初始值,表示接收緩衝區剩餘容量的視窗大小, 並用這些資訊生成 tcp 頭部, 委託ip 模組傳送給客戶端。這個包到達客戶端之後, 客戶端會返回表示接收確認的 ack 號, 當這個 ack 號返回伺服器後, 連線操作就完成了。這時, 伺服器端的程式應該進入呼叫 accept 的暫停狀態, 當將新套接字的描述符轉交給伺服器程式之後, 伺服器程式就會恢復執行。

如果是資料收發,tcp 模組會檢查收到的包對應哪乙個套接字。 在伺服器端, 可能有多個已連線的套接字對應同乙個埠號, 因此僅根據接收方埠號無法找到特定的套接字。 這時我們需要根據 ip 頭部中的傳送方 ip 位址和接收方 ip 位址, 以及 tcp 頭部中的接收方埠號和傳送方埠號共 4 種資訊, 找到上述 4 種資訊全部匹配的套接字 。找到 4 種資訊全部匹配的套接字之後,tcp 模組會對比該套接字中儲存的資料收發狀態和收到的包的 tcp 頭部中的資訊是否匹配, 以確定資料收發操作是否正常。 具體來說, 就是根據套接字中儲存的上乙個序號和資料長度計算下乙個序號, 並檢查與收到的包的 tcp 頭部中的序號是否一致 。 如果兩者一致, 就說明包正常到達了伺服器, 沒有丟失。 這時, tcp模組會從包中提出資料, 並存放到接收緩衝區中, 與上次收到的資料塊連線起來。 這樣一來, 資料就被還原成分包之前的狀態了。

收到的資料塊進入接收緩衝區, 意味著資料報接收的操作告一段落了。接下來, 應用程式會呼叫 socket 庫的 read 來獲取收到的資料,這時資料會被轉交給應用程式。

計算機網路 16 計算機網路應用示例

目錄 二 語音 的流量控制 服務質量qos 1 資料分組標記優先順序 2 路由器流量管制 3 路由器排程機制分配頻寬 4 呼叫接納 三 無線網路 無線區域網的組成 1 有固定基礎設施的無線區域網 2 移動自組網路 二 語音 的流量控制 狹義的ip 就是指在ip網路上打 所謂的 ip網路 就是 使用i...

計算機網路3

函式 ssize t recvfrom int sockfd,void buf,size t len,int flags,struct sockaddr src addr,socklen t addrlen ssize t sendto int sockfd,const void buf,size ...

計算機網路 計算機網路的效能

目錄 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...