华为数通HCIA-网络参考模型(TCP/IP)

网络通信模式

作用:指导网络设备的通信;

OSI七层模型:

7.应用层:由应用层协议(http、FTP、Telnet.)为应用程序产生对应的数据;

6.表示层:将应用层产生的数据转换成网络设备看得懂的语言

5.会话层:为应用数据产生一个独立的会话,放置不同数据之间的相互干扰

4.传输层:为应用数据封装一层传输层头部,用于为数据提高传输服务;

TCP--可靠、传输效率慢;

UCP--不可靠、传输效率高;

文字、文件--采用TCP封装

语音、视频--采用UDP封装

3.网络层:为数据封装网络层头部:

封装sip以及dip;

sip:发送端的ip地址;

dip:目的端的ip地址;

2.数据链路层:为数据封装数据链路层头部

一般会封装smac、dmac;

smac:发送端的mac地址;

dmac接收端的mac地址;

1.物理层:将已经打包好的数据转换成适合在物理链路上进行传递的信号进行发送;

TCP/IP常见协议

应用层

HTTP(Hypertext Transfer Protocol,超文本传输协议):用来访问在网页服务器上的各种页面。

FTP(File Transfer Protocol,文件传输协议):为文件传输提供了途径,它允许数据从一台主机传送到另一台主机上。

DNS(Domain Name Service,域名称解析服务):用于实现从主机域名到IP地址之间的转换。

传输层

TCP (Transmission Control Protocol,传输控制协议) :为应用程序提供可靠的面向连接的通信服务。目前,许多流行的应用程序都使用TCP。

UDP(User Datagram Protocol,用户数据报协议):提供了无连接通信,且不对传送数据包进行可靠性的保证。

网络层

IP(Internet Protocol,互联网协议):将传输层的数据封装成数据包并完成源站点到目的站点的转发,提供无连接的、不可靠的服务。

IGMP(Internet Group Management Protocol,因特网组管理协议):负责IP组播成员管理的协议。它用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。

ICMP(Internet Control Message Protocol,网际报文控制协议):基于IP协议在网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

数据链路层

PPP(Point-to-Point Protocol,点对点协议):一种点对点模式的数据链路层协议,多用于广域网。

Ethernet( 以太网协议 ):一种多路访问广播型数据链路层协议,是当前应用最为广泛的局域网技术。

PPPoE(Point-to-Point Protocol over Ethernet,以太网承载PPP协议):PPPoE提供通过简单桥接访问设备(接入设备)把一个网络的多个主机连接到远程访问集中器的功能。常见的应用有家庭宽带拨号上网。

应用层

应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。
应用层的PDU被称为Data(数据)。

 TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU(Packet Data Unit,协议数据单元)彼此交换信息,确保网络设备之间能够通信。
不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。

常见应用层协议 - FTP

FTP(File Transfer Protocol)是一个用于从一台主机传送文件到另一台主机的协议,用于文件的“下载”和“上传”,它采用C/S(Client/Server)结构。

 常见应用层协议 - Telnet

Telnet是数据网络中提供远程登录服务的标准协议。 Telnet为用户提供了在本地计算机上完成远程设备工作的能力。

 用户通过Telnet客户端程序连接到Telnet服务器。用户在Telnet客户端中输入命令,这些命令会在服务器端运行,就像直接在服务端的控制台上输入一样。

常见应用层协议 - HTTP

HTTP(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

 传输层

传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”(Port to Port)的连接。
传输层的PDU被称为Segment(段)。

网络层头部(ip头)

封装协议:ip协议

关键内容:

版本:v4、v6、默认为v4

TOS:服务类别,用于对流量进行分类,实现QOS;

分片字段:分片id、flags、偏移量;

分片:当网络设备需要发送的数据大小,超出了接口MTU(最大发送单元,默认为1500B)时,需要将数据分成若干个小的数据发送出去,接收端收到后进行重组;

分片id:用于标记一个数据是否为分片数据,如果是的话,分片id不为0;

flags:其中更多段位用于标识分片是否为最后一个分片,如果不是则为1,如果是则为0,当接收端收到flags位为0的分片时,即可开始进行重组;

偏移量:用于标识分片的重组顺序,以防分片在传输过程中,出现顺序互换,导致数据包错乱的情况,

eg:

4500B数据,分片1 1500B

2 1500B

3 1500B

偏移量: 0 1499 分片1

1500 2999 分片2

3000 4499 分片2

TTL (生存时间)

范围: 0~255,初始值为255;

作用: 1、标识数据包经过了多少台三层设备(路由器、三层交换机、防火墙);

2、防止数据包无限转发,

原理: 当一个数据包被发出时,TTL为255,每经过一台三层设备转发,就会减1

当数据包中的TTL被减为0时,失去被发送的资格;

协议号

作用: 用于标识上层协议类型,

可以实现设备在处理网络层头部时,得知上层协议类型,提前调用对应的协议出来处理数据:

TCP--6

UDP--17

sip:发送端的ip地址

dip:接受端的IP地址

TCP/IP

传输层协议

TCP(传输控制协议)

作用:为数据封装TCP头部,提供可靠的传输服务;

封装内容:

端口号;

定义:大小16bit,范围为0~65535,其中0~1023属于知名端口号,1024~65535属于自定义端口号;

作用:源端口号随机从自定义端口号中生成,没有特殊含义;

目的端口号用于标识上层协议;(http-80、FTP-20、21、telnet-23)

序列号、确认号;

控制位:常见SYN、ACK、FIN位,代表TCP的报文类型,比如SYN报文的SYN位=1;

window(窗口值):代表同一时间内,最多可以发送以及接收多大的数据,最多16bit;

可靠性机制

1、面向连接

当需要传输基于TCP的流量时,需要先建立TCP连接通道,通过三次握手的方式建立;

(1)主动端发送SYN报文给被动端,其中会携带随机生成的序列号(a),用于请求建立TCP连接

(2)被动端收到后,会产生一份SYN以及ACK同时置位的TCP报文,其中ack号为a+1,用于确认跟主动端建立连接,另外还会产生一个随机的序列号(b),用于请求被动端到主动端的TCP连接;

(3)主动端收到被动端的报文后,产生一份ACK报文,其中ack=b+1,用于对被动端向主动端的连接请求进行确认;

(4)被动端收到后,双向连接建立完成;

2、确认机制/重传机制

所有基于TCP的流量都会携带一个序列号,当设备发出一份基于TCP的流量后,必须收到对端的ACK报文进行确认,才会继续发送下一份,否则会进行重传;

3、流控机制/窗口滑动机制

作用:确保被发送出去的基于TCP的流量,不会因为双方的窗口值有差异,而出现丢包现象;

原理:被发送的TCP流量,会携带发送端的窗口值,如果接收端的窗口值,小于发送端的窗口值,则会在进行确认时,通过ack号以及window值告知发送端,发送端会根据接收端的窗口值,调整自己的发送窗口;

4、关闭连接

当需要停止传输TCP流量时,需要把第一步建立的TCP连接进行关闭,通过四次挥手的方式进行关闭;

(1)主动端发送FIN以及ACK位同时置位的TCP报文,其中序列号以及ack号均为随机产生的,假设序列号为a,ack号为b

(2)被动端收到后,先产生一份ACK报文,其中ack号为a+1,发送出去,用于确认关闭主动端到被动端的连接;

(3)被动端再产生一份FIN报文,其中序列号为b,发送出去,用于请求关闭被动端到主动端的连接;

(4)主动端收到后,产生ACK报文,其中ack号为b+1,发送出去,用于确认关闭被动端到主动端的连接;

至此,双向连接关闭成功;

特点:可靠性高、效率低下;

应用:适用于对丢包率要求较高的流量,如文本类流量;

UDP(用户数据包协议)

作用:为数据封装UDP头部,提供效率高的传输服务;

封装内容:主要就是端口号;

可靠性机制:无

特点:效率高、可靠性差;

应用:适用于语音、视频等一些对时延比较敏感、连续要求较高的流量;

TCPUDP 端口号

 客户端使用的源端口一般随机分配,目标端口则由服务器的应用指定;
源端口号一般为系统中未使用的,且大于1023;
目的端口号为服务端开启的应用(服务)所侦听的端口,如HTTP缺省使用80。

TCP的建立 - 三次握手

任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接

TCP连接建立的详细过程如下:
        由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
        接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
        PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

TCP的序列号与确认序列号

TCP 使用序列号和确认序列号字段实现数据的可靠和有序传输。 

假设PC1要给PC2发送一段数据,传输过程如下:
1. PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。
2. PC1会把每一段数据的第一个字节的编号作为序列号(Sequence  number),然后将TCP报文发送出去。
3. PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1 )+载荷长度=下一段数据的第一个字节的序号(a+1+12)
4. PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。
为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认。
 

TCP的窗口滑动机制

TCP通过滑动窗口机制来控制数据的传输速率

 1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
5. 发送方根据接收方当前的Window大小发送相应数量的数据。

TCP的关闭 - 四次挥手

当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:
1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

网络层

传输层负责建立主机之间进程与进程之间的连接,而网络层则负责数据从一台主机到另外一台主机之间的传递。
网络层的PDU被称为Packet(包)。

 IPv4( Internet Protocol Version 4),简称IP,是目前应用最广泛的网络层协议。

网络层协议工作过程

 

当采用IP作为网络层协议时,通信的双方都会被分配到一个“独一无二”的IP地址来标识自己。IP地址可被写成32位的二进制整数值形式,但为了方便人们阅读和分析,它通常被写成点分十进制的形式,即四个字节被分开用十进制表示,中间用点分隔,比如192.168.1.1。
IP数据包的封装与转发:
网络层收到上层(如传输层)协议传来的数据时候,会封装一个IP报文头部,并且把源和目的IP地址都添加到该头部中。
中间经过的网络设备(如路由器),会维护一张指导IP报文转发的“地图”——路由表,通过读取IP数据包的目的地址,查找本地路由表后转发IP数据包。
IP数据包最终到达目的主机,目的主机通过读取目的IP地址确定是否接受并做下一步处理。
IP协议工作时,需要如OSPF、IS-IS、BGP等各种路由协议帮助路由器建立路由表,ICMP帮忙进行网络的控制和状态诊断。


数据链路层

数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。数据链路层的PDU被称为Frame(帧)。
以太网(Ethernet)是最常见的数据链路层协议。

 以太网与MAC地址

 

MAC地址(物理地址)

 MAC地址由48比特(6个字节)长,12位的16进制数字组成。例如:48-A4-72-1C-8F-4F

作用:唯一标识一张网卡(全球唯一)

特点:设备天生就有,并且无法后期更改;

格式:十六进制;

大小:48bit

分类:根据通信类型进行分类:

单播mac:用于唯一标识一张网卡,实现1对1通信,二进制角度的第8bit固定为0;

组播mac:用来标识一组设备,实现一对多通信,二进制角度的第8bit固定为1;

广播mac:用于实现1对所有通信,mac地址为F(十六进制角度),在二进制角度全为1

地址解析协议 (ARP)

ARP (Address Resolution Protocol)地址解析协议:
根据已知的IP地址解析获得其对应的MAC地址。

作用:
ARP是根据IP地址获取数据链路层地址的一个TCP/IP协议,从而完成数据封装。
ARP是IPv4中必不可少的一种协议,它的主要功能是:
将IP地址解析为MAC地址;
维护IP地址与MAC地址的映射关系的缓存,即ARP表项;
实现网段内重复IP地址的检测。

报文:

ARP层——数据链路层

ARP层:源ip、目标ip(target ip)、源mac、目标mac;

ARP缓存表

用于记录ip地址与mac地址的对应关系;

查看 终端——>arp -a

路由器、交换机——>display arp

arp工作过程

1、广播请求阶段;

当一台设备需要封装dmac时,先查看自身的arp缓存表中是否存在对应的mac地址,如果存在则直接完成封装,如果没有则发送ARP请求报文进行请求;

ARP请求

ARP层

sip:自己

tip:请求的对象的ip地址

smac:自己

tmac:空

数据链路层

smac:自己

dmac:全F(广播发送)

2、单播回应阶段:

当一台设备收到ARP请求后,拆除数据链路层头部,看到ARP层,判断目标ip是否为自己,如果不是,则直接丢弃,如果是,则执行以下操作:

(1)将ARP层中sip以及smac的对应关系学习进自身的ARP缓存表,供日后使用;

(2)将对端请求的mac地址填进ARP请求的目标mac中,然后产生ARP回应报文单播发送出去;

其中ARP层的sip、tip、smac、tmac为ARP请求的源目互换,数据链路层的smac以及dmac直接复制ARP层的,进行单播发送;

3、请求端收到ARP回应后,将ARP层的sip以及smac的对应关系学习进ARP缓存表中,完成数据封装;

免费ARP(特殊的ARP请求)

特点:ARP层的sip以及tip一致,均为自身的ip地址;

作用:检测ip地址的冲突性;

发送时机:当一台网络设备刚获取到一个新的ip地址时就会发送;

原理:当发出一个免费ARP后,如果收到回应,则说明ip地址存在冲突,则不能使用该ip;

物理层

数据到达物理层之后,物理层会根据物理介质的不同,将数字信号转换成光信号、电信号或者是电磁波信号。
物理层的PDU被称为比特流(Bitstream)。
 

 常见传输介质

双绞线:当今以太网最常见的传输介质,按照抗电磁干扰能力还可以分为:
STP-屏蔽双绞线
UTP-非屏蔽双绞线
光纤传输,按照功能部件可分为:
光纤:光传输介质,简单的说,就是一根玻璃纤维,用于约束光传输的通道。
光模块:将电信号与光信号互转的器件,产生光信号。
串口电缆在WAN(Wide Area Network,广域网)中大规模使用,根据WAN线路类型不同,串口电缆在设备上连接的接口类型也不同:异/同步串口、ATM接口、POS接口、CE1/PRI接口等。
无线信号的传输可以通过电磁波进行,例如:无线路由器将数据通过调制以电磁波发送出去,移动终端的无线网卡将电磁波解调,得到数据,完成从无线路由器到移动终端的数据传输。

中间网络数据传输

封装好的完整数据,将会在网络中被传递。
一般情况下:
网络中的二层设备(如以太网交换机)只会解封装数据的二层头部,根据二层头部的信息进行相应的“交换”操作。
网络中的三层设备(如路由器)只会解封装到三层头部,并且根据三层头部的信息进行相应的“路由”操作。
注:“交换”和“路由”的详细细节和原则,将会在后面的课程中详细介绍。

 接收方数据解封装

5 应用层:相当于OSI模型中的5~7层的功能; data

4 传输层 段

3 网络层 包

2 数据链路层 帧

1 物理层 bit流

数据发送:将应用层产生的数据,基于TCP/IP五层模型,由上往下进行逐层的封装,然后发送出去的过程

数据接收:网络设备收到数据后,进行基于TCP/IP五层模型,由下往上逐层解除封装,直至看到应用层数据为止的过程

数据转发:数据从发送端发出,到接收端之间,经过的网络设备负责将数据进行转发

其中路由器工作在网络层,根据网络层头部进行转发;

交换机工作在数据链路层,根据数据链路层头部进行转发;

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react ant add/change created_at

1.引入ant的 Table import { Table, Space, Button, message } from antd; 2.获得接口的数据的时候增加上创建时间 const response await axios.get(${Config.BASE_URL}/api/v1/calculation_plans?token${getToken()});if (response.data.message ok) {const data respon…

从感知到理解-融合语言模型的多模态大模型研究

©PaperWeekly 原创 作者 | 张燚钧 单位 | 中国移动云能力中心 研究方向 | 预训练大模型 引言 近年来,大语言模型(Large language model, LLM)取得了显著进展。以 ChatGPT 为代表的 LLM 在自然语言任务上展现出惊人的智能涌现能力。尽管…

JVM面试题--实践

目录 JVM 调优的参数可以在哪里设置参数值 war包部署在tomcat中设置 jar包部署在启动参数设置 JVM 调优的参数都有哪些? 设置堆空间大小 虚拟机栈的设置 年轻代中Eden区和两个Survivor区的大小比例 年轻代晋升老年代阈值 设置垃圾回收收集器 JVM 调优的工…

微服务实战项目-学成在线-选课学习(支付与学习中心)模块

微服务实战项目-学成在线-选课学习(支付与学习中心)模块 1 模块需求分析 1.1 模块介绍 本模块实现了学生选课、下单支付、学习的整体流程。 网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选…

实验笔记之——Android项目的适配

android有一个很烦人的点就是版本之间差距较大,且不兼容,导致不同版本之间代码兼容很容易出问题,一个常见的例子就是几年前自己开发的app,几年后再用竟然配置不了。。。为此,写下本博客记录一下配置旧项目的过程。 …

【微信小程序】van-uploader实现文件上传

使用van-uploader和wx.uploadFile实现文件上传,后端使用ThinkPHP。 1、前端代码 json:引入van-uploader {"usingComponents": {"van-uploader": "vant/weapp/uploader/index"} }wxml:deletedFile是删除文件函…

SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)

初衷 💢初衷💢 因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…

云原生全栈体系(二)

Kubernetes实战入门 第一章 Kubernetes基础概念 一、是什么 我们急需一个大规模容器编排系统kubernetes具有以下特性: 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,Kubernetes 可以负…

load、unload和pagehide、pageshow

一、load、unload和pagehide、pageshow的主要应用 1)load 和 unload 事件监听web页面的进入和离开,一般用于页面的首次加载、刷新和关闭等操作的监听; 2)pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片:K210(64位双核带硬件FPU和卷积加速器的 RISC-V CPU) 显示屏:LCD_2.8寸 320*240分辨率,支持电阻触摸 摄像头:OV2640,200W像素 扬声器&#…

SQL 语句中 left join 后用 on 还是 where,区别大了!

目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显…

RT1052的定时器

文章目录 1 通用定时器1.1 定时器框图1.2 实现周期性中断 2 相关寄存器3 定时器配置3.1 时钟使能3.2 初始化GPT1定时器3.2.1 base3.2.2 initConfig3.2.2.1 clockSorce3.2.2.2 divider3.2.2.3 enablexxxxx 3.3 设置 GPT1 比较值3.3.1 base3.3.2 channel3.3.3 value 3.4 设置 GPT…

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

LNMP及论坛搭建(第一个访问,单节点)

LNMP:目前成熟的一个企业网站的应用模式之一,指的是一套协同工作的系统和相关软件 能够提供静态页面服务,也可以提供动态web服务,LNMP是缩写 L:指的是Linux操作系统。 N:指的是nginx,nginx提…

操作系统 - 小记 230803

文章目录 计算机的硬件组成程序的存储和执行程序语言的设计和进化存储设备的层次结构操作系统 https://www.bilibili.com/video/BV1Q5411w7z5?p2 计算机的硬件组成 CPU CU,控制单元ALU,算数逻辑单元寄存器 IO Bridge 处理器和外部交互的桥梁Main Memory…

Java并发编程之顺序一致性

如果程序是正确同步的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 同步,即排队。 同一时刻,只能有一个线程和内存交互!&a…

windows环境下安装elasticsearch、kibana

通过本文可以快速在windows系统上安装elasticsearch、kibana环境。 当你用Integer类型的时候,要非常小心,因为100等于100、但是200不等于200,当然,如果你会一点小花招,也可以让100不等于100、让200等于200。(运算符比较…

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点

一、摘要 一般情况下,我们的笔记本或工作电脑都默认安装windows 分几个区,当下是win7 win8 win 10 win11 等,突然我们有需求需要安装个centos ,后面我们应当怎么做,要点是什么?一定要根据网上的贴子一步步来…

状态模式(State)

状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 State is a behavior design pattern that allows an object to change its behavior when its inter…

【LeetCode】地下城游戏(动态规划)

地下城游戏 题目描述算法分析编程代码 链接: 地下城游戏 题目描述 算法分析 编程代码 class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m dungeon.size();int n dungeon[0].size();vector<vector<int>> d…