当我们用浏览器访问某个网站时,我们其实是在与一个远程的服务器进行通信。服务器是一台存储了网站数据和资源的计算机,它可以响应我们的请求并向我们发送网页内容。但是,要访问服务器,我们需要经过一系列的步骤,涉及到多个网络协议和设备。本文档对其进行整理,从开始从浏览器输入网址到最后展示相关内容,做了详细的整理,希望该文档能够对有需要的友友们有所帮助。
简要过程如下:
1、输入网址:我们在浏览器的地址栏中输入网址,也就是统一资源定位符(URL),它指定了我们想要访问的网站的域名和路径。
2、域名解析:浏览器需要将域名转换为服务器的IP地址,也就是一串数字,表示服务器在互联网上的位置。浏览器会先检查本地缓存或者操作系统的hosts文件,看是否有对应的IP地址。如果没有,浏览器会向域名系统(DNS)服务器发送查询请求,获取IP地址。
3、建立连接:浏览器根据IP地址和端口号,通过传输控制协议(TCP)与服务器建立一个连接。TCP是一种可靠的双向通信协议,它会在连接建立前进行三次握手,确认双方都准备好发送和接收数据。
4、发送请求:浏览器通过超文本传输协议(HTTP)或者其安全版本(HTTPS)向服务器发送一个请求报文,包含了请求方法、请求头和请求体等信息。请求方法指定了我们想要对服务器资源进行什么操作,如GET、POST等。请求头包含了一些附加信息,如用户代理、Cookie等。请求体包含了一些提交的数据,如表单内容等。
5、接收响应:服务器收到请求后,会根据请求内容进行处理,并返回一个响应报文,包含了响应状态码、响应头和响应体等信息。响应状态码表示了请求的结果,如200表示成功,404表示未找到等。响应头包含了一些附加信息,如内容类型、缓存控制等。响应体包含了网页的内容,如HTML、CSS、JavaScript等。
6、渲染页面:浏览器接收到响应后,会解析响应体中的HTML文档,并构建一个文档对象模型(DOM)树,表示网页的结构。同时,浏览器会解析CSS样式表,并构建一个层叠样式表对象模型(CSSOM)树,表示网页的样式。然后,浏览器会将DOM树和CSSOM树合并为一个渲染树,表示网页的可见部分。接着,浏览器会计算渲染树中每个节点的布局和位置,并将它们绘制到屏幕上。此外,浏览器还会执行响应体中的JavaScript代码,实现网页的交互功能。
7、断开连接:当浏览器完成页面渲染或者用户关闭页面时,浏览器会通过TCP向服务器发送一个断开连接的报文,并释放资源。
以上就是用浏览器访问某个网站时所经历的一个简要的过程。这个过程涉及到多个网络层次和协议,并且可能存在一些变化和优化。但是,它可以帮助我们理解互联网是如何工作的,并且为我们提供了方便快捷。
具体过程:
这里我们以头条网址为例:
1、打开浏览器,输入www.toutiao.com,这个时候应用程序浏览器会查找hosts文件或者DNS缓存,是否有这个域名对应的IP信息,如果没有则会发送给DNS进行请求,转换成对应的IP。(这里假设 toutiao.com的地址是122.14.229.39)得到IP后,浏览器开始打包访问的请求,使用HTTP或者HTTPS,不管使用哪种,里面请求的是toutiao.com的首页,对应的协议会把这个请求给组织好进行封装,然后通过socket接口交给下一层 传输层 去完成。
2、对于传输层,它是 OSI 模型和 TCP/IP 协议栈中的一个关键层次,主要负责在源和目的之间提供端到端的数据传输服务。传输层主要有两个主要协议:传输控制协议(TCP)和用户数据报协议(UDP)。它们都通过封装应用层数据包,并在报文头中添加一些控制信息来提供不同的服务质量和可靠性。
而HTTP使用的是TCP协议,简单理解面向连接就是TCP能够保证数据能够到达对方,如果对方没收到,就会重新发送,直到对方收到为止。(这里暂时省去了TCP的细节)TCP会产生两个端口号,一个是访问者自己浏览器随机生成的端口号,服务器WEB的端口号为标准端口号(80),传输层封装完毕,会交给下一层网络层。
3、对于网络层,涉及到两个比较重要的地址,
一个是源IP地址
一个是目的IP地址
源地址为访问者,目的地址就是我们要访问的服务器ip 122.14.229.39 。当我们的数据从传输层 来到网络层时,就根据这个IP找服务器,并且操作系统会做一个判断,这个目标IP地址是本地的还是外部的IP,显然在服务器IP 122.14.229.39 与本地电脑IP 192.168.6.2不在一个地方,不在一个地方的话,那怎么去往对方呢?操作系统会进行一个操作,把这个数据丢给默认网关,192.168.6.1,让网关来进行转发。
4、数据链路层,当主机知道了服务器的ip 地址,也知道了要想到达对方,需要由网关处理就可以了,但是又有一个新的问题,那就是在数据链路层里可能会有多个网关(设备),那怎么来确定我们要找网关呢?此时就用到了我们熟悉得到MAC地址,因MAC地址的唯一性,寻找我们的网关就不难了,但是我们不可能知道我们要找得网关对应的MAC地址,所以,就用到了ARP协议,通过ARP协议,来获取网关对应的MAC地址。
那么所谓的 ARP(Address Resolution Protocol,地址解析协议)是一种用于将IP地址转换为MAC地址的协议,它在网络层和数据链路层之间进行通信。在发送数据包之前,主机需要知道目标主机的MAC地址,而ARP协议就是用来解决这个问题的。
以下是ARP协议的工作流程:
1)它首先会检查本地的ARP高速缓存,查找目标IP地址对应的MAC地址。
2)如果本地ARP高速缓存中不存在目标IP地址对应的MAC地址,则主机A将广播一个ARP请求,请求该IP地址对应的MAC地址。该ARP请求包含源IP地址、源MAC地址、目标IP地址和目标MAC地址(广播地址,因为还不知道目标MAC地址)。
3)所有收到ARP请求的主机都会检查请求中的目标IP地址是否是自己的IP地址。如果是,该主机将向主机A回复一个ARP响应包,该包包含自己的MAC地址。
4)当主机A收到ARP响应包时,它将更新本地ARP高速缓存,将目标IP地址与目标MAC地址进行映射。
5)如果在一定时间内(通常为几分钟)没有收到目标主机的ARP响应包,则ARP请求会超时。此时主机将无法将数据包发送到目标主机。
ARP协议是一个简单而重要的协议,它确保了主机能够正确地发送数据包到目标主机。ARP请求和响应包通常是广播的,因此所有网络上的主机都会收到这些包,但只有目标主机会回复ARP响应包。
至此,链路层封装完毕,浏览器将封装好的数据包,交给 下一层 物理层(网卡)。
5、物理层将其转变成0 1 二进制码,通过介质网线进行发送给网关。
6、网关收到后,会进行解封包,这样网关看到了对应的信息,就能够判断这个数据包是发往哪里的。网关通过解封装后,得到以太网头部,发现目标MAC是自己,继续解封装,得到IP头部,发现目标IP地址是122.14.229.39 ,这个地址不是自己,那就是需要交给其他地方的,网关会执行一个操作,查找路由表,选择去往122.14.229.39 的最优路径,此时路由器需要对其进行重新封装。
注意:
从访问者电脑到网关,以太网的头部源MAC地址是电脑的,目的MAC地址是网关的,那么到了网关这里,网关的网卡接口也有自己的MAC地址,路由器的接口也有自己的MAC地址,这时候网关封装链路层的以太网头部在用之前的信息就不行了,因为它表示的是电脑找网关这段链路中用的。而到了这里则变成了网关去往122.14.229.39,交给路由器处理,那是不是以太网头部的源MAC变成了网关接口的MAC,而目的MAC变成了路由器的,这样路由器在收到这个包以后,它会发现原来是找它的,它也跟网关一样执行一样的解封装,查路由表,在封装,最终到达目的地。
7、服务器收到后,开始解封,然后进行回包,最终跟来的时候一样,通过封装,然后中间经过路由器转发,最终也到达客户端,解封装,最终内容呈现在了浏览器的界面上。
总之,整个通信过程就是一个不断封装、解封装的过程。