浏览器输入url过程 --- 详细

[toc]

1. DHCP分配ip地址

  • 新主机,尚未分配ip地址,就会采取DHCP协议分配ip地址
  • DHCP协议基于UDP

DHCP的执行过程

  1. 客户端广播发送discover发现报文
  2. 多个DHCP服务器为客户端分配IP地址并广播
  3. 客户端选择一个DHCP服务器的响应,发request请求广播全网
  4. 其他DHCP服务器收到该消息会收回原分配的地址,选中的DHCP服务器会广播一条ACK消息
  5. 客户端收到ACK消息,将IP绑定到网卡

2. ARP地址解析

  • 将ip地址解析为mac地址
  • 网络层

ARP协议过程

  1. 主机A会查找本地缓存是否有主机B的MAC时
  2. 主机A广播ARP数据包
  3. 主机B收到后单播告诉A其MAC地址
  4. 主机A写入此映射到ARP高速缓存

3. DNS域名解析

  • 将域名解析为ip地址
  • 基于UDP

域名解析过程

  1. 浏览器会检查缓存中是否有对应映射关系
  2. 查找本地缓存是否有映射,没有向本地域名服务器请求
  3. 本地域名服务器没有,请求跟域名服务器
  4. 请求顶级域名服务器
  5. 请求权威域名服务器,得到ip地址返回

4. TCP三次握手

  • 前两个阶段都会消耗1个序号
  • 三次握手是为了保证双方都收到了彼此确认连接的消息。第三次握手防止失效请求到达服务端

三次握手过程

  1. 服务端处于监听状态,等待接受客户端的连接请求
  2. 客户端向服务端发送连接请求报文,SYN=1,选择一个初始序号x
  3. 服务端收到连接请求报文,如果同意连接,发送客户端确认连接报文。SYN=1,ACK=1,确认号x+1,选择初始序号y
  4. 客户端收到服务端发送的确认连接报文,发送确认给B,确认号y+1,序号x+1
  5. 服务端收到客户端的确认报文,建立连接

5. 浏览器生成http请求

  • 发送给http服务器请求
  • http请求报文,包括请求

    1. 请求行(request line)
    2. 请求头部(header)
    3. 空行
    4. 请求数据

6. 服务端解析http请求,返回相应结果

  • http服务器生成响应报文,发还主机
  • HTTP响应报文包括 响应行响应头空行响应体

7. TCP四次挥手

  • FIN报文段会消耗一个序号
  • 服务端会先结束连接。客户端会等待2个MSL再结束连接

四次挥手过程

  1. 客户端想关闭连接,向服务端发送连接释放报文,停止发送数据。FIN=1,序号是 u
  2. 服务端收到连接释放报文,发出确认报文同意连接释放。ACK=1,确认号是 u+1 (此时服务端处于CLOSE_WAIT状态)
  3. 客户端收到服务器的确认请求后,此时,客户端等待服务器发送连接释放报文,进入终止状态
  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,序号w
  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态

8. 浏览器渲染

  • 解析html页面,生成DOM树,解析css,生成渲染树
  • 浏览器布局渲染,计算css的样式,将最终页面传递给用户

你可能感兴趣的