HTTP生命流程简介


一个请求的生命周期(HTTP请求过程详解、TCP/IP五层网络模型),这里已http三次握手为范例讲解

1、键盘输入

你要访问www.baidu.com,这个过程就涉及到输入设备与计算机的交互了,这个属于物理层

2、请求域名

首先你访问的是www.baidu.com,并不带域名,所以浏览器会自动补全协议头,但是我们知道,很多时候域名会有http和https,它俩的默认端口一个是80,一个是443,在这里,一般都是对应域名的网站做了端口转发,http协议实现了HSTS机制来使得重定向到HTTPS下的域名。所以HTTP到HTTPS这个过程是服务器来完成的,至于浏览器的默认端口一直是80端口

3、IP查找+DNS解析

通过域名去查找IP,先从本地缓存查找,其中本地的hosts文件也绑定了对应IP,若在本机中无法查到,那么就会去请求本地区域的域名服务器(通常是你对应的网络运营商如移动),这个通过网络设置中的LDNS去查找,如果还是没有命中的话,那么就去根域名服务器查找,再往后是顶级域名服务器以及权威域名服务器,解析方式分别有递归解析和迭代解析

20200526205839813 - HTTP生命流程简介

4、路由转发

然后我们通过网卡、路由器、交换机等设备,实现两个IP地址之间的通信。这里用到的主要就是路由转发技术,根据路由表去转发报文。。。还有子网掩码、IP广播等等知识点

5、连接建立:三次握手

  1. 主机a的tcp向主机b的发送请求段(第一次握手),其中同步位SYN=1 ,初始序号seq=x
  2. 一旦包含SYN报文段的IP数据到达主机b,SYN报文段会被其中提取出来。这个时候,主机b的tcp收到连接请求后,如果同意,则发回确认报文段(SYNACK),其中应使SYN = 1,ACK = 1,确认序号ack_seq=x+1,自己选择初始序号seq=y
  3. 主机a接收到主机b的SYNACK报文段后,也要对该链接分配缓存和变量,并且向主机b发送确认报文段,这个报文段是为了确认主机b的同意链接报文段,其中,ACK=1,SYN=0。第三次握手的报文段可以携带从主机a到主机b的应用层报文段
2342 - HTTP生命流程简介

6、服务器处理

LVS架构:这个请求在到达某一个服务器前,可能还要经历重重筛选。反作弊判断,网关过滤,CDN等等。其中大型网站最常见的是LVS架构。LVS分负载调度器,服务器池,共享存储。主要就是为了分布式和高并发场景啦。

23123123 - HTTP生命流程简介

7、代理服务器

接下来,这个请求总算到了服务器了。去监听它的通常是代理服务器,如Nginx、Apache等。监听到之后代理服务器会将请求转发给对应的socket去处理。比如Nginx和PHP的交互就是Nginx将请求转发给fastcgi_pass定义的socket(文件socket或IPsocket),然后通过fastcgi处理,才会真正将请求和参数丢给server,cgi-app

587968 20190211115531102 1029423608 - HTTP生命流程简介

8、程序逻辑处理

这里就到了我们的业务代码处理的地方,然后通过response返回

从连接建立开始后的http工作如下图所示

1090617 20190116110315863 1316196878 - HTTP生命流程简介
  1.   主机A初始seq为1200,滑动窗体为100,向主机B传递数据的过程。
  2. 假设主机B在完全成功接收数据的基础上,那么主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。因此按如下的公式确认 Ack 号: Ack号 = Seq号 + 传递的字节数 + 1 (这是在完全接受成功的情况下)
  3. 主机A获得B传来的ack(1301)后,开始发送seq为1301,滑动窗体为100的数据。
  4. ...

最后加 1 是为了告诉对方要传递的 Seq 号

  • 分享:
评论
还没有评论
    发表评论 说点什么
    蜀ICP备18035236号