<6>web服务的数据收发操作
-
服务器程序的结构
- 连接模块
- 负责与客户端通信的模块
-
服务端的嵌套字和端口号
-
客户端调用Socket库阶段
- 创建嵌套字
- 用管道连接服务器端的嵌套字
- 收发阶段
- 断开管道并删除嵌套字
-
服务端调用Socket库阶段
- 创建嵌套字
- 将嵌套字设置为等待连接状态
- 接受连接
- 收发阶段
- 断开管道并删除嵌套字
-
应用程序和协议栈之间是使用描述符来代替嵌套字
- 等待连接的嵌套字中没有客户端IP地址和端口号
- 使用描述符这种信息比较简单
-
6.2服务器的收发操作
2020年5月5日
21:00
-
网卡将接收到的信号转换成数字信息
- 网卡的MAC模块将网络包从信号还原成数字信息,校验FCS并存入缓冲区
- 网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈
-
IP模块的接收操作
-
协议栈的IP模块会检查IP头部
- 判断是不是发给自己的
- 判断网络包是否经过分片
- 将包转交给TCP模块或者UDP模块
-
-
TCP模块如何处理连接包
-
如果收到的是发起连接的包,TCP模块
- 确认TCP头部的控制位SYN
- 检查接收方端口号
- 为相应的等待连接嵌套字复制一个新的副本
- 记录发送方的IP地址和端口号等信息
-
-
TCP模块如何处理数据包
-
收到数据之后,TCP模块
- 根据收到的包的发送方IP地址、发送方的端口号、接收方的IP地址和接收方的端口号找到对应的嵌套字
- 将数据块拼合并保存在接受缓冲区中
- 向客户端返回ACK
-
-
TCP模块的断开操作
- 服务器调用Socket库的close,生成一个控制位FIN为1 的TCP头部
6.3web服务器程序解析请求消息并作出响应
2020年5月5日
21:30
-
将请求的URI转化为实际的文件名
- web服务器公开的目录其实并不是磁盘上的实际目录,而是虚拟目录
- URI中写的就是虚拟目录的路径名
-
运行CGI程序
-
访问的文件为程序文件,Web服务器会委托给操作系统运行这个程序
- GET:将URI后面的参数传递给程序
- POST:将消息中的数据传递给程序
-
-
web服务器的控制访问
-
web服务器的控制访问规则
- 客户端的IP地址
- 客户端域名
- 用户名和密码
-
-
返回响应消息
- web服务器调用Socket库中write,将响应消息交给协议栈
6.4浏览器接受响应消息并显示内容
2020年5月5日
21:46
-
通过响应数据类型并判断其中的内容
- 根据响应消息开头的Content-Type头部的值进行判断数据类型
- 消息的Content-Type定义数据类型
[图片上传失败...(image-fb553c-1588686707760)]
网友评论