【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字
目录
- 1、初识协议
- 2、UDP、TCP
- 3、Mac、IP地址
- 4、端口号
- 5、网络字节序
- 6、socket
1、初识协议
- 协议就是一种约定。
- 如何让不同厂商生产的计算机之间能够互相通信?需要由权威组织或公司制定网络协议。
- 协议本质也是软件,在设计上为了更好的进行模块化,解耦合,因此被设计为层状结构。
协议本质也是软件,为了更好的模块换,降低耦合度,所以被设计为层状结构。在Linux网络协议栈中,各个层次协同工作,以实现数据的封装、传输、路由和接收。从底层到高层,这些层次包括:
-
链路层(数据链路层):负责物理网络上的数据传输,包括帧的封装、错误检测和纠正等。在Linux中,这一层通常与特定的网络接口卡(NIC)驱动程序相关联。
-
网络层:提供IP地址管理和路由功能,确保数据包能够正确地从一个网络传输到另一个网络。Linux支持IPv4和IPv6两种IP协议版本。
-
传输层:提供端到端的通信服务,确保数据的可靠传输或快速、不可靠的传输。TCP(传输控制协议)提供可靠的数据传输,而UDP(用户数据报协议)则提供无连接的数据传输服务。
-
应用层:提供用户和网络服务之间的接口,包括HTTP(用于Web浏览)、SMTP(用于电子邮件发送)、FTP(用于文件传输)等多种应用层协议。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
- 对于一台路由器,它实现了从网络层到物理层
- 对于一台交换机,它实现了从数据层到物理层
- 对于一台集线器,它只实现了物理层
2、UDP、TCP
传输层的典型代表:
| TCP协议 | UDP协议 |
|---|---|
| 传输层协议 | 传输层协议 |
| 有连接 | 无连接 |
| 可靠传输 | 不可靠传输 |
| 面向字节流 | 面向数据报 |
TCP协议格式:

- 确认应答至少应该是一个完整的TCP报头
- 确认序号 = 序号 + 1,表示该序号之前的内容被全部收到了
- 为什么要有序号和确认序号两个序号,并且是独立的字段?
TCP报文,大多数情况下既是应答,又是数据,即捎带应答机制,这个时候序号和确认序号这两个字段要被同时使用。
TCP 将每个字节的数据都进行了编号,即为序列号。每一个 ACK 都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪里开始发。
- 4位首部长度:这个字段的单位是4字节,取值范围是0到15,乘以4后得到报头的实际字节长度范围是20到60字节。当首部长度为5时,表示的是标准的20字节报头。
6 位标志位:用于区分报文类型
| 标志位 | 说明 |
|---|---|
| URG | 紧急指针是否有效,需要优先处理的报文 |
| ACK | 表明自己是应答报文 |
| PSH | 提示接收端应用程序立刻从 TCP 缓冲区把数据读走 |
| RST | 对方要求重新建立连接,我们把携带 RST 标识的称为复位报文段 |
| SYN | 请求建立连接,我们把携带 SYN 标识的称为同步报文段 |
| FIN | 通知对方,本端要关闭了,我们称携带 FIN 标识的为结束报文段 |
- 16位窗口大小:流量控制,由接收缓冲区剩余空间大小决定,由滑动窗口实现
- 超时重传:在TCP连接中,当发送方发送一个数据段后,会启动一个超时计时器,如果在计时器超时之前,发送方没有收到接收方的确认(ACK)报文,那么发送方就会认为该数据段已经丢失,并重新发送该数据段,直到收到确认报文或达到重传次数限制为止。
在正常情况下,TCP 要经过三次握手建立连接,四次挥手断开连接。

为什么要三次握手?四次挥手?
- 建立双方主机通信的意愿共
- 双方验证全双工信道的通畅性
- 本质是四次握手,因为捎带应答机制变为三次握手
- Tcp是全双工的,要关闭两个朝向上的连接
我们测试时有时会出现bind error,是什么原因?
- TCP 协议规定,主动关闭连接的一方要处于
TIME_ WAIT状态,等待两个MSL(一般为2分钟)的时间后才能回到 CLOSED 状态 - 我们使用 Ctrl-C 终止了 server,所以 server 是主动关闭连接的一方,在
TIME_WAIT期间仍然不能再次监听同样的 server 端口
如何解决?
- 使用
setsockopt()设置 socket 描述符的选项SO_REUSEADDR为 1,表示允许创建端口号相同但 IP 地址不同的多个 socket 描述符
int opt = 1;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
CLOSE_WAIT状态则是被动关闭连接的一方在接收到FIN报文并发送ACK后的状态- 如果服务器不关闭sockfd,则只会完成两次挥手,服务器就会长时间处于
close_wait状态。
滑动窗口:
- 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值
- 操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉
- 窗口只能向右滑动,且根据对方接收缓冲区的大小调整大小

丢包重传问题:
- 如果发送端主机连续三次收到了同样一个 “1001” 这样的应答,则说明我们只收到了 “1001” 之前的报文,在这种情况下,发送方不等待超时定时器的触发,而是立即重传该丢失的数据包,即将对应的数据 1001 - 2000 重新发送。这种机制被称为 "高速重发控制”(快重传)
拥塞控制:
- 虽然 TCP 滑动窗口能够高效可靠的发送大量的数据,但是如果刚开始就发送大量的数据,仍然可能引发问题。因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵,在不清楚当前网络状态下,贸然发送大量的数据,很有可能雪上加霜。
- TCP引入慢启动机制,即先发少量的数据探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据
- 当拥塞窗口达到慢启动阈值后,TCP会进入拥塞避免阶段。此时,拥塞窗口会按线性速率增长,以避免突然的大幅增加导致网络拥塞

Tcp通过校验和、序列号(按序到达、去重)、确认应答、超时重发、连接管理、流量控制、拥塞控制等保证可靠性;通过滑动窗口、快速重传、延迟应答、捎带应答等提高性能。
UDP协议格式:

-
无连接:知道对端的 IP 和端口号就直接进行传输,不需要建立连接;
-
不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发到对方,UDP 协议层也不会给应用层返回任何错误信息;
-
面向数据报:不能够灵活的控制读写数据的次数和数量;
-
16 位 UDP 长度,表示整个数据报(UDP 首部+UDP 数据)的最大长度,如果要传输的数据超过 64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装;
-
如果校验和出错,就会直接丢弃;
-
UDP协议的报头是固定的8字节,所以协议的接收方直接截取前8个字节的报头,剩下的就是有效数据。
UDP的缓冲区:
- 发送缓冲区:UDP 没有真正意义上的发送缓冲区,调用 sendto 会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;
- 接收缓冲区:UDP的接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致,如果缓冲区满了,再到达的 UDP 数据就会被丢弃;
TCP/UDP 对比:
- 无论是Tcp有连接Udp无连接,还是Tcp可靠Udp不可靠,这都是它们的特性,不是优缺点,它们适用于不同的需求场景
- TCP 用于可靠传输的情况,应用于文件传输,重要状态更新等场景
- UDP 用于对高速传输和实时性要求较高的通信领域,例如早期的 QQ、视频传输、广播等
3、Mac、IP地址
每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac 地址。
以太网中,任何时刻,只允许一台机器向网络中发送数据。如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免,没有交换机的情况下,一个以太网就是一个碰撞域,局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定的。
其中每层都有协议,当我们进行传输流程的时候,要进行封装和解包:

Tcp/IP通讯过程:

IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址,对于 IPv4 来说, IP 地址是一个 4 字节,32 位的整数,我们通常也使用 “点分十进制” 的字符串表示 IP 地址, 例如1.94.9.200,用点分割的每一个数字表示一个字节,范围是 0 - 255。

Mac地址 vs IP地址:
唐僧从东土大唐出发,要去西天拜佛求经,途中要经过女儿国和黑风岭,女儿国和黑风岭是相邻两地。
- 东土大唐 -> 西天:源IP地址 -> 目的IP地址
- 女儿国 -> 黑风岭:源Mac地址 -> 目的Mac地址
其中经过的各个国家就是路由器,相邻的国家在同一个局域网中,路由器路由的下一个目的地是根据目的IP地址路由的,局域网通信需要Mac地址指路,一般Mac地址只在局域网中有效,IP地址几乎不变。
IP在网络中标识主机的唯一性,数据传输到主机不是目的而是手段,最终到达主机内的目的进程才是目的。但是在主机中,同一时间进程可能有很多,那怎么找到目的进程呢?
4、端口号
端口号(port)是传输层协议的内容,是一个2字节16位的整数,端口号标识唯一进程,一个端口号只能被一个进程占用。
IP地址+端口号能够标识网络中的唯一进程。
网络通信,本质上也是进程间通信。
其中 0 - 1023 是知名端口号,HTTP, FTP, SSH等这些广为使用的应用层协议,它们的端口号都是固定的。1024 - 65535 是操作系统动态分配的端口号,比如客户端程序的端口号就是有操作系统动态分配的。
pid也可以标识唯一进程,为什么还要引入端口号呢?
进程pid属于系统概念,如果继续沿用pid标识唯一进程,会增加耦合度。另外,一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定。
网络通信的本质,也是进程间通信,本质是两个互联网进程代表人来进行通信。IP + port 叫做套接字socket。
一个进程可以 bind 多个端口号,但一个端口号不能被多个进程 bind。
5、网络字节序
内存中的多字节数据相对于内存地址有大端和小端之分,网络数据流同样有大端小端之分,如何定义网络数据流的地址?
- 网络数据流的地址被规定:先发出去的是低地址,后发出去的是高地址。
- TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。
为使网络程序具有可移植性,使用样的C代码在大端和小端机器上编译后都能正常运行,可以调用下面库函数做网络字节序和主机字节序的转换。
#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t hostlong);
uint16_t ntohs(uint16_t hostshort);
h表示host,n表示network,l表示32位长整数,s表示16位短整数。
6、socket
socket常见API:
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,socklen_t address_len);// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,socklen_t* address_len);// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
socket:
socket()打开一个网络通讯端口,如果成功,就像open()一样返回一个文件描述符,出错返回-1- 应用程序可以像读写文件一样用 read/write 在网络上收发数据
- 对于 IPv4,
family参数指定为AF_INET- 对于 TCP 协议,
type参数指定为SOCK_STREAM,表示面向流的传输协议protocol参数指定为 0 即可
bind:
- bind()成功返回 0,失败返回-1
- bind()的作用是将参数 sockfd 和 myaddr 绑定在一起,使 sockfd 这个用于网络通讯的文件描述符监听 myaddr 所描述的地址和端口号
- struct sockaddr *是一个通用指针类型,myaddr 参数实际上可以接受多种协议的 sockaddr 结构体,而它们的长度各不相同,所以需要第三个参数 addrlen指定结构体的长度,我们可以对 myaddr 参数这样初始化:
struct sockaddr_in local; memset(&local, 0, sizeof(local)); local.sin_family = AF_INET; local.sin_port = htons(_port); local.sin_addr.s_addr = INADDR_ANY;
listen:
- listen()声明 sockfd 处于监听状态,并且最多允许有 backlog 个客户端处于连接
等待状态,如果接收到更多的连接请求就忽略- listen()成功返回 0,失败返回-1
accept:
- 三次握手完成后,服务器调用 accept()接受连接
- 如果服务器调用 accept()时还没有客户端的连接请求,就阻塞等待,直到有客户端
连接上来- addr 是一个传出参数,accept()返回时传出客户端的地址和端口号
- 如果给 addr 参数传 NULL,表示不关心客户端的地址
- addrlen 参数是一个传入传出参数(value-result argument),传入的是调用者提供的,缓冲区 addr 的长度以避免缓冲区溢出问题,传出的是客户端地址结构体的实际长度
connect:
- 客户端需要调用 connect()连接服务器
- connect 和 bind 的参数形式一致,区别在于 bind 的参数是自己的地址,connect 的参数是对方的地址
- connect()成功返回 0,出错返回-1
注意:
- 由于客户端不需要固定的端口号,因此不必调用 bind(),客户端的端口号由内核自动分配
- 客户端不是不允许调用 bind(),只是没有必要显示的调用 bind()固定一个端口号,否则如果在同一台机器上启动多个客户端,就会出现端口号被占用导致不能正确建立连接
- 服务器也不是必须调用 bind(),但如果服务器不调用 bind(),内核会自动给服务器分配监听端口,每次启动服务器时端口号都不一样,客户端要连接服务器就会遇到麻烦
sockaddr结构:
sock API是一层抽象的网络编程接口,适用于各种底层网络协议,各种网络协议的地址格式并不相同。

socket API 可以都用struct sockaddr*类型表示,在使用的时候需要强制转换成sockaddr_in,增加了程序的通用性。
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~
相关文章:
【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、初识协议2、UDP、TCP3、Mac、IP地址4、端口号5、网络字节序6、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计…...
【软考知识】奇偶校验码,循环冗余码,海明码介绍
文章目录 **1. 奇偶校验码 (Parity Check Code)****基本原理****算法流程****优点与缺点****应用场景** **2. 循环冗余码 (Cyclic Redundancy Check, CRC)****基本原理****算法流程****例子****优点与缺点****应用场景** **3. 海明码 (Hamming Code)****基本原理****算法流程**…...
SOME/IP--协议英文原文讲解10
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.2 Req…...
前端面试-网络协议篇
1.http网络协议中post和get有什么区别 在HTTP网络协议中,POST和GET主要有以下区别: 参数传递方式: GET:参数附加在URL后面,如example.com?key1value1&key2value2 。POST:参数放在HTTP请求体中。 数据…...
音视频入门基础:RTP专题(10)——FFmpeg源码中,解析RTP header的实现
一、引言 由《音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现》可以知道,FFmpeg接收RTP流时,其源码内部会调用rtp_read函数。而rtp_read函数内部会通过recvfrom函数接收基于UDP的RTP音视频数据。一般…...
1.1 go环境搭建及基本使用
golang下载地址: Download and install - The Go Programming Language (google.cn) 验证安装是否成功: go version 查看go环境 go env 注意:Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要把项目放到GO…...
Flask flash() 消息示例
目录 安装 Flask 入门:Flask flash() 基本示例 进阶:使用 Flask-WTF Flash 登录结果消息 详解:get_flashed_messages() 详解:flash() 消息的完整生命周期 Flask 提供 flash() 用于向 用户传递临时消息,通常用于: • 表单提交成功或失败 • 用户登录、注册、退出提…...
Gemini 2.0助力科学突破,AI联合科学家系统登场
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
京东外卖骑手全部缴纳五险一金
刘强东这步棋,直击700万骑手软肋? 今天,京东突然甩出一张底牌:自2025年3月1日起,外卖全职骑手全员缴纳五险一金,兼职骑手配套意外医疗双保险。 消息一出,直接炸了外卖江湖。要知道,…...
oracle apex post接口
日常记录 使用到了apex_json方式接收 、、、1 首先,接口通过body传递过来,成功接收到, 数据格式为 JSON_OBJECT_T l_json : JSON_OBJECT_T.parse(:body); 这里我用参数接收到 然后 里面是包含了 "data" 我用 继续接收到这个 l…...
百度云DeepSeek一体机:百舸、千帆和一见介绍及区别对比
百度智能云DeepSeek一体机百舸、千帆和一见,搭载昆仑芯等国产自研算力芯片,可支持在单机环境下一键部署DeepSeek R1/V3全系列模型。百度云服务器网bdyfwq.com分享百度智能云官方发布的百舸DeepSeek一体机、千帆DeepSeek一体机和一见DeepSeek一体机配置介…...
k8s集群内的pod连接集群外部的mysql, k8s集群内部服务如何连接集群外部mysql? 一文搞明白
一、为什么不将mysql服务部署到k8s集群中使用呢? 1.有状态服务在K8s中的管理比较复杂,特别是持久化存储的问题。虽然K8s有StatefulSet和PV/PVC,但配置和维护起来需要更多工作,同时以下问题仍需解决:-存储可靠性:如果使…...
C#使用Semantic Kernel:接入本地deepseek-r1
安装Ollama 1.下载Ollama 访问Ollama官网(https://ollama.com),选择适合你操作系统的版本进行下载。 对于Linux用户,可以通过以下命令安装: curl -fsSL https://ollama.com/install.sh | sudo bash sudo system…...
【算法】直接插入排序、折半插入排序、希尔排序
1 直接插入排序 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定 元素集合越接近有序,直接插入排序算法的时间效率越高 1.1直接插入排序思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中ÿ…...
使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
【排版教程】如何在Word/WPS中优雅的插入参考文献
材料展示 随便选取一段综述内容,以及对应的参考文献,如下图所示: 1 参考文献编辑 首先对参考文献部分进行编辑,将其设置自动编号 在段落中,选择悬挂缩进 在编号中,设置自定义编号,然后按照…...
神经形态视觉的实时动态避障系统:突破传统SLAM的响应延迟瓶颈
引言:机器人感知的实时性挑战 斯坦福机器人实验室采用异步脉冲神经网络处理DVS事件相机数据后,动态障碍物响应延迟从34ms降至0.9ms。在20m复杂场景避障测试中,基于神经形态芯片的路径规划系统将SLAM更新频率提升至10kHz,较传统GP…...
python绘图之密集散点图
密集散点图主要目的是生成一个可视化图表,展示 insurance 数据集中 bmi(身体质量指数)和 charges(医疗费用)之间的关系,并通过不同的维度对数据进行分组和区分,以便更清晰地观察数据的分布和特征…...
Linux操作系统4-进程间通信5(共享内存实现两个进程通信)
上篇文章:Linux操作系统4-进程间通信4(共享内存原理,创建,查看,命令)-CSDN博客 本篇Gitee仓库:myLerningCode/l24 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重…...
sam2 windows 编译安装
目录 1. pip install sam2 2. 编译安装 1. pip install sam2 运行报错: cannot import name _C from sam2 (E:\project\smpl\render_blender\linux\GroundedSAM2_SMPL\sam2\__init__.py) 2. 编译安装 cd E:\project\sam2\sam2-main set DISTUTILS_USE_SDK1 py…...
RFID测温技术:电力设备安全监测的新利器
在当今高度依赖电力的现代化社会中,稳定且可靠的电力供应是社会运转的基石。电力设备作为电力系统的关键核心,其运行状态直接关乎电力供应的品质。然而,电力设备长期运行过程中,受到诸如过载、接触不良以及环境因素等多重影响&…...
(一)趣学设计模式 之 单例模式!
目录 一、啥是单例模式?二、为什么要用单例模式?三、单例模式怎么实现?1. 饿汉式:先下手为强! 😈2. 懒汉式:用的时候再创建! 😴3. 枚举:最简单最安全的单例&a…...
自动化办公|xlwings生成图表
在日常的数据分析和报告生成中,Excel图表是一个非常重要的工具。它能够帮助我们直观地展示数据,发现数据中的规律和趋势。然而,手动创建和调整图表往往耗时且容易出错。幸运的是,借助Python的xlwings库,我们可以自动化…...
Docker基于Ollama本地部署大语言模型
一、Ollama介绍 Ollama 是一个开源的大型语言模型(LLM)平台,旨在简化大型语言模型在本地环境中的运行、管理和交互。通过Ollama,用户可以轻松加载和使用各种预训练的语言模型,执行诸如文本生成、翻译、代码编写、问答…...
Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
简介 简介:在训练数据样本之前首先利用VAE来推断潜在空间中不同类的分布,用于后续的训练,并使用它来初始化GAN。与ACGAN和BAGAN不同的是,提出的GIEGAN有一个分类器结构,这个分类器主要判断生成的图像或者样本图像属于哪个类,而鉴别器仅判断图像是来自于生成器还是真实样…...
centos9安装k8s集群
以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…...
pytest下allure
import pytestdef test_case01():用例01~print(用例01)class Test_mokuai01:def test_case02(self):用例02~print(用例02)if __name____main__:#pytest.main([-vs,test_sample-2.py])pytest.main([-vs,test_sample-2.py,--allure-dir,./result2])#生成allure报告,参…...
JVM预热
阿里电商平台每年的各种大促活动,对于Java技术来说,其中重要一个操作环节就是预热操作。 目录 预热是什么?为什么要预热? java 程序不预热和预热的调用对比 预热是什么? 预热是指,在 JVM 启动后࿰…...
【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
文章目录 🌍一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 🌍二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...
Ubuntu 查看mysql用户和数据库
在Ubuntu系统中,你可以使用以下MySQL命令来查看用户和数据库的信息。请确保你已经安装了MySQL服务器,并且你具有足够的权限(如root用户权限)来执行这些命令。 查看所有数据库 要查看MySQL服务器上的所有数据库,可以使…...
