首先在浏览器中输入一个网址(www…com)点击回车。
1:DNS域名解析,把网址转换为IP地址。
1.首先去查找浏览器是否有这个DNS缓存,如果有缓存就直接返回IP,然后DNS解析完成。没有就进行下一步的逐级查询。
2.浏览器没有,然后去查询本地操作系统是否有DNS缓存,有就直接返回IP,没有就再继续查询。
3.然后再查询本地DNS服务器是否有这个网址的DNS缓存,有就返回IP,没有就再继续查询。
4.查询根域名DNS服务器,是否有这个网址的DNS缓存,有就返回IP,没有就再继续查询。
5.最后就是查找com顶级域名服务器,是否有这个网址的DNS缓存,有就返回IP。
6.最后把查询的结果告诉客户端。
2.建立TCP连接(三次握手)
1.客户端得到DNS解析到的域名IP,然后和目标服务器建立TCP连接。
2.进行三次握手:
第一次:客户端(浏览器)给服务器发出请求连接报文(SYN,sek)。
第二次:服务器收到了客户端发送过来的请求报文,然后这时候服务端就知道了客户端具有发送信息的能力,然后服务器就给客户端发送响应报文(SYN,ACK.sek)。
第三次:客户端接收到了服务端的报文,然后这时候客户端就知道服务端具有发送和接收的能力,客户端再给服务端发送一次报文(SYN,ACK,sek),然后服务端接收到报文,服务端就知道客户端也具有接收和发送的能力,然后就可以进行数据的传递了。
三次握手可以防止资源的浪费。
例如:客户端给服务端发送一次请求连接报文,这时候因为网络原因,服务端没有收到,然后客户端又一次发送了请求,第二次收到了,然后服务器页做了响应,最后客户端页得到了响应,完成后就关闭了连接,然后这时候第一次的请求到达了服务端,就建立新的连接了,因为没有第三次握手,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。
3.客户端给服务端发送HTTP请求
客户端设置请求方式(POST、GET…),Keep-alive,是否携带本用户系统和浏览器的信息。然后就是Cookie,如果是第一次访问的话,这时候服务器会创建Cookie,然后服务器响应的时候,就会把Cookie返回给客户端,客户端再进行保存,第二次访问该网站的时候就会携带Cookie。
4.服务端发出HTTP响应
服务端接收到请求报文后,然后进行数据的接收和处理,然后返回相应的数据。
5.浏览器解析,然后渲染界面。
6.释放连接(四次挥手)
第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号,主动释放连接,进入终止等待状态1。
第二次挥手:服务端收到FIN报文,然后发送ACK报文,然后将服务器上未传送完的数据发送完,进入关闭等待。这时候处于半关闭状态,意思就是客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然能够接受。(服务器接收到客户端的释放连接报文,然后发出确认收到报文)
第三次:服务器把最后的数据发送完后,服务器就给客户端发送释放连接报文。
第四次:客户机接收到报文后,发出确认,然后等待一段时间后,释放TCP连接。