http协议通信和nginx架构

网络协议通信原理

1、浏览访问网址的过程

DNS解析:

  • 缓存,
  • 缓存没有再查DNS服务器,
  • DNS服务器也没有的会递归到根上查询
  • 得到IP地址

CDN就近原则

和远程网站的服务器建立连接,TCP连接

  • 三次握手
  • 四次挥手

发送HTTP协议请求,回应http响应

  • 通常是回应的html的网页文件,计算机将其下载后通过浏览器渲染,解释后就能看到网页了
  • 如果有其他资源会再次发起TCP连接访问进行下载后再次渲染、解释
1 DNS
2 CDN
3 TCP
4 Web服务器处理
1)建立连接
2)接收清求
3)处理请求 GET、POST等方法
4)获取资源
5)构建响应报文
6)发送响应
7)记录日志
5 浏览器接收响应报文,进行页面渲染

2、http请求访问的完整过程

1、建立连接:接收或拒绝连接请求

2、接收请求:接收客户端请求报文中对某资源的一次请求的过程

Web访问响应模型(Web I/O)

在这里插入图片描述

  • 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
  • httpd不支持高并发,C10K,并发访问1万的瓶颈

3、处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

4、访问资源: 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

5、构建响应报文:一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

  • 响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
    • 描述了响应主体MIME类型的Content-Type首部
    • 描述了响应主体长度的Content-Length
    • 实际报文的主体内容
  • URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
  • MIME类型: Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
  • 魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
  • 显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
  • 类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)“最好”

6、发送响应报文:Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

3、I/O 模型相关概念

同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

  • 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成
  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态,被调用者主动返回运行状态

阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。
  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。
3.1、网络 I/O 模型

阻塞型、非阻塞型、复用型、信号驱动型、异步

3.1.1、阻塞型(blocking IO)

在这里插入图片描述

应用进程发起recvfrom系统调用到内核,由用户空间转到内核空间,内核将数据报文拷贝到内存中执行,完成后返回结果到用户空间

优点:程序简单,在阻塞等待数据期间进程/线程挂起,基本不会占用 CPU 资源

缺点:每个连接需要独立的进程/线程单独处理,当并发请求量大时为了维护程序,内存、线程切换开销较大,apache 的prefork使用的是这种模式。

3.1.2、非阻塞型 I/O 模型 (nonblocking IO)

在这里插入图片描述

应用进程发起recvfrom系统调用到内核获取资源的请求时立即返回,在没有读取到任何数据期间应用进程会轮询发起IO请求询问结果

3.1.3、信号驱动式 I/O 模型 (signal-driven IO)

在这里插入图片描述

应用进程发起recvfrom系统调用到内核获取资源的请求时立即返回,在内核完成数据准备完成之前,不用等待该请求的完成也不用轮询的去问,内核在数据就绪时,发送信号通知进程,数据拷贝到用户空间时还是会阻塞,但时间很短

3.1.4、异步 I/O 模型 (asynchronous IO)

在这里插入图片描述

应用进程发起recvfrom系统调用到内核获取资源的请求时立即返回,不用等待IO操作的完成,是由内核通知用户进程I/O操作何时完成

3.1.5、I/O 多路复用型 (I/O multiplexing)

多路复用IO指一个线程可以同时(实际是交替实现,即并发完成)监控和处理多个文件描述符对应各自的IO,即复用同一个线程

一个线程之所以能实现同时处理多个IO,是因为这个线程调用了内核中的SELECT,POLL或EPOLL等系统调用,从而实现多路复用IO

应用程序不再直接调用内核,而是调用了内核中的SELECT,POLL或EPOLL等系统调用,类似于快递站

在这里插入图片描述

依然会有阻塞现象,但不是阻塞在内核中,而是阻塞在SELECT调用

nginx主要是使用epoll工作机制,apache是使用select工作机制

select会不断遍历IO操作进行监测是否完成,完成则将其返回用户空间,占据资源

epoll采用通知性机制,不用遍历监测IO操作是否完成,而是只要内核里的IO操作完成,就会主动将完成结果通知用户,高并发处理

Nginx功能介绍

  • 静态的web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议的反向代理
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理)
  • imap4/pop3协议的反向代理,邮件
  • 用作缓存
简单架构

在这里插入图片描述

一个主进程开了若干个子进程,每个子进程为用户进行服务,每个子进程同时可以支持很多个用户的连接,没有线程

web请求处理机制

  • 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。
  • 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程和此客户端进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。内部存在很多模块
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值