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