认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

news/2024/5/18 15:59:31 标签: tcp/ip, udp, http
http://www.w3.org/2000/svg" style="display: none;">

https://img-blog.csdnimg.cn/direct/0d215860067b4a0aae9f5649e147fcfb.jpeg" alt="在这里插入图片描述" />

目录

  • 引出
  • 认识通讯协议
    • 1、TCP/IP协议,UDP协议的区别
    • 2、HTTP通讯协议的讲解
  • Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩
  • 总结

引出

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解


认识通讯协议

1、TCP/IP协议,UDP协议的区别

属于底层的通讯协议

三次握手的目的:保证连接一定创建成功

https://img-blog.csdnimg.cn/direct/94b9a40ab06447c3afed79e4af69420c.png" alt="在这里插入图片描述" />

一问一答的目的:保证数据一定传输成功,保证数据永远不丢失

https://img-blog.csdnimg.cn/direct/4087eac870744cf2bba95a28d9332442.png" alt="在这里插入图片描述" />

四次挥手的目的:保证连接一定断开成功,且清理到位!

https://img-blog.csdnimg.cn/direct/725f30c05e8f461eb7a36d8a8cf26130.png" alt="在这里插入图片描述" />

Java程序连接MySQL数据库时,第1次 是不都很慢?因为:它在建立连接 通讯协议是:MYSQL协议,底层依旧是:TCP/IP协议


UDP协议:类似于 写信,发短信,不依赖于连接 导致:信息丢失

TCP/IP协议,UDP协议,都是网络传输协议!在它们的基础之上,可能会衍生出非常多的上层协议,比如:HTTP HTTPS MYSQL POP3 ……

2、HTTP通讯协议的讲解

是属于TCP/IP协议的上层协议,所以它也存在:3次握手,4次挥手的过程,它同样也依赖于连接!

HTTP版本:1.0 1.1(使用最为广泛) 2.0

1.0 每个请求都会创建一个连接,请求完毕,连接断开

1.1 每个文件对应创建一个连接,同一个文件发出的请求,可以共享对应的连接,文件关闭连接关闭

2.0 每个浏览器对应创建一个连接,同一个浏览器发出的请求, 可以共享对应的连接,浏览器关闭连接关闭

版本更新的目的是:尽量的减少连接创建&销毁的过程,做到连接复用

HTTP通讯协议的分类:请求,响应

HTTP请求协议:请求行,请求头,空行,请求体

请求行:请求方式(GET/POST) URL HTTP协议版本号

请求头:告诉服务端,浏览器的相关信息

空行:分割请求头 & 请求体

请求体:用于在POST时,传输数据

https://img-blog.csdnimg.cn/direct/cb068221195c4c1a8d78d276e9d15a47.png" alt="在这里插入图片描述" />

对应的响应协议:

状态行:协议版本,状态码以及状态码的描述(200,400,404,405,302,500)

响应头:后端服务器的相关信息

空行:分割响应头 & 响应体

响应体:响应数据的东西

https://img-blog.csdnimg.cn/direct/aecb29295ffa406ba3d9211365308ccd.png" alt="在这里插入图片描述" />

Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩

缓存击穿

缓存击穿:redis中没有,但是数据库有

顺序:先查缓存,判断缓存是否存在;如果缓存存在,直接返回数据;如果缓存不存在,則查询数据库,将数据库的数据存入到缓存

https://img-blog.csdnimg.cn/direct/bc4f1b20242446809a919baae5c97628.png" alt="在这里插入图片描述" />

解决方案:将热点数据设置过期时间长一点;针对数据库的热点访问方法上分布式锁;

缓存穿透

缓存穿透:redis中没有,数据库也没有

https://img-blog.csdnimg.cn/direct/df8aca8876494fdca225330f68bccc22.png" alt="在这里插入图片描述" />

解决方案:

(1)将不存在的key,在redis设置值为null;

(2)使用布隆过滤器;

原理:https://zhuanlan.zhihu.com/p/616911933

https://img-blog.csdnimg.cn/direct/06b14ec3fd4b41f38ade429011ce0813.png" alt="在这里插入图片描述" />

布隆过滤器:

如果确认key不存在于redis中,那么就一定不存在;

它说key存在,就有可能存在,也可能不存在! (误差)

https://img-blog.csdnimg.cn/direct/5a4759f51f2c4401b2196321d3cc7f4d.png" alt="在这里插入图片描述" />

布隆过滤器

1、根据配置类中的 key的数量 ,误差率,计算位图数组【二维数组】

2、通过布隆过滤器存放key的时候,会计算出需要多少个hash函数,由hash函数算出多少个位图位置需要设定为1

3、查询时,根据对应的hash函数,判断对应的位置值是否都为1;如果有位置为0,则表示key一定不存在于该redis服务器中;如果全部位置都为1,则表示key可能存在于redis服务器中;

缓存雪崩

缓存雪崩:

Redis的缓存雪崩是指当Redis中大量缓存数据同时失效或者被清空时,大量的请求会直接打到数据库上,导致数据库瞬时压力过大,甚至宕机的情况。

造成缓存雪崩的原因主要有两个:

1.相同的过期时间:当Redis中大量的缓存数据设置相同的过期时间时,这些数据很可能会在同一时间点同时失效,导致大量请求直接打到数据库上。

2.缓存集中失效:当服务器重启、网络故障等因素导致Redis服务不可用,且缓存数据没有自动进行容错处理,当服务恢复时大量的数据同时被重新加载到缓存中,也会导致大量请求直接打到数据库上。

预防缓存雪崩的方法主要有以下几种:

1.设置不同的过期时间:可以将缓存数据的过期时间分散开,避免大量缓存数据在同一时间点失效。

2.使用加锁:可以将所有请求都先进行加锁操作,当某个请求去查询数据库时,如果还没有加载到缓存中,则只让单个线程去执行加载操作,其他线程等待该线程完成后再次进行判断,避免瞬间都去访问数据库从而引起雪崩。

3.提前加载预热:在系统低峰期,可以提前将部分热点数据加载到缓存中,这样可以避免在高峰期缓存数据失效时全部打到数据库上。

4.使用多级缓存:可以在Redis缓存之上再使用一层缓存,例如本地缓存等,当Redis缓存失效时,还能够从本地缓存中获取数据,避免直接打到数据库上。

https://img-blog.csdnimg.cn/direct/69b2c4b42a05449f9087c19e1e3f6902.png" alt="在这里插入图片描述" />

本地缓存:ehcache oscache spring自带缓存 持久层框架的缓存


总结

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解


http://www.niftyadmin.cn/n/5399913.html

相关文章

管理类联考–复试–调剂

文章目录 何为调剂?一、调剂流程1一、调剂流程2二、调剂注意事项三、如何搜集信息1、网上渠道2、电话渠道3、人情渠道 何为调剂? 教育部规定,考生如果符合复试条件而不能在第一志愿院校参加复试的,考生档案应送至第二志愿院校或在…

【力扣】无重复字符的最长子串,滑动窗口 + 哈希集合

无重复字符的最长子串原题地址 方法一:滑动窗口(双指针) 哈希集合 考虑找出字符串s的所有的无重复字符的子串,求出这些子串长度的最大值即可。 使用下标 [left,right] 来维护子串。我们只需要找到每一个 left 对应的所有 righ…

YOLOv6代码解读[05] yolov6/core/engine.py文件解读

#!/usr/bin/env python3 # -*- coding:utf-8 -*- from ast import Pass import os import os.path as osp import time from copy import deepcopy from tqdm import tqdm import cv2 import numpy as np import mathimport torch from torch.cuda

Arm平台下各种memcpy优化对比<三>

因memcpy导致tda4vm上的h264解码占CPU较高而改弃&#xff0c;从网上找到各种memcpy的优化代码&#xff0c;在一起做了个运行速度对比&#xff0c;请查收&#xff1b; #include <stdio.h> #include <stdlib.h> /* rand, srand */ #include <string.h> #i…

VUE 入门及应用 ( API )

4.API 4.1. 全局API 通过 Vue 调用 的 就是全局 api, 如前面的 Vue.component() 4.1.1.Vue.directive 自定义指令 Vue.js 中的 Vue.directive 是 Vue 提供的一种自定义指令&#xff08;Directives&#xff09;的功能。 自定义指令允许开发者扩展 HTML 元素的功能&#xff…

【笔记】:更方便的将一个List中的数据传入另一个List中,避免多重循环

这里是 simpleInfoList 集合&#xff0c;记为集合A&#xff08;传值对象&#xff09; List<CourseSimpleInfoDTO> simpleInfoList courseClient.getSimpleInfoList(courseIds);if(simpleInfoListnull){throw new BizIllegalException("当前课程不存在!");}这…

C# 解决模拟键盘事件SendKeys.SendWait()特殊字符转义

一、背景 需要模拟键盘事件输出获取到的第三方的字符串&#xff0c;但是第三方的字符串存在特殊字符&#xff0c;比如号&#xff0c;用常规方法输出的时候&#xff0c;对特殊字符会进行转义。 二、解决办法 1、使用第三方库InputSimulator simulator.Keyboard.TextEntry(字符…

前端面试题汇总(一)

1.html语义化 HTML语义化是指在编写HTML代码时&#xff0c;尽可能使用具有明确含义的标签来描述页面内容的结构和意义&#xff0c;以便让浏览器、搜索引擎和开发者更好地理解和解释页面内容。通过使用语义化的HTML标签&#xff0c;可以提高页面的可访问性、可维护性和可读性&a…