网络编程基础知识
一、物理层与 MAC 地址
- 定位:OSI 模型第 1 层,负责硬件层面的「比特流传输」。
1.物理层
- 核心作用:把二进制的 0/1 信号,通过电缆、光纤、无线电等物理介质传输出去。
- 关注的是:电压、频率、信号编码方式、传输介质(网线、光纤),不关心数据内容。
2.MAC 地址(物理地址)
- 全称:Media Access Control 地址,也叫硬件地址。
- 特点:每个网卡出厂时就烧录了一个全球唯一的 48 位地址,格式如 AA:BB:CC:DD:EE:FF。
- 作用:在同一局域网内,用来唯一标识一台设备,数据链路层(以太网)就是靠它来转发数据帧的。
二、网络层与 IP 协议
- 定位:OSI 模型第 3 层,负责「跨网络的路由寻址」,核心是 IP 协议。
1.IP 协议(网际协议)
- 核心作用:给不同网络的设备分配唯一的逻辑地址(IP 地址),并负责把数据包从源主机,通过路由器转发到目标主机。
- 核心版本:
- IPv4:32 位地址(如 192.168.1.1),现在地址已经耗尽,是目前主流。
- IPv6:128 位地址,解决地址耗尽问题,同时支持更安全、更高效的传输。
2.IP 地址分类
- A/B/C/D/E 类地址,其中 A/B/C 类是常用的单播地址,D 类用于组播,E 类保留。
- 私有 IP 地址段(局域网内专用,不能公网路由):
A 类:10.0.0.0/8
B 类:172.16.0.0/12
C 类:192.168.0.0/16
3.子网划分与掩码
- 子网掩码:用来区分 IP 地址中的「网络号」和「主机号」,如 255.255.255.0(/24)。
- 作用:把大的 IP 网段划分成多个小的子网,方便管理和路由。
4.ARP 协议(地址解析协议)
- 核心作用:把IP 地址解析成对应的 MAC 地址。
- 流程:主机 A 要给主机 B 发数据,先查 ARP 缓存,没有就发广播请求,主机 B 收到后单播回复自己的 MAC 地址,A 再更新缓存并发送数据。
5.ICMP 协议(互联网控制报文协议)
- 核心作用:IP 协议的辅助协议,用来传递网络错误和控制信息。
- 常见应用:ping 命令(测试网络连通性)、traceroute(追踪路由路径)。
三、传输层与接口
- 定位:OSI 模型第 4 层,负责「端到端的数据传输」,给应用层提供可靠 / 不可靠的传输服务。
1.TCP 协议(传输控制协议)
- 核心特点:面向连接、可靠传输、有序、有确认重传、流量控制、拥塞控制。
- 适用场景:文件传输、网页浏览、邮件发送等,对数据完整性要求高的场景。
- 关键机制:三次握手、四次挥手、滑动窗口、超时重传。
2.UDP 协议(用户数据报协议)
- 核心特点:无连接、不可靠传输、无序、无确认、开销小、延迟低。
- 适用场景:直播、游戏语音、视频通话、DNS 查询等,对实时性要求高、能容忍少量丢包的场景。
3.端口号
- 作用:用来区分同一台主机上不同的应用进程(比如浏览器和微信都用 IP,但靠端口号区分)。
- 范围:0-65535,其中 0-1023 是公认端口(如 HTTP 的 80、HTTPS 的 443、SSH 的 22)。
四、应用层与架构模式
- 定位:OSI 模型第 7 层,直接和用户 / 应用交互,定义了应用之间通信的规则。
1.常见应用层协议
| 协议 | 端口 | 核心用途 |
|---|---|---|
| HTTP/HTTPS | 80/443 | 网页浏览、数据交互 |
| FTP | 21/20 | 文件传输 |
| SSH | 22 | 远程登录与管理 |
| DNS | 53 | 域名解析(域名→IP) |
| SMTP/POP3/IMAP | 25/110/143 | 邮件发送与接收 |
2.常见架构模式
- C/S(客户端 / 服务器)模式:客户端主动发起请求,服务器被动响应,如 QQ、游戏客户端。
- B/S(浏览器 / 服务器)模式:客户端就是浏览器,无需安装专用软件,如网页版知乎、电商网站。
- P2P(点对点)模式:节点之间直接通信,无中心服务器,如早期的迅雷、BT 下载。
五、套接字与网络字节序
- 这部分是网络编程的核心基础,把前面的协议,变成你能写代码的接口。
1.套接字(Socket)
- 本质:操作系统给应用层提供的「网络编程接口」,是应用程序和传输层(TCP/UDP)之间的桥梁。
- 分类:
流式套接字(SOCK_STREAM):基于 TCP,面向连接、可靠传输。
数据报套接字(SOCK_DGRAM):基于 UDP,无连接、不可靠传输。
原始套接字(SOCK_RAW):可以直接访问 IP 层,用于自定义协议、抓包等。
2.网络字节序(大端序)
- 背景:不同 CPU 架构(x86 是小端序,部分服务器是大端序),多字节数据(如 IP 地址、端口号)的存储顺序不同,跨平台传输会出错。
- 解决:网络传输统一使用大端序(高字节存低地址),所以主机在发送数据前,需要把主机字节序转换成网络字节序。
- 常用转换函数:
htons():主机字节序转网络字节序(16 位,端口号)
htonl():主机字节序转网络字节序(32 位,IP 地址)
ntohs():网络字节序转主机字节序(16 位)
ntohl():网络字节序转主机字节序(32 位)
六、整体知识串联
- 应用层(浏览器)要发数据,通过 Socket 接口,把数据交给传输层。
- 传输层(TCP/UDP)给数据加上端口号,封装成段 / 报文,交给网络层。
- 网络层(IP 协议)加上 IP 地址,封装成数据包,同时用 ARP 协议解析 MAC 地址,交给数据链路层。
- 数据链路层加上 MAC 地址,封装成帧,通过物理层的信号传输到目标主机。
- 目标主机按相反的顺序,逐层解封装,把数据交给对应的应用进程。
七、核心考点:应用层协议 vs 传输层协议
1. 只使用 TCP 的协议(必须可靠传输)
| 协议 | 端口号 | 核心用途 | 为什么用 TCP? |
|---|---|---|---|
| HTTP/HTTPS | 80 / 443 | 网页浏览、API 接口 | 数据不能丢、不能乱序,否则网页会出错 |
| FTP | 21(控制)/20(数据) | 文件传输 | 文件数据必须完整,不能丢包损坏 |
| SSH | 22 | 远程登录、安全管理 | 交互命令必须可靠传输 |
| Telnet | 23 | 明文远程登录(已淘汰) | 早期远程管理,依赖可靠传输 |
| SMTP | 25 | 邮件发送 | 邮件内容必须完整送达 |
| POP3 | 110 | 邮件接收 | 邮件内容必须完整 |
| IMAP | 143 | 邮件接收(同步) | 邮件状态同步需要可靠传输 |
2. 只使用 UDP 的协议(优先低延迟)
| 协议 | 端口号 | 核心用途 | 为什么用 UDP? |
|---|---|---|---|
| DNS(查询) | 53 | 域名解析 | 单次查询数据量小,延迟优先,丢包可重发 |
| DHCP | 67/68 | 自动分配 IP 地址 | 广播通信,无连接更方便 |
| TFTP | 69 | 简单文件传输(嵌入式设备用) | 轻量级、无连接,适合资源受限设备 |
| SNMP | 161/162 | 网络设备监控 | 监控数据小,延迟优先 |
3. 既用 TCP 又用 UDP 的协议(看场景)
| 协议 | 端口号 | 使用场景说明 |
|---|---|---|
| DNS | 53 | 普通查询用 UDP(快),超过 512 字节的响应 / 区域传输用 TCP(可靠) |
💡补充考点:网络层 / 数据链路层相关协议
- 网络层协议(IP 层)
IP 协议:核心,提供 IP 寻址和路由
ICMP 协议:IP 的辅助协议,用于 ping、traceroute 等网络诊断
ARP 协议:IP 地址 → MAC 地址解析(部分教材认为属于数据链路层)
RARP 协议:MAC 地址 → IP 地址解析(已淘汰)
- 数据链路层协议
以太网协议(Ethernet):局域网帧传输,用 MAC 地址寻址
PPP 协议:点对点通信协议,常用于拨号、VPN💡答题小技巧(秒选方法)
- 优先记 “必须用 TCP” 的:HTTP/HTTPS、FTP、SSH、邮件协议,看到这些直接选 TCP。
- 优先记 “必须用 UDP” 的:DNS(默认)、DHCP、TFTP,看到这些优先选 UDP。
- 特殊情况:DNS 只有在大数据量时才用 TCP,绝大多数题目里都默认用 UDP。
