IPSEC VPN-详解原理

目录

IPSEC提供的安全服务

IPSEC协议簇

​编辑

安全协议

                1.传输模式

          2. 隧道模式

AH ---鉴别头协议

AH提供的安全服务:

AH头部 

AH的保护范围

        1.传输模式

        2.隧道模式

​编辑

ESP ---封装安全载荷协议

ESP提供的安全服务:

ESP的头部

ESP的保护范围

1.传输模式

2.隧道模式

​编辑

AH+ESP

1.传输模式

2.隧道模式

IKE-互联网密钥交换

第一阶段

第二阶段

数据传输阶段

手工建立SA流程

IKE的配置

IPSEC协议簇补充

IKEV2

IPSEC VPN的应用场景

IPSEC VPN网关部署

NAT下的VPN部署场景


IPSEC ----协议簇---一个基于网络层,应用密码学的安全信息协议组。
IPSEC 协议簇是针对 IPV6 设计的,在 IPV6 的产品中, IPSEC 是强制使用, 保证其数据传输的安全性 ;但是,也可以使用在IPV4 中,作为一个可选项来使用。

IPSEC提供的安全服务

机密性 ---数据加密
完整性 ---防篡改
可用性         
        数据源鉴别---身份认证      
                预共享密钥---PSK ---相当于两边对了一个暗号,这个暗号需要事先确定好。
                证书---遵循PKI体系---相当于一个被公认让你的身份证。
不可否认性 ---数字签名
重传攻击保护- --抗重放---IPSEC通过启用 序列号 的方法来进行防重放攻击。---相当于启用一个一次性的数字,不会再次生效。
有限的流量保护 ---在IPSEC中可以抓取感兴趣流,即可以 设定哪些流量需要进入到ipsec通道 中,进行保密传输,哪些不需要进入通道

IPSEC协议簇

安全协议

        工作方式---这里两种不同的工作方式,指的其实是两种不同的封装方式。

                1.传输模式

主要应用场景
        经常用于主机和主机之间端到端通信的数据保护。因为没有创建隧 道,所以,不能穿越公网,一般用于私网内部。
封装方式
        不改变原有的IP包头,在原始的数据包头后面出入IPSEC的包头,将原来数据封装成为被保护的数据。主要针对IP层及以上的数据进行保护,具体的保护方法和范围需要由选用的安全协议来决定。

          2. 隧道模式

主要应用场景
        因为可以跨公网创建隧道,所以,经常用于私网和私网之间通过公网进行通信,建立安全的VPN隧道。
封装方式
        增加新的IP头部,之后是IPSEC的头部,再之后是原始的数据包封装。
安全协议

AH ---鉴别头协议

封装位置在 网络层和传输层之间 ,其协议号为 51
AH提供的安全服务:
1,数据完整性保障---AH的主要工作就是保证数据的完整性的。
                       注意:AH 协议无法提供加解密的服务
2,数据源认证---身份认证
3,抗重放攻击
AH头部 
安全参数索引---SPI ---用来标识唯一的 SA(安全联盟:用于通信双方的基本信息的协商) 的。---- IPSEC SA ----注意,这个SA也是分通信方向的,如果需要构建这个安全通道,需要构建两条通信方向相反的SA 才行 。----不同的SA通道需要通过SPI进行标识,相当于SA的一个ID号。
序列号---防重放---不允许重复
AH的保护范围
        1.传输模式
        2.隧道模式
注意 AH 在进行完整性校验时,因为包含 IP 头部,而 IP 头部中的部分数据比如TTL, TOS(标识优先级) 这些参数,在传递的过程中会发生变化,所以, AH 在进行校验时将不包含这
些参数。
注意 因为AH在进行完整性校验的时候,包含有IP地址信息,但是,NAT技术会修改
IP地址信息,所以,AH协议无法通过NAT环境,否则将导致校验失败。

ESP ---封装安全载荷协议

封装位置在 网络层和传输层之间 ,其协议号为 50;
ESP提供的安全服务:
1,数据完整性保障
2,数据源认证---身份认证
3,抗重放攻击
4,ESP可以提供数据的加解密服务 ,并且, 加解密是可选的。
ESP的头部
注意
         ESP尾部主要目的是进行数据的填充 。因为数据进行加密主要使用的 对称加密算法,而其中分组加密需要针对固定长度的分组进行加密 ,如果最后分组的长度不足,则需要填充。满足加密的条件。还有就是下一头部因为包含数据信息,所以,也放在尾部进行保护,因为负载部分和尾部部分是会进行加密的。
ESP的保护范围
加密范围 --- 除了IP头部内容和ESP头部的内容外 ,剩余所有网络层以上的数据都会进行加密。

认证范围---不包含最外层的IP头部,但是包含ESP头部。

1.传输模式
2.隧道模式
AH和ESP的对比

AH+ESP

1.传输模式
2.隧道模式
结论: 只要有AH协议参与的封装都无法通过NAT环

IKE-互联网密钥交换

        主要用来完成IPSEC中需要的密钥相关参数的协商工作 。可以动态建立ipsec sa方法 ---IKE V1,IKE V2

 IKE ---SKEME,OAKLEY,ISAKMP

ISAKMP(互联网安全联盟密钥管理协议)---IKE协议的本体--- 主要用来完成IPSEC中需要的密钥相关参数的协商工作。可以动态建立ipsec sa --- UDP 500 ---源目标端口都必须是500。
SKEME,OAKLEY ---这两个协议可以理解为是IKE协商过程中使用到的资源库。
第一阶段
         主要目的是为了获得 建立IPSEC SA时使用的密钥 ,以及进行 身份认证 。--- IKE(ISAKMP SA) ---这个SA是双向逻辑的,不区分源和目标。 (协商加密参数的参数)
主模式----- 默认使用IP地址作为身份标识(不能改变IP因为它是和PSK 绑定关系) ---需要通过6个数据包进行交互,安全性更高。
第一二个数据包--IKE SA交换
1 ,CI ---cookie ---这个参数每个数据包中都会携带,在IKEV2中,变成了 SPI,在这里作用类似。
2 ,SA ---里面携带的是需要协商的安全参数---“五元组”
加密算法,哈希算法,身份认证, DH 组, SA 存活期
  AES          MD5             PSK        DH2    84600S(默认值)
注意 :手工建立的SA,一经建立,则将永久有效;但是IKE建立的SA,需要配置生存周期,周期时间到了之后,将重新建立SA。SA两端的数值不要求完全相 同,如果时间不同,则按照小的来执行。
第二个回包: 主要确认安全参数,如果安全参数都可以对的上,则将继续完成后面的协商。如果参数没有对上,则将回复一个 负载拒绝报文 ,结束 IKE SA 的建立。
第三四个数据包---DH密钥交换---对称密钥
1,NI,Nr---代表的是随机数
2,X,Y ---DH算法中需要公开的参数
这里,为了加强安全性, DH 算法会生成 四种密钥

PRF---hash算法的一种

种子密钥---剩余三种密钥都需要加入种子密钥运算得出,并且,种子密钥中计算时,会携带预共享密钥

SKEYID_e ---加密密钥---g^ir (代表的就是DH算法中计算出来的Z),CKY-I/CKY-
R(前面双方携带的cookie值)---- 用于第一个阶段5,6数据包和第二阶段数据包加
密使用
SKEYID_a- ---验证密钥--- 用于第二阶段hash时使用的密钥 ---HMAC算法(结合密
钥的HASH算法),安全性比不加入密钥的HASH算法更高。
SKEYID_d ---推导密钥--- 用于计算最终密钥(最终加密数据的密钥)的素材
第五六个数据包---进行身份认证---加密传输
1,ID ---身份信息---在主模式下,默认使用IP地址作为身份信息
2,hash ---针对之前SA信息再进行HASH运算,比对结果。这里的HASH运算会加入验证密钥一起进行,更加安全。

注意:前四个数据包是明文,五六数据包是密文 

野蛮模式---可以自定义身份标识,速度快,只需要三个数据包就可以完成协商,安全性低
注意:
         在野蛮模式中,可以自定义身份标识,主要是因为身份信息不需要加密,并且,前两个数据包都无法加密,所以,野蛮模式安全性较低。仅第三个数据包会进行加密( 前两个数据包是明文,第三个数据密文) 。但是, 野蛮模式适用于NAT环境以及IP地址不固定的环境。

两种模式对比
第二阶段
        基于已经建立的安全通道,来协商建立IPSEC SA的安全参数,完成后,则标志着IPSEC SA的建立。---快速模式(Quickmode)-- -UDP 500

IKE SA是双向只需要建立一条,IPSEC SA是单向的,要建立两条方向相反的数据链路

需要协商的安全参数: 

加密算法---正式传输数据时使用的加密算法(加密算法协商完成后,会计算密钥第一阶段                        计算出来的推导密钥会加入到该密钥的计算中)
HASH 算法---正式传输数据时进行完整性校验的算法
安全协议---AH/ESP
封装模式---传输模式/隧道模式
存活时间
PFS ---密钥完美向前保密 ---正常工作中,第二阶段的最终密钥是通过第一阶段的推导密钥计算出来的,但是,这样做不安全,推导密钥泄露可能导致最终密钥泄露。所以,可以开启这个PFS技术(注意:要开启需要两端设备都开启才行),之后,则将在第二阶段重新进行一次DH交换,计算最终的密钥。从而提高安全性。
数据传输阶段
        VPN黑洞 ---隧道建立之后,如果其中一段的设备异常重启,另一端还在有效期内,则他发送的数据将有去无回,就形成了VPN黑洞
解决方法--- DPD死亡对等体检测
类似于心跳检测机制---采用空闲计时器原理---两边同时开启一个固定时间的计时器,期间数据值直接发过去,如果计时器超时,则数据发送前,先发送一个DPD检测报文,如果收到对方的DPD应答报文,则将重置计时器。如果没有收到,并且,连续5次都没有收到,则将拆掉安全通道。
手工建立SA流程
IKE的配置
1,抓取感兴趣流
[r1]acl 3000 ---这里只能选择使用高级ACL列表,因为后面调用的时候,仅能调用高级的。
[r1-acl-adv-3000]rulepermit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0                                       0.0.0.255
2,配置IKE安全提议
[r1]ike proposal 1 ---后面需要添加一个提议的编号
[r1-ike-proposal-1]encryption-algorithm aes-cbc-128 ---定义加密算法---缺省是DES算法
[r1-ike-proposal-1]authentication-algorithm md5 ---定义校验算法---缺省是SHA1
[r1-ike-proposal-1]authentication-method pre-share ---定义认证方式---缺省是预共享密钥
[r1-ike-proposal-1]dh group2 ---定义DH组---缺省DH组1
[r1-ike-proposal-1]sa duration ? ---定义SA的老化时间----建议:老化时间修改的时候,要大                                                        于600S。

INTEGER<60-604800> Value of time(in seconds), default is 86400
[r1-ike-proposal-1]sa duration 86400

3,配置IKE对等体 

[r1]ike peer aa v1---需要声明对等体的名称(自定义),第一次进入时,需要写版本号
[r1-ike-peer-aa]ike-proposal 1 ---关联IKE安全提议
[r1-ike-peer-aa]exchange-mode ? ---选择一阶段的模式
         aggressive Aggressive mode ---野蛮模式
         main Main mode ---主模式
[r1-ike-peer-aa]exchange-mode main ---这里缺省选择的是主模式
[r1-ike-peer-aa]pre-shared-key cipher 123456 --- 定义预共享密钥的具体值,注意,两边必须一样
[r1-ike-peer-aa]remote-address 23.0.0.2 ---三位一体
1:邻居对等体的建邻地址;2:参与查找预共享密钥;3:作为身份标识验证对端身份
4,配置IPSEC的安全提议
[r1]ipsec proposal aa ---需要定义一个提议的名称
[r1-ipsec-proposal-aa]transform esp ---定义安全协议---缺省esp
[r1-ipsec-proposal-aa]esp encryption-algorithm aes-128 ---定义数据加密算法---缺省des
[r1-ipsec-proposal-aa]esp authentication-algorithm md5 ---定义数据验证算法---缺省 md5
[r1-ipsec-proposal-aa]encapsulation-mode tunnel ---选择封装模式---缺省为隧道模式

5,配置IPSEC安全策略 

[r1]ipsec policy aa 1 isakmp ---需要定义策略的名称和编号,并且需要选择手工模式还是IKE                                                   的方式。
[r1-ipsec-policy-isakmp-aa-1]security acl ? ---关联ACL列表
                     INTEGER<3000-3999> Apply advanced ACL
[r1-ipsec-policy-isakmp-aa-1]security acl 3000
[r1-ipsec-policy-isakmp-aa-1]ike-peer aa ---关联IKE对等体
[r1-ipsec-policy-isakmp-aa-1]proposal aa ---关联ipsec提议
6,接口调用
[r1-GigabitEthernet0/0/1]ipsec policy aa
注意:对端R3的IPSEC 也是相同的配置,在R3的g0/0/0接口调用
查看SA命令
display ike sa     查看IKE SA
display ipsec sa   查看IPSEC SA

IPSEC协议簇补充

解释域:主要是用来存储前面协商的一些参数 

SPD ---安全策略数据库
SAD ---安全关联数据库

IKEV2

IKEV1的缺点:
1,协商速度慢

        如果第一阶段使用主模式---6 + 3 = 9 条消息完成IPSEC SA的协商;
        如果第一阶段使用野蛮模式---3 + 3 = 6条消息完成IPSEC SA的协商。
IKEV2针对协商速度进行了优化:
IKEV2 中,第一阶段协商 IKE SA 仅需要两个数据包就可以完成;而第二个阶段,在
协商 IPSEC SA 时,也仅需要两个数据包就可以完成---2 + 2 = 4
2,IKEV1不支持远程用户接入
        如果IKEV1 想要接入远程用户,可以结合 l2tp来构建VPN隧道,只能借助l2tp,通过 ppp协议完成远程用户的认证。
         而 IKEV2增加EAP的认证方式来完成身份认证 ,则可以实现远程用户的接入。
注意 :防火墙上,一般 V1 V2 同时开启,发起协商的时候,一般使用 IKEV2 ,接受协商的时候,同时支持V1 V2

IPSEC VPN的应用场景

IPSEC VPN网关部署

IPSEC 不支持动态路由协议
        VPN设备安置在内网和公网的边界位置,这种方式最为简单,就是数据来到出口后,判断是否需要走VPN 隧道,匹配上的流量则通过 VPN 隧道安全的传输到对端私网中。(两边的私网网段需要区分开,否则将导致地址冲突)
网关部署的问题:
不太安全,因为边界设备将承载很多攻击行为,而VPN 设备只是保证业务数据安全的设备。
解决方案:
1.使用防火墙在边界充当VPN设备(但是,一台设备需要承担太多的功能,可能导致性能不足)
2,VPN设备下沉到内网中---VPN的单臂部署(NAT下的VPN部署场景)

NAT下的VPN部署场景

IKE协商
        
         第一个问题 ---我们企业一般会采用NAPT的方式来进行NAT转换。但是,在IKE协商中,要求源目端口号必须时UDP 500,否则可能导致协商失败。所以,在NAPT的环境下,则可能更改端口号,导致协商失败。----解决方案:NAT -T

第二个问题---身份认证的问题---主模式无法通过NAT环境----解决方案:使用野蛮模式 

数据传输阶段
         第一问题 ---AH在进行完整性校验的时候,会包含IP地址信息,所以,NAT如果转换了IP地址,则将导致校验失败。所以,在NAT环境下,无法使用AH协议。
解决方案:使用 ESP协议( 但是,使用ESP协议还需要分情况来看
1. 如果ESP选择传输模式                        
        四层封装的时候,里面存在 伪头部校验 。所谓伪头部就是传输层的协议在进行封装的时候,也需要进行完整性校验,但是,这个完整性校验的时候,还需要包含三层IP 头部中的部分数据一起进行校验。这些数据中,就包含了IP 地址的信息。在正常的 NAT 中环境,数据进行 NAT 转换(转换IP 地址或者端口号)数据包中传输层的伪头部校验也会重新计 算,但是,在ESP 选择传输模式的封装下,因为此时,传输层的内容已经被加密了,所以,NAT 转换后无法修改校验和,所以,导致对方在接受的时候,会出现校验和不匹配的问题,导致通信中断。所以,ESP在传输模式也时无法通过NAT 环境了。
2. ESP 隧道模式
        在这种环境下,因为添加了新的IP 头部,并且, NAT 修改的也是新 IP 头部。这个头部的内容没有进行完整性校验,所以,可以被修改。并且,四层在进行伪头部校验时使用的数据是原始IP 头部中的内容,新的 IP 头部内容变更,也无法影响到伪头部校验的结果。所以,ESP 隧道模式的封装可以通过NAT 环境。
NAT -T ----NAT穿越技术
        NAT-T会将IKE协商的数据包中的源端口和目标端口都修改为4500,并且,允许源端口不是4500,但是目标端口必须是4500。

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

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

相关文章

3月19日做题

[NPUCTF2020]验证&#x1f40e; if (first && second && first.length second.length && first!second && md5(firstkeys[0]) md5(secondkeys[0]))用数组绕过first1&second[1] 这里正则规律过滤位(Math.) (?:Math(?:\.\w)?) : 匹配 …

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了&#xff01;上次给大家带来的是iFlyCode和CodeFlying两款产品的测评&#xff0c;受到了大家的一致好评~ 今天咱就继续来聊聊&#xff0c;这次我们选的的对象是通义灵码和码上飞&#xff0c;从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

Intewl手机电商项目模板:前端Vue开发的强大助手与无限可能

Intewl手机电商项目模板&#xff1a;前端Vue开发的强大助手与无限可能 在快速发展的移动互联网时代&#xff0c;手机电商项目已经成为商业竞争的新战场。而在这个战场中&#xff0c;如何快速、高效地开发出功能齐全、用户体验优秀的手机电商应用&#xff0c;成为了每一个开发者…

Java安全 反序列化(1) URLDNS链原理分析

Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…

【LeetCode热题100】138. 随机链表的复制(链表)

一.题目要求 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值…

使用C#的winform控制数据库实例服务的运行状态

一、得到sqlserver的实例名 二、引用对应的程序集和命名空间 using System.ServiceProcess; C#操作服务要用的类 ServiceController 声明类 private ServiceController serviceController new ServiceController("MSSQLSERVER"); 三、判断服务状态 serviceCon…

阿里云2核4G4M轻量应用服务器价格165元一年

阿里云优惠活动&#xff0c;2核4G4M轻量应用服务器价格165元一年&#xff0c;4Mbps带宽下载速度峰值可达512KB/秒&#xff0c;系统盘是60GB高效云盘&#xff0c;不限制月流量&#xff0c;2核2G3M带宽轻量服务器一年87元12个月&#xff0c;在阿里云CLUB中心查看 aliyun.club 当前…

Bugku MISC做题笔记

简单套娃DX 这一题需要对png图片的结构有所了解。详细可参考https://www.w3.org/TR/png/ 幸好每一张图片只有一个错误&#xff0c;逐步调试&#xff0c;就可以发现所有错误&#xff0c;修正即可。具体错误参看python程序中的注释&#xff1a; import ossrc_dir .\\XD\\ de…

适配器模式(Adapter Pattern)

原文地址&#xff1a;https://jaune162.blog/design-pattern/adapter-pattern.html 更多精彩文章请移步&#xff1a;https://jaune162.blog 更多专题系列文章请移步&#xff1a;https://books.jaune162.blog 序言 在软件开发的世界中&#xff0c;我们经常会遇到一个棘手的问题…

Java8中Stream流API最佳实践Lambda表达式使用示例

文章目录 一、创建流二、中间操作和收集操作筛选 filter去重distinct截取跳过映射合并多个流是否匹配任一元素&#xff1a;anyMatch是否匹配所有元素&#xff1a;allMatch是否未匹配所有元素&#xff1a;noneMatch获取任一元素findAny获取第一个元素findFirst归约数值流的使用中…

分布式接口幂等性解析

一、概述 幂等性定义&#xff1a;用户对于同一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会因为多次点击而产生了副作用。【同一操作指的是同一个浏览器&#xff0c;发送相同的请求】。 常见场景&#xff1a; 提交订单接口。返回提交结果时网络出现故障&am…

UDF提权

目录 一、UDF概述 二、提权条件 三、漏洞复现 (一) 信息收集 1. Nmap信息收集 1.1、查看当前IP地址 1.2、扫描当前网段&#xff0c;找出目标机器 1.3、快速扫描目标机全端口 2. dirb目录扫描 3. 第一个flag 3.1、目录遍历漏洞 3.2、flag 4. 敏感信息利用 (二) 漏…

重学SpringBoot3-函数式Web

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-函数式Web 函数式Web编程简介RouterFunctionRequestPredicateServerRequestServerResponse 好处示例结论 随着响应式编程范式的兴起和 Java 函数式编程能…

腾讯云服务器多少钱一个月?5元1个月,这价格没谁了

2024腾讯云服务器多少钱一个月&#xff1f;5元1个月起&#xff0c;腾讯云轻量服务器4核16G12M带宽32元1个月、96元3个月&#xff0c;8核32G22M配置115元一个月、345元3个月&#xff0c;腾讯云轻量应用服务器61元一年折合5元一个月、4核8G12M配置646元15个月、2核4G5M服务器165元…

[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录 前言准备C编译器xmake编译包 工程准备修改版本号第一遍编译第二遍编译效果 前言 quickjs是个很厉害的东西啊&#xff0c;我一直想编译一下的&#xff0c;奈何一直没成功。现在找了点时间成功编译了&#xff0c;写篇文章记录一下。当前版本&#xff1a;2024-1-13 应该…

插入排序算法记录

插入排序 1.基本思想&#xff1a;左侧的子序列总是有序的。对于每一个位置上的元素&#xff0c;将其与左侧已排序的部分进行比较并插入到合适的位置&#xff0c;直到整个序列有序 2.性能分析&#xff1a; 最好情况&#xff1a;如果输入数组已经是有序的&#xff0c;插入排序只…

原型模式(Clone)——创建型模式

原型模式(clone)——创建型模式 什么是原型模式&#xff1f; 原型模式是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需依赖它们所属的类。 总结&#xff1a;需要在继承体系下&#xff0c;实现一个clone接口&#xff0c;在这个方法中以本身作为拷…

【你也能从零基础学会网站开发】Web建站之jQuery进阶篇 jQuery自定义插件应用开发

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 jQuery插件开发…

鸿蒙API9+axios封装一个通用工具类

使用方式&#xff1a; 打开Harmony第三方工具仓&#xff0c;找到axios&#xff0c;如图&#xff1a; 第三方工具仓网址&#xff1a;https://ohpm.openharmony.cn/#/cn/home 在你的项目执行命令&#xff1a;ohpm install ohos/axios 前提是你已经装好了ohpm &#xff0c;如果没…

chatgpt大模型基础学习

chatgpt大模型基础学习 1. 吴恩达提示工程2. 大模型说的token是什么 1. 吴恩达提示工程 知乎 https://zhuanlan.zhihu.com/p/626290417?utm_id0 中文版 https://mp.weixin.qq.com/s?__bizMzkwMjQ5MzExMg&mid2247483714&idx1&sn5e905f5ec6196f6dc2187db2a8618f02&…