前言
大家经常会在网上冲浪,那么当我们打开浏览器,在地址栏中输入网址,然后敲击回车的过程中究竟经历了哪些操作呢?
过程分解
- 在应用层利用域名系统DNS将域名解析成IP地址
- 在传输层根据三次握手与指定服务器建立连接
- 根据HTTP协议进行客户端与浏览器之间的"请求与响应"过程
- 根据四次挥手与指定服务器断开连接
详细过程
就拿百度浏览器来说,当我们打开浏览器,在地址栏中输入"www.baidu.com",然后单击回车键,就会跳转至百度的首页:
在我们完成这一系列的操作过程中,首先会发生域名的转化
一、在应用层利用域名系统DNS将域名解析成IP地址
在互联网中,IP地址用于唯一标识一个网络接口,每台可以联网的计算机都有一个独有的IP地址,当我们在访问某个网址时,可以利用这个网址的IP地址进行访问
可以利用工具通过nslookup+域名来查看对应IP地址:
Microsoft Windows [版本 10.0.19044.2006]
(c) Microsoft Corporation。保留所有权利。
C:\Users\baby>nslookup www.baidu.com
服务器: UnKnown
Address: 192.168.254.1
非权威应答:
名称: www.a.shifen.com
//IP地址
Addresses: 14.215.177.38
14.215.177.39
Aliases: www.baidu.com
C:\Users\baby>
可以发现IP地址是一串机械化的数字字符串,因此要想每次凭借IP地址来访问网址是非常困难的,所有就提出了**域名**的概念。域名是用点分隔一个具有IP地址组织特色的名称,在我们通过域名访问某个网址时,浏览器会先通过域名解析服务器DNS将地址栏中输入的域名翻译成对应的IP地址,然后通过IP地址进行访问。
二、在传输层根据三次握手与指定服务器建立连接
一台计算机要想连入互联网就必须遵循TCP/IP协议,而TCP协议是面向连接的,所以在进行访问操作之前,还必须与指定服务器建立连接,这时就要通过TCP协议的规定:**三次握手**来与服务器建立连接。三次握手的过程如下:
第一次握手:客户端首先向服务器发送一个请求连接的报文段,客户端从CLOSED状态变为SYN-SENT状态,报文段的TCP首部内容为:同步SYN=1、确认ACK=0、seq=x;seq=x表示当前报文段所传送数据的第一个字节的序号为x
第二次握手:服务器在接受到客户端的报文段后,根据TCP首部内容可判断当前报文段为一个主动连接的数据包,若服务器同意连接,则回应报文段,服务器从LISTEN状态变为SYN-RCVD状态,回复的报文段的TCP首部内容为:同步SYN=1、确认ACK=1、seq=y、ack=x+1;ACK=1表示服务器同意连接,seq=y表示服务器回复的报文段所传送数据的第一个字节的序号为y,ack=x+1表示期望客户端下次因从数据的第x+1个字节开始发送
第三次握手:客户端收到服务器发送的确认同意连接的数据包之后,再次向服务器发送确认收到报文段,此时客户端从SYN-SENT状态变为ESTAB-LISHED状态,该报文段的TCP首部内容为SYN=0、ACK=1、seq=x+1、ack=y+1;其中SYN=0表示客户端与服务器双方同意建立连接,ACK=1表示确认收到服务器的确认报文段,seq=x+1表示当前报文段所传送数据的第一个字节的序号为x+1,ack=y+1表示告诉服务器下次因从y+1字节开始发送
客户端与服务器经过三层握手之后,建立连接成功
三、根据HTTP协议进行客户端通过浏览器与服务器之间的"请求与响应"过程
浏览器与服务器建立TCP连接之后,客户端通过浏向器向服务器发送一个请求报文(HTTP格式的数据包),该报文中携带客户端的请求信息,接下来服务器首先解析请求数据包,根据客户端报文携带的请求信息,做出相应的响应动作,然后将响应内容生成HTTP格式的响应数据包并发送给客户端浏览器,到达浏览器之后,浏览器首先解析该响应数据包,然后将响应内容HTML呈现在浏览器页面,当响应动作结束,客户端退出浏览器,这时浏览器与服务器之间的连接应及时断开,避免造成资源浪费
四、根据四次挥手与指定服务器断开连接
第一次挥手:首先客户端向服务器发送连接释放请求的报文段并停止发送数据,释放报文段的TCP首部内容为:FIN=1、seq=u;其中FIN=1表示客户端要主动释放TCP连接,seq=u表示当前报文段所传送数据的第一个字节的序号为u,此时客户端到服务器的连接释放,TCP连接处于半关闭状态
第二次挥手:服务器在接受到客户端的报文段后,根据TCP首部内容可判断当前报文段为一个连接释放请求的报文段,然后给客户端发送确认报文段,报文段的TCP首部内容为:ACK=1、seq=v、ack=u+1;其中ACK=1表示服务器同意释放TCP连接,服务器将剩余数据发送给客户端
第三次挥手:服务器应用进程通知TCP释放连接,向客户端发送连接释放报文,报文段的TCP首部内容为:ACK=1、FIN=1;其中ACK=1表示服务器已经将客户端需要的数据全部发送完毕,FIN=1表示服务器要释放TCP连接
第四次挥手:客户端收到服务器的连接释放报文,向服务器发送确认报文,报文段的TCP首部内容为:ACK=1、FIN=0;其中ACK=1表示收到服务器的连接释放报文,FIN=0表示同意释放连接
客户端与服务器经过四次挥手之后,释放连接成功
版权归原作者 雾远望 所有, 如有侵权,请联系我们删除。