安康市网站建设_网站建设公司_内容更新_seo优化
2026/1/1 21:41:10 网站建设 项目流程

目录

前言回顾、引入与总结

一、传输层的核心职责

二、端口号(Port Number)的作用

1、什么是端口号?

2、为什么需要端口号?

3、端口号的分类

三、五元组:唯一标识一次网络通信

1、为什么需要五元组?

2、实际查看五元组:netstat 命令

四、协议号 vs 端口号:作用层级不同(重点!!!)

数据交付流程示例(自底向上)

五、什么是知名端口号?

六、常见知名端口号一览

七、如何查看系统中的知名端口号?

文件格式说明

八、关于端口绑定的两个关键问题(非常重要!!!)

问题一:一个端口号是否可以被多个进程同时绑定?

问题二:一个进程是否可以绑定多个端口号?

九、网络与系统性能监控工具:netstat、iostat 与 pidof

1、netstat:网络状态查看利器

1. 功能概述

2. 常用选项详解

3. 典型使用场景

查看 TCP 监听服务(最常见)

查看 UDP 监听服务

查看所有活动连接(包括 ESTABLISHED、TIME_WAIT 等)

2、iostat:CPU 与磁盘 I/O 性能监控

1. 功能概述

2. 常用选项说明

3. 典型用法

实时监控 CPU + 磁盘 I/O(每 2 秒刷新一次,共 5 次)

仅查看 CPU 使用情况

查看磁盘 I/O(以 MB/s 为单位)

4. 关键指标解读(CPU 部分)

5. 磁盘 I/O 关键指标(-x 模式)

3、pidof:通过进程名快速获取 PID

1. 功能说明

2. 基本用法

示例:

3. 实战例子:配合 kill 快速终止进程

4. 替代方案对比

4、总结与最佳实践


前言回顾、引入与总结

在学习 HTTP 等应用层协议时,为了简化理解,我们常常会“忽略”底层细节,直接认为 HTTP 请求和响应是“直接发送到网络中”的。然而,真实的数据传输过程远比这复杂

实际上,应用层生成的数据(如 HTTP 报文)并不会直接进入网络,而是先交给传输层。传输层对数据进行封装、处理(如分段、添加头部信息、提供可靠性保障等),再将封装后的数据单元向下交付给网络层(IP 层),最终通过链路层和物理层真正发送到网络中。这个过程贯穿整个TCP/IP 协议栈,每一层都承担特定职责。

  • 传输层是应用层与网络层之间的桥梁,负责端到端的数据传输服务。

  • 端口号是传输层的关键机制,用于实现多进程并发通信

  • 五元组(源IP、源端口、目的IP、目的端口、协议号)唯一标识一次网络通信会话,是连接管理、防火墙规则、负载均衡等技术的基础。

  • 协议号端口号虽都用于“标识”,但分别作用于网络层→传输层传输层→应用层,不可混淆。

  • 知名端口号(0–1023)是互联网基础设施的重要组成部分,确保了服务的标准化和互操作性。

  • /etc/services是本地系统维护服务-端口映射的权威文件,可用于查询或调试。

  • 端口绑定遵循“一对一”原则(同一协议/IP下),但一个进程可绑定多个端口,这是构建多功能网络服务的基础。

  • 理解端口分配与绑定机制,对网络编程、系统运维、安全防护(如防火墙规则配置)都至关重要。


一、传输层的核心职责

传输层位于 OSI 模型的第四层,在 TCP/IP 模型中同样处于关键位置。其主要功能包括:

  • 端到端通信:为运行在不同主机上的应用程序提供逻辑通信通道。

  • 可靠传输(如 TCP):确保数据按序、无差错、不丢失、不重复地送达。

  • 流量控制与拥塞控制:防止发送方过快导致接收方或网络崩溃。

  • 多路复用与分用:通过端口号区分同一主机上不同的应用进程。

简单理解:你可以把传输层想象成“快递公司的分拣中心”——它不仅负责把包裹(数据)安全送到目的地城市(IP 地址),还要准确投递到具体的收件人(端口号对应的进程)。


二、端口号(Port Number)的作用

1、什么是端口号?

  • 端口号是一个 16 位的整数(范围 0~65535),用于标识主机上某个正在运行的网络通信进程

  • 它是传输层的概念,出现在 TCP 或 UDP 报文头部中。

2、为什么需要端口号?

当一台主机同时运行多个网络应用(如 Web 服务器、邮件客户端、游戏程序等),网络数据到达该主机后,操作系统必须知道该把数据交给哪个应用程序处理

关键机制:目的端口号决定了数据应交付给哪个上层进程。(自底向上交付)

例如:

  • 当你访问http://example.com,浏览器会向目标服务器的80 端口(HTTP 默认端口)发送请求。

  • 服务器收到数据后,查看目的端口号为 80,于是将数据交给监听 8 port 的 Web 服务进程(如 Nginx 或 Apache)。

3、端口号的分类

类型范围说明
知名端口(Well-known)0–1023由 IANA 分配,用于标准服务(如 22/SSH, 80/HTTP, 443/HTTPS)
注册端口(Registered)1024–49151可被用户或厂商注册使用(如 MySQL 默认 3306)
动态/私有端口(Dynamic/Private)49152–65535通常由客户端临时使用(如浏览器随机选择源端口)

三、五元组:唯一标识一次网络通信

在 TCP/IP 网络中,一次完整的双向通信会话由以下五个元素共同唯一确定,称为“五元组”(5-tuple)

元素说明
源 IP 地址发送方主机的 IP 地址
源端口号发送方进程使用的端口号
目的 IP 地址接收方主机的 IP 地址
目的端口号接收方进程监听的端口号
协议号使用的传输层协议(如 TCP=6,UDP=17)

1、为什么需要五元组?

考虑以下场景:

  • 多个客户端(不同 IP)同时访问同一个 Web 服务器(IP: 203.0.113.10, 端口 80)。

  • 同一个客户端上可能同时打开多个浏览器标签页(每个标签页使用不同的源端口)访问同一网站。

服务器如何区分这些并发连接?答案:通过五元组例子如下:

  • 连接1:(192.168.1.10:50000 → 203.0.113.10:80, TCP)

  • 连接2: (192.168.1.10:50001 → 203.0.113.10:80, TCP)

  • 连接3: (10.0.0.5:49152 → 203.0.113.10:80, TCP)

这三个连接虽然目的相同,但源端口或源 IP 不同,因此是三个独立的会话。图示例子如下:

分析过程具体如下:

  • 首先提取数据中的目的IP地址和端口号,确认该数据是发送给当前服务进程的。

  • 接着解析数据中的协议号,根据协议类型提供相应服务。

  • 最后获取数据中的源IP地址和端口号,将其作为响应数据的目的地址和端口,将结果返回给对应的客户端进程。

2、实际查看五元组:netstat命令

在 Linux 或 Windows 中,使用netstat -an可查看当前活动连接,如下:

  • Local Address= 源 IP + 源端口(本机视角)

  • Foreign Address= 目的 IP + 目的端口(远程主机)

  • Proto= 协议类型(TCP/UDP)

注意:从服务器角度看,“Local” 是它的 IP 和端口(如 203.0.113.10:80),“Foreign” 是客户端信息。

还可以使用 netstat -nltp 命令,大致输出也是一样的,如下:


四、协议号 vs 端口号:作用层级不同(重点!!!)

虽然两者都用于“标识”,但它们属于不同协议层,作用也不同:

对比项协议号(Protocol Number)端口号(Port Number)
所在位置IP 报头(网络层)TCP/UDP 报头(传输层)
长度8 位16 位
作用告诉目的主机的IP 层:应将数据交给哪个传输层协议(如 TCP 还是 UDP)告诉目的主机的传输层:应将数据交给哪个应用进程
示例TCP = 6, UDP = 17, ICMP = 1HTTP = 80, HTTPS = 443, SSH = 22
作用边界网络层 ↔ 传输层传输层 ↔ 应用层

数据交付流程示例(自底向上)

  1. 数据帧到达主机 → 链路层剥离帧头 → 交给 IP 层。

  2. IP 层检查目的 IP 是否是本机→ 是,则查看协议号(如 6 表示 TCP)→ 将数据交给 TCP 模块。

  3. TCP 模块解析报头 → 提取目的端口号(如 80)→ 查找本地监听 80 端口的进程(如 Web 服务器)→ 将数据交付给该进程。


五、什么是知名端口号?

在网络通信中,端口号不仅用于区分同一主机上的不同应用进程,还承载着标准化的服务识别功能。为了确保互操作性和兼容性,许多广泛使用的网络服务被分配了固定的、广为人知的端口号,这些被称为“知名端口号”(Well-known Ports)

  • 定义:知名端口号是指0 到 1023 范围内的端口号,由IANA(Internet Assigned Numbers Authority)统一管理和分配。

  • 特点

    • 通常用于标准、核心的网络服务(如 Web、邮件、远程登录等)。

    • 在大多数操作系统中,只有特权用户(如 root 或管理员)才能绑定这些端口,以防止普通程序冒充关键服务。

    • 客户端在访问这些服务时,无需显式指定端口号(例如访问http://example.com默认使用 80 端口)。


六、常见知名端口号一览

服务名称端口号传输协议功能说明
SSH(Secure Shell)22TCP安全远程登录、命令执行、文件传输(如scp,sftp
FTP(File Transfer Protocol)21TCP文件传输控制连接(数据传输通常使用动态端口)
Telnet23TCP明文远程终端登录(不安全,已基本被 SSH 取代
HTTP(HyperText Transfer Protocol)80TCP万维网(WWW)的默认明文通信端口
HTTPS(HTTP Secure)443TCP基于 TLS/SSL 加密的 HTTP 通信,用于安全网页浏览
SMTP(Simple Mail Transfer Protocol)25TCP邮件发送(服务器间传输)
DNS(Domain Name System)53TCP/UDP域名解析(查询通常用 UDP,区域传输用 TCP)
DHCP(Dynamic Host Configuration Protocol)67/68UDP自动分配 IP 地址(服务器 67,客户端 68)
POP3(Post Office Protocol v3)110TCP邮件收取(明文)
IMAP(Internet Message Access Protocol)143TCP邮件同步与管理(支持更复杂的操作)

提示:现代 Web 开发中,若使用非标准端口(如http://localhost:3000),必须显式写出端口号。


七、如何查看系统中的知名端口号?

在类 Unix 系统(如 Linux、macOS)中,所有已注册的服务与端口映射关系记录在/etc/services文件中(可以使用 vim 查看该文件)。

文件格式说明

每行代表一个服务,字段之间用空格或制表符(TAB)分隔,通常包含以下四个部分:服务名称、端口号/协议、[别名]、[# 注释]

  • “ssh 22/tcp # SSH Remote Login Protocol”:ssh 22/tcp表示 SSH 服务使用 TCP 协议的 22 端口。

  • http 80/tcp www # WorldWideWeb HTTP”:wwwhttp的别名,因此ping www实际上无意义(但某些工具可能支持服务名解析)。

  • 注释以#开头,用于说明用途。

使用技巧:可通过grep快速查找特定服务

grep "^http" /etc/services

作用:/etc/services文件中查找以字符串 "http" 开头的行。

逐部分解释:

  • grep:Linux/Unix 中用于文本搜索的命令。

  • "^http"

    • ^是正则表达式中的“行首锚点”,表示匹配行的开头。

    • http是要查找的字符串。

    • 所以"^http"表示只匹配那些行首就是 "http" 的行(例如http 80/tcp),而不会匹配像old-http 8080/tcp这样的行(因为 "http" 不在行首)。

  • /etc/services:这是系统中定义网络服务及其对应端口号和协议的文本文件。

示例输出:这个命令常用于快速查看 HTTP 服务在系统中注册的标准端口信息。


八、关于端口绑定的两个关键问题(非常重要!!!)

问题一:一个端口号是否可以被多个进程同时绑定?

答案:不可以(在同一协议、同一 IP 下)。

  • 端口号的核心作用是唯一标识一个通信端点(endpoint)

  • 相同的传输协议(TCP 或 UDP)和相同的本地 IP 地址下,一个端口只能被一个进程绑定

  • 如果尝试让第二个进程绑定已被占用的端口,系统会返回错误(如Address already in use)。

例外情况(高级):

  • 使用SO_REUSEPORT(Linux)等 socket 选项,允许多个进程绑定相同端口,但需满足特定条件(如负载均衡场景),且内核会自动分发连接。

  • 不同协议可共用端口号:例如 TCP 80 和 UDP 80 是两个独立的端口,可分别被不同服务使用(尽管不常见)。

问题二:一个进程是否可以绑定多个端口号?

答案:完全可以,且非常常见。

  • 这与“端口号唯一标识进程”的原则并不矛盾

  • 系统约束的是“一个端口 → 一个进程”的单向映射,不要求“一个进程 → 仅一个端口”

  • 实际应用中,很多服务会监听多个端口以提供不同功能或兼容性。

典型例子:

  • Web 服务器(如 Nginx):同时监听 80(HTTP)和 443(HTTPS);甚至可监听多个虚拟主机的不同端口。

  • 数据库服务:MySQL 默认监听 3306,但也可能开启额外端口用于管理或复制。

  • P2P 应用或游戏服务器:主控端口 + 多个数据通道端口。

技术实现:一个进程通过创建多个 socket 并分别调用bind()绑定不同端口即可实现。


九、网络与系统性能监控工具:netstatiostatpidof

在 Linux 系统运维、网络调试和性能分析中,掌握关键命令行工具至关重要。下面将详细讲解三个常用工具:

  • netstat:用于查看网络连接、监听端口和服务状态;

  • iostat:用于监控 CPU 使用率和磁盘 I/O 性能;

  • pidof:用于通过进程名快速获取其 PID(进程标识符)。

1、netstat:网络状态查看利器

1. 功能概述

netstat(Network Statistics)是一个经典的网络诊断工具,用于显示:

  • 活动的网络连接(TCP/UDP)

  • 监听的端口(LISTEN 状态)

  • 路由表、接口统计、伪装连接、多播成员等(较少用)

注意:在现代 Linux 发行版中,netstat已逐渐被更高效、功能更强的ss(Socket Statistics)命令取代(来自iproute2包),但因其语法直观,仍广泛用于教学和脚本中。

2. 常用选项详解

选项说明
-n以数字形式显示地址和端口号(不解析主机名、服务名)。例如:显示192.168.1.10:80而非example.com:http。提升执行速度,避免 DNS 查询延迟。
-l仅显示处于 LISTEN(监听)状态的套接字(即服务器正在等待连接的服务)。
-p显示使用该连接或监听端口的进程名和 PID(需 root 权限才能查看其他用户的进程)。
-t仅显示TCP 协议相关的连接。
-u仅显示UDP 协议相关的连接。
-a显示所有连接和监听端口(包括非 LISTEN 状态的连接,默认不显示 LISTEN)。

3. 典型使用场景

查看 TCP 监听服务(最常见)
netstat -nltp
  • -n:数字格式

  • -l:仅监听

  • -t:TCP

  • -p:显示进程名/PID

输出示例:

查看 UDP 监听服务
netstat -nlup

查看所有活动连接(包括 ESTABLISHED、TIME_WAIT 等)
netstat -ntap # 查看所有 TCP 连接及进程

netstat -nuap # 查看所有 UDP 连接及进程

小技巧:结合grep过滤特定端口或服务

sudo netstat -nltp | grep :3306

2、iostat:CPU 与磁盘 I/O 性能监控

1. 功能概述

iostat(Input/Output Statistics)是sysstat工具包的一部分,用于监控:

  • CPU 使用情况

  • 磁盘设备(或分区)的 I/O 负载

常用于诊断系统卡顿、磁盘瓶颈、高 I/O 等待等问题。安装提示(若未安装):

# Ubuntu/Debian sudo apt install sysstat # CentOS/RHEL sudo yum install sysstat

我的服务器已经是安装了sysstat 工具包的:

2. 常用选项说明

选项说明
-c仅显示CPU 使用统计
-d仅显示设备(磁盘)I/O 统计
-x显示扩展(详细)统计信息(强烈推荐)
-kKB/s为单位显示 I/O 速率
-mMB/s为单位显示 I/O 速率
-p [device]显示指定设备的分区 I/O 信息(如sda1,sdb
-t在输出中包含时间戳
N显示LVM 或设备映射器(如 /dev/mapper/...)的名称(需配合-x
n显示NFS使用情况
V显示版本信息

3. 典型用法

实时监控 CPU + 磁盘 I/O(每 2 秒刷新一次,共 5 次)
iostat -x 2 5

仅查看 CPU 使用情况
iostat -c

查看磁盘 I/O(以 MB/s 为单位)
iostat -xdm 1

4. 关键指标解读(CPU 部分)

字段含义
%userCPU 在用户空间执行普通进程的时间百分比(不含 nice 进程)
%niceCPU 在低优先级(nice > 0)用户进程上花费的时间
%systemCPU 在内核空间执行系统调用、中断处理等的时间
%iowaitCPU空闲但有未完成的 I/O 请求的时间百分比 →高值可能表示磁盘瓶颈
%steal虚拟机中,被 Hypervisor 抢占 CPU 时间的比例(仅虚拟化环境有意义)
%idleCPU 完全空闲的时间百分比

重点关注:

  • %iowait持续高于 10%~20%,说明磁盘 I/O 成为瓶颈;

  • %user+%system接近 100% 且%idle≈ 0,说明 CPU 过载。

5. 磁盘 I/O 关键指标(-x模式)

字段含义
rrqm/s,wrqm/s每秒合并的读/写请求数(合并可减少 I/O 次数)
r/s,w/s每秒完成的读/写次数(IOPS)
rkB/s,wkB/s每秒读/写字节数(吞吐量)
awaitI/O 请求平均等待时间(含队列+服务时间,单位 ms)→越低越好
util设备利用率(%)→接近 100% 表示磁盘饱和

3、pidof:通过进程名快速获取 PID

1. 功能说明

pidof用于根据进程名称查找其对应的进程 ID(PID),常用于脚本自动化或快速终止进程。

2. 基本用法

pidof <process_name>
示例:
# 查找 nginx 的 PID pidof nginx # 若进程不存在,返回空 pidof nonexist

注意:若同一程序启动了多个实例,pidof会返回所有匹配的 PID(空格分隔)。

例如,我们可以使用 pidof 命令来查看自行编写的死循环进程状态,代码、运行和测试结果如下:

3. 实战例子:配合kill快速终止进程

# 终止所有名为 myapp 的进程 kill $(pidof myapp) # 或使用 xargs(更安全) pidof myapp | xargs kill

谨慎操作:确保进程名唯一,避免误杀!

通过pidof命令获取进程ID后,可直接与kill命令配合使用来快速终止目标进程。如下:

4. 替代方案对比

命令特点
pidof nginx简洁,直接返回 PID 列表
pgrep nginx功能更强(支持正则、用户过滤等),现代推荐
ps auxgrep nginx

推荐:在脚本中优先使用pgrep/pkill,功能更强大且不易出错。

4、总结与最佳实践

工具核心用途推荐组合
netstat查看网络连接与监听端口netstat -nltp(TCP 监听)、netstat -nuap(UDP 连接)
iostat监控 CPU 与磁盘 I/O 性能iostat -x 1(实时详细监控)
pidof通过进程名查 PIDpidof <name>+kill快速管理进程

现代替代建议:

  • ss -tulnp替代netstat -tulnp(更快、更准确)

  • pgrep/pkill替代pidof+kill

掌握这些工具,不仅能快速定位网络与系统性能问题,还能大幅提升运维效率和故障排查能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询