通过域名访问服务器过程

1.域名解析

  • 首先你在客户端(浏览器)输入一个域名:www.baidu.com,然后就要对这个域名进行解析。客户端向本地的DNS服务器发起一个请求,本地DNS服务器 首先会查看缓存记录,就是域名与ip的对应关系。如果缓存中有该条记录(有输入的域名),就会将对应ip返回给客户端。
  • 本地DNS服务器缓存中没有记录,本地DNS服务器就会向根DNS服务器发起请求,根DNS服务器中有域名与ip的对应关系记录,如果根DNS服务器中有该条记录(有输入的域名),就会将对应ip返回给客户端。
  • 根DNS服务器中没有域名与ip的对应关系记录,它会返回给本地DNS服务器一条消息,你可以向 .com域服务器发请求。
  • .com域服务器收到请求后也不会直接返回域名与ip的对应关系。而是将域名的解析器的地址告诉本地DNS服务器,本地DNS服务器收到这条消息后,就向域名解析服务器发起请求,域名解析服务器将查询结果返回给本地DNS服务器。

(注:本地DNS服务器这时候要做两件事,一是将结果返回给客户端,另一件事更新本地缓存,将这个记录保存在缓存中)

2.建立TCP链接(三次握手)

  • 第一次:客户端发送初始序号x和syn=1请求标志

  • 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1

  • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1
    通过域名访问服务器过程

3.发送http请求报文

  • TCP建立连接成功,浏览器向web服务器发送一条HTTP请求报文(请求行、请求头部、空行、请求数据)

空行的作用是通过一个空行,告诉服务器请求头部到此为止。

通过域名访问服务器过程

4.接收http响应报文

  • 请求后返回HTTP响应报文(响应行、响应头、空行、响应体)

空行的作用是通过一个空行,告诉服务器请求头部到此为止。

通过域名访问服务器过程

5.断开TCP连接(四次挥手)

  • 第一次挥手:客户端发出释放FIN=1,自己***seq=u,进入FIN-WAIT-1状态
  • 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的***seq=v,进入CLOSE-WAIT状态
  • 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
  • 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态
    通过域名访问服务器过程