网络层只懂路由?这9个知识点被严重低估了
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
下午好,我的网工朋友。
网络层想必你已经耳熟能详,它的作用自然是不容小觑。
它负责将数据从源头准确地投递到目的地,无论这个目的地是在街对面还是世界的另一端。如果没有网络层的智能路由选择、拥塞控制和网际互连,我们的网络通信将会变得混乱和低效。
我们无法依赖简单的记忆来处理海量的IP地址和路由信息,这时候,网络层的作用就显得尤为重要了。
今天这篇文章就来再提提网络层这事,从IP地址的分类到CIDR的高效编址,从IP数据报文的构成到路由表的智能管理,再到ARP、ICMP、DHCP这些协议的实际应用,不管是小白还是老司机统统都适用。
今日文章阅读福利:《企业网快速构建与排错手册》
想要深入企业网构建和排错的朋友,可以私信发送暗号“网络构建”,获取此份手册资源。
如果想从0到1系统学习,也欢迎私信我,告知学习意向,我会为你推荐最适合你的方式。
01 IP地址
01 分类表示法
分类表示法相对而言比较不常用。
- A类地址:
格式为
1[7位网络号][24位主机号]
网络号全0指本网络
网络号全1用于环回地址(127.0.0.1)
主机号全0时指本住机所在网络
全1时指本网络所有主机(广播地址)
因此A类地址实际可选范围为1.x.x.x ~ 126.x.x.x
- B类地址
格式为
10[14位网络号][16位主机号]
网络号不可全0,但可以全1
范围为128.x.x.x~191.x.x.x
- C类地址
格式为
110[21位网络号][8位主机号]
网络号不可全0
范围为192.x.x.x~223.x.x.x
- D类地址(多播地址)
格式为
1110[28位多播地址]
范围为224.x.x.x~239.x.x.x
因此看到224以上的ip要注意
- E类地址
格式为11110[保留]
用于实验用,因此看到240以上的认定不是正常节点ip
分类表示地址的其他说明:
- 网络号全0,但主机号非全0的某个ip就是指本网络的某个主机
- 网络号不为全1,但主机号为1的ip,则指某个网络的广播地址
- 全0,指本网络的本主机
- 全1,指本网络的广播地址
- 环回地址,指127.0.0.1,在同一台主机上进行网络传输
- 私有地址,指不会参与路由器转发的地址,, 只会参与本局域网,发给本局域网的交换机:
A类:10.0.0.0-10.255.255.255.
B类:172.16.0.0-172.31.0.0
C类:192.168.0.0-192.168.255.255
02 无分类编址CIDR
Classless Inter-Domain Routing 无类型域间选路
-
CIDR将路由集中起来,使一个IP地址代表主要骨干提供商服务的几千个IP地址,从而减轻Internet路由器的负担。
-
该编址用于子网划分,子网号和上面提到的网络号是不同的。
-
IP地址 ::= {<网络号>, <子网号>, <主机号>}
CIDR有三种编址方式:
-
128.14.35.7/20 , 完整ip加子网位数
-
10.0.0.0/10 -> 10/10, 可省略末尾的0
-
00010100*, 即用星号代替子网后的主机号
对于CIDR编址:子网号的全0和全1没有特殊含义,但不可设置成全0或者全1。主机号的全0指本网络, 全1指广播。(网络号仍然遵从ABCD地址的规则)
-
子网掩码:
值1的位置指该ip中该位置是网络号和子网号区域
值0的位置指该ip中该位置是主机号区域。
例子:111111100000000…, 那么前面8个1就是网络号+子网号,后面都代表了主机号 -
路由寻址时,一般先比较网络号,再比较子网号,再比较主机。
子网掩码可以简化先比网络再比子网的过程。
02 IP数据报文格式
IP报文的首部至少有20个字节(160位),首部如下:
上面可以看到IP报文的以下限制:
-
首部长度字段可以看出首部长度最多可以位60字节,所以任选项最多40字节
-
报文总长度最大为65535, 但是由于MTU的限制(链路层防冲突机制导致的),一般都要做分片, 分片后就会用上分片标识和片偏移了。
Q: IP报文里有什么?可以不按顺序或者字节来讲一讲
-
首先要知道报文多长, 首部长度+报文长度
-
为了校验首部,还需要校验首部和
-
很重要的源ip 目的ip
那么如何确定ip类型?这就需要 ipv版本,来确认是ip4还是ip6。 -
ip支持分片,那么就需要
分片id、是否是最后分片标记、分片偏移 -
协议类型(icmp、igmp)
-
TTL生存
-
其他任选项(40字节)
03 路由概念
-
路由器可分隔广播域,指的是不同网络号的地址,路由器不会转发广播报文
-
Hub集线器在同一个冲突域通信无法分割;交换机在同一个广播域通信,可分割冲突域;路由器实现不同广播域间通信,可分隔广播域。
-
IP报文在传输中不会被改变,但是链路层报文的mac地址会不断变化。
-
当2个主机在不同的子网时,必须要借助路由才能通信
01 路由表
假设某个路由器在N1网络,他的路由表如下:
-
特定IP地址的子网掩码为全1,所以一般都是x.x.x.x/32
-
DNS服务器一般会配置在路由表中的特定IP地址
-
未知网络在路由表里的目的网络被写为0.0.0.0, 如果么有,则就是未设置默认路由
-
路由器不会转发私有地址。
-
距离指的是跨越路由器的数量,而不是实际长度单位
02 路由网络匹配
如果路由表中的目的网络由很多,怎么确定IP和路由表中的目的网络是匹配的?
使用 最长前缀匹配, 即前缀匹配得最多的就是目的网络。优化算法可用二叉线索树来确认最长前缀。
03 ARP解析
全称Address Resolution Protocol,地址解析协议。
从主机发给路由, 或者路由发给路由时,底层还是得封装一层mac地址然后往下交给交换机。那么ip和mac地址的对应关系, 是怎么得知的?
答案就是ARP协议
本质就是当mac缓存表里没有ip和mac的对应关系时, 主机或者路由会广播ARP报文, 对应ip方向的交换机会把报文发送回来,这时候就直到mac地址和ip的对饮关系了。@网络工程师俱乐部
-
arp -a可以检查ARP告诉缓存
-
ARP缓存有超时时间
-
目的主机不存在时,会反复发送,有个超期期限的存在。
-
主机发送ARP查找自己的Mac地址称为“免费ARP"
-
发送给某1主机的arp请求被中间路由器接收了,则称为“ARP代理”, 发送者不管不管你是中间路由还是目的ip主机,只知道这个ip需要发给这个mac。
04 RARP逆地址解析协议
由mac地址反取ip。因为ip不存在,无法直接转给给路由。所以会比ARP难。
过程:
1)将源设备和目标设备的MAC地址字段都设为发送者的MAC地址和IP地址,发送主机发送一个本地的RARP广播,能够到达网络上的所有设备,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应;
4) 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
04 ICMP协议
全称Internet control message protocl,网络控制报文协议。他会包装在IP的数据报文中,并把首部的协议类型改成ICMP那个数字。
首部总共8个字节,分别为:
2字节的ICMP类型
2字节的ICMP报文代码(类似错误码)
4字节的校验和
后面就是数据部分了。
常见的2种用途:
1、发送网络层之间的差错报告,例如:
-
-
源点抑制——发送网络拥塞
-
终点不可达——无法找到对应ip交付地点
-
时间超时——报文种的TTL降为0,或者分片一直没收集完
-
参数错误——首部中字段有错
-
路由改变(重定向)—— 主机把数据发给了路由器R2,但是路由器R2发现主机自己本来就可以直达了,于是发给主机该消息,告诉他你要更新路由表了。
-
差错报告有以下其他特点:
-
ICMP自身出错时,不会再发ICMP差错报文
-
如果是报文分配后发生错误,则只会发1次,而不会每个分片发一次
-
不针对多播,不针对127.0.0.1、0.0.0.0等特殊的地址发送差错报文,不可广播(避免广播风暴)
-
2、发送一些询问报文,例如:
-
-
回送请求和应答——例如ping命令就是借助ICMP
-
超时报文——traceroute就是用这个,把TTL从1慢慢增加,发好多份,通过TTL为0时的差错报告,定位跟踪路上有哪些路由
-
时间戳请求——同步时间
-
05 DHCP协议
全称Dynamic Host Configuration Protocol, 动态主机配置协议。当某个局域网内新增了一台主机,这个主机的ip是怎么生成的呢?这就会用到DHCP协议,主机所在网内会有一台DCHP服务器。
当新主机加入时,发生如下之事:
-
主机先“广播”自己,告诉大家“我来了,谁给我一个IP地址”(他一开始不知道DHCP在哪)
-
DCHP服务器收到后,会分配一个IP地址,但因为不知道发给谁,所以也只能“广播”,告诉大家“我这有个ip,刚才谁要的,自己来领一下”
-
主机收到DHCP广播的报文后,就能知道自己的ip和dhcp服务器位置了。于是给DCHP服务器发送请求,告诉他“我收到了你发来的ip了”
-
DCHP收到后,确认了他的信息,并加入到DHCP本地的数据库中,后面分配新ip时就会排除掉这个ip了。
有以下几个注意点:
-
如果有多个主机同时应答了DHCP的广播, 则会选择最先到达的做分配。
-
分配的ip是临时的
DCHP可以认为是基于UDP的应用层协议,但本质是为了寻求新主机的动态ip地址
06 路由表的最优下一跳地址如何计算?
可以理解为 在一个复杂的拓扑图下, 怎么选择最优的一个路由做目的地址的下一跳。
有2种方式:
01 RIP协议
全称Routing Information Protocol,路由信息协议是一种动态路由信息协议。
-
路由只会和相邻的其他路由交换信息。
-
交换的是路由表的信息,关键在于目的网络和距离
-
之前路由表里知道了表里会存储 到目的网络的距离即跨越路由数量,那么只要拿到周边所有路由的距离表, 看下哪个方向最小, 然后把下一跳地址选为最小的那个路由方向即可。
-
使用UDP广播,把自己的路由报文发给周边的其他路由。
-
当路径不可达时,会导致2个路由之间不断叠加该目的地址的距离,直到16时,会被设置成不可达。
所以RIP本质也是基于UDP的应用层协议,但是目的是为了网络层的最优路由选取。
02 OSPF协议
open shortest path first,开放最短路径优先协议,指路由器里有全网的拓扑结构,使用最短路算法计算最优路由。
因此路由会把自己的连接情况通过OSPF协议发给所有其他路由,以建立拓扑图。
这个是属于IP层的协议,不借助UDP。RIP和OSPF是自治网络系统AS里的选路措施。AS里的选路措施被称作IGP(内部网关协议),1个AS里只会有一种选路措施。而跨自治系统的协议叫EGP(外部网关协议)。通常使用BGP协议
03 BGP协议
Border Gateway Protocol边界网关协议
-
每个AS都知道自己为了到达网络N,需要经过哪些AS(相当于知道以AS为节点的拓扑图)
-
每个AS都有一个BGP发言人,会与其他BGP网络之间交换自身的AS拓扑信息,从而构建全局连通图
-
使用TCP 179端口工作
Q: RIP协议下路由表什么时候更新?
-
正常情况下,路由器会基于更新计时器每30s将路由表发送给邻居路由器,而触发更新是立刻发送路由更新信息
-
触发更新就是当检测到网络拓扑发生变动时,路由器会立即发送一个更新信息给邻居路由器,并依次产生触发更新通知它们的邻居路由器,此过程就叫触发更新
Q: 路由中毒是什么?
A:路由中毒是指在路由信息在路由表中失效时,先将度量值变为无穷大的数,而不是马上从路由表中删掉这条路由信息。然后再将中毒路由信息发布出去,当相邻的路由器收到该中毒路由就可以通过其度量值是16,说明该路由是无效的。
因为RIP协议中的度量值其实就是跳数,而RIP协议的跳数最大是15,大于15的目的地被认为是不可达,所以当其度量值为16,就表示这是一个无效路由,这就是所谓的路由中毒,这个数字在限制了网络大小的同时也防止了一个叫做“记数到无穷大”的问题。
Q: 收到中毒路由的路由器会怎么做?
A:收到中毒路由信息的相邻的路由器会发送一个毒性逆转的信息,表示已经收到中毒路由信息。
那么为什么收到中毒路由的路由器为什么要回复一个毒性逆转的信息?这是因为如果不回复的话,那么发送中毒路由的路由器就会一直以广播的形式发送中毒路由,直到相邻的路由器收到并回复一个毒性逆转的信息。
07 多播
01 IGMP协议
internet group message protol, 网络组管理协议负责收集和解释一个网络中的组成员信息
IGMP协议应用于路由器
-
某主机加入新的多播组时,发送报文,并转发多播的关系给其他相邻主机或者路由
-
会周期性探寻,确认自身这个主机是否还在多播组内
-
无法直到总成员数
-
IGMP属于网络层的协议
02 MOSPF多播路由选择协议
多播开放最短通路优先(Multicast Open Shortest PathFirst,MOSPF)协议是OSPF协议的扩展,使用多播链路状态路由选择来创建源点基准树。
这个协议需要一个新的链路状态更新分组,把主机的单播地址和组地址或主机负责的地址联系起来,这个分组就称为组成员关系LSA。
此外,这个数可以保存在高速缓存中,以便以后有同样源点/组地址对的分组可以使用它。
08 其他网络层概念
01 VPN
需要建立专用通道,当专用A试图向专用B通信时,会先加密,再通过加密隧道发到对方内网,具体报文内容不会和互联网直接接触。
02 NAT
内外网转换用的一个东西, 公网ip和内网ip互转。
03 移动IP
ip从子网A变道子网B。在本网时,按TCP通信。要漫游到外网时, 注册一个转交地址,本地代理接收地址,开启隧道,数据发送到外网。在外网时,使用代理ip发送数据,回到本地时,会注册并转交之前的地址
09 常见网络层命令
-
ifconfig 可显示本机的IP地址
-
netstat -r可显示路由表
-
tcpdump 可显示硬件地址
-
ping 测试另一个主机是否可达
-
traceroute 利用ICMP跟踪途径的所有路由
-
route 命令可查看和修改路由表
-
gated可查看IGP(内部网关协议)和EGP(外部网关协)
整理:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
相关文章:

网络层只懂路由?这9个知识点被严重低估了
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 网络层想必你已经耳熟能详,它的作用自然是不容小觑。 它负责将数据从源头准确地投递到目的地&am…...
最新的kali Linux源,解决apt update报错说没有数字签名
原因: 国内源的地址大部分都是http开头,这些地址早就无法使用。 解决方案: wget archive.kali.org/archive-key.asc //下载签名 apt-key add archive-key.asc //安装签名 另外,需…...

RAG与Langchain简介
RAG与Langchain简介 什么是RAGRAG解决的问题RAG工作流程RAG调优策略LangChain简介 什么是RAG 检索增强生成(Retrieval-Augmented Generation),主要是通过从外部给大模型补充一些知识,相当于给模型外挂了一个知识库,让…...

绕过网页的阻止复制
绕过网页的阻止复制 一、问题的提出二、绕过技巧一三、绕过技巧二四、绕过技巧三五、总结说明 一、问题的提出 也是很久没有写文章了,今天突发奇想写一篇文章。首先你有没有被网页中的一些阻止你复制的页面所困扰。就是那种,你突然找到一篇文章…...
Jackson指定json的key
指定json的key 要在序列化JavaBean时指定JSON的key,可以使用JsonProperty注解来指定JavaBean属性序列化到JSON时使用的key。以下是一个简单的示例: import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.da…...

谷歌发布Infini-Transformer模型—无限注意力机制长度,超越极限
Transformer 是一种基于自注意力机制的深度学习模型,最初应用于自然语言处理领域,现已扩展到图像、音频等多个领域。与传统的循环神经网络 (RNN) 不同,Transformer 不依赖于顺序数据处理,能够并行计算,从而显著提高效率…...

激光点云配准算法——Cofinet / GeoTransforme / MAC
激光点云配准算法——Cofinet / GeoTransformer / MAC GeoTransformer MAC是当前最SOTA的点云匹配算法,在之前我用总结过视觉特征匹配的相关算法 视觉SLAM总结——SuperPoint / SuperGlue 本篇博客对Cofinet、GeoTransformer、MAC三篇论文进行简单总结 1. Cofine…...
socket--cs--nc简单实现反弹shell
socket_client.py import socket#客户端: #连接服务段的地址和端口 #输入命令发送执行 #回显命令执行结果# ipinput(please input connect ip:) # portinput(please input connect port:)ssocket.socket() # IP and PORT s.connect((,9999)) while True:cmdlineinput(please i…...

CSS入门基础2
目录 1.标签类型 2.块元素 3.行内元素 4.行内块元素 5.标签行内转换 6.背景样式 1.标签类型 标签以什么方式进行显示,比如div 自己占一行, 比如span 一行可以放很多个HTML标签一般分为块标签和行内标签两种类型: 块元素行内元素。 2.块…...

Mac vscode could not import github.com/gin-gonic/gin
问题背景: 第一次导入一个go的项目就报红 问题分析: 其实就是之前没有下载和导入gin这个web框架包 gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确。 问题解决: 依次输入以下命令。通…...

MySQL修改用户权限(宝塔)
在我们安装好的MySQL中,很可能对应某些操作时,不具备操作的权限,如下是解决这些问题的方法 我以宝塔创建数据库为例,创建完成后,以创建的用户名和密码登录 这里宝塔中容易发生问题的地方,登录不上去&#…...
论文阅读(一种新的稀疏PCA求解方式)Sparse PCA: A Geometric Approach
这是一篇来自JMLR的论文,论文主要关注稀疏主成分分析(Sparse PCA)的问题,提出了一种新颖的几何解法(GeoSPCA)。 该方法相比传统稀疏PCA的解法的优点:1)更容易找到全局最优ÿ…...

Chrome/Edge浏览器视频画中画可拉动进度条插件
目录 前言 一、Separate Window 忽略插件安装,直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页,但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候ÿ…...
pg修炼之道学习笔记
一、数据库逻辑结构介绍 1、一个pg数据库服务下有多个db(多个数据库),当应用连接到一个数据库时,一般只能访问这个数据库中的数据,而不能访问其他数据库的内容(限制) 2、表索引:一…...

使用宝塔面板部署Django应用(不成功Kill Me!)
使用宝塔面板部署Django应用 文章目录 使用宝塔面板部署Django应用 本地操作宝塔面板部署可能部署失败的情况 本地操作 备份数据库 # 备份数据库 mysqldump -u root -p blog > blog.sql创建requirements # 创建requirements.txt pip freeze > requirements.txt将本项目…...
c++深拷贝、浅拷贝
在 C 中,深拷贝和浅拷贝是两个重要的概念,尤其在涉及动态内存分配和指针成员时。这两个概念描述了对象复制时的行为。 浅拷贝 浅拷贝是指复制对象时,仅复制对象的基本数据成员,对于指针成员,只复制指针地址ÿ…...
k8s核心组件
Master组件: kube-apiserver:用于暴露Kubernetes API,任何资源请求或调用操作都是通过kube-apiserver提供的接口进行。它是Kubernetes集群架构的大脑,负责接收所有请求,并根据用户的具体请求通知其他组件工作。etcd&am…...

反编译腾讯vmp
反编译腾讯vmp 继续学习的过程 多翻译几个vmp 学习 看看他们的是怎么编译的 写一个自己的vmp function __TENCENT_CHAOS_VM(U, T, g, D, j, E, K, w) {// U指令起点// T是指令list// g是函数this 或window对象// D是内部变量和栈}for (0; ;)try {for (var B !1; !B;) {let no…...

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT
本地部署大模型 在本地部署大模型有多种方式,其中Ollama方式是最简单的,但是其也有一定的局限性,比如大模型没有其支持的GGUF二进制格式,就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型,并易于阅读…...
JS中splice怎么使用
在JavaScript中,splice() 是一个数组方法,用于添加/删除项目,并返回被删除的项目。这个方法会改变原始数组。 splice() 方法的基本语法如下: array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) start(必…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...