一个HTTP请求的生命周期(TCP/IP五层网络模型)

一个请求的生命周期

前言:当我们从电脑上去访问一个网址时,究竟发生了什么?这个问题可能是自己思考或者面试的时候问到,这里我们以访问百度首页为例,进行一个全面的HTTP请求分析。

核心概念

计算机网络核心结构,就是TCP/IP五层网络模型OSI七层模型是将应用层分为了三层)
一个HTTP请求的生命周期(TCP/IP五层网络模型)_第1张图片
以及,每一层对应的协议
一个HTTP请求的生命周期(TCP/IP五层网络模型)_第2张图片

始于本地

  • 键盘输入:你要访问www.baidu.com,自然需要在浏览器地址栏中使用键盘输入(正常情况下),这个过程就涉及到输入设备与计算机的交互了,这个属于物理层,这里就不探讨了(==其实是我不会)
  • 请求域名:首先你访问的是www.baidu.com,并不带域名,所以浏览器会自动补全协议头。但是我们知道,很多时候域名会有http和https,它俩的默认端口一个是80,一个是443,在这里,一般都是对应域名的网站做了端口转发,http协议实现了HSTS机制来使得重定向到HTTPS下的域名。所以HTTP到HTTPS这个过程是服务器来完成的,至于浏览器的默认端口一直是80端口

路由转发

  • IP查找:目前我们只知道了带协议类型的域名,那么是如何到具体的服务器的呢?我们知道,对于因特网内每个公有地址IP都是唯一的(局域网内不一定),域名相当于IP的别名,因为我们无法去记住一大堆无意义的IP地址,但如果用一堆有意义的字母组成,大家就能快速访问对应网站。
  • DNS解析:通过域名去查找IP,先从本地缓存查找,其中本地的hosts文件也绑定了对应IP,若在本机中无法查到,那么就会去请求本地区域的域名服务器(通常是你对应的网络运营商如移动),这个通过网络设置中的LDNS去查找,如果还是没有命中的话,那么就去根域名服务器查找,这里有所有因特网上可访问的域名和IP对应信息(根域名服务器全球共13台)。至少到了这里,我们肯定能查找对应的IP了,要不就是这个域名不对。
  • 路由转发:然后我们通过网卡、路由器、交换机等设备,实现两个IP地址之间的通信。这里用到的主要就是路由转发技术,根据路由表去转发报文。。。还有子网掩码、IP广播等等知识点。这里就不多做介绍了,计算机网络里有详细准确的概念~~

连接建立

  • 三次握手:HTTP的底层基于TCP/IP协议,TCP连接的建立过程少不了三次握手。
    一个HTTP请求的生命周期(TCP/IP五层网络模型)_第3张图片
  1. 第一次握手:客户端主动发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认
  2. 第二次握手:服务器收到SYN包并确认,发送SYN+ACK到客户端,服务器进入SYN_RECV状态
  3. 第三次握手:客户端收到SYN+ACK包,发送ACK确认连接,发送完毕后客户端和服务端进入ESTABLISHED状态,完成三次握手
  • 数据发送:建立完连接后,TCP才能真正的开始传输数据==。TCP会依次、有序的发送一定大小的报文,其中包括了超时重传、拥塞窗口、慢开始快重传等等概念。总之加了很多机制,用来保证数据包的完整、有序。当然以上都只是传输层中TCP做的事,实现上在应用层也加了很多机制。
  • HTTPS一个HTTP请求的生命周期(TCP/IP五层网络模型)_第4张图片
    大家请看这张图,一个完整的HTTPS由以上众多模块组成。
    a. Queueing:请求等待时间
    b. Stalled: 从TCP建立连接耗时
    c. DNS Lookup:DNS解析
    d. Initial connection:初始化连接
    e. SSL:SSL就是HTTPS的重头戏,相比于HTTP建立于TCP基础上的明文传输,HTTPS基于SSL/TLS,而SSL/TLS又是基于TCP/IP,也就是说SSL/TLS基于TCP基础上再做了一层封装,对内容进行加密。对HTTPS如何实现加密感兴趣的同学可以取看看相关的话题
    f. TTFB:客户端发起报文到服务器接收到第一个报文的耗时
    g. Content Download:服务器响应网页内容接收时间

GOOGLE原文解释 文档地址需

Queueing The browser queues requests when:

  •  There are higher priority requests.
    
  • There are already six TCP connections open for this origin, which is the limit. Applies to HTTP/1.0 and HTTP/1.1 only.
    
  • The browser is briefly allocating space in the disk cache
    

Stalled The request could be stalled for any of the reasons described in Queueing.
DNS Lookup The browser is resolving the request’s IP address.
Proxy negotiation The browser is negotiating the request with a proxy server.
Request sent The request is being sent.
ServiceWorker Preparation The browser is starting up the service worker.
Request to ServiceWorker The request is being sent to the service worker.
Waiting (TTFB) The browser is waiting for the first byte of a response. TTFB stands for Time To First Byte. This timing includes 1 round trip of latency and the time the server took to prepare the response.
Content Download The browser is receiving the response.
Receiving Push The browser is receiving data for this response via HTTP/2 Server Push.
Reading Push The browser is reading the local data previously received.

服务器处理

  • LVS架构:这个请求在到达某一个服务器前,可能还要经历重重筛选==。反作弊判断,网关过滤,CDN等等。其中大型网站最常见的是LVS架构。LVS分负载调度器,服务器池,共享存储。主要就是为了分布式和高并发场景啦。
    LVS文档
    一个HTTP请求的生命周期(TCP/IP五层网络模型)_第5张图片
  • 代理服务器:接下来,这个请求总算到了服务器了。去监听它的通常是代理服务器,如Nginx、Apache等。监听到之后代理服务器会将请求转发给对应的socket去处理。比如Nginx和PHP的交互就是Nginx将请求转发给fastcgi_pass定义的socket(文件socket或IPsocket),然后通过fastcgi处理,才会真正将请求和参数丢给server,cgi-app。。。

程序处理

接下来就是代码去处理具体的逻辑,然后通过response返回啦~~

一个HTTP请求的生命周期(TCP/IP五层网络模型)_第6张图片

emmm,接下去的下次再说吧。。

请求:我活着真不容易-.-

你可能感兴趣的:(计算机网络)