1.DNS解析,建立TCP连接,发送http请求
DNS解析
- 首先会搜索浏览器自身的DNS缓存,(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身缓存中是否有对应的条目,并且没有过期,如果有且没有过期,解析到此结束
- 如果浏览器缓存没有,浏览器会搜索操作系统自身的DNS缓存,如果存在并没有过期,解析到此结束。
- 如果操作系统自身没有,会向DNS服务器发起域名解析请求
TCP连接
客服端的请求送达服务端,首先是建立TCP连接
-
Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包),这时候Client进入syn_sent状态,表示客户端等待服务器的回复
-
Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq = y 表示Server 自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。
-
Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个包),Client自己的序号seq= x + 1(表示这就是我的第1个包,相对于第0个包来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。
发送HTTP请求
HTTP请求/响应报文结构
HTTP请求报文
一个H