套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...

CGI指的不是CGI程序本身,而是连接程序与Web服务器程序的接口规格。

服务器概览

服务器可以分为很多种类,其硬件和操作系统与客户端是有所不同的。但是,网络相关的部分,如网卡、协议栈、Socket库等功能和客户端却并不二致。不过他们二者调用的Socket组件不同

服务器程序的结构:程序分成两个模块,即等待连接模块负责与客户端通信的模块。当服务器程序启动并读取配置文件完成初始化操作后,就会运行等待连接模块。这个模块会创建套接字,然后进入等待连接的暂停状态。

每次有新的客户端发起连接时,都会启动一个新的客户端通信模块,因些与客户端是一对一的关系。启动新的程序会花费一点时间,一般会事先启动几个客户端通信模块。

f9da843056fd1c982068e3dd6792804c.png

服务器端的套接字和端口号:服务器上可能存在多个端口号相同的套接字,但客户端有套接字都是对不同的端口号的,因此我们可以通过客户端的端口号来确认服务器上的套接字。

不过,使用不同端口号的规则仅限一台客户端的内部,当有多个客户端连接时,它们之间端口号是可能重复的。因此,我们还必须要加上客户端的IP地址才能进行判断。

使用描述符来指代套接字的原因如下:等待连接的套接字中没有客户端的IP地址和端口号使用描述符这一信息比较简单
167503e0da4651e4be4a7df902599c9f.png

服务器的接收操作

网卡将接收到的信号转换成数字的信息,网卡的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.

3a114e02fc75dbf1136affc0996aa88e.png

Web服务器程序解释请求消息并作出响应

将请求的URI转换为实际的文件名。如果URI指定的文件内容为HTML文档或图片,那么只要直接将文件内容作为响应消息返回客户端就可以了。

但URI指定的文件内容不仅限于HTML文档,也有可能是一个程序(例cgi程序)。在这个情况下,服务器不会直接返回文件内容,而是会运行这个程序,然后将程序输出的数据返回给客户端。

如果判断为程序文件,Web服务器会委托操作系统运行这个程序,然后从请求消息中取出数据并交给运行的程序。运行的程序收到数据后会进行一系列处理,并将输出的数据返回给Web服务器

web服务器还可以检查事先设置的一些规则,并根据规则允许或禁止访问。这种根据规则判断是否允许访问的功能称为访问控制

访问控制规则主要有3种:客户端的IP地址、客户端的域名、用户名和密码

浏览器接收响应消息并显示内容

只要根据数据类型调用用于显示内容的程序,将数据显示出来就可以了。对于HTML文档、纯文本、图片这些基本数据类型,浏览器自身具有显示这边内容的功能,因此由浏览器自身负责显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值