网络协议

最通俗的生活类比开始,建立对“计算机网络五层模型”及核心协议的直观认识。


五层模型

一、为什么网络要分层?一个快递的例子

想象你要寄一个包裹给远方的朋友:

  1. 你(应用层):写下信件内容,写上收件人姓名、地址。
  2. 快递员(传输层):把你的信装进快递袋,并贴上“运单号”,保证从你小区到朋友小区这一段运输可靠。
  3. 分拨中心(网络层):根据地址规划路线(比如先到城市A,再到城市B),选择最佳路径。
  4. 货车司机(数据链路层):把包裹从一站送到相邻的下一站,只关心“下一站是哪个仓库”。
  5. 高速公路/车轮(物理层):实际传输电信号、光信号或轮子滚动。

每一层只做自己的事,不用管其他层怎么实现。这样即使换一个快递公司(比如从顺丰换成圆通),你写的信格式不用变——这就是分层解耦

计算机网络也是类似,五层模型从下到上:物理层 → 数据链路层 → 网络层 → 传输层 → 应用层


二、五层模型与核心协议(结合你的博客)

1. 物理层

  • 做什么:把 0 和 1 变成电信号、光信号、无线电波,在网线、光纤或空气中传播。
  • 你不需深究:知道有“网线”“Wi-Fi 天线”就够了。

2. 数据链路层

  • 做什么:在同一个局域网(比如你家路由器下的所有设备)内,把数据从一个设备传到另一个设备。它使用 MAC 地址(物理地址,出厂烧录,全球唯一)。
  • 关键协议
    • ARP 协议:把 IP 地址转换成 MAC 地址。就像你要给小区里的某个人送信,你知道他的门牌号(IP),但需要问一下他住哪一栋哪一户(MAC)。
    • MTU:最大传输单元,规定了数据链路层一次最多能传多少字节(通常 1500)。如果上层数据太大,就要分片。

3. 网络层

  • 做什么:负责把数据从源 IP 地址送到目的 IP 地址,可能经过很多个路由器。它关心的是“怎么走最近的路”。
  • 核心协议
    • IP 协议:定义 IP 地址(如 192.168.1.1),以及数据报(packet)的格式。IP 是不可靠的,它只管尽力送,丢了不管。
    • ICMP 协议:用来传错误信息或网络状态,比如 ping 命令就是发送 ICMP 回声请求,看对方是否可达。

4. 传输层

  • 做什么:为应用进程(比如浏览器、微信)提供端到端的通信。它解决了“数据到了对方电脑,但交给哪个程序”的问题,通过端口(如 80 给 HTTP,443 给 HTTPS)。
  • 两大协议
    • UDP:无连接、不可靠、速度快,适合视频通话、DNS 查询(丢一两个包没关系)。
    • TCP:面向连接、可靠(确认重传、流量控制)、顺序保证,适合网页、文件下载。

5. 应用层

  • 做什么:直接为你使用的应用程序服务。比如浏览网页用 HTTP,发邮件用 SMTP,域名转 IP 用 DNS。
  • 常见协议
    • DNS:把 www.baidu.com 变成 IP 地址(如 110.242.68.66)。就像电话本里的姓名转号码。
    • HTTP:浏览器和服务器之间传输网页内容(超文本)。它是明文传输。
    • HTTPS = HTTP + SSL/TLS 加密,保证安全。

三、一次网络请求的完整旅程(访问百度)

假设你在浏览器输入 http://www.baidu.com,并按下回车:

  1. 应用层(DNS):你的电脑先问 DNS 服务器:“www.baidu.com 的 IP 是多少?”得到 IP(例如 14.215.177.38)。
  2. 应用层(HTTP):浏览器构造一个 HTTP 请求报文(比如 GET /),交给下一层。
  3. 传输层(TCP)
    • 与百度的服务器建立 TCP 连接(三次握手)。
    • 把 HTTP 请求报文切成数据段,加上源端口(随机)和目标端口(80)。
    • 给每个数据段编号,准备发送。
  4. 网络层(IP)
    • 给每个数据段加上 IP 头(源 IP 是你的电脑 IP,目标 IP 是 14.215.177.38)。
    • 根据路由表决定下一跳(通常是你的路由器)。
  5. 数据链路层(ARP + 以太网)
    • 用 ARP 查询下一跳(路由器)的 MAC 地址。
    • 把 IP 数据报封装成,加上源 MAC 和目的 MAC。
  6. 物理层:通过网线或 Wi-Fi 把 0/1 变成电信号或电磁波发出去。

之后经过多个路由器(每跳都重复 4-6 步),最终到达百度的服务器。服务器反向逐层解包,得到 HTTP 请求,返回网页内容。你的浏览器再渲染出页面。


四、重要区别(面试爱考)

对比项 说明
MAC 地址 vs IP 地址 MAC 是物理地址(出厂固定),用于同一链路内寻址;IP 是逻辑地址(可配置),用于跨网络寻址。
TCP vs UDP TCP 像打电话(先接通,可靠,但慢);UDP 像寄明信片(不确认对方收到,但快)。
HTTP vs HTTPS HTTPS 多了一层 SSL/TLS 加密,防止窃听和篡改。
对称加密 vs 非对称加密 对称:同一个密钥加解密,快但密钥分发不安全;非对称:公钥加密私钥解密,安全但慢。HTTPS 混合使用:用非对称加密传输对称密钥,之后用对称加密传输数据。

五、“一句话总结”

  • 物理层:传 0/1 信号。
  • 数据链路层:相邻设备间传帧,靠 MAC 地址。
  • 网络层:跨网络传包,靠 IP 地址和路由器。
  • 传输层:进程间传数据,靠端口,TCP/UDP。
  • 应用层:为具体应用服务,HTTP、DNS、HTTPS。

以后面试问到“在浏览器输入网址后发生了什么”,你就能按这五层顺序讲下来。

常见的网络协议


一、应用层协议

应用层协议直接为应用程序提供通信服务,数据最终呈现为用户可读的内容。

1. DNS(域名系统)

  • 作用:把人类易记的域名(如 www.baidu.com)转换成机器可读的 IP 地址(如 110.242.68.66)。
  • 端口:53(UDP 为主,数据大时改用 TCP)。
  • 工作流程(简化版):
    1. 浏览器/应用向本地 DNS 服务器发起查询请求。
    2. 本地 DNS 服务器若没有缓存,则从根域名服务器开始递归查询,一步步问到权威域名服务器
    3. 最终得到 IP 地址,返回给客户端,并缓存一段时间。
  • 补充:DNS 是互联网的“电话本”,没有它,你只能记 IP 地址上网。

2. HTTP(超文本传输协议)

  • 作用:浏览器与 Web 服务器之间传输 HTML、图片、视频等超文本数据。
  • 端口:80。
  • 特点
    • 简单快速:请求方法只有 GET、POST、PUT 等几种。
    • 无状态:服务器不保存客户端历史(每次请求独立)。
    • 明文传输:不安全,容易被窃听或篡改。
  • 报文格式
    • 请求行(方法 + URL + 版本)+ 请求头(Key-Value)+ 空行 + 请求体(可选)。
    • 响应行(版本 + 状态码 + 描述)+ 响应头 + 空行 + 响应体。
  • 常见状态码(你需要记住):
    • 200 OK:成功。
    • 301/302:重定向。
    • 404:未找到资源。
    • 500:服务器内部错误。

3. HTTPS(HTTP + SSL/TLS)

  • 作用:在 HTTP 基础上增加加密层,保证数据机密性、完整性、身份认证。
  • 端口:443。
  • 工作流程(简化):
    1. 客户端验证服务器证书(防止中间人攻击)。
    2. 双方协商加密算法,通过非对称加密(RSA/ECC)安全交换一个对称密钥
    3. 后续通信全部用该对称密钥加密(高效)。
  • 为什么不用纯对称或纯非对称
    • 纯对称:密钥如何安全传输?
    • 纯非对称:计算太慢。
    • 混合方式兼顾安全和性能。

二、传输层协议

传输层负责端到端的通信,关注数据从源端口到目的端口的可靠或不可靠传输。

1. UDP(用户数据报协议)

  • 特点
    • 无连接:发送数据前不需要建立连接。
    • 不可靠:没有确认、重传、拥塞控制,丢包后不负责。
    • 面向数据报:应用层交给 UDP 多大数据,就原样发送(不会拆分合并)。
    • 头部小(8 字节),开销低。
  • 适用场景:实时性要求高、可容忍少量丢包(视频直播、VoIP、DNS 查询、游戏状态同步)。

2. TCP(传输控制协议)

  • 特点
    • 面向连接:必须三次握手建立连接,四次挥手断开连接。
    • 可靠传输:通过序列号、确认应答、超时重传、校验和等机制保证数据完整、有序。
    • 流量控制:滑动窗口,避免发送方过快淹没接收方。
    • 拥塞控制:慢启动、拥塞避免、快重传、快恢复,避免网络过载。
    • 面向字节流:数据被视为字节流,没有边界,需要应用层自己处理消息分割。
  • 头部开销:20 字节(比 UDP 大)。
  • 适用场景:要求数据完整且顺序正确(网页、文件下载、邮件、SSH)。

面试常考:TCP 三次握手和四次挥手,以及为什么需要 TIME_WAIT。


三、网络层协议

网络层负责跨网络的数据包转发和路由选择,核心是 IP 协议

1. IP(互联网协议)

  • 作用:为每个设备分配逻辑地址(IP 地址),并根据目的 IP 将数据包从源主机路由到目标主机。
  • 版本:IPv4(32 位地址,如 192.168.1.1)和 IPv6(128 位,解决地址枯竭)。
  • 特点
    • 无连接:每个数据包独立路由。
    • 不可靠:尽力交付,丢包不重传(可靠性由上层 TCP 保证)。
    • 分片与重组:当数据包超过链路 MTU 时,IP 层负责分片,接收端再重组。
  • IP 地址组成:网络号 + 主机号(通过子网掩码区分)。同一网络号表示在同一个广播域。

2. ICMP(互联网控制报文协议)

  • 作用:传递网络状态和错误信息,比如“主机不可达”、“端口不可达”、“时间超时”。
  • 典型应用
    • ping:发送 ICMP Echo 请求,收到 Echo 回复,测试连通性和 RTT。
    • traceroute:利用 ICMP 超时报文追踪路由路径。
  • 注意:ICMP 不是传输数据,而是辅助 IP 协议进行网络诊断。

四、数据链路层协议

数据链路层负责在同一链路(同一局域网或相邻设备)上传输帧,使用 MAC 地址。

1. ARP(地址解析协议)

  • 作用:根据已知的 IP 地址,解析出对应的 MAC 地址。
  • 工作过程(同网段):
    1. 主机 A 广播一个 ARP 请求:“谁拥有 IP 192.168.1.10?请把你的 MAC 告诉我。”
    2. 只有目标主机 B 回复自己的 MAC 地址。
    3. 主机 A 将 IP-MAC 映射缓存到 ARP 缓存表中,下次直接用。
  • 安全风险:ARP 欺骗(伪造回复)可导致中间人攻击。

2. MTU(最大传输单元)

  • 严格说不是协议,而是数据链路层的一个参数。以太网 MTU 通常为 1500 字节。
  • 当 IP 数据报大于 MTU 时,网络层需要分片,在目标主机重组。
  • 路径 MTU 发现(PMTUD)可以避免分片。

五、协议之间的协作(完整例子)

以你在浏览器访问 https://github.com 为例:

  1. DNS:把 github.com 解析成 IP(例如 140.82.112.3)。
  2. HTTP/HTTPS:浏览器构建 GET 请求,应用层交给传输层。
  3. TCP:与服务器 443 端口三次握手,然后加密传输数据。
  4. IP:在数据段前加上 IP 头(源 IP、目的 IP),查询路由表找到下一跳路由器。
  5. ARP:查询下一跳路由器的 MAC 地址,以便在链路层封装成帧。
  6. 以太网(数据链路层):封装成帧,通过物理层发送。
  7. 沿途路由器重复 IP + ARP + 以太网 过程,最终到达服务器。
  8. 服务器反向解包,返回 HTTPS 响应,浏览器渲染。

六、面试中常考的对比表格

协议 层次 连接性 可靠性 是否加密 典型应用
DNS 应用层 无连接(UDP为主) 尽力 域名解析
HTTP 应用层 无状态(基于TCP) 可靠 网页浏览
HTTPS 应用层 同HTTP 可靠 安全网页、支付
TCP 传输层 面向连接 可靠 绝大多数应用
UDP 传输层 无连接 不可靠 实时音视频
IP 网络层 无连接 不可靠 跨网路由
ICMP 网络层 无连接 尽力 ping、traceroute
ARP 数据链路层 广播查询 可靠(单链路) IP→MAC 解析

七、几个需要理解的“为什么”

  • 为什么既有 IP 又有 MAC?
    IP 负责跨网络寻址(逻辑、可变),MAC 负责同一链路内唯一标识设备(物理、固定)。两者分工不同。

  • 为什么 DNS 使用 UDP?
    查询请求短小,一次交互即可完成,用 UDP 更快且不占用连接资源。若响应超过 512 字节,则切换为 TCP。

  • 为什么 TCP 要三次握手而不是两次?
    防止已过期的连接请求突然被服务器接受,造成资源浪费;同时双方都能确认自己的发送和接收能力正常。

如果你需要我进一步画出TCP 三次握手的状态变迁图,或者详细解释HTTP 1.0/1.1/2.0 的区别,可以告诉我。

posted @ 2026-04-16 16:15  mo686  阅读(68)  评论(0)    收藏  举报