<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>计算机网络 on Coder_Studio</title>
        <link>https://iamxurulin.github.io/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/</link>
        <description>Recent content in 计算机网络 on Coder_Studio</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>iamxurulin</copyright>
        <lastBuildDate>Sun, 05 Apr 2026 17:35:33 +0000</lastBuildDate><atom:link href="https://iamxurulin.github.io/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>【面试真题拆解】被问懵的计算机网络7层_5层_4层模型</title>
        <link>https://iamxurulin.github.io/p/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%E6%8B%86%E8%A7%A3%E8%A2%AB%E9%97%AE%E6%87%B5%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C7%E5%B1%82_5%E5%B1%82_4%E5%B1%82%E6%A8%A1%E5%9E%8B/</link>
        <pubDate>Sat, 21 Mar 2026 09:04:13 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%E6%8B%86%E8%A7%A3%E8%A2%AB%E9%97%AE%E6%87%B5%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C7%E5%B1%82_5%E5%B1%82_4%E5%B1%82%E6%A8%A1%E5%9E%8B/</guid>
        <description>&lt;p&gt;好几次面试都被问了计算机网络模型，一次是让我讲讲7层模型，还有让我讲讲5层模型，4层模型的。&lt;/p&gt;
&lt;p&gt;这群面试官完全不按套路出牌，昨天刚问完 7 层模型，今天就换成了 4 层模型。&lt;/p&gt;
&lt;p&gt;我当场脑子一片空白，支支吾吾说不清楚，直接就凉了。&lt;/p&gt;
&lt;p&gt;首先，为什么会有三个版本？&lt;/p&gt;
&lt;p&gt;且看：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;7层模型（OSI参考模型）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是国际标准化组织定的&lt;strong&gt;理论学术标准&lt;/strong&gt;，是网络分层的“祖宗”，但实际互联网几乎不用。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;4层模型（TCP/IP模型）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;互联网实际在用的&lt;strong&gt;工业落地标准&lt;/strong&gt;，我们现在上网、写代码用的HTTP、TCP、IP，全是基于这个模型跑的，是真正“干活”的模型。&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;5层模型（教材简化模型）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;国内计算机教材最常用的&lt;strong&gt;简化教学版&lt;/strong&gt;，把4层模型的最底层拆成了2层，方便理解学习。&lt;/p&gt;
&lt;p&gt;面试的时候，不管面试官问哪个模型，可以先把下面这张对应关系表讲出来，这样就能把三个模型的边界划清楚，也不容易搞混。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;7 层 OSI 参考模型&lt;/th&gt;
          &lt;th&gt;5 层教材简化模型&lt;/th&gt;
          &lt;th&gt;4 层 TCP/IP 工业模型&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;应用层&lt;/td&gt;
          &lt;td&gt;应用层&lt;/td&gt;
          &lt;td&gt;应用层&lt;/td&gt;
          &lt;td&gt;给用户/应用提供服务，比如浏览器、APP&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;表示层&lt;/td&gt;
          &lt;td&gt;（合并到应用层）&lt;/td&gt;
          &lt;td&gt;（合并到应用层）&lt;/td&gt;
          &lt;td&gt;数据加密、格式转换、统一编码&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;会话层&lt;/td&gt;
          &lt;td&gt;（合并到应用层）&lt;/td&gt;
          &lt;td&gt;（合并到应用层）&lt;/td&gt;
          &lt;td&gt;建立和维持应用之间的会话连接&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;传输层&lt;/td&gt;
          &lt;td&gt;传输层&lt;/td&gt;
          &lt;td&gt;传输层&lt;/td&gt;
          &lt;td&gt;给数据标端口，控制端到端的传输方式&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;网络层&lt;/td&gt;
          &lt;td&gt;网络层&lt;/td&gt;
          &lt;td&gt;网际层&lt;/td&gt;
          &lt;td&gt;给数据标 IP，规划端到端的传输路线&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;数据链路层&lt;/td&gt;
          &lt;td&gt;数据链路层&lt;/td&gt;
          &lt;td&gt;网络接口层&lt;/td&gt;
          &lt;td&gt;给数据标 MAC 地址，相邻节点之间的传输&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;物理层&lt;/td&gt;
          &lt;td&gt;物理层&lt;/td&gt;
          &lt;td&gt;（合并到网络接口层）&lt;/td&gt;
          &lt;td&gt;电信号、光信号的物理传输&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;7层osi参考模型&#34;&gt;7层OSI参考模型
&lt;/h3&gt;&lt;h4 id=&#34;7-应用层&#34;&gt;7. 应用层
&lt;/h4&gt;&lt;p&gt;应用层主要是给用户/应用提供可操作的服务，定义数据的业务含义。&lt;/p&gt;
&lt;p&gt;统称为 消息/报文 (Message)。&lt;/p&gt;
&lt;p&gt;我们写代码天天接触的HTTP、HTTPS、DNS、FTP、WebSocket、RPC协议，全在这一层。&lt;/p&gt;
&lt;p&gt;浏览器发请求、APP调接口，都是在应用层完成的。&lt;/p&gt;
&lt;h4 id=&#34;6-表示层&#34;&gt;6. 表示层
&lt;/h4&gt;&lt;p&gt;表示层主要是统一数据格式，保证收发双方能看懂对方的数据，核心负责数据的加密解密、格式转换、压缩解压、编码统一。&lt;/p&gt;
&lt;p&gt;理论上 OSI 模型把加密解密放在表示层；&lt;/p&gt;
&lt;p&gt;但在实际 TCP/IP 模型中，TLS/SSL 属于应用层实现，工作在应用层与传输层之间。&lt;/p&gt;
&lt;h4 id=&#34;5-会话层&#34;&gt;5. 会话层
&lt;/h4&gt;&lt;p&gt;会话层主要是管理应用之间的会话，保证数据不会串线。&lt;/p&gt;
&lt;p&gt;负责建立、维持、有序断开应用之间的会话连接，提供会话同步、全双工 / 半双工切换等管理能力；&lt;/p&gt;
&lt;p&gt;该层仅存在于 OSI 理论模型中，实际 TCP/IP 体系中无独立对应层，相关会话逻辑由应用层 + 传输层共同实现。&lt;/p&gt;
&lt;h4 id=&#34;4-传输层&#34;&gt;4. 传输层
&lt;/h4&gt;&lt;p&gt;传输层是端到端的传输控制，保证数据能准确送到对应的应用程序。&lt;/p&gt;
&lt;p&gt;数据单位称为 段 (Segment)。&lt;/p&gt;
&lt;p&gt;TCP（可靠传输）、UDP（不可靠传输），还有端口号（HTTP的80端口、HTTPS的443端口），都在这一层。&lt;/p&gt;
&lt;h4 id=&#34;3-网络层&#34;&gt;3. 网络层
&lt;/h4&gt;&lt;p&gt;作用是网络寻址和路由选择，保证数据能从源主机送到目标主机。&lt;/p&gt;
&lt;p&gt;数据单位称为 包 (Packet) 或 分组。&lt;/p&gt;
&lt;p&gt;IP 协议（IPv4/IPv6）、ARP（IP 转 MAC 地址）、ICMP（ping/tracert 命令）、OSPF/RIP 路由协议，都在这一层。&lt;/p&gt;
&lt;h4 id=&#34;2-数据链路层&#34;&gt;2. 数据链路层
&lt;/h4&gt;&lt;p&gt;相邻节点之间的可靠传输，负责成帧 (Framing)、差错检测和流量控制。&lt;/p&gt;
&lt;p&gt;数据单位称为 帧 (Frame)。&lt;br&gt;
MAC地址、以太网协议、交换机转发，都在这一层。&lt;/p&gt;
&lt;p&gt;给 IP 数据包加上 MAC 头部，标上源 MAC 和下一跳的 MAC 地址，保证相邻节点之间能准确传输。&lt;/p&gt;
&lt;h4 id=&#34;1-物理层&#34;&gt;1. 物理层
&lt;/h4&gt;&lt;p&gt;物理介质上的比特流传输。只负责传输0和1的比特流，不管数据是什么含义。&lt;/p&gt;
&lt;p&gt;数据单位称为 比特 (Bit)。&lt;/p&gt;
&lt;p&gt;网线、光纤、网卡、集线器、电信号、光信号，都在这一层。&lt;/p&gt;
&lt;h3 id=&#34;4层tcpip模型&#34;&gt;4层TCP/IP模型
&lt;/h3&gt;&lt;p&gt;OSI模型太理想化、太复杂，实际互联网落地的时候，做了两层合并，就成了现在真正在用的4层模型：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;应用层&lt;/strong&gt;：合并了OSI的&lt;strong&gt;应用层&lt;/strong&gt;+&lt;strong&gt;表示层&lt;/strong&gt;+&lt;strong&gt;会话层&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;传输层&lt;/strong&gt;：同OSI的传输层&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网际层&lt;/strong&gt;：同OSI的网络层&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络接口层&lt;/strong&gt;：合并了OSI的&lt;strong&gt;数据链路层&lt;/strong&gt;+&lt;strong&gt;物理层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们现在上网、写代码的所有网络请求，全是跑在这个4层TCP/IP模型上的，是真正的工业标准。&lt;/p&gt;
&lt;h3 id=&#34;5层教材简化模型&#34;&gt;5层教材简化模型
&lt;/h3&gt;&lt;p&gt;国内教材为了兼顾教学易懂性和底层逻辑完整性，以 OSI 7 层模型为基础做简化，保留应用层、传输层、网络层，同时将底层拆分为数据链路层 + 物理层，形成了教学通用的 5 层简化模型。&lt;/p&gt;
&lt;p&gt;这个模型既保留了底层的物理传输逻辑，又简化了上层的复杂分层。&lt;/p&gt;
&lt;h3 id=&#34;举个例子&#34;&gt;举个例子
&lt;/h3&gt;&lt;p&gt;在浏览器输入网址，到页面显示出来，经过了网络模型的哪些层？&lt;/p&gt;
&lt;h4 id=&#34;1客户端发送请求从上到下封装数据包&#34;&gt;(1)客户端发送请求（从上到下封装数据包）
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;应用层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;浏览器解析网址，先通过 DNS 协议解析域名，拿到服务器的 IP 地址，再生成对应的 HTTP 请求。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;传输层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;先通过三次握手与服务器建立 TCP 连接，再给 HTTP 请求加上 TCP 头部，标上源端口和目标端口，完成传输层封装。&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;网络层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;给TCP数据包加上IP头部，标上源IP和目标IP，路由器根据IP地址规划路由，找到服务器的网络地址。&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;数据链路层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;给IP数据包加上MAC头部，标上源MAC和下一跳的MAC地址，交换机根据MAC地址完成相邻节点转发。&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;strong&gt;物理层&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;把数据包转换成电信号/光信号，通过网线、光纤、基站等物理介质，传输到目标服务器。&lt;/p&gt;
&lt;h4 id=&#34;2服务器接收并处理请求从下到上解析数据包&#34;&gt;(2)服务器接收并处理请求（从下到上解析数据包）
&lt;/h4&gt;&lt;p&gt;服务器收到数据后，从下到上逐层解包：物理层➡️数据链路层➡️网络层➡️传输层➡️应用层，最终解析 HTTP 请求、执行业务逻辑并返回响应。&lt;/p&gt;
&lt;h4 id=&#34;3-客户端渲染页面&#34;&gt;(3) 客户端渲染页面
&lt;/h4&gt;&lt;p&gt;浏览器收到响应后，解析HTML/CSS/JS，渲染页面并显示给用户。&lt;/p&gt;
&lt;h3 id=&#34;每层对应的协议&#34;&gt;每层对应的协议
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;层级名称&lt;/th&gt;
          &lt;th&gt;协议&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;应用层&lt;/td&gt;
          &lt;td&gt;HTTP、HTTPS、DNS、FTP、SMTP（邮件发送）、POP3/IMAP（邮件接收）、WebSocket、SSH、Dubbo 等 RPC 协议&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;传输层&lt;/td&gt;
          &lt;td&gt;TCP（可靠传输）、UDP（不可靠传输）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;网络层&lt;/td&gt;
          &lt;td&gt;IPv4、IPv6、ARP（IP 转 MAC 地址）、ICMP（ping/tracert）、OSPF、RIP 等路由协议&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;数据链路层&lt;/td&gt;
          &lt;td&gt;以太网协议、PPP 点对点协议、VLAN 协议、MAC 地址规范&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;物理层&lt;/td&gt;
          &lt;td&gt;无专属网络协议，相关规范：网线、光纤、网卡、集线器、RJ45 接口&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;小贴士：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ARP 协议逻辑上属于网络层（核心为 IP 协议提供地址解析服务，是 TCP/IP 网际层的核心配套协议），仅从报文封装形式来看，它被直接封装在以太网帧中，因此也有观点认为它属于数据链路层。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>TCP的核心参数-MTU、MSS、RTT、RTO、cwnd、ssthresh</title>
        <link>https://iamxurulin.github.io/p/tcp%E7%9A%84%E6%A0%B8%E5%BF%83%E5%8F%82%E6%95%B0-mtumssrttrtocwndssthresh/</link>
        <pubDate>Sun, 15 Mar 2026 11:36:23 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/tcp%E7%9A%84%E6%A0%B8%E5%BF%83%E5%8F%82%E6%95%B0-mtumssrttrtocwndssthresh/</guid>
        <description>&lt;p&gt;MTU和MSS，管【单个TCP包到底发多大最合适】，是整个传输的基础；&lt;/p&gt;
&lt;p&gt;RTT和RTO，管【包发出去之后，怎么保证对方一定收到，丢包了怎么办】，是TCP可靠传输的核心；&lt;/p&gt;
&lt;p&gt;cwnd和ssthresh，管【一次能连续发多少个包，怎么既跑满带宽，又不把网络堵死】，是TCP拥塞控制的核心。&lt;/p&gt;
&lt;h3 id=&#34;mtu--mss&#34;&gt;MTU &amp;amp; MSS
&lt;/h3&gt;&lt;h4 id=&#34;mtu最大传输单元maximum-transmission-unit&#34;&gt;&lt;strong&gt;MTU（最大传输单元，Maximum Transmission Unit）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;平时用的以太网、WiFi，硬件层面就规定了一个完整的IP数据包，最大不能超过1500字节，这个上限就是MTU。&lt;br&gt;
如果IP包超过MTU，就会被拆成好几个小分片传输，只要有一个分片丢了，整个包就得全量重传，特别影响效率，还可能被防火墙拦截。&lt;/p&gt;
&lt;h4 id=&#34;mss最大报文段长度maximum-segment-size&#34;&gt;&lt;strong&gt;MSS（最大报文段长度，Maximum Segment Size）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;这是基于MTU算出来的、TCP包里真正能装的&lt;strong&gt;业务数据的最大长度&lt;/strong&gt;——要把IP头、TCP头的空间提前扣掉。&lt;br&gt;
以太网默认MTU1500字节，标准IP头和TCP头各占20字节，所以默认MSS就是1460字节。&lt;/p&gt;
&lt;p&gt;它是TCP三次握手的时候，客户端和服务端协商出来的，最终取两边的最小值，目的就是从源头避免IP拆包。&lt;/p&gt;
&lt;h3 id=&#34;rtt--rto&#34;&gt;RTT &amp;amp; RTO
&lt;/h3&gt;&lt;h4 id=&#34;rtt往返时延round-trip-time&#34;&gt;&lt;strong&gt;RTT（往返时延，Round-Trip Time）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;我发一个TCP包出去，到我收到对方回的【我收到了】的ACK确认包，这一来一回花的时间，就是RTT。&lt;br&gt;
它是网络环境决定的客观值，网络越拥堵、跨的路由越多，RTT就越长，会实时波动，是算RTO的唯一基础。&lt;/p&gt;
&lt;h4 id=&#34;rto重传超时时间retransmission-timeout&#34;&gt;&lt;strong&gt;RTO（重传超时时间，Retransmission TimeOut）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;我发出去一个包，会设一个定时器，要是超过这个时间还没收到ACK，我就认为这个包丢了，马上重发一个，这个定时器的时间就是RTO。&lt;br&gt;
RTO完全是基于RTT算出来的，不是固定死的。&lt;/p&gt;
&lt;p&gt;它必须比RTT大一点。&lt;/p&gt;
&lt;p&gt;如果太小了，ACK还在路上就瞎重传，浪费带宽；&lt;/p&gt;
&lt;p&gt;但太大了，真丢包了半天不重传，传输变慢。&lt;/p&gt;
&lt;p&gt;所以，网络波动RTT变了，RTO也会跟着实时调整。&lt;/p&gt;
&lt;h3 id=&#34;cwnd--ssthresh&#34;&gt;cwnd &amp;amp; ssthresh
&lt;/h3&gt;&lt;p&gt;这两个参数是TCP拥塞控制的核心，TCP刚建连的时候，根本不知道当前网络能扛住多大流量，发少了浪费带宽，发多了直接把网络堵死，所以用这两个参数控制发送节奏。&lt;/p&gt;
&lt;h4 id=&#34;cwnd拥塞窗口congestion-window&#34;&gt;&lt;strong&gt;cwnd（拥塞窗口，Congestion Window）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;TCP发送端自己维护的【油门】，单位是MSS。这个参数决定了在没收到对方ACK之前，我最多能连续发多少个包。&lt;/p&gt;
&lt;p&gt;比如cwnd=10，就是最多连续发10个MSS大小的包，不用等ACK。&lt;br&gt;
需注意的是，cwnd不是固定的，网络越好、丢包越少，cwnd就越大，发送速度就越快；一旦丢包，就会马上降下来。&lt;/p&gt;
&lt;h4 id=&#34;ssthresh慢启动阈值slow-start-threshold&#34;&gt;&lt;strong&gt;ssthresh（慢启动阈值，Slow Start Threshold）&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;cwnd的【换挡开关】，用来划分两个发送阶段，单位也是MSS。&lt;br&gt;
当cwnd ＜ ssthresh时，进入&lt;strong&gt;慢启动阶段&lt;/strong&gt;，cwnd每过一个RTT就直接翻倍，指数级快速涨速，尽快把带宽跑满；&lt;/p&gt;
&lt;p&gt;当cwnd ≥ ssthresh时，进入&lt;strong&gt;拥塞避免阶段&lt;/strong&gt;，cwnd每过一个RTT才加1，线性慢慢涨，避免冲太猛把网络堵死。&lt;br&gt;
一旦检测到网络拥堵丢包，ssthresh会立刻降到当前cwnd的一半，再根据丢包的严重程度调整cwnd，重新控制发送节奏。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
