<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Network on HRunning</title><link>https://hangliuc.github.io/tags/network/</link><description>Recent content in Network on HRunning</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>HRunning</copyright><lastBuildDate>Thu, 10 Sep 2026 14:54:17 +0800</lastBuildDate><atom:link href="https://hangliuc.github.io/tags/network/index.xml" rel="self" type="application/rss+xml"/><item><title>科学上网</title><link>https://hangliuc.github.io/topic/scientific-internet/</link><pubDate>Fri, 05 Dec 2025 16:38:33 +0800</pubDate><guid>https://hangliuc.github.io/topic/scientific-internet/</guid><description>&lt;img src="https://hangliuc.github.io/img/cover/scientific_internet_cover.png" alt="Featured image of post 科学上网" /&gt;&lt;blockquote&gt;
&lt;p&gt;本文内容仅用于个人学习和访问公开技术资料。请遵守所在地区的法律法规，以及云服务商和网络服务商的使用条款。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安装服务端3x-ui"&gt;安装服务端：3x-ui
&lt;/h2&gt;&lt;p&gt;当前使用 &lt;a class="link" href="https://github.com/MHSanaei/3x-ui" target="_blank" rel="noopener"
&gt;3x-ui&lt;/a&gt; 管理 Xray 服务。它提供 Web 控制面板，可以创建和管理 VMess、VLESS、Trojan、Shadowsocks、WireGuard 等多种协议，并生成客户端配置、二维码和订阅链接。&lt;/p&gt;
&lt;h3 id="安装"&gt;安装
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/MHSanaei/3x-ui" target="_blank" rel="noopener"
&gt;3x-ui GitHub 官方仓库&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="创建入站并获取客户端配置"&gt;创建入站并获取客户端配置
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;使用安装结果中的地址和凭据登录 3x-ui 面板。&lt;/li&gt;
&lt;li&gt;进入 &lt;strong&gt;入站 (Inbounds)&lt;/strong&gt;，新建一个入站配置。本文以 &lt;strong&gt;VMess&lt;/strong&gt; 为例；端口、UUID、传输方式以及 TLS/Reality 等参数按自己的域名和服务器配置填写。&lt;/li&gt;
&lt;li&gt;保存配置后，在客户端列表中复制订阅链接，或使用面板生成的二维码、分享链接。&lt;/li&gt;
&lt;li&gt;将订阅链接或二维码导入客户端。客户端连接参数必须与 3x-ui 面板中的入站配置完全一致。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;订阅链接、服务器地址、端口和 UUID 都属于敏感配置，不要提交到公开仓库、博客或聊天群。如果订阅链接已经泄露，请在面板中重新生成或撤销对应客户端。&lt;/p&gt;
&lt;h2 id="客户端使用"&gt;客户端使用
&lt;/h2&gt;&lt;h3 id="ios"&gt;iOS
&lt;/h3&gt;&lt;p&gt;客户端选择和下载可参考 &lt;a class="link" href="https://itlanyan.com/v2ray-clients-download/" target="_blank" rel="noopener"
&gt;V2Ray 客户端整理&lt;/a&gt;。当前使用 V2Box 时，中国区 App Store 可能无法直接下载，需要根据自己的账号地区选择可用客户端，并遵守相关服务条款。&lt;/p&gt;
&lt;p&gt;配置方式优先选择从 3x-ui 导出的二维码或分享链接直接导入。手动添加时，可以按以下方式填写：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;协议 (Protocol)&lt;/strong&gt;：选择 &lt;code&gt;VMess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器、端口、UUID&lt;/strong&gt;：填写 3x-ui 入站配置中的值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;传输方式、TLS、Host、Path 等&lt;/strong&gt;：与面板生成的客户端配置保持一致&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;导入完成后，选择该配置并连接；不要把服务器管理面板的用户名和密码填入客户端。&lt;/p&gt;
&lt;h3 id="android"&gt;Android
&lt;/h3&gt;&lt;p&gt;推荐使用 &lt;a class="link" href="https://github.com/MatsuriDayo/NekoBoxForAndroid" target="_blank" rel="noopener"
&gt;NekoBoxForAndroid&lt;/a&gt;，也可以从其 &lt;a class="link" href="https://github.com/MatsuriDayo/NekoBoxForAndroid/releases" target="_blank" rel="noopener"
&gt;Releases 页面&lt;/a&gt; 下载对应版本。&lt;/p&gt;
&lt;p&gt;打开 NekoBox 后，可以通过二维码、&lt;code&gt;vmess://&lt;/code&gt; 分享链接或订阅链接导入配置。导入后选择节点，启动 VPN，并访问一个可信的测试页面确认连接是否正常。&lt;/p&gt;
&lt;h3 id="macos"&gt;macOS
&lt;/h3&gt;&lt;p&gt;推荐使用 &lt;a class="link" href="https://github.com/clash-verge-rev/clash-verge-rev" target="_blank" rel="noopener"
&gt;Clash Verge Rev&lt;/a&gt;，安装包位于其 &lt;a class="link" href="https://github.com/clash-verge-rev/clash-verge-rev/releases" target="_blank" rel="noopener"
&gt;Releases 页面&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;使用 3x-ui 订阅时：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 3x-ui 面板中复制客户端订阅链接。&lt;/li&gt;
&lt;li&gt;在 Clash Verge Rev 的 &lt;strong&gt;订阅&lt;/strong&gt; 页面，将链接粘贴到“订阅文件链接”输入框。&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;新建&lt;/strong&gt; 或导入，等待配置下载完成。&lt;/li&gt;
&lt;li&gt;更新订阅后，选择对应配置，并在 &lt;strong&gt;代理&lt;/strong&gt; 页面选择节点。&lt;/li&gt;
&lt;li&gt;根据需要开启系统代理，选择规则模式或全局模式，然后访问可信网站测试。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果只有单条 VMess 链接而没有 Clash 订阅，可使用 &lt;a class="link" href="https://sub.cmliussss.com/" target="_blank" rel="noopener"
&gt;在线订阅转换工具&lt;/a&gt; 转换格式。订阅链接通常包含访问凭据，在线转换前应确认服务可信；更稳妥的方式是使用本地转换工具，并在使用临时订阅后及时撤销旧链接。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;旧版 &lt;a class="link" href="https://itlanyan.com/v2ray-tutorial/" target="_blank" rel="noopener"
&gt;V2Ray 搭建教程&lt;/a&gt;：仅作背景参考，当前服务端安装以 3x-ui 官方文档为准。&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/MHSanaei/3x-ui" target="_blank" rel="noopener"
&gt;3x-ui 官方仓库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SRE面试题汇总 | Network</title><link>https://hangliuc.github.io/topic/interview/network/</link><pubDate>Thu, 04 Dec 2025 19:36:01 +0800</pubDate><guid>https://hangliuc.github.io/topic/interview/network/</guid><description>&lt;img src="https://hangliuc.github.io/img/cover/network_interview_cover.png" alt="Featured image of post SRE面试题汇总 | Network" /&gt;&lt;h2 id="osi-七层模型"&gt;OSI 七层模型
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;发送端（电脑A） 接收端（电脑B）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----------------+ +----------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 应用层：Data | | 应用层：Data |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| &amp;#34;Hi&amp;#34; | | &amp;#34;Hi&amp;#34; |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 表示层：Data + 表示头 表示层：Data（剥离表示头）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 会话层：Data + 会话头 会话层：Data（剥离会话头）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 传输层：Segment（Data + 端口头） 传输层：Data（剥离端口头）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 网络层：Packet（Segment + IP头） 网络层：Segment（剥离IP头）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 数据链路层：Frame（Packet + MAC头 + CRC）数据链路层：Packet（剥离MAC头+CRC）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 物理层：Bits（Frame转换） 物理层：Frame（Bits转换）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-------+--------+ +-------^--------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +---------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 物理介质（网线/无线）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OSI 层&lt;/th&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;提供应用程序之间的通信&lt;/td&gt;
&lt;td&gt;浏览器、FTP客户端、SMTP客户端&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;/tr&gt;
&lt;tr&gt;
&lt;td&gt;会话层&lt;/td&gt;
&lt;td&gt;管理会话连接&lt;/td&gt;
&lt;td&gt;会话ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;传输层&lt;/td&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;跨网络路由与 IP 地址识别&lt;/td&gt;
&lt;td&gt;路由器、三层交换机&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据链路层&lt;/td&gt;
&lt;td&gt;帧传输与 MAC 地址识别&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;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="http11-和-http2-的区别"&gt;HTTP/1.1 和 HTTP/2 的区别
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;HTTP/1.1&lt;/th&gt;
&lt;th&gt;HTTP/2&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;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多路复用&lt;/td&gt;
&lt;td&gt;HTTP/1.1 管线化实践有限，通常需要多个连接并行请求&lt;/td&gt;
&lt;td&gt;单个 TCP 连接上可以同时承载多个数据流，减少队头阻塞&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;/tr&gt;
&lt;tr&gt;
&lt;td&gt;标头压缩&lt;/td&gt;
&lt;td&gt;不压缩或简单压缩，冗余信息多&lt;/td&gt;
&lt;td&gt;使用 HPACK 压缩，减少冗余，提高加载速度&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="tcp-协议"&gt;TCP 协议
&lt;/h2&gt;&lt;h3 id="tcp-的连接状态"&gt;TCP 的连接状态
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;ESTABLISHED&lt;/code&gt; 的字面含义是“已建立、已确立”。在 TCP 状态机中，它表示三次握手已经完成，双方可以正常收发数据，并不表示连接已经建立了很长时间或已经投入使用很久。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hangliuc.github.io/topic/interview/network/tcp_netstat.webp"
width="1600"
height="494"
srcset="https://hangliuc.github.io/topic/interview/network/tcp_netstat_hu_6a5f765682e47419.webp 480w, https://hangliuc.github.io/topic/interview/network/tcp_netstat_hu_217ce285f570315.webp 1024w"
loading="lazy"
alt="TCP 连接状态图"
class="gallery-image"
data-flex-grow="323"
data-flex-basis="777px"
&gt;&lt;/p&gt;
&lt;p&gt;下面这张图补充了 TCP 从建立连接到关闭连接的主要状态变化：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hangliuc.github.io/topic/interview/network/tcp_state_transition.png"
width="473"
height="484"
srcset="https://hangliuc.github.io/topic/interview/network/tcp_state_transition_hu_76b978733a73188d.png 480w, https://hangliuc.github.io/topic/interview/network/tcp_state_transition_hu_29f63eb82c51d8d0.png 1024w"
loading="lazy"
alt="TCP 建连与断连状态转换"
class="gallery-image"
data-flex-grow="97"
data-flex-basis="234px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;建立连接&lt;/strong&gt;：客户端从 &lt;code&gt;SYN_SENT&lt;/code&gt; 开始，服务器从 &lt;code&gt;LISTEN&lt;/code&gt; 进入 &lt;code&gt;SYN_RCVD&lt;/code&gt;；第三次握手完成后，双方都进入 &lt;code&gt;ESTABLISHED&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主动关闭的一方&lt;/strong&gt;：通常依次经历 &lt;code&gt;FIN_WAIT_1&lt;/code&gt;、&lt;code&gt;FIN_WAIT_2&lt;/code&gt;、&lt;code&gt;TIME_WAIT&lt;/code&gt;，最后进入 &lt;code&gt;CLOSED&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;被动关闭的一方&lt;/strong&gt;：收到 FIN 后进入 &lt;code&gt;CLOSE_WAIT&lt;/code&gt;，应用关闭连接后发送 FIN，再进入 &lt;code&gt;LAST_ACK&lt;/code&gt;，收到 ACK 后进入 &lt;code&gt;CLOSED&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;TIME_WAIT&lt;/code&gt;&lt;/strong&gt;：主动关闭方为确保最后的 ACK 能够重传，并让旧报文在网络中自然过期而暂时保留连接状态，通常持续约两个最大报文段寿命（2MSL）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="客户端出现大量-time_wait-的原因"&gt;客户端出现大量 &lt;code&gt;TIME_WAIT&lt;/code&gt; 的原因
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;短连接过多&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;HTTP Keep-Alive 未开启&lt;/li&gt;
&lt;li&gt;使用 HTTP/1.0 或 &lt;code&gt;Connection: close&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;数据库、Redis、RPC 连接池没有复用&lt;/li&gt;
&lt;li&gt;连接池配置过小或配置错误&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求量或连接创建速率很高&lt;/strong&gt;，例如高 QPS 场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;超时、重试或熔断配置不合理&lt;/strong&gt;，导致连接反复建立和关闭。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;负载均衡代理配置不合理&lt;/strong&gt;，例如负载均衡器、Nginx 或网关的 &lt;code&gt;idle timeout&lt;/code&gt; 不匹配，导致连接频繁断开和重建。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="为什么-tcp-是三次握手"&gt;为什么 TCP 是三次握手
&lt;/h3&gt;&lt;p&gt;TCP 三次握手的目的，是在正式传输数据之前，让通信双方确认彼此具备收发能力，并协商连接参数（如初始序列号），建立可靠连接。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;Client Server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="l"&gt;SYN(seq=100)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;-------------------------&lt;span class="l"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;SYN(seq=500)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ACK=101&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="l"&gt;&amp;lt;----------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="l"&gt;ACK=501&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;-------------------------&lt;span class="l"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="l"&gt;Connection Established&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;第一次握手，客户端发送 SYN 报文，请求建立连接，并携带自己的初始序列号。&lt;/p&gt;
&lt;p&gt;第二次握手，服务器收到后返回 SYN+ACK，一方面确认客户端的 SYN，另一方面发送自己的初始序列号。&lt;/p&gt;
&lt;p&gt;第三次握手，客户端发送 ACK，确认服务器的 SYN。至此，双方进入 &lt;code&gt;ESTABLISHED&lt;/code&gt; 状态，可以开始可靠的数据传输。&lt;/p&gt;
&lt;h4 id="为什么不是-2-次握手"&gt;为什么不是 2 次握手
&lt;/h4&gt;&lt;p&gt;两次握手只能让服务器确认收到了客户端的 SYN，不能让客户端确认服务器已经收到自己的报文，也不能让服务器确认客户端已经收到了自己的 SYN+ACK。若网络中存在延迟到达的旧 SYN，服务器还可能为一个实际上已经失效的请求分配连接资源，形成半连接或错误连接。&lt;/p&gt;
&lt;h4 id="为什么不是-4-次或更多"&gt;为什么不是 4 次或更多？
&lt;/h4&gt;&lt;p&gt;3 次已经足以建立连接，4 次或更多次握手会增加复杂性和资源浪费&lt;/p&gt;
&lt;h3 id="tcp-的核心特点"&gt;TCP 的核心特点
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;面向连接&lt;/li&gt;
&lt;li&gt;保证数据可靠到达&lt;/li&gt;
&lt;li&gt;具有重传机制&lt;/li&gt;
&lt;li&gt;保证数据有序&lt;/li&gt;
&lt;li&gt;具有流量控制&lt;/li&gt;
&lt;li&gt;具有拥塞控制&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="udp-的核心特点"&gt;UDP 的核心特点
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;无连接&lt;/li&gt;
&lt;li&gt;不保证送达&lt;/li&gt;
&lt;li&gt;通常不负责重传&lt;/li&gt;
&lt;li&gt;延迟较低、开销较小&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="什么是滑动窗口"&gt;什么是滑动窗口？
&lt;/h3&gt;&lt;p&gt;发送方不需要每发送一个数据段就等待 ACK，而是可以在窗口允许的范围内连续发送多个数据段。接收方通过 ACK 和接收窗口（&lt;code&gt;rwnd&lt;/code&gt;）通知发送方哪些数据已经收到、还能接收多少数据，发送窗口会随着 ACK 的到来不断向前滑动，因此称为滑动窗口。&lt;/p&gt;
&lt;p&gt;实际可发送的数据量还会受到拥塞窗口（&lt;code&gt;cwnd&lt;/code&gt;）的限制，因此有效发送窗口通常取 &lt;code&gt;min(rwnd, cwnd)&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="dns-解析流程"&gt;DNS 解析流程
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;span class="lnt"&gt;65
&lt;/span&gt;&lt;span class="lnt"&gt;66
&lt;/span&gt;&lt;span class="lnt"&gt;67
&lt;/span&gt;&lt;span class="lnt"&gt;68
&lt;/span&gt;&lt;span class="lnt"&gt;69
&lt;/span&gt;&lt;span class="lnt"&gt;70
&lt;/span&gt;&lt;span class="lnt"&gt;71
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;客户端访问域名
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;例如：www.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 查询浏览器 DNS 缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 返回 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 未命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 查询操作系统 DNS 缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 返回 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 未命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 查询 hosts 文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Linux：/etc/hosts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Windows：hosts 文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 返回 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 未命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 向配置的 DNS Resolver 发起查询
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /etc/resolv.conf 中的 nameserver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 例如本地路由器、运营商 DNS、公共 DNS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. DNS Resolver 查询自身缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 根据 TTL 返回 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 未命中
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. DNS 迭代查询
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 根 DNS 服务器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 顶级域 DNS 服务器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 例如：.com、.cn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 权威 DNS 服务器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 例如：Route &lt;span class="m"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 获得域名对应的 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. Resolver 将结果返回客户端
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 同时根据 TTL 进行缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8. 客户端拿到 IP 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;9. 发起 TCP 三次握手
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10. 建立连接并开始传输数据
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Route 53 可能位于流程中的两环：&lt;/p&gt;
&lt;p&gt;在公网域名解析流程中，Route 53 通常位于：权威 DNS 服务器（迭代查询）&lt;/p&gt;
&lt;p&gt;Route 53 VPC Resolver：递归 DNS Resolver（/etc/resolv.conf）&lt;/p&gt;
&lt;h2 id="cookiesessiontoken"&gt;Cookie、Session、Token
&lt;/h2&gt;&lt;p&gt;三者都是状态管理或身份认证中常见的机制，区别可以从以下几个方面理解：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;机制&lt;/th&gt;
&lt;th&gt;主要存储位置&lt;/th&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;Cookie&lt;/td&gt;
&lt;td&gt;客户端浏览器&lt;/td&gt;
&lt;td&gt;浏览器按域名和路径自动携带&lt;/td&gt;
&lt;td&gt;适合浏览器会话；可设置 &lt;code&gt;HttpOnly&lt;/code&gt;、&lt;code&gt;Secure&lt;/code&gt;、&lt;code&gt;SameSite&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session&lt;/td&gt;
&lt;td&gt;服务端，客户端通常只保存 Session ID&lt;/td&gt;
&lt;td&gt;Session ID 通常放在 Cookie 中&lt;/td&gt;
&lt;td&gt;服务端保存状态，便于主动失效，但需要处理共享存储或会话粘滞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token&lt;/td&gt;
&lt;td&gt;通常由客户端保存，服务端负责校验&lt;/td&gt;
&lt;td&gt;常放在 &lt;code&gt;Authorization&lt;/code&gt; 请求头中&lt;/td&gt;
&lt;td&gt;适合 API、移动端和服务间认证；可设计为无状态或配合服务端存储&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Cookie、Session、Token 的安全性都取决于具体实现，Token 并不天然加密。JWT 默认是编码和签名，不能把其中的内容当作机密数据；需要保密时应使用加密或避免放入敏感信息。&lt;/li&gt;
&lt;li&gt;Cookie 不是“天然不安全”：认证 Cookie 通常应设置 &lt;code&gt;HttpOnly&lt;/code&gt;、&lt;code&gt;Secure&lt;/code&gt; 和合适的 &lt;code&gt;SameSite&lt;/code&gt;，同时防范 CSRF 和 XSS。&lt;/li&gt;
&lt;li&gt;Token 也不是天然支持跨域。跨域请求仍受 CORS、Cookie 的 &lt;code&gt;SameSite&lt;/code&gt;/&lt;code&gt;Domain&lt;/code&gt;、请求头配置等规则约束；使用 &lt;code&gt;localStorage&lt;/code&gt; 保存 Token 时，还要重点防范 XSS。&lt;/li&gt;
&lt;li&gt;Cookie 常用于登录状态、用户偏好和会话保持；Session 适合购物车、表单流程等服务端状态较多的场景；Token 常用于 API 访问控制、SSO 和移动应用认证。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="http-状态码和原因"&gt;HTTP 状态码和原因
&lt;/h2&gt;&lt;p&gt;一些高频考察的状态码：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;200 OK&lt;/code&gt;：请求成功。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;201 Created&lt;/code&gt;：资源创建成功，常见于 &lt;code&gt;POST&lt;/code&gt; 请求。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;301 Moved Permanently&lt;/code&gt;：资源已永久移动，常用于域名或 URL 迁移。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;302 Found&lt;/code&gt;：临时重定向，常用于登录跳转；具体语义还要结合请求方法和客户端行为判断。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;400 Bad Request&lt;/code&gt;：请求格式、参数或协议不符合要求。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;401 Unauthorized&lt;/code&gt;：未认证或认证信息无效；不是“没有权限”的唯一表示。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;403 Forbidden&lt;/code&gt;：服务器理解请求，但拒绝执行，例如 Token 有效但权限不足。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;404 Not Found&lt;/code&gt;：请求的资源不存在，或服务端不希望暴露其是否存在。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;429 Too Many Requests&lt;/code&gt;：请求频率超过限制。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;500 Internal Server Error&lt;/code&gt;：服务端发生未被更具体状态码描述的异常。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;502 Bad Gateway&lt;/code&gt;：网关或反向代理从上游服务收到无效响应，或无法正确解析上游响应。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;503 Service Unavailable&lt;/code&gt;：服务暂时不可用，可能处于过载、维护或没有可用实例的状态。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;504 Gateway Timeout&lt;/code&gt;：网关等待上游响应超时。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔥502、503、504的区别&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;客户端
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;网关 / Nginx / Load Balancer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;上游服务
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;客户端请求
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;网关连接上游
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 上游连接失败或返回非法响应
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 502
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 没有健康的上游实例
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 503
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 上游处理很慢，超过网关超时时间
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ 504
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 正常返回
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 返回上游实际响应
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态码&lt;/th&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;502 Bad Gateway&lt;/td&gt;
&lt;td&gt;网关从上游收到无效响应&lt;/td&gt;
&lt;td&gt;上游进程崩溃、连接被重置、响应格式错误、协议或 TLS 握手异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;503 Service Unavailable&lt;/td&gt;
&lt;td&gt;当前没有可用服务处理请求&lt;/td&gt;
&lt;td&gt;服务过载、正在发布、实例全部不健康、线程池/连接池耗尽、限流或熔断&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;504 Gateway Timeout&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;h2 id="linux-网络丢包排查"&gt;Linux 网络丢包排查
&lt;/h2&gt;&lt;p&gt;排查链路：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;应用 → 系统调用 → Linux 网络栈 → 网卡队列 → 云网络 → 外部链路 → 对端
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="从应用和连接现象开始"&gt;从应用和连接现象开始
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;查看应用日志，确认是连接超时、连接被拒绝、读超时，还是接口 QPS 突增。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;curl&lt;/code&gt;、&lt;code&gt;wget&lt;/code&gt; 或业务客户端复现，区分 DNS、TCP、TLS 和 HTTP 哪一层失败。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;ss&lt;/code&gt; 查看连接状态，用 &lt;code&gt;tcpdump&lt;/code&gt; 验证报文是否发出、是否收到响应：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ss -s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ss -antp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tcpdump -i eth0 host &amp;lt;peer-ip&amp;gt; -w app.pcap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="检查网卡内核网络栈和-cpu"&gt;检查网卡、内核网络栈和 CPU
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip -s link show dev eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ethtool -S eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ethtool -g eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;netstat -s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nstat -az
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;常见指标含义：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指标&lt;/th&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;code&gt;rx_dropped&lt;/code&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;code&gt;rx_errors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;接收错误&lt;/td&gt;
&lt;td&gt;CRC、帧格式或驱动错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tx_errors&lt;/code&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;code&gt;rx_no_buffer&lt;/code&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;code&gt;rx_over_errors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;接收队列溢出&lt;/td&gt;
&lt;td&gt;CPU、软中断或队列处理能力不足&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;检查内核队列和 TCP 缓冲区：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.core.netdev_max_backlog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.core.rmem_default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.core.wmem_default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.ipv4.tcp_rmem
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl net.ipv4.tcp_wmem
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果丢包伴随 CPU 较高，还要观察软中断和网卡多队列配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mpstat -P ALL &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /proc/interrupts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ethtool -l eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ethtool -k eth0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="检查路由防火墙和网络路径"&gt;检查路由、防火墙和网络路径
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip route get &amp;lt;target-ip&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip neigh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ping -c &lt;span class="m"&gt;4&lt;/span&gt; &amp;lt;target-ip&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mtr -rwzbc &lt;span class="m"&gt;100&lt;/span&gt; &amp;lt;target-ip&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;traceroute &amp;lt;target-ip&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意：&lt;code&gt;ping&lt;/code&gt; 或 &lt;code&gt;mtr&lt;/code&gt; 丢包不一定代表业务 TCP 丢包，部分设备会限制 ICMP 或降低 ICMP 优先级，最终仍应结合业务端口和抓包判断。&lt;/p&gt;
&lt;p&gt;检查端口监听、防火墙和连接跟踪：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ss -lntp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nft list ruleset
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -L -n -v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo conntrack -S
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="用抓包定位丢包位置"&gt;用抓包定位丢包位置
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 本机抓取指定主机和端口的报文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tcpdump -i eth0 -nn host &amp;lt;peer-ip&amp;gt; and port &lt;span class="m"&gt;443&lt;/span&gt; -w local.pcap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 只看 TCP 握手、重传和连接关闭相关信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tcpdump -i eth0 -nn &lt;span class="s1"&gt;&amp;#39;tcp[tcpflags] &amp;amp; (tcp-syn|tcp-fin|tcp-rst) != 0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;通过比较客户端、代理和对端的抓包，可以判断是“本机没有发出”“对端没有收到”“对端已回复但中间丢失”，还是“应用收到报文但处理超时”。云环境中还要结合云厂商的网卡、负载均衡器和安全组指标。&lt;/p&gt;
&lt;h3 id="其他常用工具"&gt;其他常用工具
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sar -n DEV 1&lt;/code&gt;：查看网卡吞吐和错误统计。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sar -n TCP,ETCP 1&lt;/code&gt;：观察 TCP 建连、重传和失败情况。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iperf3&lt;/code&gt;：在两台受控主机之间验证带宽、延迟和吞吐能力。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ethtool&lt;/code&gt;：查看网卡协商、Ring Buffer、Offload 和硬件统计。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="常见网络排查命令"&gt;常见网络排查命令
&lt;/h2&gt;&lt;p&gt;上面的内容是按丢包链路排查，下面按命令类别整理一份面试和实际排障时常用的速查表。&lt;/p&gt;
&lt;h3 id="网卡ip路由"&gt;网卡、IP、路由
&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;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;code&gt;ip addr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看网卡和 IP&lt;/td&gt;
&lt;td&gt;IP、子网、网卡状态&lt;/td&gt;
&lt;td&gt;IP 配置错误、网卡未启用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ip link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看网卡链路状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UP&lt;/code&gt;、&lt;code&gt;DOWN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;网卡或链路故障&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ip route&lt;/code&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;code&gt;ip route get 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看访问目标 IP 的实际路径&lt;/td&gt;
&lt;td&gt;出口网卡、网关、源 IP&lt;/td&gt;
&lt;td&gt;流量走错出口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ip neigh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 ARP 邻居&lt;/td&gt;
&lt;td&gt;&lt;code&gt;REACHABLE&lt;/code&gt;、&lt;code&gt;FAILED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ARP 异常、网关不可达&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ip -s link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看网卡收发包统计&lt;/td&gt;
&lt;td&gt;&lt;code&gt;errors&lt;/code&gt;、&lt;code&gt;dropped&lt;/code&gt;、&lt;code&gt;overruns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;网卡丢包、驱动异常&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="dns-解析"&gt;DNS 解析
&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;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;code&gt;dig example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查询域名解析&lt;/td&gt;
&lt;td&gt;A、AAAA、CNAME、TTL&lt;/td&gt;
&lt;td&gt;解析记录错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dig @8.8.8.8 example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定 DNS 查询&lt;/td&gt;
&lt;td&gt;不同 DNS 返回结果&lt;/td&gt;
&lt;td&gt;DNS 污染或 DNS 不一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dig +trace example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看完整迭代过程&lt;/td&gt;
&lt;td&gt;根 DNS、顶级域、权威 DNS&lt;/td&gt;
&lt;td&gt;委派链路异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getent hosts example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按系统实际流程解析&lt;/td&gt;
&lt;td&gt;hosts、NSS、系统 DNS&lt;/td&gt;
&lt;td&gt;程序和 &lt;code&gt;dig&lt;/code&gt; 结果不一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cat /etc/resolv.conf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 DNS 配置&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nameserver&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DNS Server 配置错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cat /etc/hosts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看本地映射&lt;/td&gt;
&lt;td&gt;是否存在错误记录&lt;/td&gt;
&lt;td&gt;hosts 覆盖了正确解析&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="网络连通性和路径"&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;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;code&gt;ping -c 4 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;测试 IP 连通性&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;code&gt;traceroute 8.8.8.8&lt;/code&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;code&gt;tracepath 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看路径和 MTU&lt;/td&gt;
&lt;td&gt;MTU、路径变化&lt;/td&gt;
&lt;td&gt;MTU 不匹配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mtr -rw 8.8.8.8&lt;/code&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;code&gt;nc -vz 10.0.0.10 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;测试 TCP 端口&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;p&gt;&lt;code&gt;ping&lt;/code&gt; 不通不一定代表服务不可用，因为 ICMP 可能被防火墙禁止；排查业务时还要使用目标端口进行验证。&lt;/p&gt;
&lt;h3 id="端口和-tcp-连接"&gt;端口和 TCP 连接
&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;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;code&gt;ss -lntup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看监听端口和进程&lt;/td&gt;
&lt;td&gt;监听地址、端口、PID&lt;/td&gt;
&lt;td&gt;服务未监听、只监听 &lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ss -antp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看所有 TCP 连接&lt;/td&gt;
&lt;td&gt;TCP 状态、对端地址&lt;/td&gt;
&lt;td&gt;连接堆积、连接泄漏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ss -s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看连接汇总&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ESTABLISHED&lt;/code&gt;、&lt;code&gt;TIME-WAIT&lt;/code&gt;、&lt;code&gt;CLOSE-WAIT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连接数量异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ss -ant state time-wait&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 TIME_WAIT&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;code&gt;ss -ant state close-wait&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 CLOSE_WAIT&lt;/td&gt;
&lt;td&gt;数量是否持续增长&lt;/td&gt;
&lt;td&gt;应用没有及时 close&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lsof -i :8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看端口占用进程&lt;/td&gt;
&lt;td&gt;PID、进程名&lt;/td&gt;
&lt;td&gt;端口被错误进程占用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuser -n tcp 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看端口对应进程&lt;/td&gt;
&lt;td&gt;PID&lt;/td&gt;
&lt;td&gt;快速定位端口进程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="httphttps-和应用层"&gt;HTTP、HTTPS 和应用层
&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;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;code&gt;curl -v http://example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 HTTP 访问过程&lt;/td&gt;
&lt;td&gt;请求头、响应头、状态码&lt;/td&gt;
&lt;td&gt;502、503、504、重定向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;curl -I https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只查看响应头&lt;/td&gt;
&lt;td&gt;HTTP 状态、&lt;code&gt;Location&lt;/code&gt;、&lt;code&gt;Server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;网关、重定向、服务状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;curl -k -v https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;排查 HTTPS/TLS&lt;/td&gt;
&lt;td&gt;证书、TLS 握手、协议版本&lt;/td&gt;
&lt;td&gt;证书错误、TLS 握手失败&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;curl -o /dev/null -sS -w '时间统计' https://example.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看分阶段耗时&lt;/td&gt;
&lt;td&gt;DNS、TCP、TLS、TTFB、总耗时&lt;/td&gt;
&lt;td&gt;定位请求慢在哪个阶段&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中，&lt;code&gt;curl -w&lt;/code&gt; 可以输出 &lt;code&gt;%{time_namelookup}&lt;/code&gt;、&lt;code&gt;%{time_connect}&lt;/code&gt;、&lt;code&gt;%{time_appconnect}&lt;/code&gt;、&lt;code&gt;%{time_starttransfer}&lt;/code&gt; 和 &lt;code&gt;%{time_total}&lt;/code&gt; 等字段，用来拆分请求耗时。&lt;/p&gt;
&lt;h3 id="tcpdump-抓包"&gt;tcpdump 抓包
&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;th&gt;重点观察&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i any host 10.0.0.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取指定 IP 流量&lt;/td&gt;
&lt;td&gt;是否有请求和响应&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i eth0 port 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取指定端口流量&lt;/td&gt;
&lt;td&gt;TCP 建连、数据传输&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i any 'tcp[tcpflags] &amp;amp; tcp-syn != 0'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 SYN&lt;/td&gt;
&lt;td&gt;是否发出 SYN、是否收到 SYN-ACK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i any 'tcp[tcpflags] &amp;amp; tcp-rst != 0'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 RST&lt;/td&gt;
&lt;td&gt;谁重置了连接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i any 'tcp[tcpflags] &amp;amp; tcp-fin != 0'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 FIN&lt;/td&gt;
&lt;td&gt;谁主动关闭连接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -i any -c 100 -s 0 -w /tmp/test.pcap port 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取并保存报文&lt;/td&gt;
&lt;td&gt;后续使用 Wireshark 分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcpdump -nn -r /tmp/test.pcap&lt;/code&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="tcpdump-参数含义"&gt;tcpdump 参数含义
&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;code&gt;-i eth0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定抓包网卡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-i any&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取所有网卡，Linux 常用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不把 IP 解析成域名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-nn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不解析 IP，也不把端口解析成服务名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-c 100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取 100 个报文后退出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-s 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;抓取完整报文，避免内容被截断&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-v&lt;/code&gt;、&lt;code&gt;-vv&lt;/code&gt;、&lt;code&gt;-vvv&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示更多详细信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;以 ASCII 显示报文内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-X&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;同时显示十六进制和 ASCII&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-w file.pcap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;保存为抓包文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-r file.pcap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;读取抓包文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-tttt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示完整可读时间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示 MAC 地址等二层信息&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="tcpdump-过滤条件"&gt;tcpdump 过滤条件
&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;code&gt;host 10.0.0.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来源或目标是指定 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src host 10.0.0.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来源 IP 是指定 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dst host 10.0.0.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;目标 IP 是指定 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;port 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来源或目标端口是 8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;src port 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来源端口是 8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dst port 8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;目标端口是 8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只抓 TCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;udp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只抓 UDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;icmp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只抓 ICMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;and&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;并且&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;or&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;或者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;not&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;排除&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="网络性能和协议统计"&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;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;code&gt;sar -n DEV 1&lt;/code&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;code&gt;sar -n TCP,ETCP 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 TCP 统计&lt;/td&gt;
&lt;td&gt;建连、关闭、重传&lt;/td&gt;
&lt;td&gt;TCP 重传、连接失败&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nstat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看协议栈统计&lt;/td&gt;
&lt;td&gt;Retrans、RST、失败&lt;/td&gt;
&lt;td&gt;内核协议栈异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ethtool -S eth0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看网卡底层统计&lt;/td&gt;
&lt;td&gt;CRC、队列、丢包&lt;/td&gt;
&lt;td&gt;网卡驱动或硬件问题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iperf3 -s&lt;/code&gt; / &lt;code&gt;iperf3 -c &amp;lt;IP&amp;gt;&lt;/code&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="防火墙连接跟踪和内核参数"&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;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;code&gt;nft list ruleset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 nftables 规则&lt;/td&gt;
&lt;td&gt;DROP、REJECT&lt;/td&gt;
&lt;td&gt;防火墙拦截&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iptables -L -n -v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 iptables 规则和命中数&lt;/td&gt;
&lt;td&gt;DROP、REJECT、计数&lt;/td&gt;
&lt;td&gt;规则误拦截&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conntrack -S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看连接跟踪状态&lt;/td&gt;
&lt;td&gt;是否接近容量上限&lt;/td&gt;
&lt;td&gt;NAT 表满&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sysctl net.ipv4.ip_local_port_range&lt;/code&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;code&gt;sysctl -a | grep tcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 TCP 内核参数&lt;/td&gt;
&lt;td&gt;backlog、重传、端口复用&lt;/td&gt;
&lt;td&gt;内核参数配置不合理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="长连接短连接websocket-的区别和使用场景"&gt;长连接、短连接、WebSocket 的区别和使用场景
&lt;/h2&gt;&lt;h3 id="短连接"&gt;短连接
&lt;/h3&gt;&lt;p&gt;客户端与服务器之间的连接在一次请求完成后关闭。HTTP/1.0 默认倾向于短连接；HTTP/1.1 通常使用 Keep-Alive，因此不能简单把“HTTP 请求”都等同于短连接。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;适合交互频率低、请求完成后不需要保持连接的场景。&lt;/li&gt;
&lt;li&gt;连接建立和关闭成本较高，高并发场景通常会配合连接池或连接复用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="长连接"&gt;长连接
&lt;/h3&gt;&lt;p&gt;一次 TCP 连接中可以进行多次请求和响应，减少频繁建立连接的开销。HTTP/1.1 默认支持持久连接，MySQL、Redis 等客户端也通常通过连接池复用连接。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;适合频繁请求、连接建立成本较高或需要保持会话的场景。&lt;/li&gt;
&lt;li&gt;需要合理设置空闲超时、最大连接数和心跳，否则可能积累大量空闲连接。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="websocket"&gt;WebSocket
&lt;/h3&gt;&lt;p&gt;WebSocket 通常先通过 HTTP Upgrade 建立连接，随后在同一条 TCP 连接上进行全双工通信，服务器可以主动向客户端推送数据。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;适合在线协作、即时消息、实时行情、在线游戏和部分 IoT 场景。&lt;/li&gt;
&lt;li&gt;如果只是客户端周期性拉取数据，短轮询或 SSE 可能更简单；选型要结合通信方向、连接规模和代理兼容性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mac-地址和-ip-地址如何转换"&gt;MAC 地址和 IP 地址如何转换
&lt;/h2&gt;&lt;p&gt;在 IPv4 局域网中，ARP 用于根据目标 IP 查询下一跳的 MAC 地址，并通过 ARP 缓存保存映射关系。IPv6 不使用 ARP，而是使用邻居发现协议（NDP）。&lt;/p&gt;
&lt;p&gt;以同一局域网内通信为例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;源主机查看 ARP 缓存；没有记录时，广播 ARP Request，携带源 IP、源 MAC 和待查询的目标 IP。&lt;/li&gt;
&lt;li&gt;目标主机发现请求中的目标 IP 是自己后，单播返回 ARP Reply，携带自己的 IP 和 MAC；两端也会根据报文更新缓存。&lt;/li&gt;
&lt;li&gt;源主机拿到目标 MAC 后，把 IP 数据包封装成以太网帧发送。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果目标 IP 不在本地网段，源主机查询的不是目标主机 MAC，而是默认网关的 MAC，然后由路由器逐跳转发。&lt;/p&gt;
&lt;h2 id="lvsnginxhaproxy-的区别和使用场景"&gt;LVS、Nginx、HAProxy 的区别和使用场景
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LVS&lt;/strong&gt;：主要工作在四层，通过 IP、端口等信息转发 TCP/UDP 流量，性能和吞吐能力强，常用于大规模集群的基础负载均衡。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nginx&lt;/strong&gt;：主要工作在七层，擅长 HTTP/HTTPS 反向代理、静态资源、TLS 终止、基于域名或 URL 的路由；&lt;code&gt;stream&lt;/code&gt; 模块也可以代理部分 TCP/UDP 流量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HAProxy&lt;/strong&gt;：同时支持四层和七层代理，健康检查、连接管理和负载均衡能力较强，常用于高性能 TCP 或 HTTP 代理场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际架构中经常组合使用，例如 LVS 做四层流量分发，Nginx 或 HAProxy 在后端做七层路由和业务治理。&lt;/p&gt;
&lt;h2 id="常见的负载均衡算法"&gt;常见的负载均衡算法
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轮询（Round Robin）&lt;/strong&gt;：按顺序将请求分配给后端实例，适合实例配置相近的场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加权轮询（Weighted Round Robin）&lt;/strong&gt;：按权重分配流量，适合实例规格不同或需要灰度的场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最少连接（Least Connections）&lt;/strong&gt;：优先转发到当前连接数较少的实例，适合请求耗时差异较大的场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加权最少连接&lt;/strong&gt;：同时考虑实例权重和连接数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;随机（Random）&lt;/strong&gt;：随机选择一个后端实例处理请求。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加权随机（Weighted Random）&lt;/strong&gt;：按照后端权重比例随机选择实例。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IP Hash / 一致性哈希&lt;/strong&gt;：让同一客户端或同一 Key 尽量落到同一实例，适合需要会话粘滞的场景，但要注意实例扩缩容和热点问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;随机或最短响应时间&lt;/strong&gt;：根据随机结果或历史延迟选择后端，具体效果依赖实现和监控数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="alb-和-nlb-的区别"&gt;ALB 和 NLB 的区别
&lt;/h2&gt;&lt;p&gt;以下以云厂商常见的命名方式为例，不同厂商的具体能力和限制可能不同：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;ALB&lt;/th&gt;
&lt;th&gt;NLB&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&lt;/td&gt;
&lt;td&gt;四层，通常处理 TCP/UDP，也可能支持 TLS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;路由依据&lt;/td&gt;
&lt;td&gt;域名、URL、请求头、Cookie 等&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;URL 路由、TLS 终止、重写、WAF 集成&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;Web、API、微服务网关&lt;/td&gt;
&lt;td&gt;数据库代理、TCP 服务、实时通信和高并发连接&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="cdn-常见面试题"&gt;CDN 常见面试题
&lt;/h2&gt;&lt;h3 id="cdn-如何实现就近访问"&gt;CDN 如何实现就近访问？
&lt;/h3&gt;&lt;p&gt;用户访问加速域名时，通常先通过 DNS 或 GSLB 将请求调度到合适的 CDN 节点。调度时会综合地域、运营商、节点健康状态、负载和网络质量等信息。节点命中缓存时直接返回，未命中时向源站回源并缓存响应。&lt;/p&gt;
&lt;h3 id="为什么域名要使用-cname"&gt;为什么域名要使用 CNAME？
&lt;/h3&gt;&lt;p&gt;业务域名通过 CNAME 指向 CDN 厂商提供的调度域名，厂商就可以根据实时节点状态和网络情况返回合适的节点 IP。直接配置固定 IP 会失去动态调度和故障切换能力。&lt;/p&gt;
&lt;h3 id="什么情况下-cdn-会回源"&gt;什么情况下 CDN 会回源？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;缓存未命中（Cache MISS）。&lt;/li&gt;
&lt;li&gt;缓存已过期，或通过 &lt;code&gt;ETag&lt;/code&gt; / &lt;code&gt;Last-Modified&lt;/code&gt; 校验后需要重新获取内容。&lt;/li&gt;
&lt;li&gt;源站通过 &lt;code&gt;Cache-Control&lt;/code&gt; 指定不缓存，或请求携带了会绕过缓存的条件。&lt;/li&gt;
&lt;li&gt;动态请求、个性化请求，或 CDN 配置为不缓存的资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cdn-缓存由哪些-http-头控制"&gt;CDN 缓存由哪些 HTTP 头控制？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cache-Control: max-age=3600&lt;/code&gt;：指定浏览器缓存 3600 秒。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cache-Control: s-maxage=3600&lt;/code&gt;：指定共享缓存（如 CDN）缓存 3600 秒，可以让浏览器较快更新，同时避免 CDN 频繁回源。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-cache&lt;/code&gt;：可以缓存，但使用前必须向源站重新验证。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-store&lt;/code&gt;：不应存储响应内容。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ETag&lt;/code&gt;、&lt;code&gt;Last-Modified&lt;/code&gt;：用于条件请求和协商缓存，减少重复传输。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="purge-和-preload-有什么区别"&gt;Purge 和 Preload 有什么区别？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purge（刷新/清除缓存）&lt;/strong&gt;：删除 CDN 节点上的旧缓存，使后续请求重新回源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preload（预热）&lt;/strong&gt;：提前把资源从源站拉取到 CDN 节点，降低首次访问的回源延迟。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="如何处理缓存击穿缓存雪崩和热点-key"&gt;如何处理缓存击穿、缓存雪崩和热点 Key？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;为不同资源设置合理且带随机抖动的 TTL，避免大量缓存同时过期。&lt;/li&gt;
&lt;li&gt;对热点资源使用多级缓存、源站保护或请求合并，避免大量请求同时回源：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;L1 Edge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;L2 Regional Cache
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Origin Shield
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Origin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Origin Shield&lt;/strong&gt;：CDN 和源站之间的一层集中缓存或回源保护层，减少多个边缘节点同时访问源站。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求合并&lt;/strong&gt;：将大量相同资源请求合并为一个回源请求，其他请求共享结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Singleflight&lt;/strong&gt;：针对相同 Key，只允许一个请求真正执行，其他请求等待并共享结果。&lt;/li&gt;
&lt;li&gt;对必须实时更新的内容采用版本化 URL、精确刷新和灰度发布，减少大范围清缓存。&lt;/li&gt;
&lt;li&gt;对源站增加限流、熔断和降级，防止 CDN 回源流量压垮应用。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>容器网络影响宿主机入网问题排查</title><link>https://hangliuc.github.io/ops/docker/docker-network-issue/</link><pubDate>Wed, 26 Nov 2025 10:38:20 +0800</pubDate><guid>https://hangliuc.github.io/ops/docker/docker-network-issue/</guid><description>&lt;img src="https://hangliuc.github.io/img/cover/ops_cover.webp" alt="Featured image of post 容器网络影响宿主机入网问题排查" /&gt;&lt;h1 id="容器网络影响宿主机入网问题排查"&gt;容器网络影响宿主机入网问题排查
&lt;/h1&gt;&lt;h2 id="问题描述"&gt;问题描述
&lt;/h2&gt;&lt;p&gt;发现172.27.0.0/16，172.26.0.0/16 网段的服务无法访问宿主机的服务&lt;/p&gt;
&lt;h2 id="问题排查"&gt;问题排查
&lt;/h2&gt;&lt;p&gt;&lt;img src="https://hangliuc.github.io/ops/docker/docker-network-issue/ifconfig.webp"
width="1046"
height="1028"
srcset="https://hangliuc.github.io/ops/docker/docker-network-issue/ifconfig_hu_4dcb2cc1b38c7b37.webp 480w, https://hangliuc.github.io/ops/docker/docker-network-issue/ifconfig_hu_d3f1ef0eff0562c1.webp 1024w"
loading="lazy"
alt="网卡配置"
class="gallery-image"
data-flex-grow="101"
data-flex-basis="244px"
&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker network ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NETWORK ID NAME DRIVER SCOPE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8eacdcbf22d7 7b-full_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f22af6f77037 bridge bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4a56201be716 host host local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6e36d25cdbb0 llama2-13b-lora_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fb2839792d18 llama3-8b_lora_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;d1f916892b02 none null local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2c9c2578ecce tgi_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;446845acbad5 v2-9b_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;d1301d605f3c v2-27b-it_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;c3d523d51ee4 v3-8b_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1d3cf7bd9665 v4-9b_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;59aecf59ca81 v31-8b_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;42cca879c18f webui-docker_default bridge local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;发现1d3cf7bd9665、1d3cf7bd9665占用了172.27.0.0/16，172.26.0.0/16 网段，导致路由冲突。Linux 内核的路由机制会优先选择 最匹配的路由，它会覆盖默认路由，流量会被错误的流向docker。&lt;/p&gt;
&lt;h2 id="解决方法"&gt;解决方法
&lt;/h2&gt;&lt;h3 id="修改docker-配置不使用冲突网段"&gt;修改docker 配置，不使用冲突网段
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bip&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.100.1/24&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;default-address-pools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;base&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.200.0/20&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="创建容器时使用特定网络"&gt;创建容器时使用特定网络
&lt;/h3&gt;&lt;p&gt;docker network create &amp;ndash;subnet=xx.xx.xx.xx/24 my_custom_network&lt;/p&gt;
&lt;h3 id="如果必须保留冲突网段修改宿主机路由让外部网络优先"&gt;如果必须保留冲突网段，修改宿主机路由，让外部网络优先
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip route del 172.27.0.0/16
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip route add 172.27.0.0/16 via &amp;lt;外部网关&amp;gt; metric &lt;span class="m"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>