IP地址与端口号

IP地址及编址方式

IP地址基础概念

IP地址的本质

  • 定义:用于唯一标识互联网上设备的逻辑地址
  • 结构:采用两级结构(网络号 + 主机号)
  • 唯一性:在整个互联网范围内是唯一的
  • 表示方法:点分十进制记法(如:192.168.1.1)

IP地址的表示

latex 复制代码
二进制:   11000000 10101000 00000001 00000001
十六进制: 0xC0     0xA8    0x01      0x01
十进制:   192.168.1.1

分类IP地址

IP地址分类结构

  • 任意一个IP地址都可以迅速的得出类别,并计算得出网络号
  • 当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为多归属主机
  • 一个路由器至少连接到两个不同的网络,一个路由器至少拥有两个IP地址

各类地址的指派范围

类别 网络号范围 可指派网络数 每个网络主机数
A类 1-126 126 2²⁴-2 = 16,777,214
B类 128.0-191.255 16,384 2¹⁶-2 = 65,534
C类 192.0.0-223.255.255 2,097,152 2⁸-2 = 254

特殊地址

地址类型 示例 用途
本机地址 0.0.0.0 绑定到所有接口
环回地址 127.0.0.1 本地环回测试
广播地址 255.255.255.255 受限广播
网络地址 192.168.1.0 代表整个网络
全1主机号 192.168.1.255 定向广播

注意:全0和全1主机号不能分配给主机

分类的 IP 地址的优缺点

优点

管理简单;使用方便;转发分组迅速;划分子网,灵活地使用

缺点

设计上不合理:大地址块,浪费地址资源;即使采用划分子网的方法,也无法解决 IP 地址枯竭的问题

CIDR(无分类编址)-- 现代标准

划分子网

  • 一个拥有1000台主机的组织,需要申请一个B类地址,这就会导致超过64000个地址不能被其他组织使用
  • 随着加入互联网的组织数量的迅速增加,IP地址面临被分配完的危险
  • 为了解决上述问题,IETF提出了划分子网的编址改进方案
  • 三级IP地址:网络号、子网号和主机号

无分类地址CIDR

  • 消除分类:不再有A/B/C类划分
  • 灵活前缀:网络前缀位数n可在0-32间任意取值
  • 表示方法:斜线记法(CIDR记法)
网络前缀
latex 复制代码
192.168.1.100/24  # 前24位是网络前缀
10.0.0.1/8        # 前8位是网络前缀
地址块
  • CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块
  • 一个 CIDR 地址块包含的 IP 地址数目,取决于网络前缀的位数
128.14.35.7/20 是 IP 地址,同时指明了网络前缀为 20 位 该地址是 128.14.32.0/20 地址块中的一个地址
128.14.32.0/20 是包含有多个 IP 地址的地址块,同时也是这个地址块中主机号为全 0 的 IP 地址
128.14.35.7 是 IP 地址,但未指明网络前缀长度,不知道其网络地址
128.14.32.0 不能指明一个网络地址,因为无法知道网络前缀是多少
地址掩码(子网掩码)
  • 作用:从IP地址中快速提取网络地址
  • 格式:一连串1(网络前缀)+ 一连串0(主机号)
latex 复制代码
IP地址: 192.168.1.100/24
二进制: 11000000.10101000.00000001.01100100
掩码:   11111111.11111111.11111111.00000000 (255.255.255.0)
网络地址 = IP地址 AND 掩码 = 192.168.1.0
  • 网络地址计算API
    • IP地址与地址掩码逐位进行AND运算
latex 复制代码
// 计算网络地址的伪代码
uint32_t calculate_network_address(uint32_t ip_addr, uint32_t netmask) {
    return ip_addr & netmask;
}

// 192.168.1.100 & 255.255.255.0 = 192.168.1.0
  • 默认地址掩码:

IPv6地址简介

IPv6特点

  • 地址长度:128位,地址空间巨大(3.4×10³⁸)
  • 表示方法:冒号十六进制记法
latex 复制代码
2001:0db8:85a3:0000:0000:8a2e:0370:7334

简写规则

  • 前导零省略:0000 → 0,0200 → 200
  • 零压缩:连续多个0块可用::代替(只能使用一次)
latex 复制代码
2001:0db8:0000:0000:0000:0000:1428:57ab
→ 2001:db8::1428:57ab

特殊IPv6地址

c 复制代码
const char* loopback = "::1";        // 环回地址
const char* unspecified = "::";      // 未指定地址
const char* multicast_prefix = "ff00::/8"; // 多播地址

端口号

基本概念

为什么需要端口号

  • 进程标识:IP地址标识主机,端口号标识主机内的进程
  • 多路复用:多个应用进程共享同一IP地址
  • 动态性:进程的创建和撤销是动态的

特性

  • 长度:16位(0-65535)
  • 本地意义:只在当前主机内有意义
  • 唯一标识:<IP地址, 端口号, 协议> 三元组唯一标识一个通信端点

端口号分类

IANA标准分类

类型 范围 权限 用途 示例
熟知端口 0-1023 系统/root 标准服务 HTTP(80), HTTPS(443)
登记端口 1024-49151 用户/系统 注册服务 MySQL(3306), Redis(6379)
短暂端口 49152-65535 用户 客户端临时端口 客户端连接时动态分配

常见端口号

基础网络服务

c 复制代码
// 常用端口定义(编程时可作为常量)
#define PORT_FTP       21      // 文件传输协议
#define PORT_SSH       22      // 安全Shell
#define PORT_TELNET    23      // 远程登录
#define PORT_SMTP      25      // 简单邮件传输
#define PORT_DNS       53      // 域名系统
#define PORT_HTTP      80      // 超文本传输
#define PORT_POP3      110     // 邮局协议
#define PORT_HTTPS     443     // 安全HTTP
#define PORT_MQTT      1883    // MQTT协议(物联网常用)
#define PORT_MQTTS     8883    // 安全MQTT

Linux系统视角(BSD端口分类)

  • 0不使用,1-1023为系统端口,也叫BSD保留端口
  • 0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用
  • 1024~65535为用户端口,其中:
    • 1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;
    • 5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口
c 复制代码
# 查看系统端口范围配置
cat /proc/sys/net/ipv4/ip_local_port_range
# 通常输出:32768   61000

# 常用分类(Linux实际使用):
# 0-1023:    特权端口(需要root权限绑定)
# 1024-49151: 用户端口
# 32768-61000:临时端口(客户端常用)
相关推荐
卓应米老师1 小时前
【网络配置实战】堆叠的配置
运维·服务器·网络·华为认证
一晌小贪欢2 小时前
Python 健壮性进阶:精通 TCP/IP 网络编程与 requirements.txt 的最佳实践
开发语言·网络·python·网络协议·tcp/ip·python基础·python小白
zhojiew2 小时前
关于envoy的基础概念组件构成和示例配置笔记整理
服务器·网络
一名爱学习的ikun2 小时前
No physical port available for the line(s):aux1-aux4
网络
啊阿狸不会拉杆2 小时前
《机器学习》第 8 章 - 常用深度网络模型
网络·人工智能·深度学习·机器学习·ai·cnn·ml
恒拓高科WorkPlus2 小时前
BeeWorks SDK即将上线:快速构建企业级安全通讯体系
网络·人工智能·安全
“αβ”2 小时前
UDP与TCP的区别
linux·运维·服务器·网络·网络协议·tcp/ip·udp
天上飞的粉红小猪2 小时前
应用层自定义协议与序列化
运维·服务器·网络
Godspeed Zhao2 小时前
现代智能汽车中的无线技术36——V2X(8)
网络·汽车