首页 > 其他分享 >浏览器输入url到网页展示过程

浏览器输入url到网页展示过程

时间:2023-10-21 16:23:34浏览次数:26  
标签:网页 url IP 端口 地址 网卡 MAC 浏览器 路由器

总图:
简单的网络模型

1.解析URL

​ 浏览器的第一步工作是解析url,从而生成发送给web服务器的请求信息。

​ URL组成如图:

URL 解析

如果上图中表示数据的源的路径名为空呢?这时浏览器会默认访问根目录下的/index.html或者/default.html文件,当对URL解析完成后,浏览器就会开始构造HTTP请求消息

HTTP 的消息格式

2.DNS查询

​ 当浏览器解析URL并生成请求消息后就需要借助操作系统将这个请求发给web服务器,但在发送之前,还有一项工作需要完成那就是查询服务器域名对应的IP地址,因为操作系统发送消息时,必须提供对方的IP地址,相关域名的知识自行百度。

​ 域名解析流程:

​ 以www.server.com举例:

​ (1) 客户端首先向本地域名服务器发送DNS请求查询www.server.com的IP是啥,本地DNS如果缓存里的表格能找到,则直接返回查到的IP,如果没有则向根域名服务器查询;

​ (2)根DNS收到本地DNS的请求后,发现是.com结尾的,会将.com域名的顶级域名服务器地址返回;

​ (3)本地DNS收到地址后,发起请求查询,顶级域名服务器发回负责www.server.com的权威域名地址DNS地址;

​ (4)本地DNS转向权威DNS服务器查询,权威服务器返回www.server.com对应的IP地址;

​ (5)本地DNS再将IP返回给客户端,客户端和目标建立连接。

至此,完成DNS的解析过程。

域名解析的工作流程

​ 注意:不是每次查询都要从头开始查询,因为有缓存这个东西,浏览器首先会看自己的缓存有没有这个域名对应的IP,如果没有再去问操作系统,操作系统也没有,再去hosts文件看,最后才会去本地DNS查询,然后执行以上过程。

3.协议栈

​ 在获取到目标IP后,就可以把HTTP的传输工作交给操作系统中的协议栈。

​ 协议栈位置及组成如图:

img

​ 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

​ 此外 IP 中还包括 ICMP 协议和 ARP 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

​ IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

TCP:

​ 关于TCP的相关知识这里不在详细介绍,自行百度。

​ 在HTTP传输数据之前,需要先建立连接,而TCP的连接,通常称之为三次握手

TCP 三次握手

  • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

  • 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。

  • 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。

  • 客户端收到服务端发送的 SYNACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。

  • 服务端收到 ACKACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

    TCP封装端口

​ 三次握手的目的是保证双方都有发送和接收的能力

​ 经过TCP层的封装后结果如图:

TCP 层报文

IP:

IP层大概作用是确定封装IP

​ 封装完成后数据包如图:

IP 层报文

MAC:

​ 紧接着是封装MAC地址,自己的MAC地址容易获取(网卡生产时就已经确定),那么怎么获取对方的MAC地址呢?此时就需要 ARP 协议帮我们找到路由器的 MAC 地址。ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。

得到对方MAC地址后封装到MAC头部里结果如图:

MAC 层报文

4.网卡

​ 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。

​ 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序

​ 网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

数据包

5.交换机

​ 交换机的 MAC 地址表主要包含两个信息:

  • 一个是设备的 MAC 地址,

  • 另一个是该设备连接在交换机的哪个端口上。

    交换机的 MAC 地址表

​ 举个例子,如果收到的包的接收方 MAC 地址为 00-02-B3-1C-9C-F9,则与图中表中的第 3 行匹配,根据端口列的信息,可知这个地址位于 3 号端口上,然后就可以通过交换电路将包发送到相应的端口了。

所以,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口

​ 当然了如果找不到的话对应的端口的话,交换机就会以广播的形式向所有端口发送。

6.路由器

路由器的基本原理:

​ 路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。

​ 当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

路由器的包接收操作:

​ 首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

​ 如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

​ 总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。

查询路由表确定输出端口:

​ 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。

MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃

​ 接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。

​ 转发操作分为几个阶段,首先是查询路由表判断转发目标。

路由器转发

在互联网中经过多层路由器转发,终于到了目标地址......

7.到达服务器端

​ 解析数据包:

网络分层模型

当初怎么封装包的,现在就怎么解封包,像拿快递一样。

最后服务器端拿到客户端请求的资源,然后构造响应消息,再发回去,浏览器解析渲染展示网页,然后客户端断开连接,TCP四次挥手,结束。

标签:网页,url,IP,端口,地址,网卡,MAC,浏览器,路由器
From: https://www.cnblogs.com/dwinternet/p/17779145.html

相关文章

  • thinkPHP 项目只需要单个项目模块,比如去掉url中的admin
    thinkPHP项目只需要单个项目模块,比如去掉url中的admin这里以thinkPHP为例这里以thinkPHP为例1、找到入口文件的index.php,加入下面的define(‘BIND_MODULE’,‘admin’);<?php//定义应用目录define('APP_PATH',__DIR__.'/application/');//路由改写define('BIND_MODUL......
  • curl 请求接口数据
    CURL操作初始化指定的接口地址url就是$postUrl需要用户和密码鉴权,需要头部传递信息对认证证书来源的检查和从证书中检查SSL加密算法是否存在模拟用户使用的浏览器设置端口表示需要responsebody要求结果为字符串且输出到屏幕上post提交方式添加头,在name和pass处填写对应账号......
  • IT部落格网页设计图
    ......
  • 谷歌黑框、谷歌浏览器黑边
    Windows11谷歌浏览器黑边问题完美解决问题图片:一、开始解决:桌面图标右键点击属性 二丶兼容性点击更改所有用户的设置三丶取消设置取消选中——以兼容模式运行这个程序 四丶完美解决 启发文章在此......
  • WPF中资源URL解读
    引言资源(Resources)在WPF(WindowsPresentationFoundation)中扮演着非常重要的角色,它们提供了一种灵活和高效的方式来管理和使用图像、样式、模板等。资源URL(ResourceURL)则是资源管理中的一个关键概念。本文将深入解读WPF中资源URL的概念,类型,以及如何高效地使用它们。1.资源与......
  • 使用CSS的cross-fade()实现基于url的网页背景图半透明显示
     参考链接:https://www.zhangxinxu.com/wordpress/2020/07/css-cross-fade-background-image-opacity/引子在开发过程中,碰到了一个比较特别的情况,就是使用url()背景图像,同时又希望background-image背景图片是半透明的,作为网页的半透明背景图,这时候使用opacity,如果使用某一个大......
  • selenium无头浏览器,禁用图片,禁用js,切换UA,反爬
    fromseleniumimportwebdriverfromfake_useragentimportUserAgentua=UserAgent().randomoptions=webdriver.ChromeOptions()options.add_argument('--no-sandbox')#停用沙箱options.add_argument('--disable-gpu')#禁用GPU实现加速options.ad......
  • Python3+selenium3+Firefox 设置浏览器headless模式运行+下载文件
    设置Firefoxheadless模式   defsetUp(self):#Firefoxheadless模式运行options=webdriver.FirefoxOptions()options.add_argument('-headless')self.driver=webdriver.Firefox(options=options)self.driver.implicitly_wait(30)......
  • selenium设置火狐浏览器为headless(无头模式)
    selenium已经停止了对PhantomJS的支持,只能调用Firefox或者Chrome浏览的无头模式(即没有浏览器界面)。使用步骤:安装Firefox浏览器firefox历年版本安装包的官方镜像地址:https://download-installer.cdn.mozilla.net/pub/firefox/releases/安装geckodriver驱动(1)下载geckodriver火狐所......
  • GIL全局解释器锁、互斥锁、线程队列、进程池和线程池的使用、多线程爬取网页、协程理
    进程和线程的比较进程的开销比线程的开销大很多进程之间的数据是隔离的,但是,线程之间的数据不隔离多个进程之间的线程数据不共享----->还是让进程通信(IPC)------->进程下的线程也通信了---->队列GIL全局解释器锁(重要理论)Python在设计之初就考虑到要在主循环中,同时只有一......