Skip to content

Latest commit

 

History

History
70 lines (39 loc) · 4.67 KB

输入URL回车.md

File metadata and controls

70 lines (39 loc) · 4.67 KB

浏览器本身是客户端, 当你输入 url 并敲回车时, 首先浏览器会请求 DNS 服务器, 通过 DNS 获取相应的域名对应的 IP ,然后通过 IP 找到 IP 对应的服务器后, 要求建立 TCP 连接, 等浏览器发完 HTTP Request请求, 服务器接收到请求包之后开始处理请求包, 服务端调用自身服务, 返回 HTTP Response(响应) 包, 客户端收到服务端响应后开始渲染这个 Response 的主体 (body), 等收到全部内容后断开与该服务器的连接

web 请求可归纳为:

  1. 浏览器通过DNS找到服务器IP
  2. 客户端通过 TCP/IP 协议建立到服务器的 TCP 连接
  3. 客户端向服务器发送 HTTP 协议请求包, 请求服务器的资源和文档
  4. 服务端向客户端发送 HTTP 应答包, 如果资源包里有动态语言, 服务器会调用动态语言解释引擎解析,并将解析结果返回给客户端
  5. 客户端与服务器断开, 由客户端渲染内容数据

找到服务端 IP 地址

1. 浏览器本身检查

浏览器会先检查自己的DNS缓存(这个时间比较短, 大概只有一分钟, 并且只能容纳1000条), 如果有并且没有过期, 解析结束

2. 计算机系统 DNS 缓存和 hosts 文件检查

如果浏览器里面没有找到对应的条目, 浏览器会寻找系统的 DNS 缓存, 如果有并且没有过期, 解析结束

如果系统也没有, 浏览器会找到 hosts 文件, 查看对应的 IP 如果有, 解析结束

如果修改了 hosts 文件, 浏览器会以 hosts 文件为准

3. 本地区域名服务器解析

如果 hosts 里面也没找到, 浏览器会发起一个 DNS 的系统调用, 向本地的 DNS 服务器请求(使用的 UDP 协议的 53端口发起请求, 这个请求是递归的, 也就是说服务端一定要返回结果)

系统里面网络配置一般都会有 DNS 选项, 也就是在这一步, 浏览器会把域名信息发给这个DNS服务器来获取目标服务器IP地址

4. 根域名服务器解析

如果本地区域名服务器不能解析, 则该域名服务器会代浏览器发送迭代DNS解析请求, 首先会找到根域的 DNS IP 解析地址, 根域的 DNS 服务器返回给本地区域名服务器一个所查询域的主域名服务器(.com, .cn, .org等), 全球只有十三台左右

根域发现这是一个顶级域名, 就给本区域 DNS 服务器返回顶级域名服务器IP(这个我也不知道, 你去找它去)

5. DNS 域名服务器缓存

local DNS server 会缓存这个域名和 IP 的对应关系, 缓存时间由 TTL 控制, 域名解析过程结束

与服务端建立连接

拿到域名IP地址后, 客户端会以一个随机端口(1024< 端口< 65535)向服务端的Web程序 80 端口发起 TCP 连接请求, 这个连接请求经过TCP/IPV4层层的封包, 经过中间的路由设备, 到达服务器网卡, 然后进入到内核 TCP/IP 解析栈, 一层一层的剥开, 还有可能要经过防火墙的过滤, 最终达到 web 程序, 完成连接

三次握手

img

详解:

  1. clint 先发送一个连接试探, ACK=0表示确认号无效, SYN=1表示这是一个连接请求, 同时表示这个数据报不能携带数据, seq=x表示clint自己的序列号,这时clint进入syn_sent状态,表示客户端等待服务端的回复
  2. server监听到连接报文后,如果同意连接, 则向clint发送确认, ACK和SYN都置为1, ack=x+1表示希望获取到下一个数据, 并且x以内的数据已接收,这时server进入syn_rcvd, 表示服务器等待客户端的确认
  3. clint收到确认后, 还需要再次发送确认, 同时携带要发送给服务器的数据, ACK置为1表示这个ack=x+1数据有效(也代表希望收到服务器的返回数据), server收到clint确认后, 连接进入establish状态,表示可以发送http请求了1. clint 先发送一个连接试探, ACK=0表示确认号无效, SYN=1表示这是一个连接请求, 同时表示这个数据报不能携带数据, seq=x表示clint自己的序列号,这时clint进入syn_sent状态,表示客户端等待服务端的回复

为什么是三次握手,而不是四次或两次呢: 因为计算机通信间是靠协议来实现, 如果两个电脑协议不同是无法进行通信的, 三次握手相对于试探对方是否遵守TCP/IP协议,协商完成后即可进行通信

发起Http请求

客户端发送到服务端的http请求消息包括以下格式 请求头,请求行,空行和请求数据

img server 响应:

img

浏览器开始渲染