网路基本概念

网络基本概念

协议 主机 端口 路径

参数:某些资源可以根据需求呈现不同的内容,这些额外的信息可以通过参数传递

hash:在网络通信中,hash没有什么用,往往作为浏览器的锚链接出现

http

通过url地址,准确的找到自己想要的服务。

需要通过协议来对话,而互联网中最常见的协议就是http协议

https是在http协议基础上发展起来的,它增加了安全性,其他和http协议完全一样

http是基于 请求 - 响应 的方式完成通信的,每一次通信都是由客户端向服务端发出请求,传递一些消息过去,经过服务器程序处理,响应给客户端一些消息

http协议规定:

markdown 复制代码
1. 每次 请求 - 响应 都是独立的,相互之间互不干扰,这种模式的协议称为无状态协议
1. 每次 请求 - 响应 传递的消息都是纯文本(字符串),而且文本格式必须按照http协议规定的格式书写

请求的消息格式

请求消息格式有三部分组成

  • 请求行:概括了客户端想干什么
  • 请求头:描述了请求的一些额外信息
  • 请求体:包含了要给服务器传递的正文数据,可以省略的

响应的消息格式

  • 相应行
  • 响应头
  • 响应体

浏览器页面处理流程

  1. 浏览器自动补全协议、端口
  2. 浏览器自动完成url编码
  3. 浏览器根据url地址查找本地缓存,根据缓存规则看是否命中缓存,若有缓存直接使用缓存,不再发出请求
  4. 如果没有缓存,就通过DNS服务器解析找到服务器的ip地址
  5. 浏览器向服务器发出建立TCP连接的申请,完成三次握手后,连接通道建立
  6. 若使用https协议,则会进行SSL握手,建立加密信道,使用SSL握手时,会确定是否使用http2
  7. 浏览器决定要附带哪些cookie到请求头中
  8. 浏览器自动设置好请求头、协议版本、cookie、发出GET请求
  9. 服务器处理请求,进入后端处理流程。完成处理后,服务器响应一个HTTP报文给浏览器
  10. 浏览器根据使用的协议版本,以及Connection字段的约定,决定是否要保留TCP连接
  11. 浏览器根据响应状态码决定如何处理这一次响应
  12. 浏览器根据响应头中的Content-type字段识别响应类型,如果是text/html,则对响应体的内容进行HTML解析,否则做其他处理
  13. 浏览器根据响应头的其他内容完成缓存、cookie的设置
  14. 浏览器开始从上到下解析HTML,若遇到外部资源链接,则进一步请求资源
  15. 解析过程中生成DOM树,CSSOM树,然后一边生成,一边把二者合并为渲染树(rendering tree),随后对渲染树中的每个节点计算位置和大小(feflow),最后把每个节点利用GPU绘制到屏幕(repaint)
  16. 在解析过程中还会触发一系列的事件,当DOM树完成后会触发DOMContentLoaded事件,当所有资源加载完成后会触发load事件

五层网路模型

跟具体应用相关的消息格式 应用层 HTTP、FTP、DNS、SMTP

如何保证消息的可靠转递 传输层 TCP、UDP

如何在互联网中找到对方 网络层 IP、路由器

如何在一个子网中找到对方 数据链路层 MAC 、交换机

上面给我的信息如何用信号表示 物理层 光纤,双绞线

从上到下分别为:应用层、传输层、网络层、数据链路层、物理层。在发送消息时,消息从上到下进行打包,每一层会在上一层基础上加包,而接受消息时,从下到上进行解包,最终得到原始信息

cookit和session的区别是?

  1. cookie 的数据保存在浏览器 session 数据保存在服务器
  2. cookie 存储空间有限 session 存储空间不限
  3. cookie 只能保存字符串 session 可以保存任何数据类型
  4. cookie 数据容易被获取 session 数据难以获取

如何消除 session

  1. 设置过期时间

    当客户端长时间没有传递 sessionid 时,服务器可以在过期时间之后清除session

  2. 客户端主动通知

    可以使用js监听客户端页面关闭或退出操作,再通知服务器清除session

http缓存协议

缓存大的基本原理

HTTP和TCP的关系:

  1. 客户端发送消息给服务器叫请求,服务器发送消息给客户端叫响应
  2. 使用HTTP协议的服务器不会主动发送消息给客户端(尽管TCP可以),只对请求进行响应
  3. 每一个HTTP请求-响应,都要先建立TCP连接(三次握手),然后完成 请求-响应 后,再销毁连接(四次挥手),就导致每次 请求- 响应 都是独立的,无法保持状态

三次握手与四次挥手

TCP协议通过三次握手建立可靠的点对点连接,具体过程:

首先服务器进入监听状态,然后即可处理连接

第一次握手:建立连接时,客户端发送 syn 包到服务器,并进入SYN_SENT 状态,等待服务器确定。在发送的包中还会包含一个初始序列号 seq。此次握手的含义是客户端希望与服务器建立连接

第二次握手:服务器收到 syn 包,然后回应给客户端一个 SYN+ACK 包,此时服务器进入 SYN_RCVD 状态。此次握手的含义是服务端回应客户端,表示已收到并同意客户端的连接请求。

第三次握手:客户端收到服务器的 SYN 包后,向服务器再次发送 ACK 包,并进入 ESTAB_LISHED 状态

最后,服务器收到客户端的 ACK 包,于是也进入 ESTAB_LISHED 状态,至此,连接建立完成。

当需要关闭连接时,需要进行四次挥手才能关闭:

  1. Client向 server 发送 FIN 包,表示 Client 主动要关闭来连接,然后进入 FIN_WAIT_1状态,等待 server 返回 ACK 包。此后 Client 不能再向 Server 发送数据,但能读取数据
  2. Server 收到 FIN 包后向 Client 发送 ACK 包,然后进入 CLOSE_WAIT 状态,此后 Server 不能再读取数据,但可以继续向 Client 发送数据。
  3. Client 收到 Server 返回的ACK 包后进入 FIN_WAIT_2 状态,等待 Server 发送 FIN包
  4. Server 完成数据的发送后,将 FIN 包发送给 Client,然后进入 LAST_ACK 状态,等待 Client 返回 ACK包,此后 Server 既不能读取数据,也不能发送数据
  5. Client 收到 FIN 包后向 Server 发送 ACK 包,然后进入 TIME_WAIT状态,接着等待足够长的时间以确保 Server 接收到 ACK包,最后回到 CLOSED 状态,释放网络资源
  6. Server 收到 Client 返回的 ACK 包后便回到 CLOSED状态,释放网络资源

CSRF攻击 (跨站请求伪造)

一种挟制用户在当前已登录的eb应用上执行非本意的操作攻击方法

首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的cookie发送,因此就利用可用户身份信息完成攻击

防御手段:

  1. 不使用cookie
  2. 为表单添加校验的token校验
  3. cookie中使用sameSite字段
  4. 服务器检查referer字段

XSS攻击 (跨站脚本攻击)表单输入恶意攻击代码

防御:服务器端对用户提交的内容进行过滤 (去掉一些危险的标签,去掉一些危险的属性)或编码(对危险的标签进行HTML实体编码)

网络性能优化

  • 优化打包体积

    利用一些工具压缩最终打包代码,减少包体积

  • 多目标打包

  • 压缩

  • CDN

  • 缓存

  • HTTP2

    利用多路复用、头部压缩

  • 雪碧图

  • defer、async

  • prefetch、preload

  • 多个静态资源域

域名

帮助人类记忆网站地址

域名类型的几种:

  • 根域名
  • 顶级域名
  • 一级域名
  • 二级域名
  • 三级域名

简述域名解析过程:

  1. 查找本机hosts文件是否有解析记录,有直接使用
  2. 查找本地域名服务器中是否有解析记录,有直接使用
  3. 查询根域名服务器,得到顶级域名服务器ip
  4. 查询顶级服务器中是否有解析记录,有直接使用
  5. 根据顶级域名服务器ip,查村权限域名服务器,有解析记录,直接使用
  6. 都找不到,域名解析失败

本机和域名服务器一般会有高速缓存,存在的目的是为了减少查询次数和时间

HTTP不同版本

TCP协议的特点:慢启动,即开始传输的数据量少,一段时间之后达到传输的峰值

HTTP 0.9 1991年

​ 只支持简单的请求 - 响应模式,不支持复杂的HTTP头部和消息体

HTTP 1.0 1996年

​ HTTP头部、消息体和请求方法,及持久连接 (每个连接只能处理一个请求)

​ 无法复用连接 - 每个请求都是独立的连接

​ 对头阻塞

HTTP 1.1 1997年

​ 长连接:让同一个tcp连接服务于多个 请求 - 响应 (默认开启长连接 Connection: keep-alive

连接关闭的情况三种

客户端在某一次请求中设置了Connection:close ,服务器收到此请求后,响应结束立即关闭TCP

在没有请求时,客户端会不断对服务器进行心跳检测,一旦心跳检测停止,服务器立即关闭TCP

当客户端长时间没有新的请求到达服务器,服务器会主动关闭tcp,可设置时间

​ 管道化和对头阻塞

减少文件数量

通过开辟多个tcp连接 (对于同一个域名的连接最多6个,要突破这个限制,就需要把资源放到不同的域中

管道化会带来对头阻塞造成非常多的问题,现代浏览器默认关闭这种模式

HTTP 2 2015年

​ 二进制分帧 (多路复用)

​ 可以允许更小的单元传输数据,每个传输单元称之为帧,而每一个请求 或响应的完整数据称为流,每个流有自己的编号,每个帧会记录所属的流

​ 头部压缩 (静态表)

​ 大部分头部信息都有很多重复

​ 服务器推

​ 允许在客户端没有主动请求的情况下,服务器预先把资源推送给客户端

HTTP 3 2022年

​ 完全抛弃了TCP协议,转而使用UDP协议

​ 为了保证传输的可靠性,使用了 QUIC 协议

相关推荐
Pandaconda6 小时前
【Golang 面试题】每日 3 题(二十一)
开发语言·笔记·后端·面试·职场和发展·golang·go
木宁kk7 小时前
嵌入式 TCP/UDP/透传/固件
单片机·嵌入式硬件·面试
牛马baby10 小时前
Java高频面试之SE-09
java·开发语言·面试
重生之Java开发工程师12 小时前
⭐MySQL的底层原理与架构
数据库·mysql·面试·架构
00Allen0013 小时前
XXX公司面试真题
java·算法·面试·职场和发展·idea
uhakadotcom14 小时前
跟着coze学习几种OAuth鉴权方式的原理、设计、适用场景
后端·面试·github
测试界柠檬15 小时前
14:00面试,14:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
橙狮科技15 小时前
提示词工程教程:任务分解
人工智能·搜索引擎·自然语言处理·面试·职场和发展
JaneZJW16 小时前
嵌入式岗位面试八股文(篇三 操作系统(上))
linux·单片机·面试·操作系统·嵌入式