初见

<6>web服务的数据收发操作

2020-05-05  本文已影响0人  August________

<6>web服务的数据收发操作

  1. 服务器程序的结构

    1. 连接模块
    2. 负责与客户端通信的模块
  2. 服务端的嵌套字和端口号

    1. 客户端调用Socket库阶段

      1. 创建嵌套字
      2. 用管道连接服务器端的嵌套字
      3. 收发阶段
      4. 断开管道并删除嵌套字
    2. 服务端调用Socket库阶段

      1. 创建嵌套字
      2. 将嵌套字设置为等待连接状态
      3. 接受连接
      4. 收发阶段
      5. 断开管道并删除嵌套字
    3. 应用程序和协议栈之间是使用描述符来代替嵌套字

      1. 等待连接的嵌套字中没有客户端IP地址和端口号
      2. 使用描述符这种信息比较简单

6.2服务器的收发操作

2020年5月5日

21:00

  1. 网卡将接收到的信号转换成数字信息

    1. 网卡的MAC模块将网络包从信号还原成数字信息,校验FCS并存入缓冲区
    2. 网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈
  2. IP模块的接收操作

    1. 协议栈的IP模块会检查IP头部

      1. 判断是不是发给自己的
      2. 判断网络包是否经过分片
      3. 将包转交给TCP模块或者UDP模块
  3. TCP模块如何处理连接包

    1. 如果收到的是发起连接的包,TCP模块

      1. 确认TCP头部的控制位SYN
      2. 检查接收方端口号
      3. 为相应的等待连接嵌套字复制一个新的副本
      4. 记录发送方的IP地址和端口号等信息
  4. TCP模块如何处理数据包

    1. 收到数据之后,TCP模块

      1. 根据收到的包的发送方IP地址、发送方的端口号、接收方的IP地址和接收方的端口号找到对应的嵌套字
      2. 将数据块拼合并保存在接受缓冲区中
      3. 向客户端返回ACK
  5. TCP模块的断开操作

    1. 服务器调用Socket库的close,生成一个控制位FIN为1 的TCP头部

6.3web服务器程序解析请求消息并作出响应

2020年5月5日

21:30

  1. 将请求的URI转化为实际的文件名

    1. web服务器公开的目录其实并不是磁盘上的实际目录,而是虚拟目录
    2. URI中写的就是虚拟目录的路径名
  2. 运行CGI程序

    1. 访问的文件为程序文件,Web服务器会委托给操作系统运行这个程序

      1. GET:将URI后面的参数传递给程序
      2. POST:将消息中的数据传递给程序
  3. web服务器的控制访问

    1. web服务器的控制访问规则

      1. 客户端的IP地址
      2. 客户端域名
      3. 用户名和密码
  4. 返回响应消息

    1. web服务器调用Socket库中write,将响应消息交给协议栈

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

2020年5月5日

21:46

  1. 通过响应数据类型并判断其中的内容

    1. 根据响应消息开头的Content-Type头部的值进行判断数据类型
    1. 消息的Content-Type定义数据类型

[图片上传失败...(image-fb553c-1588686707760)]

上一篇下一篇

猜你喜欢

热点阅读