【Java核心面试宝典】Day21、面试官:如果你访问一个网站很慢,怎么排查和解决(1)

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 21】

在这里插入图片描述

在计算机网络的应用层你了解多少,是否知道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 数据包时,过程如下:
  1. 首先抓包工具会提出代理服务,客户端需要连接该代理;
  2. 客户端发出 HTTP 请求时,会经过抓包工具的代理,抓包工具将请求的原文进行展示;
  3. 抓包工具使用该原文将请求发送给服务器;
  4. 服务器返回结果给抓包工具,抓包工具将返回结果进行展示;
  5. 抓包工具将服务器返回的结果原样返回给客户端。

这里抓包工具相当于透明人,数据经过的时候它一只手接到数据,然后另一只手把数据传出去。

② 当抓取 HTTPS 数据包时:
  1. 客户端连接抓包工具提供的代理服务,并安装抓包工具的根证书;
  2. 客户端发出 HTTPS 请求,抓包工具模拟服务器与客户端进行 TLS握手交换密钥等流程;
  3. 抓包工具发送一个 HTTPS 请求给客户端请求的目标服务器,并与目标服务器进行 TLS 握手交换密钥等流程;
  4. 客户端使用与抓包工具协定好的密钥加密数据后发送给抓包工具;
  5. 抓包工具使用与客户端协定好的密钥解密数据,并将结果进行展示;
  6. 抓包工具将解密后的客户端数据,使用与服务器协定好的密钥进行加密后发送给目标服务器;
  7. 服务器解密数据后,做对应的逻辑处理,然后将返回结果使用与抓包工具协定好的密钥进行加密发送给抓包工具;
  8. 抓包工具将服务器返回的结果,用与服务器协定好的密钥解密,并将结果进行展示;
  9. 抓包工具将解密后的服务器返回数据,使用与客户端协定好的密钥进行加密后发送给客户端;
  10. 客户端解密数据。

这个时候抓包工具对客户端来说相当于服务器,对服务器来说相当于客户端。 在这个传输过程中,客户端会以为它就是目标服务器,服务器也会以为它就是请求发起的客户端。

四、如果你访问一个网站很慢,怎么排查和解决?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值