套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...
CGI指的不是CGI程序本身,而是連接程序與Web服務(wù)器程序的接口規(guī)格。
服務(wù)器概覽
服務(wù)器可以分為很多種類,其硬件和操作系統(tǒng)與客戶端是有所不同的。但是,網(wǎng)絡(luò)相關(guān)的部分,如網(wǎng)卡、協(xié)議棧、Socket庫等功能和客戶端卻并不二致。不過他們二者調(diào)用的Socket組件不同。
服務(wù)器程序的結(jié)構(gòu):程序分成兩個(gè)模塊,即等待連接模塊和負(fù)責(zé)與客戶端通信的模塊。當(dāng)服務(wù)器程序啟動(dòng)并讀取配置文件完成初始化操作后,就會(huì)運(yùn)行等待連接模塊。這個(gè)模塊會(huì)創(chuàng)建套接字,然后進(jìn)入等待連接的暫停狀態(tài)。
每次有新的客戶端發(fā)起連接時(shí),都會(huì)啟動(dòng)一個(gè)新的客戶端通信模塊,因些與客戶端是一對一的關(guān)系。啟動(dòng)新的程序會(huì)花費(fèi)一點(diǎn)時(shí)間,一般會(huì)事先啟動(dòng)幾個(gè)客戶端通信模塊。
服務(wù)器端的套接字和端口號(hào):服務(wù)器上可能存在多個(gè)端口號(hào)相同的套接字,但客戶端有套接字都是對不同的端口號(hào)的,因此我們可以通過客戶端的端口號(hào)來確認(rèn)服務(wù)器上的套接字。
不過,使用不同端口號(hào)的規(guī)則僅限一臺(tái)客戶端的內(nèi)部,當(dāng)有多個(gè)客戶端連接時(shí),它們之間端口號(hào)是可能重復(fù)的。因此,我們還必須要加上客戶端的IP地址才能進(jìn)行判斷。
使用描述符來指代套接字的原因如下:等待連接的套接字中沒有客戶端的IP地址和端口號(hào)使用描述符這一信息比較簡單服務(wù)器的接收操作
網(wǎng)卡將接收到的信號(hào)轉(zhuǎn)換成數(shù)字的信息,網(wǎng)卡的MAC模塊將網(wǎng)絡(luò)包從信號(hào)還原為數(shù)字信息,校驗(yàn)FCS并存入緩沖區(qū)。網(wǎng)卡驅(qū)動(dòng)會(huì)根據(jù)MAC頭部判斷協(xié)議類型,并將包交給相應(yīng)的協(xié)議棧。
協(xié)議棧的IP模塊會(huì)檢查IP頭部(1)判斷是不是發(fā)給自己的;(2)判斷網(wǎng)絡(luò)包是否經(jīng)過分片;(3)將包轉(zhuǎn)交給TCP模塊或UDP模塊。
如果接收的是發(fā)起連接的包,則TCP模塊會(huì)(1)確認(rèn)TCP頭部的控制位SYN;(2)檢查接收方的端口號(hào);(3)為相應(yīng)的等待連接套接字復(fù)制一個(gè)新的副本;(4)記錄發(fā)送方IP地址和端口號(hào)待信息。
收到數(shù)據(jù)包時(shí),TCP模塊會(huì)(1)根據(jù)收到的包的發(fā)送方IP地址、發(fā)送方端口號(hào)、接收方IP地址、接收方端口號(hào)找到相對應(yīng)的套接字;(2)將數(shù)據(jù)塊拼合起來并保存在接收緩沖區(qū)中;(3)向客戶端返回ACK.
Web服務(wù)器程序解釋請求消息并作出響應(yīng)
將請求的URI轉(zhuǎn)換為實(shí)際的文件名。如果URI指定的文件內(nèi)容為HTML文檔或圖片,那么只要直接將文件內(nèi)容作為響應(yīng)消息返回客戶端就可以了。
但URI指定的文件內(nèi)容不僅限于HTML文檔,也有可能是一個(gè)程序(例cgi程序)。在這個(gè)情況下,服務(wù)器不會(huì)直接返回文件內(nèi)容,而是會(huì)運(yùn)行這個(gè)程序,然后將程序輸出的數(shù)據(jù)返回給客戶端。
如果判斷為程序文件,Web服務(wù)器會(huì)委托操作系統(tǒng)運(yùn)行這個(gè)程序,然后從請求消息中取出數(shù)據(jù)并交給運(yùn)行的程序。運(yùn)行的程序收到數(shù)據(jù)后會(huì)進(jìn)行一系列處理,并將輸出的數(shù)據(jù)返回給Web服務(wù)器。
web服務(wù)器還可以檢查事先設(shè)置的一些規(guī)則,并根據(jù)規(guī)則允許或禁止訪問。這種根據(jù)規(guī)則判斷是否允許訪問的功能稱為訪問控制。
訪問控制規(guī)則主要有3種:客戶端的IP地址、客戶端的域名、用戶名和密碼。
瀏覽器接收響應(yīng)消息并顯示內(nèi)容
只要根據(jù)數(shù)據(jù)類型調(diào)用用于顯示內(nèi)容的程序,將數(shù)據(jù)顯示出來就可以了。對于HTML文檔、純文本、圖片這些基本數(shù)據(jù)類型,瀏覽器自身具有顯示這邊內(nèi)容的功能,因此由瀏覽器自身負(fù)責(zé)顯示。
總結(jié)
以上是生活随笔為你收集整理的套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python单行箭头_python –
- 下一篇: 三菱plc编程实例3000_三菱PLC十