一、互联网是怎么来的?(历史背景)
1. 互联网的诞生:冷战的产物
- 1957 年苏联发射卫星,美国为了打造「不被核打击摧毁的通信网络」,成立了DARPA(国防部高级研究计划署)。
- 1968 年 DARPA 搭建了ARPANet(阿帕网),这是互联网的最早雏形,核心目标是「让多台电脑互联、资源共享」。
- 早期 ARPANet 用的是NCP(网络控制协议),但它只能连同类型电脑,没有纠错能力,无法大规模推广。
2. TCP/IP 协议:互联网的「通用语言」
- 1973 年,Robert Kahn 和 Vinton Cerf(互联网之父)为 ARPANet 开发了新协议:
- 1974 年发布第一版 TCP 协议,但丢包时无法纠错;
- 后来把 TCP 拆成两个协议:
- TCP(传输控制协议):负责数据传输的可靠性(不丢、不错、不乱序)
- IP(互联网协议):负责不同网络之间的互联
- 从此TCP/IP 协议族诞生,成为互联网的「通用语言」,让全世界不同电脑、不同系统都能通信。
二、核心逻辑:网络为什么要「分层」?(体系结构)
1. 分层的本质:分而治之
就像寄快递:
- 你只需要写地址、打包(应用层)
- 快递员负责揽件、运输(传输层 / 网络层)
- 快递站负责分拣、配送(数据链路层 / 物理层)
- 每一层只做自己的事,不用管其他层怎么实现,这就是分层思想。
2. 两大经典模型对比
表格
| 模型 | 层数 | 特点 | 现状 |
|---|---|---|---|
| OSI 七层模型 | 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 | 理论化、完整,但实现复杂 | 仅作为理论参考,实际几乎不用 |
| TCP/IP 四层模型 | 应用层、传输层、网络层、网络接口 / 物理层 | 简洁、实用、可落地 | 互联网的实际工业标准 |
3. TCP/IP 四层模型
表格
| 层级 | 核心作用 | 代表协议 | 通俗理解 |
|---|---|---|---|
| 应用层 | 直接给用户提供服务 | HTTP/HTTPS、FTP、DNS、SMTP | 你用的浏览器、微信、邮箱,都在这一层 |
| 传输层 | 给应用层提供「端到端」的传输服务 | TCP、UDP | 决定数据是「可靠送达」还是「快速送达」 |
| 网络层 | 给数据选路由、找路径 | IP、ICMP、IGMP | 相当于快递的「地址系统」,负责把数据送到目标网络 |
| 网络接口 / 物理层 | 把数据变成电信号 / 光信号,在物理网络传输 | 以太网、WiFi、4G/5G | 相当于快递的「运输工具」(货车、飞机),负责实际传输 |
三、逐层拆解:每一层到底在干嘛?(核心概念)
1. 网络接口 / 物理层:数据的「物理载体」
- 核心作用:把二进制数据转换成电信号 / 光信号,在网线、光纤、无线电中传输,同时负责接收信号还原成数据。
- 关键概念 :
- MAC 地址:48 位全球唯一,是网络设备的「物理身份证」(比如网卡的硬件地址,出厂就固定)。
- ARP 协议:地址解析协议,通过 IP 地址找到对应的 MAC 地址(相当于「查通讯录,通过名字找手机号」)。
- RARP 协议:反向地址解析,通过 MAC 地址找 IP 地址(现在很少用)。
- PPP 协议:拨号协议,用于 GPRS/3G/4G 等移动网络。
2. 网络层:数据的「导航系统」
- 核心作用:给数据分组(数据包)选择传输路径,实现跨网络通信。
- 关键概念 :
- IP 地址:互联网中主机的「逻辑地址」,IPv4 是 32 位(如 192.168.1.1),IPv6 是 128 位,每个数据包都必须携带源 IP 和目标 IP,路由器靠它选路由。
- ICMP 协议 :互联网控制管理协议,我们常用的
ping命令就属于 ICMP,用来检测网络连通性。 - IGMP 协议:互联网分组管理协议,用于广播和组播(比如视频会议、直播)。
3. 传输层:数据的「快递服务」
-
核心作用:给应用层提供「端到端」的传输服务,决定数据的传输质量。
-
两大核心协议对比(必背) :
表格
协议 特点 适用场景 通俗理解 TCP 面向连接、可靠、一对一、有流量控制 对传输质量要求高的场景(如文件传输、网页访问、登录) 「顺丰快递」:必须签收,保证不丢、不错、不乱序 UDP 无连接、不可靠、不保证顺序、速度快 对实时性要求高的场景(如直播、语音通话、游戏) 「平邮快递」:不保证送达,速度快,适合小数据、实时传输 - SCTP:TCP 的增强版,支持多主机、多链路通信,用于电信等专业场景。
4. 应用层:用户直接接触的「服务层」
- 核心作用:直接给用户提供各种网络服务,是用户能感知到的一层。
- 常见协议 :
- HTTP/HTTPS:网页访问协议(HTTPS 是加密版,更安全)
- POP3/SMTP/IMAP:邮件收发协议(POP3 收、SMTP 发、IMAP 可只收部分邮件)
- FTP:文件传输协议(上传 / 下载文件)
- Telnet/SSH:远程登录协议(SSH 是加密版,更安全)
- NTP:网络时钟协议(同步网络时间)
- SNMP:简单网络管理协议(管理网络设备)
- RTP/RTSP:音视频传输协议(用于安防监控、直播)
四、数据传输全流程:封包 & 拆包

1. 数据传输的「封装(封包)」过程(发送方)
就像寄快递,每一层都会给数据「加个信封」:
- 应用层:用户数据(如 HTTP 请求),加上应用层头部;
- 传输层:加上 TCP/UDP 头部(源端口、目标端口);
- 网络层:加上 IP 头部(源 IP、目标 IP);
- 数据链路层:加上以太网头部(源 MAC、目标 MAC)和尾部校验;
- 物理层:把封装好的帧转换成电信号,发送到网络中。
2. 数据传输的「解封装(拆包)」过程(接收方)
就像收快递,从外到内一层一层拆:
- 物理层:把电信号还原成二进制数据;
- 数据链路层:拆以太网头部,校验数据,交给网络层;
- 网络层:拆 IP 头部,根据目标 IP 交给对应主机;
- 传输层:拆 TCP/UDP 头部,根据目标端口交给对应应用;
- 应用层:拆应用层头部,把数据交给用户程序(如浏览器)。
3. 数据包结构

| 以太网头部 (14B) | IP 头部 (20B) | TCP 头部 (20B) | 应用层头部 | 用户数据 | 以太网尾部 |
|---|
- 总长度在 46-1500 字节之间,这就是以太网的「最大传输单元(MTU)」。
五、网络编程核心:Socket(套接字)
1. 什么是 Socket?
- Socket 是网络编程的接口 ,相当于「网络通信的端点」,是一个特殊的文件描述符,支持
read/write/close等操作。 - 它不局限于 TCP/IP,既支持面向连接的 TCP,也支持无连接的 UDP。
2. Socket 的三大类型
表格
| 类型 | 对应协议 | 特点 | 适用场景 |
|---|---|---|---|
| 流式套接字 (SOCK_STREAM) | TCP | 面向连接、可靠、有序、无长度限制 | 网页访问、文件传输、远程登录 |
| 数据包套接字 (SOCK_DGRAM) | UDP | 无连接、不可靠、无序、独立数据包 | 直播、语音通话、游戏、DNS 查询 |
| 原始套接字 (SOCK_RAW) | 自定义协议 | 直接访问底层协议(如 IP、ICMP) | 网络抓包、自定义协议开发 |
六、IP 地址、端口号、字节序
1. IP 地址
- 特殊 IP 地址 :
- 局域网 IP:192.xxx.xxx.xxx、10.xxx.xxx.xxx(内网使用,不直接连互联网)
- 广播 IP:xxx.xxx.xxx.255、255.255.255.255(全网广播,容易引发网络风暴)
- 组播 IP:224.xxx.xxx.xxx ~ 239.xxx.xxx.xxx(用于组播通信)
- IP 地址转换函数 :
inet_aton()/inet_addr():把点分十进制 IP 转成 32 位二进制(仅 IPv4,不支持 255.255.255.255)inet_ntoa():把二进制 IP 转成点分十进制inet_pton()/inet_ntop():支持 IPv4/IPv6,能正确处理广播地址,是现代推荐用法
2. 端口号
- 16 位数字,范围 1-65535,用来区分同一台主机上的不同进程(相当于「快递的收件人」)。
- 端口分类:
- 预留端口:1-1023(如 FTP:21、SSH:22、HTTP:80、HTTPS:443)
- 保留端口:1024-5000(不建议手动使用)
- 可用端口:5000-65535(可自由分配给自定义程序)
- 网络通信的唯一标识 :
IP地址 + 端口号,缺一不可。
3. 字节序
- 大小端问题 :不同 CPU 存储多字节数据的顺序不同:
- 小端模式:X86/ARM 架构(PC、手机常用),低位字节存低地址
- 大端模式:PowerPC / 部分 ARM(路由器常用),高位字节存低地址
- 网络字节序:统一采用大端模式,避免不同主机通信时的字节序错误。
- 字节序转换函数 :
- 主机序→网络序:
htonl()(32 位)、htons()(16 位) - 网络序→主机序:
ntohl()(32 位)、ntohs()(16 位)
- 主机序→网络序:
七、学习逻辑链
- 历史层:ARPANet → TCP/IP 诞生 → 互联网通用语言
- 分层层:TCP/IP 四层模型 → 每一层的作用、协议
- 传输层:TCP/UDP 的区别 → 传输质量的选择
- 数据层:封包 / 拆包流程 → 数据从发送到接收的完整路径
- 编程层:Socket → 网络编程的接口
- 细节层:IP 地址、端口号、字节序 → 通信的基础要素