网络分层
网络为什么要分层?
降低复杂度
- 如果不分层,你要一次性处理:
- 物理线路上的信号传输(网线 / 无线)
- 找到目标主机(IP 寻址)
- 保证数据可靠到达(重传、排序)
- 应用数据的格式和解析(HTTP、FTP 等)
- 这些功能混杂在一起,代码会非常复杂,出了问题也很难定位。
- 分层后:每层只关心自己的任务,比如传输层只管 “端到端可靠传输”,网络层只管 “找路”,应用层只管 “数据内容”。
每层可以独立更新和替换 灵活性好
- 分层后,只要保证层与层之间的接口不变,内部实现可以随便改。
- 比如:
- 物理层从 “网线” 换成 “光纤”,网络层和应用层完全不用改。
- TCP 协议优化了拥塞控制算法,HTTP 应用层完全感知不到。
- 这样升级、优化、替换都很方便,不会牵一发而动全身。
便于标准化和跨平台 工作标准化
- 分层让不同公司、不同系统可以遵循统一的接口标准(协议)。
- 例如:
- 你的电脑(Windows)和服务器(Linux),虽然操作系统不同,但都遵守 TCP/IP 协议,所以能互相通信。
- 如果不分层,每个厂商可能搞出完全不同的通信方式,互联网就成了 “孤岛”。
便于调试和定位问题 方便维护
- 分层后,排查网络问题可以逐层进行:
- 物理层:网线松了?网卡坏了?
- 网络层:IP 配置错了?路由不通?
- 传输层:端口没开放?连接被防火墙拦截?
- 应用层:HTTP 请求格式错了?

(osi偏假想,但是还是有些复杂 tcp/ip依旧是标准)
层级
|
名称
|
主要功能
|
常见协议
|
4
|
应用层
|
直接为应用程序提供服务
|
HTTP、HTTPS、FTP、SMTP、DNS
|
3
|
传输层
|
提供端到端的数据传输(进程到进程)
|
TCP、UDP
|
2
|
网络层
|
负责不同网络之间的路径选择和数据转发(主机到主机)
|
IP、ICMP、ARP
|
1
|
网络接口层
|
负责物理介质上的数据传输(比特流)
|
Ethernet、Wi-Fi、PPP
|
常见协议简介
应用层协议
- HTTP(超文本传输协议):用于网页传输,端口 80。
- HTTPS(安全的 HTTP):HTTP + SSL/TLS 加密,端口 443。
- FTP(文件传输协议):用于文件上传下载,端口 21(控制)、20(数据)。
- SMTP(简单邮件传输协议):发送电子邮件,端口 25。
- DNS(域名系统):将域名解析成 IP 地址,端口 53(UDP/TCP)。
传输层协议
- TCP(传输控制协议):面向连接、可靠、有序、面向字节流。 流式服务
- 特点:三次握手建立连接,四次挥手断开连接,有应答确认、超时重传、乱序重排,去重,拥塞控制(滑动窗口)机制
- 用途:HTTP、HTTPS、FTP、SMTP 等要求可靠传输的场景。
- UDP(用户数据报协议):无连接、不可靠、速度快。 数据报服务
- 特点:发送即不管,不保证到达顺序和完整性。
- 用途:DNS、视频 / 语音通话、直播等实时性要求高的场景。
网络层协议
- IP(网际协议):定义数据包格式,负责路由选择。
- IPv4:32 位地址,格式如 192.168.1.1。
- IPv6:128 位地址,解决地址耗尽问题。
- ICMP(互联网控制消息协议):用于网络诊断,如 ping 命令。
- ARP(地址解析协议):将 IP 地址转换为 MAC 地址。
网络应用程序通信流程
如下图,应用程序 A 要将数据”hello” 传给网络上另外一台主机上的应用程序 B, 数据“hello”从应用层发送给传输层后,传输层在数据前面加上 tcp 协议或 udp 协议的报头,将整条报文发给网络
层,网络层添加自己的 IP 报头,再将整条数据发送给数据链路层。数据链路层将数据封装成能在网络中独立传输的数据单元,即数据帧。封装好的数据帧通过网络传输到另一台主机,然后再从下
层依次拆包,将数据部分送往应用层。应用程序 B 就得到了数据”hello“
