一、DNS域名解析
用户输入一个URL(统一资源定位符)或点击一个链接,这里以访问www.baidu.com为例。
1、用户在浏览器中输入www.baidu.com,浏览器先查找自己的缓存,如果存在百度的缓存可直接查找。如果不存在
2、查找主机的hosts文件,若hosts文件中存在直接通过主机访问。如果不存在
3、查找本机首选本地DNS缓存服务器,如果存在百度的地址,返回给主机,再通过主机访问百度服务器。若不存在
4、本地DNS缓存服务器会去寻找 .(根域),根域不存在具体地址,会返回 .com 一级域
5、本地DNS去找 .com 一级域,返回 baidu.com
6、本地DNS缓存服务器会去寻找 baidu.com 解析服务器,将 www.baidu.com 的IP地址返回给本地DNS缓存服务器。
7、本地DNS缓存服务器会先记录下百度的IP地址,然后返回给主机 。
8、主机在接收到返回的IP地址时,会直接去寻找百度的服务器。
二、连接
1、主机会产生一个随机端口(1000--65635)和服务器的80端口建立连接(三次握手)
- 刚开始客户端与服务器处于关闭状态
- 客户机向服务器发送请求连接的报文,同步位SYN=1,序列号seq=x,期待序列号为x+1。此时客户端处于同步已发送状态。
- 服务器接收到来自客户端的请求之后,确认收到请求ACK=1,确认序列号ACK=x+1。服务器向客户端发送请求连接的请求SYN=1,序列号seq=y,期待序列号y+1,此时服务器处在同步已收到状态。
- 客户端接收到来自服务器的请求,确认收到ACK=1,确认序列号ACK=y+1,序列号seq=x+1,此时客户端与服务器处于已连接状态
2、确认连接后,客户端向服务器发送包含头部、主体的HTTP GET请求
3、服务器向客户端发送包含头部、主体、正文的HTTP响应
4、客户机在接受到内容后经浏览器显示给用户
三、断开连接
1、当客户机关闭浏览器页面时(四次挥手)
- 开始时客户端与服务器处于连接状态
- (1)客户端向服务器发送请求释放连接的报文段FIN=1,序列号seq=w,期待序列号w+1,此时客户端处于终止等待1状态。
- (2)客户端接收到来自客户端的请求,确认收到ACK=1,确认序列号seq=w+1,此时服务器处于关闭等待状态,服务器向客户端做出回应,此时客户端处于终止等待2状态
- (3)当服务器将客户端的请求全部回应完后才开始请求断开连接,服务器向客户端发送请求终止报文段FIN=1,序列号seq=v,期待序列号为v+1,此时服务器最后等待客户端的接收。
- (4)客户端接收到来自服务器的请求,确认收到ACK=1,确认序列号ACK=v+1,此时客户端处在时间等待状态,客户端向服务器作出回应,服务器收到回应后会立即关闭,客户端需等待两个最长报文段寿命的时间再关闭
- 客户端与服务器处于关闭状态,断开来连接。