浅谈浏览网站的整个过程

前言

        大家经常会在网上冲浪,那么当我们打开浏览器,在地址栏中输入网址,然后敲击回车的过程中究竟经历了哪些操作呢?

过程分解

  1. 在应用层利用域名系统DNS将域名解析成IP地址
  2. 在传输层根据三次握手与指定服务器建立连接
  3. 根据HTTP协议进行客户端与浏览器之间的"请求与响应"过程
  4. 根据四次挥手与指定服务器断开连接

详细过程

        就拿百度浏览器来说,当我们打开浏览器,在地址栏中输入"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协议的规定:三次握手来与服务器建立连接。三次握手的过程如下:

  1. 第一次握手:客户端首先向服务器发送一个请求连接的报文段,客户端从CLOSED状态变为SYN-SENT状态,报文段的TCP首部内容为:同步SYN=1、确认ACK=0、seq=x;seq=x表示当前报文段所传送数据的第一个字节的序号为x
  2. 第二次握手:服务器在接受到客户端的报文段后,根据TCP首部内容可判断当前报文段为一个主动连接的数据包,若服务器同意连接,则回应报文段,服务器从LISTEN状态变为SYN-RCVD状态,回复的报文段的TCP首部内容为:同步SYN=1、确认ACK=1、seq=y、ack=x+1;ACK=1表示服务器同意连接,seq=y表示服务器回复的报文段所传送数据的第一个字节的序号为y,ack=x+1表示期望客户端下次因从数据的第x+1个字节开始发送
  3. 第三次握手:客户端收到服务器发送的确认同意连接的数据包之后,再次向服务器发送确认收到报文段,此时客户端从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呈现在浏览器页面,当响应动作结束,客户端退出浏览器,这时浏览器与服务器之间的连接应及时断开,避免造成资源浪费

四、根据四次挥手与指定服务器断开连接

  1. 第一次挥手:首先客户端向服务器发送连接释放请求的报文段并停止发送数据,释放报文段的TCP首部内容为:FIN=1、seq=u;其中FIN=1表示客户端要主动释放TCP连接,seq=u表示当前报文段所传送数据的第一个字节的序号为u,此时客户端到服务器的连接释放,TCP连接处于半关闭状态
  2. 第二次挥手:服务器在接受到客户端的报文段后,根据TCP首部内容可判断当前报文段为一个连接释放请求的报文段,然后给客户端发送确认报文段,报文段的TCP首部内容为:ACK=1、seq=v、ack=u+1;其中ACK=1表示服务器同意释放TCP连接,服务器将剩余数据发送给客户端
  3. 第三次挥手:服务器应用进程通知TCP释放连接,向客户端发送连接释放报文,报文段的TCP首部内容为:ACK=1、FIN=1;其中ACK=1表示服务器已经将客户端需要的数据全部发送完毕,FIN=1表示服务器要释放TCP连接
  4. 第四次挥手:客户端收到服务器的连接释放报文,向服务器发送确认报文,报文段的TCP首部内容为:ACK=1、FIN=0;其中ACK=1表示收到服务器的连接释放报文,FIN=0表示同意释放连接

         客户端与服务器经过四次挥手之后,释放连接成功

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾远望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值