Linux网络通信(一)----基础架构
一、OSI 七层模型(open system interconnect)
OSI 模型是开放系统互联模型(理想模型,尚未实现),共七层,从上层到下层依次为:
- 应用层:为用户提供具体网络服务,如文件传输(TFTP/FTP)、电子邮件、网页访问等,是直接面向用户的层级。
- 表示层:负责数据的格式转换、加密解密、压缩解压缩(如 gzip),让不同主机的应用层能识别彼此的数据。
- 会话层:管理进程间的会话连接,处理连接的建立、断开、保活(keep-alive/keep-close),维护连接状态。
- 传输层:核心是提供端到端的数据传输服务,有 TCP(可靠)和 UDP(不可靠)两种核心协议,分别适用于文件传输、视频音频传输等不同场景。
- 网络层:负责跨网络的路由选择和网际互连,核心是 IP 地址,同时处理 NAT 地址转换,是实现不同网络互通的关键。
- 数据链路层:负责物理相邻主机间的数据传输,基于 MAC 地址寻址,将数据封装为帧,做帧校验和差错控制,核心设备为交换机,可分为 LLC 逻辑链路控制和 MAC 介质访问控制子层。
- 物理层:最底层,负责将数据转换为电信号通过物理介质(双绞线、光纤、无线信道)传输,定义了传输速率(100Mb、10Gb)、介质类型等物理特性
二、TCP/IP 四层网际互联模型(工业标准)
TCP/IP 模型是实际工业中使用的实用模型,是对 OSI 模型的简化,也是我们实际开发中遵循的标准,对应协议栈层层递进:
- 应用层:整合 OSI 的应用层、表示层、会话层,对应具体的应用程序和应用层协议(HTTP、TFTP、DNS、FTP 等)。
- 传输层:与 OSI 传输层一致,核心为 TCP/UDP 协议,通过端口号区分主机上的不同应用程序,端口范围 1-65535。
- 网络层:与 OSI 网络层一致,核心为 IP 地址,负责路由和寻址,同时包含 ICMP(ping 基于此)、RIP 等协议。
- 接口层:整合 OSI 的数据链路层和物理层,对应网卡、驱动,负责将网络层的 IP 地址转换为物理层的 MAC 地址,包含 ARP(IP→MAC)、RARP 等协议。
核心协议族:TCP/IP 协议栈的组成
TCP/IP 模型的每一层都对应着核心协议,共同构成了网络通信的 “语言”,核心梳理:
- 应用层:HTTP(网页)、DNS(域名解析)、DHCP(动态 IP 分配)、TFTP/FTP(文件传输)、SNMP(网络管理);
- 传输层:TCP(可靠传输)、UDP(无连接传输);
- 网络层:IP(IPv4/IPv6)、ICMP(网络连通性测试)、IGMP(组播)、RIP/OSPF(路由协议);
- 接口层:ARP(地址解析)、RARP(反向地址解析)。
三、IP 地址组成
1. IPv4 地址基本结构
- 本质:IPv4 地址是一个 32 位的二进制数,为了方便人类阅读,采用 点分十进制 表示(如
192.168.1.1)。 - 组成公式:
IP地址 = 网络位 + 主机位- 网络位:标识主机所在的网段 / 子网,同一网段内的主机可以直接通信。
- 主机位:标识该网段内的具体一台主机,不能全为 0(代表网络本身)或全为 1(代表广播地址)。
IP地址 == 网络位 + 主机位
IP地址的分类: 点分十进制
2. IPv4 地址分类(A/B/C/D/E 类)
常用 A/B/C 三类地址,这是网络划分的基础:
| 地址类别 | 范围 | 默认子网掩码 | 私有地址段(局域网专用) | 适用场景 |
|---|---|---|---|---|
| A 类 | 1.0.0.0-126.255.255.255 | 255.0.0.0 | 10.0.0.0-10.255.255.255 | 超大规模网络 |
| B 类 | 128.0.0.0-191.255.255.255 | 255.255.0.0 | 172.16.0.0-172.31.255.255 | 大中规模网络 |
| C 类 | 192.0.0.0-223.255.255.255 | 255.255.255.0 | 192.168.0.0-192.168.255.255 | 中小规模 / 局域网 |
| D 类 | 224.0.0.0-239.255.255.255 | - | - | 组播 / 广播 |
| E 类 | 240.0.0.0-255.255.255.255 | - | - | 实验使用 |
重点:私有地址 只能在局域网内部使用,无法直接访问公网,需要通过网关进行 NAT 地址转换。
3. 子网掩码(Subnet Mask)
- 作用:用来划分网络位和主机位,告诉设备 “哪部分是网络号,哪部分是主机号”。
- 表示方法:和 IP 地址一样是 32 位二进制数,网络位对应 1,主机位对应 0。
- 例:C 类地址默认子网掩码
255.255.255.0,即前 24 位是网络位,后 8 位是主机位。
- 例:C 类地址默认子网掩码
- 判断逻辑:将 IP 地址与子网掩码做 按位与运算,得到的结果就是网络地址,用来判断两台主机是否在同一网段。
4. 网关(Gateway)
- :是不同网段之间的 “桥梁”,负责将本网段的数据包转发到其他网段。
- 本质:通常是路由器的一个接口 IP 地址,也是本网段主机访问外网的默认出口。
- 例:局域网
192.168.0.0/24中,网关通常是192.168.0.1。
- 例:局域网
- 通信规则:
- 同一网段:主机之间直接通信,不需要经过网关。
- 不同网段:主机必须将数据包发给网关,由网关负责转发。
5. IPv6 补充(拓展)
- IPv6 是 128 位地址,解决了 IPv4 地址耗尽的问题,采用冒号十六进制表示(如
2001:0db8::1)。 - 结构上同样包含网络前缀(类似网络位)和接口标识(类似主机位),自带自动配置和安全特性。
四、网络设备寻址逻辑:MAC 地址与 IP 地址
1. 两种地址的核心定位
| 地址类型 | 全称 | 作用范围 | 核心作用 |
|---|---|---|---|
| MAC 地址 | 物理地址 / 硬件地址 | 同一局域网内 | 标识同一网段内的物理设备 |
| IP 地址 | 网际协议地址 | 跨网段 / 全局 | 标识整个网络中的主机 |
2. MAC 地址寻址(数据链路层)
- 特点:
- 48 位二进制数,全球唯一,烧录在网卡硬件中,一般不可更改。
- 表示为十六进制形式,如
00:11:22:33:44:55。
- 工作场景:
- 只在同一个局域网(广播域) 内有效,用于交换机转发数据。
- 当主机要和同网段设备通信时,会通过 ARP 协议(地址解析协议)将目标 IP 地址解析为对应的 MAC 地址,然后封装成数据帧进行传输。
3. IP 地址寻址(网络层)
- 特点:
- 逻辑地址,可通过 DHCP 或手动配置动态更改。
- 跨网段有效,是实现不同网络之间通信的基础。
- 工作场景:
- 当主机要和不同网段的设备通信时,会将数据包发给网关。
- 网关(路由器)根据 IP 地址的网络位,查询路由表,选择下一跳路径,将数据包转发到目标网络。
- 到达目标网络后,再通过 ARP 协议解析 MAC 地址,最终交付给目标主机。
4. 完整寻址流程(重点理解)
- 同网段通信:
- 主机 A → ARP 查询主机 B 的 MAC 地址 → 封装数据帧 → 交换机根据 MAC 地址转发 → 主机 B 接收。
- 跨网段通信:
- 主机 A → 判断目标 IP 不在本网段 → 将数据包发给网关 → 网关查询路由表转发 → 目标网络路由器 → ARP 查询目标主机 MAC → 交付给主机 B。
- IP 地址 = 网络位 + 主机位,子网掩码是划分两者的关键。
- 私有地址 是局域网专用,A/B/C 类各有固定范围,网关是跨网段通信的入口。
- MAC 地址 负责局域网内寻址,IP 地址 负责全局 / 跨网段寻址,两者通过 ARP 协议关联。
- 通信的本质是:IP 寻址找到目标网络,MAC 寻址找到目标设备。
五、网络常用命令
这三个命令是 Linux / 类 Unix 系统下最基础、最常用的网络诊断工具,必须熟练掌握其功能和用法。
1. ping:网络连通性检测工具
- 核心作用:测试本机与目标主机之间的网络是否通畅,测量数据包往返时间(RTT),判断是否存在丢包。
- 底层原理:基于 ICMP 协议(网络层协议),向目标主机发送 echo 请求包,目标主机返回 echo 应答包。
- 典型用法:
ping www.baidu.com # 测试与百度服务器的连通性
ping 192.168.1.1 # 测试与局域网网关的连通性
- 关键信息:输出中会显示数据包大小、TTL(生存时间)、往返时间、丢包率等,用于判断网络延迟和稳定性。
2. ifconfig:网络接口信息查看工具
- 核心作用:查看本机所有网络适配器(网卡)的详细状态信息,包括 IP 地址、子网掩码、MAC 地址、网卡状态(UP/DOWN)、收发数据包统计等。
- 典型用法
ifconfig # 查看所有活跃网卡信息
ifconfig eth0 # 查看指定网卡(如eth0)的信息
3. netstat -anp:网络连接状态监控工具
- 核心作用:全面查看本机所有的网络连接、监听端口、路由表、接口统计等信息,是排查端口占用、网络连接问题的利器。
- 参数解析:
-a:显示所有连接和监听端口。-n:以数字形式显示地址和端口(不进行域名解析,速度更快)。-p:显示建立连接的进程 ID(PID)和程序名。
- 典型用法:
netstat -anp | grep 8080 # 查找占用8080端口的进程
netstat -tulnp # 仅查看所有监听中的TCP/UDP端口
六、网络接口核心:Socket 套接字
Socket(套接字)是网络通信的核心接口(BSD Socket),是应用程序与内核之间的网络通信入口,通过IP + 端口号唯一标识网络中的一个通信端点:
1. Socket 与 Socket API
- Socket(套接字):
- 本质是网络设备对应的文件描述符,在 Unix/Linux 系统中,“一切皆文件”,网络通信也通过读写文件描述符来完成。
- 它是应用程序与网络协议栈之间的接口,代表一个网络通信端点。
- Socket API:
- 全称
Application Programming Interface,是操作系统提供的一组用于网络通信的函数接口(如socket(),bind(),listen(),connect(),send(),recv()等)。 - 是实现 TCP/UDP 客户端 / 服务器程序的核心工具。
- 全称
2. IP + Port:网络通信的唯一标识
- IP 地址:用来在网络中唯一识别一台主机,解决 “数据要发给哪台机器” 的问题。
- 端口号(Port):用来在一台主机上唯一识别一个应用程序,解决 “数据要发给机器上的哪个程序” 的问题。
- 端口分类:
- 分为 TCP 端口 和 UDP 端口,两者相互独立,范围均为
1-65535。 - 知名端口(0-1023):系统保留,用于标准服务(如 HTTP=80, HTTPS=443, SSH=22)。
- 注册端口(1024-49151):用于常见应用程序。
- 动态 / 私有端口(49152-65535):客户端临时使用。
- 分为 TCP 端口 和 UDP 端口,两者相互独立,范围均为
- 核心结论:
IP + Port唯一标识网络中的一个通信端点,是建立网络连接的基础。
3. 网络字节序 vs 主机字节序
- 主机字节序:
- 指 CPU 在内存中存储多字节数据的方式,x86 架构的 CPU 默认是小端存储(Little-Endian)(低字节存低地址,高字节存高地址)。
- 网络字节序:
- 为了保证不同架构的主机能正确解析网络数据,网络通信统一规定使用大端存储(Big-Endian)(高字节存低地址,低字节存高地址)。
- 编程要点:在网络编程中,必须使用专门的函数进行字节序转换,核心转换函数均在
<arpa/inet.h>中:ntohs()/ntohl():将网络字节序转换为主机字节序(用于接收数据解析)。htons()/htonl():将主机字节序转换为网络字节序(用于端口、IP 地址)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)