Java 网络协议 #

TCP/IP 基础、HTTP 协议、WebSocket 协议,Java后端面试高频考点


📋 目录 #


TCP/IP 四层模型 #

层次 常见协议
应用层 HTTP、HTTPS、FTP、DNS、WebSocket
传输层 TCP、UDP
网络层 IP、ICMP、ARP
链路层 Ethernet、PPP

TCP vs UDP #

对比项 TCP UDP
连接 面向连接 无连接
可靠性 可靠传输,ACK重传 不可靠,不保证到达
有序性 保证顺序 不保证顺序
流量控制 滑动窗口
速度
适用场景 文件传输、网页、请求响应 视频、直播、DNS、游戏

TCP 三次握手四次挥手 #

三次握手(建立连接) #

ServerClientServerClient连接建立完成SYN (seq=x)SYN_SENTSYN+ACK (seq=y, ack=x+1)SYN_RECEIVEDACK (ack=y+1)ESTABLISHED

为什么三次握手不是两次?

  1. 三次握手才能确认双方都具备收发能力
    • 第一次:Server 知道 Client 发能发,Server 收能收
    • 第二次:Client 知道 Client 收发正常,Server 收发正常
    • 第三次:Server 知道 Client 收到了自己的 SYN
  2. 防止失效连接重复建立
    • 网络拥塞时,Client 重发的 SYN 延迟到达
    • 如果两次握手,Server 建立连接后就等数据,会浪费资源

四次挥手(断开连接) #

ServerClientServerClientServer 还有数据要发连接断开完成FIN (seq=u)FIN_WAIT_1ACK (ack=u+1)CLOSE_WAIT-FIN (seq=v)LAST_ACKACK (ack=v+1)TIME_WAIT

为什么需要 TIME-WAIT?

  • 等待足够时间,确保最后一个 ACK 能到达 Server
  • 如果 Server 没收到最后 ACK,会重发 FIN,Client 能在 TIME-WAIT 收到并重发 ACK
  • 防止旧连接报文干扰新连接
  • 等待 2MSL(Maximum Segment Lifetime)后进入 CLOSED 状态

2MSL 是多少?

  • RFC 规定 2MSL = 1 分钟(60秒)
  • 实际实现通常是 30 秒(1MSL = 15秒)

TCP 滑动窗口 #

原理 #

发送窗口:
[ 已发送已确认 | 已发送未确认 | 可以发送 | 不能发送 ]
                   ↑          ↑
              左指针      右指针

接收方通过 ACK 中的 window 字段告诉发送方自己还能收多少

作用:

  • 流量控制:发送方不能超过接收方处理能力
  • 流水线传输:连续发送多个报文段,不用等每个ACK,提高吞吐量

滑动窗口大小为什么不能为0? #

窗口大小为0时,发送方停止发送,直到窗口更新。如果窗口更新的 ACK 丢失,发送方永远等,接收方也永远等,死锁。

解决: 发送方会定期发送窗口探测报文,探测当前窗口大小。


TCP 流量控制与拥塞控制 #

流量控制 vs 拥塞控制 #

区别 流量控制 拥塞控制
对象 点对点,发送方 vs 接收方 整个网络,路由链路
目的 防止发送太快把接收方冲垮 防止网络过载导致拥塞崩溃

拥塞控制四个阶段 #

超时

三个重复ACK

慢启动

拥塞避免

丢包?

快重传

慢启动

快速恢复

1. 慢启动(Slow Start)

  • cwnd(拥塞窗口)初始小,每收到一个ACK cwnd++
  • 指数增长,直到达到ssthresh(慢启动阈值),进入拥塞避免

2. 拥塞避免(Congestion Avoidance)

  • cwnd 线性增长(每RTT +1)
  • 慢慢找网络平衡点

3. 快重传(Fast Retransmit)

  • 收到三个重复ACK,立即重传丢失报文,不用等超时
  • 不用等RTO超时,减少重传延迟

4. 快速恢复(Fast Recovery)

  • cwnd = ssthresh,不降到初始值
  • 直接进入拥塞避免,不用慢启动,性能更好

HTTP 协议 #

HTTP 1.0 vs 1.1 vs 2 vs 3 #

版本 连接 多路复用 头部压缩 二进制 基于UDP
HTTP/1.0 短连接 文本
HTTP/1.1 长连接默认 ❌ 队头阻塞 可选gzip 文本
HTTP/2 长连接 ✅ 二进制分帧 ✅ HPACK
HTTP/3 - ✅ QUIC

HTTP 1.1 长连接 #

Connection: keep-alive

  • 一个TCP连接可以发多个HTTP请求
  • 减少TCP握手开销

HTTP 1.1 队头阻塞 #

  • 同一个TCP连接上,请求必须顺序处理
  • 前面的请求慢,后面所有请求都被堵住

HTTP/2 多路复用 #

  • 二进制分帧,同一个TCP连接上可以同时发多个流
  • 一个流阻塞不影响其他流
  • 头部压缩 HPACK,减少头部大小

HTTP 请求方法 #

方法 作用 幂等
GET 获取资源
POST 创建/提交
PUT 更新
DELETE 删除
HEAD 获取头部
OPTIONS 获取支持方法

幂等:多次调用结果一样,不会产生副作用

GET vs POST 区别 #

对比项 GET POST
参数位置 URL查询字符串 请求体
长度限制 有(URL长度限制) 没有
缓存 可缓存 默认不缓存
幂等 不是
安全 参数暴露在URL,不安全 请求体相对安全

HTTPS 原理 #

HTTPS 是什么? #

  • HTTP + TLS/SSL 加密
  • 端口 443
  • 解决:窃听风险、篡改风险、冒充风险

TLS 握手过程(简化版) #

ServerClientServerClient双方生成会话密钥握手完成,应用数据加密传输ClientHello(支持的加密套件、随机数)ServerHello(选择加密套件、证书、随机数)验证证书,预主密钥加密发给Server预主密钥(用服务器公钥加密)ChangeCipherSpecFinishedChangeCipherSpecFinished

证书作用 #

  • 证明服务器身份合法
  • 证书由CA颁发,Client 验证证书有效性
  • 证书包含公钥,Client 用公钥加密预主密钥

HTTP vs HTTPS #

对比 HTTP HTTPS
端口 80 443
加密 明文传输 TLS加密
安全 不安全 安全
性能 稍慢(握手开销)

WebSocket 协议 #

为什么需要 WebSocket? #

HTTP 是半双工:只能客户端请求→服务器响应,服务器不能主动推给客户端。

需要服务器主动推送(比如聊天、实时通知、股票行情)时,HTTP 只能用轮询,低效。

WebSocket 特点 #

  • 全双工通信:客户端和服务器可以互相主动发消息
  • 建立在TCP之上,握手阶段用HTTP,之后升级协议
  • 帧格式二进制,开销小
  • 持久连接,握手一次一直保持

握手过程 #

ServerClientServerClient握手完成,开始双向数据传输GET /ws HTTP/1.1Upgrade: websocketConnection: UpgradeSec-WebSocket-Key: xxxHTTP/1.1 101 Switching ProtocolsSec-WebSocket-Accept: xxx

WebSocket vs HTTP 轮询 #

对比 WebSocket 轮询
连接 持久连接 每次都新建HTTP连接
延迟 消息到达即发送,延迟低 间隔查询,延迟高
开销 一次握手,后续帧小 每次都带HTTP头,开销大
适用 实时场景 低频次场景

常见面试题 #

TCP #

1. TCP 和 UDP 区别?应用场景? #

【简洁答案】

  • TCP:面向连接、可靠、有序、有流量控制/拥塞控制,速度慢,适用于文件传输、网页加载等需要可靠性的场景。
  • UDP:无连接、不可靠、不保证顺序,无控制,速度快,适用于视频、直播、DNS、游戏等对延迟敏感的场景。

【详细说明】

对比项 TCP UDP
连接 面向连接,需要三次握手建立连接 无连接,直接发送
可靠性 可靠,ACK+重传保证不丢包 不可靠,丢了不重传
有序性 保证顺序,乱序重排 不保证顺序
流量控制 滑动窗口,防止冲垮接收方
拥塞控制 慢启动、拥塞避免、快重传、快速恢复
速度 慢(握手+控制开销) 快(无开销)
适用场景 文件传输、HTTP、网页加载、邮件 视频直播、DNS、实时游戏、物联网

2. 为什么三次握手,两次不行吗? #

【简洁答案】

  • 三次握手才能确认双方都具备收发能力
  • 两次握手无法确认服务端是否收到了客户端的ACK,可能导致失效连接占用资源。

【详细说明】

三次握手的目的是让双方确认对方的收发能力正常:

  1. 第一次握手:Client 发 SYN → Server 收到。Server 知道:Client 能发,我能收。
  2. 第二次握手:Server 发 SYN+ACK → Client 收到。Client 知道:我收发正常,Server 收发正常。
  3. 第三次握手:Client 发 ACK → Server 收到。Server 知道:Client 收到了我的 SYN,双方都确认了。

如果只有两次握手:

  • Server 发出 SYN+ACK 后就直接建立连接了,无法知道 Client 是否收到了这个包;
  • 如果网络延迟导致旧的 SYN 到达 Server,Server 两次握手就建立连接,会浪费资源;
  • 三次握手可以防止这种失效的重复连接被建立。

3. 为什么四次挥手,TIME-WAIT 作用是什么? #

【简洁答案】

  • 因为 TCP 是全双工,双方都要单独关闭,所以需要四次。Client 发 FIN(关我发送)→ Server ACK → Server 发 FIN(关你发送)→ Client ACK,共四次。
  • TIME-WAIT 作用:① 等待足够时间确保最后 ACK 到达 Server;② 等待 2MSL,让旧连接报文消失,防止干扰新连接。

【详细说明】

四次挥手原因:

  • TCP 连接是全双工,双方都可以独立发送数据,所以断开时双方都需要单独关闭;
  • Client 发 FIN 表示"我发完了",Server 回复 ACK,此时 Server 可能还有数据要发送,所以不能立即关闭;
  • 等 Server 数据发完,Server 再发 FIN 表示"我也发完了",Client 回复 ACK,这样才完整关闭。

TIME-WAIT 的两个作用:

  1. 保证最后一个 ACK 能到达 Server:如果 Client 发的最后 ACK 丢了,Server 会重发 FIN,Client 在 TIME-WAIT 状态能收到并重发 ACK;如果 Client 直接进入 CLOSED,就无法处理了。
  2. 防止旧连接报文干扰新连接:网络中可能还有旧连接的延迟报文,等待 2MSL(一个 MSL 是最大报文寿命)足够让所有旧报文消失,再建立新连接就不会被旧报文干扰。

4. 什么是滑动窗口,解决什么问题? #

【简洁答案】

  • 滑动窗口是 TCP 实现流量控制和连续传输的机制,接收方通过 ACK 中的窗口字段告诉发送方自己还能接收多少数据;
  • 解决两个问题:① 流量控制,防止发送太快把接收方冲垮;② 连续发送,不用等每个 ACK 就能连续发多个段,提高吞吐量。

【详细说明】

滑动窗口原理:

发送方窗口:
[ 已发送已确认 | 已发送未确认 | 可发送 | 不可发送 ]
  • 接收方每次回复 ACK 时,会带上自己当前的接收窗口大小;
  • 发送方根据接收窗口大小调整发送速率,不能超过接收方处理能力;
  • 允许发送方在窗口范围内连续发送多个报文段,不用每个都等 ACK,实现流水线传输,大大提高吞吐量。

5. 流量控制和拥塞控制区别? #

【简洁答案】

  • 流量控制:点对点,发送方 vs 接收方,防止发送太快把接收方冲垮,用滑动窗口实现。
  • 拥塞控制:全局,整个网络,防止网络拥塞导致丢包,用慢启动、拥塞避免、快重传、快速恢复四个阶段实现。

【详细说明】

区别 流量控制 拥塞控制
对象 端到端(发送方 ↔ 接收方) 整个网络(链路路由)
问题 接收方处理能力有限 网络负载过载
目的 不让接收方被冲垮 防止拥塞崩溃
机制 滑动窗口 四个阶段:慢启动、拥塞避免、快重传、快速恢复

6. TCP 拥塞控制四个阶段? #

【简洁答案】

  • 慢启动:cwnd 指数增长,到 ssthresh 阈值后进入拥塞避免;
  • 拥塞避免:cwnd 线性增长,探测网络带宽;
  • 快重传:收到三个重复 ACK,立即重传,不用等超时;
  • 快速恢复:cwnd 降到 ssthresh,直接进入拥塞避免,不用重新慢启动。

【详细说明】

  1. 慢启动:cwnd(拥塞窗口)初始很小,每收到一个 ACK,cwnd++,指数增长,避免一开始就把网络冲垮。
  2. 拥塞避免:cwnd 达到 ssthresh(慢启动阈值)后,改为每过一个 RTT cwnd++,线性缓慢增长,避免拥塞。
  3. 快重传:发送方收到三个重复的 ACK,说明有包丢了,立即重传,不用等 RTO(超时重传计时器)到期,减少延迟。
  4. 快速恢复:发生快重传后,cwnd 不降到初始值,只降到 ssthresh,直接进入拥塞避免,比重新慢启动性能更好。

新增:四次挥手为什么需要四次,三次不行吗? #

【简洁答案】

  • 因为 TCP 是全双工,双方都要独立关闭;Client 发 FIN 后,Server 可能还有数据要发,所以 FIN 和 ACK 要分开发,因此多了一次,总共四次。
  • 如果 Server 已经没有数据要发了,可以把第二次和第三次合并成一次,变成三次挥手。

【详细说明】

  • 第一次:Client → Server:FIN(我发完了)
  • 第二次:Server → Client:ACK(我收到了),此时 Server 可能还有数据要发送,不能马上发 FIN
  • 第三次:Server → Client:FIN(我也发完了)
  • 第四次:Client → Server:ACK(确认)

如果 Server 在收到 Client 的 FIN 时已经没有数据要发送了,可以把 ACK 和 FIN 合并发送,这样就变成三次挥手。所以"四次"是一般情况,三次也可能发生,关键在于是否需要分开发送。


新增:什么是粘包?为什么会发生?怎么解决? #

【简洁答案】

  • 粘包是指多个数据包被 TCP 当成一个数据块发送,接收方分不清边界;
  • 原因:TCP 是流式协议,没有消息边界,Nagle 算法会合并小包;
  • 解决:① 固定长度;② 分隔符(换行);③ 消息头+长度字段。

【详细说明】

为什么会粘包:

  • TCP 是面向字节流的,不保护消息边界,只传字节流;
  • Nagle 算法会把多个小的数据合并成一个段发送,减少网络开销,这也会导致粘包;
  • 接收方的滑动窗口也可能一次读取多个发送出来的数据。

解决方法:

  1. 固定长度:每个消息都是固定长度,不足补空格;简单但浪费空间。
  2. 分隔符:消息末尾加特殊分隔符(比如换行符 \n),接收方按分隔符切分;适合文本协议。
  3. 消息头+长度字段:消息头部存放整个消息的长度,接收方先读头部拿到长度,再按长度读取;最常用,适合二进制协议。

HTTP #

1. GET 和 POST 区别? #

【简洁答案】

  • GET 参数在 URL 中,有长度限制,可缓存,幂等,用于获取资源;
  • POST 参数在请求体中,没有长度限制,默认不缓存,不幂等,用于提交数据;
  • 本质上都是 HTTP 请求,区别是语义约定,技术上可以混用,但不推荐。

【详细说明】

对比项 GET POST
参数位置 URL 查询字符串 请求体
长度限制 有(浏览器对 URL 长度有限制) 没有
缓存 可以被浏览器缓存 默认不缓存
幂等 是(多次调用结果一样) 不是(可能产生副作用)
安全 参数暴露在 URL,不安全 参数在请求体,相对安全
用途 获取资源 提交/创建数据

注意:GET 也可以带请求体,POST 也可以在 URL 带参数,这是规范约定不是强制规定。浏览器实际实现遵循这个约定。


2. HTTP 1.1 和 HTTP/2 区别? #

【简洁答案】

  • HTTP/1.1:文本,队头阻塞,默认长连接,无头部压缩;
  • HTTP/2:二进制分帧,多路复用解决队头阻塞,HPACK 头部压缩,服务端推送,性能大幅提升。

【详细说明】

特性 HTTP/1.1 HTTP/2
格式 文本 二进制
多路复用 不支持,队头阻塞 支持,同一连接多个流并行
头部压缩 无(可手动 gzip) HPACK 静态字典+哈夫曼压缩
服务端推送 不支持 支持
性能 较差

HTTP/2 通过二进制分帧层把请求分成多个独立帧,可以在同一个 TCP 连接上同时发送多个请求,解决了 HTTP/1.1 的队头阻塞问题。


3. 什么是队头阻塞,HTTP/2 怎么解决? #

【简洁答案】

  • HTTP/1.1 中,同一个 TCP 连接上,请求必须按顺序处理,前面一个请求慢了会堵住后面所有请求,这就是队头阻塞;
  • HTTP/2 用二进制分帧+多路复用解决:同一个连接分成多个独立流,并发发送,一个流阻塞不影响其他流。

【详细说明】

HTTP/1.1 队头阻塞原因:

  • HTTP/1.1 同一个 TCP 连接上只能处理一个请求,必须等前一个请求响应回来才能发下一个;
  • 如果前面某个请求响应很慢,后面所有请求都被堵住,即使带宽足够也无法利用。

HTTP/2 解决方案:

  • 引入二进制分帧层,把每个请求/响应分成多个独立的帧;
  • 不同帧可以交错发送,每个帧有流标识符标识属于哪个流;
  • 接收方根据流标识符重新组装,这样多个请求可以在同一个 TCP 连接上并发传输;
  • 一个请求阻塞不影响其他请求,解决了队头阻塞。

4. HTTPS 握手过程,证书作用是什么? #

【简洁答案】

  • 握手过程:ClientHello → ServerHello(带证书)→ 客户端验证证书,预主密钥加密发给服务器 → 双方生成会话密钥 → 握手完成,后续加密传输;
  • 证书作用:证明服务器身份合法,包含服务器公钥,用于加密预主密钥。

【详细说明】

简化握手流程:

  1. 客户端发送 ClientHello:支持的加密套件、随机数;
  2. 服务器回复 ServerHello:选择加密套件、证书、随机数;
  3. 客户端验证证书合法性,生成预主密钥,用证书中的公钥加密发给服务器;
  4. 服务器用私钥解密得到预主密钥,双方根据预主密钥和随机数生成会话密钥;
  5. 双方发送 ChangeCipherSpec,之后用会话密钥加密通信。

证书作用:

  • 身份认证:CA 机构颁发,证明这个网站是真的不是伪造的;
  • 传递公钥:证书里包含服务器的公钥,客户端用来加密预主密钥。

新增:常见 HTTP 状态码,301/302/304/401/403/500 分别是什么意思? #

【简洁答案】

  • 301:永久重定向,资源永久移走了,搜索引擎会更新地址;
  • 302:临时重定向,临时换个地址,搜索引擎不更新;
  • 304:资源未修改,用浏览器缓存就行,不用重传;
  • 401:未认证,需要登录;
  • 403:禁止访问,认证了也没权限;
  • 500:服务器内部错误;

【详细说明】

分类:

  • 1xx:信息,正在处理
  • 2xx:成功 → 200 OK,201 Created
  • 3xx:重定向 → 上面几个常见
  • 4xx:客户端错误 → 400 Bad Request,404 Not Found
  • 5xx:服务器错误 → 500 Internal Server Error,502 Bad Gateway,503 Service Unavailable

新增:HTTP/3 (QUIC) 相比 HTTP/2 改进了什么? #

【简洁答案】

  • HTTP/2 还是基于 TCP,TCP 丢包会导致整个连接阻塞(队头阻塞还是存在,是传输层的队头阻塞);
  • HTTP/3 基于 QUIC,QUIC 基于 UDP,实现了用户空间的多路复用,一个流丢包不影响其他流;
  • 还有 0-RTT 握手,连接迁移更好,性能更好。

【详细说明】

HTTP/2 的问题:

  • HTTP/2 在应用层解决了队头阻塞,但底层还是 TCP,TCP 是字节流,如果一个 TCP 分段丢了,需要重传,整个 TCP 连接都会被阻塞,这就是传输层队头阻塞
  • TCP 握手需要 RTT,TLS 握手又需要 RTT,至少 1-2 RTT 才能发数据。

QUIC/HTTP/3 改进:

  1. 基于 UDP,用户空间实现多路复用,一个 UDP 包中包含多个流,一个流丢包只等这个流,其他流不受影响,彻底解决队头阻塞;
  2. 0-RTT 握手:重复连接可以 0-RTT 发送数据,更快;
  3. 连接迁移:客户端换 IP(比如从 WIFI 切 4G),连接不用重连,QUIC 用连接 ID 标识连接;
  4. 内置 TLS 1.3,加密默认,更安全。

新增:HTTPS 为什么慢?有哪些优化手段? #

【简洁答案】

  • 慢的原因:TCP 握手 1RTT + TLS 握手 1-2RTT,加起来至少 2RTT 才能发数据;非对称加密计算也有开销;
  • 优化:会话复用(Session Cache)、OCSP Stapling、TLS False Start、HTTP/2、证书选择椭圆曲线(ECC)、CDN。

【详细说明】

慢的原因:

  1. 握手延迟:TCP 握手需要 1RTT,TLS 握手需要 1-2RTT,总共至少 2RTT 才能发送应用数据;
  2. 计算开销:非对称加密(RSA)需要大量计算,比 HTTP 多了加密解密开销。

优化手段:

  • 会话复用(Session ID / Session Ticket):复用之前协商好的会话密钥,跳过完整握手,减少 RTT;
  • OCSP Stapling:证书 revocation 检查由服务器定期查询 stapled 到握手,不用客户端去问 CA,减少RTT;
  • TLS False Start:客户端不用等 Server 握手完成就开始发应用数据,节省一个 RTT;
  • 使用 ECC 证书:ECC 比 RSA 计算更快,安全性相同但密钥更短;
  • HTTP/2 或 HTTP/3:多路复用,减少连接数,连接复用更好;
  • CDN 卸载:CDN 处理 HTTPS 握手和加密,源站压力减轻。

WebSocket #

1. WebSocket 和 HTTP 关系?为什么需要 WebSocket? #

【简洁答案】

  • WebSocket 建立在 TCP 之上,握手阶段复用 HTTP 握手,之后升级协议变成 WebSocket,一直保持连接;
  • HTTP 是半双工,只能客户端请求服务器响应,服务器不能主动推;需要实时推送时 HTTP 只能轮询,低效;WebSocket 全双工,服务器可以主动推,适合聊天、实时行情等场景。

【详细说明】

关系:

  • WebSocket 始于 HTTP 握手:客户端先发送 HTTP 请求升级协议,服务器同意后切换到 WebSocket;
  • WebSocket 不依赖 HTTP,握手之后就是独立的全双工协议,一直保持 TCP 连接。

为什么需要:

  • HTTP 是请求-响应模型,服务器不能主动推给客户端;
  • 需要实时更新(聊天、股票、通知)时,HTTP 只能用轮询,每个请求都带完整 HTTP 头,开销大,延迟高;
  • WebSocket 一次握手,持久连接,全双工通信,开销小,延迟低,适合实时场景。

2. WebSocket 握手过程? #

【简洁答案】

  • 客户端发 HTTP GET 请求,带 Upgrade: websocketConnection: UpgradeSec-WebSocket-Key
  • 服务器返回 101 Switching Protocols,计算 Sec-WebSocket-Accept 回应;
  • 握手完成,切换到 WebSocket 协议,开始双向通信。

【详细说明】

ServerClientServerClient握手完成 ✓开始双向二进制帧传输GET /ws HTTP/1.1Upgrade: websocketConnection: UpgradeSec-WebSocket-Key: randomHTTP/1.1 101 Switching ProtocolsSec-WebSocket-Accept: hash(Sec-WebSocket-Key + GUID)

3. WebSocket 为什么是全双工? #

【简洁答案】

  • WebSocket 建立连接后,TCP 连接一直保持,客户端和服务器任何一方都可以随时主动发送数据;
  • 不像 HTTP 是请求-响应模型,必须客户端请求完服务器才能响应;所以是全双工。

【详细说明】

  • HTTP/1.1 虽然是长连接,但仍然遵循请求-响应模型,客户端不请求服务器就不能发;
  • WebSocket 连接建立后,通道是双向打开的,任何一方都可以随时发消息,所以是全双工;
  • 这就是为什么 WebSocket 适合服务器主动推送场景。

基础题 #

新增:OSI 七层模型和 TCP/IP 四层模型的区别? #

【简洁答案】

  • OSI 七层:物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层;
  • TCP/IP 四层:链路层 → 网络层 → 传输层 → 应用层(把会话层/表示层/应用层合并成应用层);
  • OSI 是理论模型,TCP/IP 是实际实现,我们实际用的是 TCP/IP。

【详细说明】

OSI 七层 TCP/IP 四层 常见协议
物理层 链路层 Ethernet
数据链路层 链路层 PPP、ARP
网络层 网络层 IP、ICMP、ARP
传输层 传输层 TCP、UDP
会话层 应用层

OSI 是 ISO 提出的理论参考模型,分层清晰但复杂,实际互联网没有用它;TCP/IP 是互联网实际使用的模型,更简洁实用。


🔗 相关笔记 #


最后更新: 2026-04-29