网络基本概念
概览
网络通信是广义的进程间通信(IPC),带IP地址的网络IPC比单机IPC更复杂。学习网络编程需先理解网络分层思想,再掌握网络协议,核心是基于协议编写符合规范的通信代码。
网络分层
网络传输过程复杂,按功能分层可明确每层职责,便于形成行业标准和维护代码。
OSI七层模型(理论模型)
从顶层到底层依次为:
- 应用层:面向用户,提供具体应用服务
- 表示层:处理数据加密、压缩、编码等格式转换
- 会话层:建立、管理和终止通信会话
- 传输层:负责端到端的数据传输控制
- 网络层:处理路由选择,实现跨网络通信
- 数据链路层:处理物理地址、帧传输等链路管理
- 物理层:定义物理传输媒介、接口标准等
TCP/IP四层模型(实际应用模型)
是现行普适的网络层次模型,与OSI模型存在对应关系,从顶层到底层:
- 应用层
- 包含OSI模型的应用层、表示层、会话层功能
- 涵盖加密、压缩、编码、会话管理等,应用程序复杂度可灵活调整
- 传输层(操作系统内核层)
- 对应OSI模型传输层,核心负责传输控制
- 网络层(操作系统内核层)
- 对应OSI模型网络层,核心负责路由选择
- 网络接口与物理层(操作系统内核层)
- 包含OSI模型数据链路层和物理层功能
- 涵盖实际数据传输的物理媒介及对应驱动软件
网络协议
协议是通信双方约定的“暗号”,将协定内容写入数据包固定位置,双方按统一方式解读,实现意图互通。
协议与分层的关系
不同网络分层对应专属协议,互联网领域应用最广泛的是TCP/IP协议栈。
TCP/IP协议栈组成
TCP/IP协议栈并非仅含TCP和IP协议,而是包含一系列相关协议,具体分层协议如下:
| 层次 | 核心协议 |
|---|---|
| 应用层 | DNS、FTP、HTTP、IMAP、POP3、SMTP、SSH、Telnet、SSL 等 |
| 传输层 | TCP、UDP 等 |
| 网络层 | IP(IPv4、IPv6)、ICMP、ARP 等 |
| 数据链路与物理层 | 802.3(Ethernet)、802.11(Wi-Fi)、PPP 等 |
数据包的封装与解封装
- 发送方:逐层对数据包进行协议封装,类似给包裹贴标签
- 接收方:执行反向解封装过程,拆封后读取协议头信息
基本术语
套接字(Socket)
套接字原意为插座、电插孔,应用层中通过操作系统的不同协议处理APP数据,类似选择不同插口接通电器。用户需根据需求选择对应协议的套接字。
IP地址
IP地址是计算机的唯一标识,便于在全球范围内定位设备。
IPv4地址
- 长度为32位,采用点分式字符串表示(如192.168.18.2)
- 由网络号(标识网络)和主机号(标识网络内设备)组成
- 因设备数量激增,IPv4地址曾面临枯竭,子网技术缓解了这一问题
IPv4地址分类
| 地址类别 | 网络号与主机号划分 | 首字节特征 | 地址范围 |
|---|---|---|---|
| A类地址 | 第1字节为网络号,后3字节为主机号 | 最高位固定为0 | 1.0.0.1 – 126.255.255.255 |
| B类地址 | 前2字节为网络号,后2字节为主机号 | 前两位固定为10 | 128.0.0.1 – 191.255.255.255 |
| C类地址 | 前3字节为网络号,最后1字节为主机号 | 前三位固定为110 | 192.0.0.1 – 223.255.255.255 |
| D类地址 | 不分网络号和主机号 | 前四位固定为1110 | 224.0.0.1 – 239.255.255.255 |
补充:IPv6地址
- 长度为128位,采用冒分十六进制表示(如fe80:6cd9:f2d7:6706:6f3d%10)
- 彻底解决了IPv4地址枯竭问题,支持更多设备联网
- 目前正逐步替代IPv4,成为下一代互联网核心地址协议
注意事项
- 日常主机使用的多为局域网地址,由局域网路由分配
- D类地址并非普通IP地址,而是UDP协议的多播标识
子网属性
核心概念
- 网段:IP地址与子网掩码进行“与”运算后的结果(网段 = IP & 子网掩码)
- 同一局域网内的主机需处于同一网段,否则网关无法路由转发数据
子网掩码的表示方式
- 点分十进制形式(如255.255.255.0)
- 比特位缩写形式(如192.168.9.88/24,/24表示前24位为网络号,对应子网掩码255.255.255.0)
端口号
IP地址标识计算机,端口号标识计算机内的通信进程(类似网络中的进程号)。
端口号基础信息
- 长度为16位,取值范围0-65535
- 由IANA(Internet Assigned Numbers Authority)统一管理
- TCP端口号与UDP端口号相互独立,互不影响
端口号分类
- 系统端口(1~1023):用于系统核心服务,需管理员权限使用
- 注册端口(1024~49150):用于第三方应用服务,需注册使用
- 动态或私有端口(49151~65535):日常实验、开发可自由使用
常见端口示例
- HTTP:80端口(TCP)
- HTTPS:443端口(TCP)
- FTP:21端口(TCP)
- DNS:53端口(TCP/UDP)
- SSH:22端口(TCP)
字节序
当数据需用2个及以上字节存储时,会存在字节序差异(即字节存储顺序不同)。
字节序分类
- 小端序:最低有效位存于低地址处(多数PC机采用)
- 大端序:最低有效位存于高地址处(网络字节序标准)
网络编程中的字节序处理
- 单机编程中,字节序是系统内部细节,不影响程序运行
- 网络通信中,需统一使用大端序(网络字节序)
- 发送数据:主机字节序 → 网络字节序
- 接收数据:网络字节序 → 主机字节序
字节序转换函数(以C语言为例)
- htons():主机字节序转网络字节序(针对16位数据)
- ntohs():网络字节序转主机字节序(针对16位数据)
- htonl():主机字节序转网络字节序(针对32位数据)
- ntohl():网络字节序转主机字节序(针对32位数据)
WSL 切换版本
WSL2的IP地址为虚拟地址,若需进行设备间(如同桌协作)实验,需切换至WSL1版本。
切换步骤(Windows PowerShell管理员模式)
- 查看已安装的WSL发行版及版本:
wsl -l -v - 执行版本切换命令:
wsl --set-version <发行版名称> 1(如wsl --set-version Ubuntu-22.04 1) - 等待转换完成(可能需要几分钟)
切换后验证与注意事项
- 验证版本:切换后再次执行
wsl -l -v,确认版本已变为1 - 网络访问:WSL1使用与Windows主机相同的IP地址,设备间可通过局域网IP直接通信
- 若切换失败:检查Windows虚拟机平台、WSL功能是否已启用,或重启电脑后重试

浙公网安备 33010602011771号