网络1:网络基础概念
一、认识网络
1. 什么是网络
网络(Network) 是将多台计算机或设备通过通信介质(网线、光纤、无线信号等)相互连接,实现资源共享和信息传递的系统。
- 网络中的每一台设备称为节点(Node)
- 节点之间通过链路(Link) 相连
- 多个网络互联构成互联网(Internet),Internet 是全球最大的互联网
2. 网络的分类(按地理范围)
| 类型 | 全称 | 覆盖范围 | 典型场景 |
|---|---|---|---|
| LAN | 局域网(Local Area Network) | 几百米~几千米 | 家庭、办公室、校园 |
| MAN | 城域网(Metropolitan Area Network) | 几千米~几十千米 | 城市范围的网络 |
| WAN | 广域网(Wide Area Network) | 几百千米以上 | 省际、国际、Internet |


关键理解:
- LAN 通常由个人或组织自己搭建和管理,速度快、延迟低
- WAN 通常由电信运营商搭建,通过租用线路连接各地 LAN
- 我们日常使用的「上网」本质是:家庭 LAN → 运营商 WAN → Internet
3. 网络通信的核心问题
网络通信需要解决以下五个核心问题:
- 找到目标:如何在茫茫网络中定位目标主机?→ IP 地址 + 端口号
- 可靠传输:数据包在传输过程中会丢失、乱序怎么办?→ TCP 协议
- 格式约定:双方如何理解对方发送的数据含义?→ 应用层协议
- 高效传输:如何充分利用带宽,避免拥塞?→ 流量控制、拥塞控制
- 硬件寻址:同一局域网内如何找到目标设备?→ MAC 地址
二、网络协议
1. 什么是协议
协议(Protocol) 是通信双方必须共同遵守的规则和约定,规定了数据的格式、传输顺序、错误处理等。
类比:两个人打电话,必须使用同一种语言(中文或英文),这个「语言」就是协议。
协议规定了三要素:
- 语法(Syntax):数据的格式和编码方式(数据长什么样)
- 语义(Semantics):每个字段的含义(数据表示什么)
- 时序(Timing):事件发生的顺序和速率匹配(先发什么后发什么)
2. 协议分层的必要性
网络通信非常复杂,涉及硬件、操作系统、应用程序等多个层面。如果将所有功能放在一个模块里,会导致:
- 代码耦合严重,难以维护
- 不同厂商设备无法互联
- 某一功能改变影响全局
分层设计的好处:
- 每层只关注自己的职责,层间通过接口通信
- 上层不需要知道下层的实现细节(封装)
- 不同厂商只要遵守同一层协议标准,就能互联互通
- 某一层协议变化不影响其他层

3. 标准化组织
| 组织 | 全称 | 主要负责 |
|---|---|---|
| ISO | 国际标准化组织 | 制定 OSI 七层模型 |
| IEEE | 电气和电子工程师协会 | 局域网标准(如 802.3 以太网、802.11 WiFi) |
| IETF | 互联网工程任务组 | TCP/IP 协议族(RFC 文档) |
| W3C | 万维网联盟 | HTTP、HTML 等 Web 标准 |
三、OSI 七层模型
1. OSI 模型概述
OSI(Open System Interconnection,开放系统互联)模型由 ISO 于 1984 年提出,将网络通信功能划分为 7 层,是理解网络的理论框架(实际互联网使用 TCP/IP 模型)。


其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议
2. 各层详解
第7层:应用层(Application Layer)
- 功能:为应用程序提供网络服务接口,直接面向用户
- 代表协议:HTTP、HTTPS、FTP、SMTP、DNS、SSH
- 数据单元:报文(Message)
第6层:表示层(Presentation Layer)
- 功能:数据格式转换、加密解密、压缩解压
- 举例:将 ASCII 转换为 EBCDIC,TLS/SSL 加密
- 数据单元:报文
第5层:会话层(Session Layer)
- 功能:建立、管理、终止通信会话,提供会话恢复能力
- 举例:RPC、NetBIOS
- 数据单元:报文
第4层:传输层(Transport Layer)
- 功能:端到端的可靠传输,提供进程间通信(端口号)
- 代表协议:TCP(可靠)、UDP(不可靠)
- 数据单元:段(Segment)/ 数据报(Datagram)
第3层:网络层(Network Layer)
- 功能:逻辑寻址(IP 地址)、路由选择、跨网络转发
- 代表协议:IP、ICMP、ARP(部分归属)、OSPF
- 代表设备:路由器
- 数据单元:包(Packet)
第2层:数据链路层(Data Link Layer)
- 功能:相邻节点之间的可靠传输,物理寻址(MAC 地址)、帧同步、错误检测
- 代表协议:Ethernet(以太网)、PPP、WiFi(802.11)
- 代表设备:交换机、网桥
- 数据单元:帧(Frame)
第1层:物理层(Physical Layer)
- 功能:定义物理介质的电气特性、光学特性,负责比特流的传输
- 代表标准:RJ-45(网线接口)、光纤标准、USB
- 代表设备:集线器(Hub)、中继器
- 数据单元:比特(Bit)
3. OSI 七层记忆口诀
从上到下(7→1):应表会传网数物
- 应 用层、表 示层、会 话层、传 输层、网 络层、数 据链路层、物理层
从下到上(1→7):物数网传会表应
四、TCP/IP 四层模型
1. 与 OSI 的对应关系
TCP/IP 模型是实际互联网使用的协议栈,将 OSI 七层简化为四层:
| TCP/IP 层 | 对应 OSI 层 | 代表协议 |
|---|---|---|
| 应用层 | 应用层 + 表示层 + 会话层 | HTTP、FTP、DNS、SMTP |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网络层 | IP、ICMP、ARP |
| 网络接口层 | 数据链路层 + 物理层 | Ethernet、WiFi |

2. TCP/IP 各层职责
应用层
- 应用程序直接使用的协议层
- 程序员最常打交道的一层,自定义应用协议也在此层
- 数据以报文形式存在
传输层
- 提供端到端通信(进程到进程,通过端口号区分)
- TCP:面向连接,可靠传输,有序,有流量控制和拥塞控制
- UDP:无连接,不可靠,但速度快、开销小
网络层
- 提供主机到主机通信(通过 IP 地址)
- 负责路由:决定数据包从源到目的地经过哪些路由器
- IP 协议是网络层核心协议(无连接、不可靠,尽力而为)
网络接口层(链路层)
- 负责同一局域网内节点间的数据传输
- 使用 MAC 地址进行物理寻址
- 将数据封装为帧,完成物理传输
五、数据封装与分用
1. 封装(Encapsulation)
发送方数据从应用层向下传递,每经过一层都会添加该层的头部(Header),这个过程称为封装。
应用层: [数据]
传输层: [TCP头 | 数据] → 段(Segment)
网络层: [IP头 | TCP头 | 数据] → 包(Packet)
链路层: [帧头 | IP头 | TCP头 | 数据 | 帧尾] → 帧(Frame)
物理层: 比特流

关键理解:
- 每一层只处理本层的头部,对上层数据视为不透明的「载荷(Payload)」
- 下层为上层提供服务,上层不感知下层实现
- 帧的尾部通常包含 FCS(帧校验序列),用于错误检测
2. 分用(Demultiplexing)
接收方数据从物理层向上传递,每经过一层都会剥离该层的头部,将数据交给上层,这个过程称为分用。
物理层: 比特流
链路层: 剥离帧头帧尾 → [IP头 | TCP头 | 数据]
网络层: 剥离IP头 → [TCP头 | 数据]
传输层: 剥离TCP头 → [数据]
应用层: 应用程序处理数据
分用的关键:如何判断数据交给上层哪个协议?
- 链路层帧头中有类型字段(EtherType):0x0800 → IPv4,0x0806 → ARP
- IP 头中有协议字段(Protocol):6 → TCP,17 → UDP,1 → ICMP
- TCP/UDP 头中有目标端口号:80 → HTTP,443 → HTTPS,22 → SSH

六、MAC 地址
1. 什么是 MAC 地址
MAC(Media Access Control)地址是网络设备硬件层面的物理地址,由网卡制造商烧录在网卡中,全球唯一。
- 长度:48 位(6 字节),通常写成 12 位十六进制数
- 格式 :
AA:BB:CC:DD:EE:FF(用冒号或连字符分隔) - 作用范围 :仅在同一局域网内有效,跨路由器后 MAC 地址会改变
MAC 地址结构:
| 字段 | 位数 | 含义 |
|---|---|---|
| OUI(厂商标识) | 前 24 位 | 由 IEEE 分配给网卡厂商 |
| 设备序列号 | 后 24 位 | 厂商自行分配,保证唯一性 |
2. MAC 地址 vs IP 地址
| 对比项 | MAC 地址 | IP 地址 |
|---|---|---|
| 层次 | 数据链路层 | 网络层 |
| 长度 | 48 位 | IPv4: 32 位 / IPv6: 128 位 |
| 分配方式 | 硬件固化(出厂确定) | 软件配置(可变) |
| 作用范围 | 局域网内寻址 | 全局寻址(跨网络) |
| 类比 | 身份证号(固定) | 通讯地址(可变) |
为什么有 IP 地址还需要 MAC 地址?
- IP 地址用于跨网络的逻辑寻址(找到目标网络)
- 到达目标网络后,需要 MAC 地址在局域网内精确定位目标设备
- 两者配合:IP 负责「找到哪个网络」,MAC 负责「找到网络内哪台设备」
七、IP 地址
1. 什么是 IP 地址
IP(Internet Protocol)地址是网络层分配给主机的逻辑地址,用于在全球互联网中唯一标识一台主机(或网络接口)。
- IPv4 :32 位,点分十进制表示,如
192.168.1.100 - IPv6 :128 位,冒号十六进制表示,如
2001:0db8::1
2. IPv4 地址结构
IPv4 地址由两部分组成:
[ 网络号(Network ID) | 主机号(Host ID) ]
- 网络号:标识主机所在的网络(同一网络内所有主机网络号相同)
- 主机号:标识网络内的具体主机
- 子网掩码(Subnet Mask):用于区分网络号和主机号的位数
举例:
- IP 地址:
192.168.1.100 - 子网掩码:
255.255.255.0(即/24) - 网络号:
192.168.1.0 - 主机号:
100
3. IP 地址分类(有类地址)
| 类别 | 首位特征 | 网络号位数 | 主机号位数 | 地址范围 | 适用规模 |
|---|---|---|---|---|---|
| A 类 | 0 | 8 位 | 24 位 | 1.0.0.0 ~ 126.255.255.255 | 大型网络 |
| B 类 | 10 | 16 位 | 16 位 | 128.0.0.0 ~ 191.255.255.255 | 中型网络 |
| C 类 | 110 | 24 位 | 8 位 | 192.0.0.0 ~ 223.255.255.255 | 小型网络 |
| D 类 | 1110 | --- | --- | 224.0.0.0 ~ 239.255.255.255 | 组播地址 |
| E 类 | 1111 | --- | --- | 240.0.0.0 ~ 255.255.255.255 | 保留实验 |
4. 特殊 IP 地址
| 地址 | 含义 |
|---|---|
127.0.0.1 |
本地回环地址(loopback),用于测试本机网络栈 |
0.0.0.0 |
通配地址,表示「本机所有接口」或「未指定」 |
255.255.255.255 |
受限广播地址,发送给本网络所有主机 |
x.x.x.255(C类) |
定向广播地址,发送给指定网络所有主机 |
x.x.x.0 |
网络地址(不分配给主机) |
169.254.x.x |
链路本地地址,DHCP 失败时自动分配 |
私有 IP 地址(不可路由到公网):
| 范围 | 类别 |
|---|---|
10.0.0.0/8 |
A 类私有 |
172.16.0.0/12 |
B 类私有 |
192.168.0.0/16 |
C 类私有 |
家庭路由器分配给设备的通常是
192.168.x.x,属于私有地址,需要通过 NAT 访问公网。
八、端口号
1. 什么是端口号
端口号(Port) 是传输层用于区分同一主机上不同进程(应用程序) 的标识符。
- 长度 :16 位无符号整数,范围
0 ~ 65535 - 作用:IP 地址定位主机,端口号定位主机上的进程
- 类比:IP 地址是大楼地址,端口号是房间号
2. 端口号分类
| 范围 | 类型 | 说明 |
|---|---|---|
0 ~ 1023 |
知名端口(Well-Known Ports) | 由 IANA 分配,用于标准服务,需 root 权限绑定 |
1024 ~ 49151 |
注册端口(Registered Ports) | 可注册使用,常见应用使用 |
49152 ~ 65535 |
动态/私有端口(Ephemeral Ports) | 客户端临时端口,系统自动分配 |
常见知名端口:
| 端口 | 协议 | 服务 |
|---|---|---|
| 20/21 | TCP | FTP(数据/控制) |
| 22 | TCP | SSH |
| 23 | TCP | Telnet |
| 25 | TCP | SMTP(邮件发送) |
| 53 | UDP/TCP | DNS |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
| 3306 | TCP | MySQL |
| 6379 | TCP | Redis |
| 8080 | TCP | HTTP 代理/开发服务器 |
3. 端口号的使用规则
- 服务端 :绑定一个固定端口,等待客户端连接(
bind系统调用) - 客户端:通常不手动绑定端口,由操作系统从动态端口范围自动分配
- 同一主机上,同一协议(TCP/UDP)下端口号不能重复绑定
- TCP 的 80 端口和 UDP 的 80 端口是相互独立的
九、Socket 套接字
1. 什么是 Socket
Socket(套接字) 是操作系统提供给应用程序进行网络通信的编程接口(API),是应用层与传输层之间的抽象层。
类比:Socket 就像网络通信的「插座」,应用程序通过它发送和接收数据,不需要关心底层的 TCP/IP 细节。
- Socket 是一个文件描述符(在 Linux 中「一切皆文件」)
- 通过
socket()系统调用创建,返回一个int型文件描述符 - 可以像操作文件一样用
read/write收发数据
2. Socket 五元组
一个网络连接由五元组唯一确定:
{ 协议, 源IP, 源端口, 目的IP, 目的端口 }
| 字段 | 说明 |
|---|---|
| 协议 | TCP 或 UDP |
| 源 IP | 发送方 IP 地址 |
| 源端口 | 发送方端口号 |
| 目的 IP | 接收方 IP 地址 |
| 目的端口 | 接收方端口号 |
只要五元组中任意一个字段不同,就是不同的连接。这也是为什么服务器的 80 端口可以同时接受大量客户端连接------每个连接的源IP或源端口不同,五元组唯一。
3. Socket 类型
| 类型 | 常量 | 对应协议 | 特点 |
|---|---|---|---|
| 流式套接字 | SOCK_STREAM |
TCP | 面向连接,可靠,有序,字节流 |
| 数据报套接字 | SOCK_DGRAM |
UDP | 无连接,不可靠,有边界,数据报 |
| 原始套接字 | SOCK_RAW |
IP/ICMP等 | 绕过传输层,直接操作网络层,需 root 权限 |
4. Socket 基本编程流程
TCP 通信流程:
服务端: 客户端:
socket() 创建套接字 socket() 创建套接字
bind() 绑定地址和端口
listen() 开始监听
accept() 等待客户端连接 ←───── connect() 发起连接
read/write 收发数据 ←────→ read/write 收发数据
close() 关闭连接 close() 关闭连接
UDP 通信流程:
服务端: 客户端:
socket() 创建套接字 socket() 创建套接字
bind() 绑定地址和端口
recvfrom() 接收数据 ←───── sendto() 发送数据
sendto() 发送数据 ────→ recvfrom() 接收数据
close() close()
十、总结
应用程序
↕ Socket API(文件描述符)
应用层 HTTP / FTP / DNS / SMTP ...
↕
传输层 TCP(可靠)/ UDP(快速) → 端口号区分进程
↕
网络层 IP协议 → IP地址定位主机,路由转发
↕
链路层 Ethernet / WiFi → MAC地址局域网内寻址
↕
物理层 网线 / 光纤 / 无线信号
| 概念 | 一句话总结 |
|---|---|
| 协议 | 通信双方共同遵守的规则 |
| 分层 | 解耦复杂性,各层专注自身职责 |
| 封装/分用 | 发送时逐层加头,接收时逐层剥头 |
| MAC 地址 | 局域网内的硬件物理地址,48位,跨路由器会变 |
| IP 地址 | 全网逻辑地址,32位,用于跨网络寻址 |
| 端口号 | 区分同一主机上的不同进程,16位 |
| Socket | 应用程序与网络协议栈之间的编程接口 |
| 五元组 | {协议, 源IP, 源端口, 目的IP, 目的端口} 唯一标识一条连接 |