怎么排查和解决 电脑网页打开很慢

在计算机网络的应用层你了解多少,是否知道 socket 套接字有哪些?知道你的网站为什么访问慢吗?知道为什么 fidder、Charles 能抓到你的包吗?今天我们就来一一揭秘!
一、socket()套接字有哪些?
套接字(socket)是网络中不同主机上的应用进程进行双向通信的端口的抽象,网络进程通信的一端就是一个套接字,不同主机上的进程就是通过套接字发送数据报来进行通信的,如 TCP 协议使用主机的 IP 地址+端口号来作为 TCP 连接的端点,这个端点就是套接字 。
套接字主要有以下三种类型:

  • 流套接字(SOCK_STREAM): 流套接字基于 TCP 传输协议,主要用于面向连接的、可靠的数据传输服务,由于 TCP 协议的特点,使用流套接字进行通信时能够保证数据无差错、无重复传送、并按顺序接收,通信双方不需要在程序中进行相应的处理 。
  • 数据报套接字(SOCK_DGRAM): 因为 UDP 协议传输的是数据报,所以数据报套接字是基于 UDP 传输协议的,对应于无连接的 UDP 服务应用,该服务并不能保证数据传输的可靠性,也无法保证数据按照顺序到达,同时通信两端不需要建立长时间的连接,UDP 客户端发送一个数据给服务器后,就可以使用同一个套接字给另一个服务器发送数据,当使用 UDP 套接字时,丢包等问题需要在程序中进行处理 。
  • 原始套接字(SOCK_RAW): 由于流套接字和数据报套接字只能抓取 TCP 和 UDP 协议的数据,当需要处理非传输层数据包或操作系统无法处理的数据包时,就需要使用原始套接字来发送 。
二、URI(统一资源标识符)和 URL(统一资源定位符)之间的区别?
  • URL(统一资源定位符) 也可以说是我们平常上网时输入的网址,它标识一个互联网资源,并且指定其进行操作或获取该资源的方法,例如 CSDN 的网址 https://blog.csdn.net,该 URL 标识一个特定资源并表示该资源的某种形式可以通过 HTTPS 协议从相应的位置获取 。
  • URL 是 URI 的子集,两者都定义了资源是什么?而 URL 还定义了如何能够访问到资源,URI 是一种语义上的抽象概念,可以是绝对的也可以是相对的 。而 URL 则必须提供足够的信息来定位,是绝对的,
所以总的来说,只要能唯一标识资源的就是 URI,在 URI 的基础上能给出其资源的访问方式的就是 URL 。
三、为什么 fidder,charles 能抓到你的包【抓取数据包的过程】
假如我们需要抓取客户端的数据包,需要监控客户端与服务器交互之间的网络节点,监控其中任意一个网络节点(网卡),获取所有经过网卡中的数据,对这些数据按照网络协议进行解析,这就是抓包的基本原理 。而中间的网络节点不受我们控制,是基本无法实现抓包的,因此只能在客户端与服务器之间进行抓包 。
① 当采用抓包工具抓取 HTTP 数据包时,过程如下:
  • 首先抓包工具会提出代理服务,客户端需要连接该代理;
  • 客户端发出 HTTP 请求时,会经过抓包工具的代理,抓包工具将请求的原文进行展示;
  • 抓包工具使用该原文将请求发送给服务器;
  • 服务器返回结果给抓包工具,抓包工具将返回结果进行展示;
  • 抓包工具将服务器返回的结果原样返回给客户端 。
这里抓包工具相当于透明人,数据经过的时候它一只手接到数据,然后另一只手把数据传出去 。
② 当抓取 HTTPS 数据包时: