网络原理OSI

目录

一、应用层

1、功能

2、协议的分类

二、UDP原理(传输层)

1、协议端格式

2、格式解释

三、TCP原理(传输层)

1、协议端格式

2、长度

3、可靠传输

(1)确认应答

(2)超时重传

(3)连接管理

(4)滑动窗口

(5)流量控制

(6)拥塞控制

(7)延时应答

(8)捎带应答

(9)面向字节流

(10)tcp异常情况处理

四、IP协议(网络层)

1、网络层的功能

2、协议端格式

3、格式解释

4、地址管理

5、网段划分

6、路由选择

五、以太网协议(数据链路层)

1、以太网数据帧格式

2、格式解释

3、区别IP地址和MAC地址


一、应用层

1、功能

①根据需要,明确要传输什么信息;②约定好协议,规定信息按什么格式组织。

2、协议的分类

eg:点外卖时,发送请求包括用户ID和位置信息。

用户ID:001;经度:35;纬度:87;

①自定义协议

程序员规定按照用户ID,经度,纬度顺序,中间逗号隔开的格式组织信息

请求:001,35,87

优点:格式灵活,随意更改;

缺点:可读性不高。

②xml(通过标签组织数据)

请求:

<request>
    <useID>001</useID>
    <position>35,87</position>
</request>

优点:可读性高;

缺点:标签写起来繁琐,传输时会占用许多网络宽带。

③json

{
  useID:"001",
  position:"35,87"
}

使用{}把键值对包裹起来。键值对之间用“,”分割,键与值之间用“:”分割,键是String类型,值可以是数字、字符串、json、数组等类型。

优点:可读性高;

缺点:传输时会占用许多网络宽带。

④protobuffer

使用二进制来传输数据。

优点:传输效率高,占用网络宽带最低;

缺点:可读性不高。

二、UDP原理(传输层)

1、协议端格式

2、格式解释

(1)16位源端口号:2个字节,发送方程序端口号;

(2)16位目的端口号:2个字节,接收方程序端口号。

(3)16位UDP长度:表示整个数据报的最大长度(报头+数据),为0-65535,即64kb。若发送的数据报长度超过64kb,则需在应用层手动分包,多次发送,在接收端手动拼接。

(4)16位UDP检验和:

①检验和:在数据传输中,由于磁场、电场等外部环境的影响,导致数据传输出错,检验和就是检查数据是否传输出错。本质上是一个字符串,体积比原始数据小,但是由原始数据生成的。原始数据相同,得到的检验和一定相同;检验和相同,原始数据大概率相同。

②基于检验和完成数据检验:

发送方整理好数据(data1),通过一定算法计算出检验和(checksum1);

发送方将data1和checksum1通过网络发送出去;

接收方收到数据(data2,可能和data1不一样)和检验和checksum1;

接收方根据data2通过一样算法计算出检验和checksum2;特别

对比checksum1和checksum2,若不同,则原始数据肯定不同;若相同,则原始数据大概率相同。

③计算检验和:

UDP使用的CRC算法(循环冗余算法),把当前要计算检验和的数据,每个字节都进行累加,把结果保存到两个字节的变量中,累加过程溢出也没影响。但这种算法也不是靠谱的。

md5算法:一系列公式,完成md5的计算。

特点:无论原始数据多长,计算得到的md5都是固定长度;原始数据中,只要一个字节不同,md5差异也会很大;不可逆,给一个原始数据可以计算出md5,但已知md5计算出原始数据难以实现。

三、TCP原理(传输层)

1、协议端格式

2、长度

(1)报头长度:最短20字节(没有选项),最长60字节

(2)报头+数据长度:可变,当长度不够用时,可使用保留位扩充。

3、可靠传输
(1)确认应答

①概念:发送端将数据报发送给接收端,接收端收到数据后会向发送端发送一个回应报文(acknowledge,ack)发送端接收到回应报文后就知道自己发送成功了。

②如何保证数据与回应报文对应上?如何解决数据后发先至的情况?

上述发送数据时,第一个载荷数据的第一个字节为1,就会在报文序号中填1(载荷数据第一个字节的序号),长度为1000字节,则最后一个是1000,但不会在序号中记录。确认序号是对应的应答报文的,是对应载荷数据的最后一个序号+1,意思是确认序号之前的数据都已成功收到。如果数据出现后发先至的情况,接收端可以根据数据包的序号字段在接收缓存区进行排序,确保数据包按照正确的顺序进行处理。

③怎样区分是业务数据还是应答报文?

若传输的报文是应答报文,则在标志位ack位为1,表示传输的报文是应答报文,若为0,则为普通业务数据报文。

(2)超时重传

①概念

确认应答是一个理想情况,但若传输过程中出现丢包情况,发送端未收到ack,此时就会出现超时重传。

②丢包

在传输数据时,若数据包太多,会在路由器/交换机上出现堵塞情况,此时路由器/交换机不会保存这些挤压的数据,而是直接放弃这些数据,就会出现“丢包”情况。

③不同丢包情况

要发送的数据丢了:

返回的应答报文丢了:

④重传

发送端无法区分哪种情况导致ack未送达,在规定等待时间内,只要没有收到ack,发送端都会重新发送数据。初始等待时间是可配置的,随着丢包情况变多,等待时间也会发生变化,等待时间会变长,但也不是无限变长,当达到一定程度,认为数据无法成功传输,就会放弃tcp连接,触发tcp重置连接操作。

当是ack丢包时,重传数据时,站在接收方角度,会不会收到两份一样的数据???

答案是不会的。接收端收到数据后会将数据放到接收缓存区,当数据第二次来时,接收端发现数据已在缓存区存在,就会放弃该数据,所以读数据时也只会读取到一次。

(3)连接管理

①建立连接(三次握手)

上述建立连接过程中,传输的数据是一个简短的,没有业务的数据包,只是为了唤起对方。由发送端(客户端)先发起连接,此时数据的报文syn位为1;接收端收到syn后,接收端向发送端发送一个简短的,没有业务的数据包,此时数据的报文syn、ack位为1(合并为1次,提高效率),发送端收到后向接收端发送回应报文。完成三次握手后,发送端和接收端之间就建立了连接,即他们之间保存了对方的信息。

LISTEN状态:服务器这边把socket创建好,并把端口号绑定好,进入LISTEN状态,此时允许客户端随时建立连接。

ESTABLISHED状态:连接建立完成,可以进行正常通信。

三次握手的意义:确认当前网络是否通畅;使发送端和接收端确认发送和接收能力是否正常;让通信双方,在握手过程中,对一些参数(序号等)作出协商。

②断开连接(四次挥手)

发送端(服务器或者客户端)调用close方法或结束进程,发送报文,此时数据的报文FIN位为1;接收端收到报文发送应答报文,此时数据的报文ACK位为1;且调用close方法或结束进程发送报文,此时数据的报文FIN位为1。发送端收到数据报文后,发送应答报文。此时4次挥手完成,连接断开。

为什么这里ACK和FIN不能合并,ACK可以和SYN合并???

因为ACK和SYN是内核触发的,同一个时机发送可以合并;而FIN是应用程序执行的,与ACK发生的时机不同,不能合并;TCP还有一种机制是延时应答,能够拖延ACK的发送,ACK滞后就有机会和FIN合并。

TIME_WAIT状态:哪一方先断开连接,哪一方就会进入TIME_WAIT状态。若最后一个ACK丢失,接收端超时重传FIN,但此时发送端已经没有了,接收端一直无法收到ACK,此状态就是让发送端等待一段时间,防止ACK丢失了超时重传时也无法收到ACK。假设网络上两个节点通信消耗的最大时间为MSL,则等待的时间就为2MSL。

(4)滑动窗口

①背景

发送端发送一个数据,发送端收到应答报文后再发送下一个数据。但这样一发一收的话效率低。可不可以一次多发几个数据,批量传输,提高效率。

②具体机制

窗口大小:无需等待确认应答,发送端一次发送数据的最大数量。窗口大小越大,传输效率越高。上图中的窗口大小就是4000.

当收到一个ACK包之后,滑动窗口就向后移动,继续发送下一个数据。但若是中途出现丢包情况怎么解决???

③ACK丢包

此时ACK丢包了,不用进行重传。比如上图确认序号为1001的ACK包丢了,但确认序号为2001的ACK包发送端已经收到,表明2001序号之前的数据接收端都已经收到,1001的ACK包也就没那么重要了。

④数据包丢包

此时比如1001-2000的数据包丢包了。A需要知道此数据包丢了,B反复告诉A我需要1001序号的数据,在重复几次后,A就知道了1001序号的数据包没有发送成功,就会重新发送。发送成功后,就开始现在已经收到数据的应答报文。

若传输的数据少也不频繁,就使用普通的确认应答和超时重传;若传输的数据多且频繁,就使用滑动窗口模式。

当滑动窗口也不是越大越好,若一次传输的数据太多,就会出现阻塞,接收端处理不过来,就容易出现丢包情况。

(5)流量控制

①概念

根据接收端接收数据的能力,对滑动窗口大小进行控制。滑动窗口大小不应该超过接收端接收数据的能力。

②接收端接收数据能力

接收端接收到数据之后,会把数据放到接收缓冲区,接收端这边的应用程序read后,接收缓存区就会把数据删除,此时接收缓存区剩余空间大小就大了。接收缓存区剩余空间越大,接收端接收数据能力就越大。

③具体机制

接收端每次收到数据之后,就会把接收缓冲区剩余空间大小通过ACK包传输给发送端,发送端收到ACK包后就会根据接收缓冲区剩余空间大小调整下一轮的窗口大小。但若接收缓存区已满,没有数据传输,也没有ACK包告诉发送端接收缓存区什么时候有剩余。此时,发送端就会给接收端不断发送窗口探测包,不携带具体的业务数据,只是为了触发ACK包,获取接收缓存区剩余空间。

(6)拥塞控制

①概念:流量控制考虑了接收方的接收能力,而拥塞控制是考虑了整个通信的路径,考虑了通信过程中中间结点的情况,任何一个结点处理能力达到上限都容易导致数据传输出现丢包情况。

②具体机制

滑动窗口以一个较小的大小传输数据,之后以指数增长窗口大小,当到达阈值之后,窗口大小以线性增长,当出现丢包情况后,降低阈值,滑动窗口开始新一轮的动态变化。 

注:流量控制和拥塞控制机制都在限制窗口大小,最终窗口大小是两种机制的最小值。

(7)延时应答

具体机制:平常情况下,A给B发送数据,B收到数据后就会立即返回ACK,但有时也会延时应答。B收到数据后,先不着急返回ACK,等一段时间后,可能B的接收缓存区剩余空间也会变多,此时返回ACK也会提高传输效率。

(8)捎带应答

具体机制:捎带应答是在延时应答的基础下提高tcp的传输效率,在传输数据时,往往是一问一答的方式,A给B请求,B给A应答报文,B给A响应,在延时应答后,应答报文会滞后,此时响应正好计算完成,则B将应答报文和响应可以一同返回给A,从而提高传输效率。

(9)面向字节流

①问题

在面向字节流传输时,当有多个应用层数据包被传输时,在接收端的缓冲区就容易出现粘包问题,无法区分从哪里到哪里是一个完整的数据包。

②解决办法

明确应用数据包之间的边界

引入分隔符;引入长度

(10)tcp异常情况处理

①进程崩溃tcp

进程结束相当于调用了socket.close()方法,触发四次挥手,tcp断开连接。进程结束时,tcp的连接还未断开。

②正常关机

强制结束进程,如果在系统关闭之前完成了四次挥手,则会正常断开连接;如果在系统关闭之后,B的ACK和FIN才到达,此时B收不到ACK,就会超时重传,重传几次后也没有响应,就会放弃tcp连接,触发tcp重置连接操作,发现没有什么效果,也就释放连接了。

③主机断电(非正常)

系统关闭是一瞬间的事,来不及进行四次挥手,此时对端迟迟未收到数据。

若对端是接收端,tcp有一个心跳包机制,接收端会周期性向发送端发送一个没有业务的数据包,期望得到发送端的一个应答,若重复几次没有响应,则认为发送端挂了,接收端单方面释放连接。

若对端是发送端,发送端未收到应答,就会超时重传,重传几次后也没有响应,就会放弃tcp连接,触发tcp重置连接操作,发现没有什么效果,也就释放连接了。

④网线端口

是一瞬间的事,来不及进行四次挥手,此时对端迟迟未收到数据。

若对端是接收端,tcp有一个心跳包机制,接收端会周期性向发送端发送一个没有业务的数据包,期望得到发送端的一个应答,若重复几次没有响应,则认为发送端挂了,接收端单方面释放连接。

若对端是发送端,发送端未收到应答,就会超时重传,重传几次后也没有响应,就会放弃tcp连接,触发tcp重置连接操作,发现没有什么效果,也就释放连接了。

注:若需要将数据发给局域网中的所有设备(广播),使用UDP

四、IP协议(网络层)

1、网络层的功能

(1)地址管理;通过IP地址描述出一个设备在网络上的地址。

(2)路由选择;规划出合适的路径进行数据传输。

2、协议端格式

3、格式解释

(1)4位版本:若为4,代表IPV4版本;若为6,代表IPV6版本。

(2)8位服务类型:能够让IP协议切换形态。4种形态彼此之间是冲突的,最小延时、最小成本、最大吞吐量、最高可靠性。

(3)16位总长度:IP协议总长度为64kb,但是IP协议支持拆包组包。拆出的小包之间的16位标识是一样的,标志中是是否支持拆包和是否是最后一个包,13位片偏移是小包的相对位置,方便按顺序组包。

(4)8位生存时间:描述这个数据包,在网络上还能生成多久。TTL的单位是次,表明该数据包还能被路由器/交换机转发的次数。TTL会设置一个初始值(32,64,128....),每经过一次转发就会-1.若一个数据包,目的IP是不存在的,当TTL消耗完时,该数据包也就消失了。每个路由器都知道自己的相邻设备,所以到达目的IP消耗的TTL不会太大。

(5)8位协议:描述的传输层是TCP协议还是UDP协议。

4、地址管理

(1)IP地址:是一个32位的整数,为了方便人们理解,写作点分十进制方式,可以用2^32-1个IP地址,但在当代社会,上网设备多,IP地址存在不够用的问题。

(2)解决IP地址不够用的问题

①动态分配IP

同一时间,需要上网的设备才会分配一个IP地址。

②NAT机制(网络地址转化)

内网IP(局域网IP):如果一个IP地址是以10.或者172.16.-172.31.或者192.168.开头,IP就是内网IP,在同一个局域网内,内网IP之间不能重复;在不同局域网类,内网IP直之间可以重复。

外网IP(广域网IP):内网IP剩下的为外网IP,外网IP是唯一的,不可以重复。

通常一个学校,小区等有一个外网IP,一个外网IP内有多台设备,即有多个内网IP。

当电脑访问网站服务器时,需要先把电脑的内网IP地址通过NAT设备转换为外网IP地址,此时才能访问广域网,响应完成返回时,再通过NAT设备中的映射关系,将电脑外网IP地址转换为之前的内网IP地址。

当不同的电脑访问服务器时,若他们的内网IP地址是一样的,NAT设备转换时,在映射方面会结合端口号,使得区分数据应传给哪个设备;若IP地址和端口号都一样,则在转换时会分配他们不同的端口号,使得区分数据应返回给哪个设备。

③IPV6

16个字节表示IP地址,大幅度提高了IP地址的个数。但由于IPV4与IPV6不兼容,导致IPV6的普及程度并不高。

5、网段划分

IP地址会被划分成两部分,网络号(标识一个局域网)+主机号(标识一个局域网中的设备),同一个局域网下,主机号必须不同。

一个IP地址中,哪部分是网络号,哪部分是主机号是通过子网掩码确定的。

eg:IP地址为:192.168.100.176;子网掩码为:255.255.255.0

子网掩码转为二进制为:11111111 11111111 11111111 00000000(左侧为1,右侧为0,不会交替出现)

IP地址转为二进制为:11000000  10101000  01100100 10110000

两者取余:11000000 10101000 01100100 00000000

上述结果为网络号:192.168.100

(1)5类划分方式

若一个IP地址主机号全为0,表示是网络号;

若一个IP地址主机号二进制全为1,表示是广播地址,该局域网中的所有设备都能收到;

若一个IP地址是127.开头的表示是环回IP(loopback),能够排除网络不流畅的因素,测试;

6、路由选择

每个路由器内部都有一个数据结构路由表,传输数据时,根据目的IP,查路由表,如果查到了,就按照路由表给的方向继续转发;若没有查到,就按照路由表的默认表项继续转发。

五、以太网协议(数据链路层)

1、以太网数据帧格式

2、格式解释

①目的地址和源地址:指网卡的物理地址(mac),固定的,每个设备是唯一的;

②载荷数据类型:帧协议类型字段有三种值,分别对应IP(数据报长度不能超过1500字节(MTU),所以IP协议有拆包组包功能)、ARP、RARP;

③CRC:校验码。

3、区别IP地址和MAC地址

MAC地址用来识别数据链路层中相连的节点,描述路途上每个区间的起点和终点;

IP地址是整个路途的终点和起点。

在数据转发过程中,IP地址不会改变,MAC地址会根据转发情况改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/304999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学到了!微信这样回复客户既高效又方便!

对于企业来说&#xff0c;如何在微信上高效回复客户&#xff0c;提供良好的用户体验是很重要的。 但常常因为一人管理太多号&#xff0c;消息回复不过来&#xff1b;同时太多客户咨询&#xff0c;手忙脚乱&#xff1b;回复的话术让人感到不专业。 没关系&#xff0c;小编又办法…

STM32——通用定时器脉冲计数实验

1.脉冲计数实验原理 2.从模式配置结构体 typedef struct { uint32_t SlaveMode; /* 从模式选择 / uint32_t InputTrigger; / 输入触发源选择 / uint32_t TriggerPolarity; / 输入触发极性 / uint32_t TriggerPrescaler; / 输入触发预分频 / uint32_t TriggerFilter; / 输入滤波…

算法回忆录——排序

文章目录 1. 插入排序2. 选择排序3. 冒泡排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序8. 计数排序9. 桶排序10. 基数排序 1. 插入排序 分为两个序列&#xff0c;前面一个序列是排好序的&#xff0c;后面一个序列是未排好的。未排好的序列的第一个元素&#xff08;a&#x…

STM32H5培训(二)性能提升与功耗优化

文章目录 1. 前言2. 性能提升3. 功耗优化参考&#xff1a; 1. 前言 本篇主要介绍STM32H5系列的性能提升和功耗优化方面的具体表现。H5系列相比于F4系列在性能和功能上有较大的升级&#xff0c;包括更强的内核、更高的主频、更快的flash访问速度、更丰富的通信接口和先进的安全…

【算法Hot100系列】有效的数独

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

在wsl中安装miniconda

下载安装包 打卡miniconda的官网https://docs.conda.io/projects/miniconda/en/latest/,下载下来安装包&#xff0c;或者直接在乌班图中运行命令wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh,等待下载完毕 安装 到下载目录下执行命令…

Spring MVC入门案例!!!

1.先加入架包&#xff08;我这里使用了tomcat插件&#xff0c;你也可以直接按照原本的方式使用tomcat&#xff09; <packaging>war</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8&l…

R语言(12):绘图

12.1 创建图形 12.1.1 plot函数 plot(c(1,2,3),c(1,2,4)) plot(c(1,2,3),c(1,2,4),"b") plot(c(-3,3),c(-1,5),"n",xlab "x",ylab "y")12.1.2 添加线条&#xff1a;abline()函数 x <- c(1,2,3) y <- c(1,3,8) plot(x,y) lm…

飞塔FortiGate-1000C设备引进助力易天构建网络安全新防线

在当今数字化浪潮的推动下&#xff0c;企业对网络安全的需求日益迫切。为了应对不断升级的网络威胁&#xff0c;给客户提供最为优质的产品&#xff0c;易天引进了最新兼容性测试设备飞塔FortiGate-1000C&#xff0c;为光模块产品交付提供了更强劲的性能保障。 FortiGate-1000C是…

还不了解 Dockerfile 的同学不是好测试人

前言&#xff1a;近年来 Docker 非常火&#xff0c;想要玩好 Docker 的话 Dockerfile 是绕不开的&#xff0c;这就好比想要玩好 Linux 服务器绕不开 shell 道理是一样的。 今天我们就来聊一聊 Dockerfile 怎么写&#xff0c;那些指令到底是什么意思。 一、先来看一个简单的 D…

消息中间件

一、 消息中间件的介绍 消息中间件属于分布式系统中的子系统&#xff0c;关注数据的发送和接收&#xff0c;利用高效、可靠的异步消息传递机制&#xff0c;对分布式系统中的各个子系统进行集成。 1.1 为什么使用消息中间件 异步 解耦 缓冲能力 伸缩性 提高系统扩展性1.2 消息…

C++11新特性(也称c++2.0)

目录 1.输出C版本&#xff1a;cout << __cplusplus << endl; 2.Uniform Initialization(一致性初始化) 3.initializer_list&#xff08;形参&#xff09; 4.explicit 5.for循环的新用法 6.default和delete 7.Alias Template&#xff08;模板化名&#xff09…

Linux ssh 实现远程免密登录

一、背景 我搭建了一个 zookeeper 集群&#xff0c;写了一个 shell 脚本来控制集群的启动和关闭&#xff0c;但是我发现每次我执行 shell 脚本的时候&#xff0c;都需要我输入各个服务器的密码才可以运行&#xff0c;感觉很麻烦。shell 脚本里面连接其他服务器用的就是 ssh 的方…

HarmonOS 日期选择组件(DatePicker)

本文 我们一起来看基础组件中的 DatePicker 这就是 日程开发中的日期组件 他可以创建一个日期的范围 并创建一个日期的滑动选择器 这里 我们先写一个组件的骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 我们先在Column组…

Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战4&#xff08;解决Redis缓存穿透、雪崩、击穿&#xff09; &#x1f4da;订阅专…

想学习云计算么?教你如何免费白嫖微软和AWS的云资源一年

在这个数字化飞速发展的时代&#xff0c;云计算已成为IT行业的未来趋势。作为一名渴望进步的IT专业人员&#xff0c;掌握云计算不仅意味着技能的提升&#xff0c;更是升职加薪、拓宽职业道路的重要跳板。这里教你如何免费利用微软Azure和亚马逊AWS的云资源&#xff0c;为期一年…

oracle11范围表空间实例

1.表分区&#xff1a;范围分区&#xff0c;散列分区&#xff0c;列表分区&#xff0c;组合分区&#xff0c;inetrval分区 范围分区&#xff1a;商品零售表&#xff0c;按照销售日期所在的季度创建4个分区 --先建立表空间&#xff1a;临时表空间是不可以存放数据的&#xff0c;…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

Java学习笔记-day05-响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程&#xff0c;这里先记录下&#xff0c;响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系&#xff0c;它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

12.8-1.8

2023.12.8 redis容器 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf redis.conf不存在&#xff0c;需先在宿主机创建该目录下文件&#xff0c…