<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>文章 on 吾思 梦阁</title><link>https://wstek.win/posts/</link><description>Recent content from 吾思 梦阁</description><generator>Hugo</generator><language>zh-cn</language><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Fri, 16 Oct 2026 19:30:00 +0800</lastBuildDate><atom:link href="https://wstek.win/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>STM32F4 配置中断</title><link>https://wstek.win/posts/stm32f4-interrupt/</link><pubDate>Fri, 16 Oct 2026 19:30:00 +0800</pubDate><guid>https://wstek.win/posts/stm32f4-interrupt/</guid><description>
<![CDATA[<h1>STM32F4 配置中断</h1><p>作者：WuSi（）</p>
        
          <p>参考：<a href="https://www.bilibili.com/video/BV1th411z7sn">https://www.bilibili.com/video/BV1th411z7sn</a></p>
<h2 id="中断是什么有什么用">
<a class="header-anchor" href="#%e4%b8%ad%e6%96%ad%e6%98%af%e4%bb%80%e4%b9%88%e6%9c%89%e4%bb%80%e4%b9%88%e7%94%a8"></a>
中断是什么？有什么用？
</h2><blockquote>
<p>中断的主要作用是让CPU在运行程序时能及时响应外部或内部的突发事件，从而提高系统效率、保证系统可靠性并满足实时处理需求。 中断使CPU暂停当前任务，转去执行中断服务程序，处理完后再返回原任务继续执行。</p>
</blockquote>
<p>在课程视频里如此：
• 中断：在主程序运行过程中，出现了特定的中断触发条件（中断源），使得CPU暂停当前正在运行的程序，转而去处理中断程序，处理完成后又返回原来被暂停的位置继续运行</p>
<p>• 中断优先级：当有多个中断源同时申请中断时，CPU会根据中断源的轻重缓急进行裁决，优先响应更加紧急的中断源（就像病人去医院一样，让病情危急的病人先治疗）</p>
<p><a
  href="/images/20261016-185545.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/20261016-185545.webp"
    data-sizes="auto"
    alt=""
  />
</a></p>
<p>• 中断嵌套：当一个中断程序正在运行时，又有新的更高优先级的中断源申请中断，CPU再次暂停当前中断程序，转而去处理新的中断程序，处理完成后依次进行返回</p>
<p>如图阐释了中断的工作原理：
<a
  href="/images/20261016-184440.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/20261016-184440.webp"
    data-sizes="auto"
    alt="中断可以嵌套"
  />
</a></p>
<p>需注意中断是阻塞的，因此不能在中断函数中调用所需时间过长的函数，否则会影响主函数的执行产生混乱。</p>
<p>我认为，中断可以代替一部分轮询，提高运行的效率。<del>（这不就是特殊的回调吗ᗜˬᗜ）</del></p>
<h2 id="stm32的中断链路是什么">
<a class="header-anchor" href="#stm32%e7%9a%84%e4%b8%ad%e6%96%ad%e9%93%be%e8%b7%af%e6%98%af%e4%bb%80%e4%b9%88"></a>
STM32的中断链路是什么？
</h2><p><a
  href="/images/interrupt-path.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/interrupt-path.webp"
    data-sizes="auto"
    alt="中断链路"
  />
</a></p>
<p>如图，通过SYSCFG，可以从GPIOx中选出要中断的引脚。然后接到EXTI，EXTI负责检测进来的信号是否满足触发中断的条件（条件由自己设置）。当触发中断的条件时，信号通过EXTIx和其他的通路触发NVIC，NVIC负责将信息汇报CPU，此时中断触发。</p>
<p>对于SYSCFG，我们可以把它看做一个“接线器”，它负责将P?x（指PAx，PBx,&hellip;）接到对应的EXTI。值得注意的是，PAx/PBx&hellip;等相同x但不同GPIOx的引脚共用一个SYSCFG寄存器，也就是说，当设置PA0通过SYSCFG连接到EXTI0时，PB0,PC0等等就不能使用中断，否则会引发未知错误。</p>
<p><a
  href="/images/20261016-185707.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/20261016-185707.webp"
    data-sizes="auto"
    alt="SYSCFG/AFIO"
  />
</a></p>
<p>对于EXTI，他是一个“检测器”和“控制器”。检测前端来的信号是否满足条件，以及控制EXTIx等通道传输中断信号。如图，ST公司将P?0-P?4的线分别映射到EXTI0-EXTI4，但是后续5-15，ST将其分别映射到两个EXTI通路中P?5-P?9共同使用EXTI9_5，P?10-P?15同理。</p>
<p>那可能有人会问：如果使用了P?5-P?15，在EXTI9_5或EXTI15_10中该如何判定到底是哪个口引起的中断呢？
其实，中断信号储存在寄存器内，可以使用if (EXTI-&gt;PR &amp; (1 &laquo; x)) 来判断和执行（x取5-15，是P?x的x。PR是挂起寄存器的意思），如下图。<del>（看不懂的话可以配课看的www）</del><a
  href="/images/20261016-185755.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/20261016-185755.webp"
    data-sizes="auto"
    alt=""
  />
</a></p>
<p>NVIC是一个外设，用于管理和传递中断，还可以设置优先级（见上面优先级的图）<a
  href="/images/20261016-185446.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/20261016-185446.webp"
    data-sizes="auto"
    alt=""
  />
</a></p>
<p>在STM32中实现中断，本质上就是打通这三个“关卡”。</p>
<h2 id="如何实现标准库">
<a class="header-anchor" href="#%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e6%a0%87%e5%87%86%e5%ba%93"></a>
如何实现？（标准库）
</h2><h3 id="先理清一下步骤">
<a class="header-anchor" href="#%e5%85%88%e7%90%86%e6%b8%85%e4%b8%80%e4%b8%8b%e6%ad%a5%e9%aa%a4"></a>
先理清一下步骤。
</h3><p>时钟使能-&gt;设置GPIO引脚-&gt;设置SYSCFG-&gt;设置EXTI-&gt;设置NVIC-&gt;写中断函数（这一步随便，我倾向于最后写）</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;main.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="c1">//设置TimingDelay，可能是我的库的问题必须要写
</span></span></span><span class="line"><span class="cl"><span class="k">static</span> <span class="n">__IO</span> <span class="kt">uint32_t</span> <span class="n">TimingDelay</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">TimingDelay_Decrement</span><span class="p">(</span><span class="kt">void</span><span class="p">){</span><span class="k">if</span> <span class="p">(</span><span class="n">TimingDelay</span> <span class="o">!=</span> <span class="mh">0x00</span><span class="p">)</span> <span class="n">TimingDelay</span><span class="o">--</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//中断函数（其实不一定非要写到主程序里）
</span></span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">EXTI0_IRQHandler</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">   <span class="k">if</span> <span class="p">(</span><span class="nf">EXTI_GetITStatus</span><span class="p">(</span><span class="n">EXTI_Line0</span><span class="p">)</span> <span class="o">!=</span> <span class="n">RESET</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nf">GPIO_ToggleBits</span><span class="p">(</span><span class="n">GPIOC</span><span class="p">,</span> <span class="n">GPIO_Pin_13</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="nf">EXTI_ClearITPendingBit</span><span class="p">(</span><span class="n">EXTI_Line0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">//使能时钟
</span></span></span><span class="line"><span class="cl">    <span class="nf">RCC_AHB1PeriphClockCmd</span><span class="p">(</span><span class="n">RCC_AHB1Periph_GPIOA</span><span class="p">,</span> <span class="n">ENABLE</span><span class="p">);</span>  <span class="c1">// GPIOA
</span></span></span><span class="line"><span class="cl">    <span class="nf">RCC_AHB1PeriphClockCmd</span><span class="p">(</span><span class="n">RCC_AHB1Periph_GPIOC</span><span class="p">,</span> <span class="n">ENABLE</span><span class="p">);</span>  <span class="c1">// GPIOC
</span></span></span><span class="line"><span class="cl">    <span class="c1">//注意，SYSCFG也要使能
</span></span></span><span class="line"><span class="cl">    <span class="nf">RCC_APB2PeriphClockCmd</span><span class="p">(</span><span class="n">RCC_APB2Periph_SYSCFG</span><span class="p">,</span> <span class="n">ENABLE</span><span class="p">);</span> <span class="c1">// SYSCFG
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">//初始化引脚
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_InitTypeDef</span> <span class="n">GPIO_Struct</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Mode</span><span class="o">=</span><span class="n">GPIO_Mode_IN</span><span class="p">;</span> <span class="c1">//输入模式，用于中断
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_OType</span><span class="o">=</span><span class="n">GPIO_OType_PP</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Pin</span><span class="o">=</span><span class="n">GPIO_Pin_0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_PuPd</span><span class="o">=</span><span class="n">GPIO_PuPd_UP</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Speed</span><span class="o">=</span><span class="n">GPIO_High_Speed</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">GPIO_Init</span><span class="p">(</span><span class="n">GPIOA</span><span class="p">,</span><span class="o">&amp;</span><span class="n">GPIO_Struct</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Mode</span><span class="o">=</span><span class="n">GPIO_Mode_OUT</span><span class="p">;</span><span class="c1">//输出，在这里连接了灯。用于检测中断
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_OType</span><span class="o">=</span><span class="n">GPIO_OType_PP</span><span class="p">;</span><span class="c1">//
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Pin</span><span class="o">=</span><span class="n">GPIO_Pin_13</span><span class="p">;</span><span class="c1">//
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_PuPd</span><span class="o">=</span><span class="n">GPIO_PuPd_UP</span><span class="p">;</span><span class="c1">//
</span></span></span><span class="line"><span class="cl">    <span class="n">GPIO_Struct</span><span class="p">.</span><span class="n">GPIO_Speed</span><span class="o">=</span><span class="n">GPIO_High_Speed</span><span class="p">;</span><span class="c1">//
</span></span></span><span class="line"><span class="cl">    <span class="nf">GPIO_Init</span><span class="p">(</span><span class="n">GPIOC</span><span class="p">,</span><span class="o">&amp;</span><span class="n">GPIO_Struct</span><span class="p">);</span><span class="c1">//
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">//初始化SYSCFG，F1系列使用初始化AFIO的函数
</span></span></span><span class="line"><span class="cl">    <span class="nf">SYSCFG_EXTILineConfig</span><span class="p">(</span><span class="n">EXTI_PortSourceGPIOA</span><span class="p">,</span> <span class="n">EXTI_PinSource0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1">//设置EXTI
</span></span></span><span class="line"><span class="cl">    <span class="n">EXTI_InitTypeDef</span> <span class="n">EXTI_Struct</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">EXTI_Struct</span><span class="p">.</span><span class="n">EXTI_Line</span><span class="o">=</span><span class="n">EXTI_Line0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">EXTI_Struct</span><span class="p">.</span><span class="n">EXTI_LineCmd</span><span class="o">=</span><span class="n">ENABLE</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">EXTI_Struct</span><span class="p">.</span><span class="n">EXTI_Mode</span><span class="o">=</span><span class="n">EXTI_Mode_Interrupt</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">EXTI_Struct</span><span class="p">.</span><span class="n">EXTI_Trigger</span><span class="o">=</span><span class="n">EXTI_Trigger_Falling</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">EXTI_Init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">EXTI_Struct</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">//设置NVIC
</span></span></span><span class="line"><span class="cl">    <span class="n">NVIC_InitTypeDef</span> <span class="n">NVIC_Struct</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">NVIC_PriorityGroupConfig</span><span class="p">(</span><span class="n">NVIC_PriorityGroup_2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">NVIC_Struct</span><span class="p">.</span><span class="n">NVIC_IRQChannel</span><span class="o">=</span><span class="n">EXTI0_IRQn</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">NVIC_Struct</span><span class="p">.</span><span class="n">NVIC_IRQChannelCmd</span><span class="o">=</span><span class="n">ENABLE</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">NVIC_Struct</span><span class="p">.</span><span class="n">NVIC_IRQChannelPreemptionPriority</span><span class="o">=</span><span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">NVIC_Struct</span><span class="p">.</span><span class="n">NVIC_IRQChannelSubPriority</span><span class="o">=</span><span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">NVIC_Init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">NVIC_Struct</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">while</span><span class="p">(</span><span class="mi">1</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">        <span class="c1">//空循环，防止意外
</span></span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>下面有几个点要详细展开：</p>
        
        <hr><p>本文2026-10-16首发于<a href='https://wstek.win/'>吾思 梦阁</a>，最后修改于2026-10-16</p>]]></description><category>STM32</category></item><item><title>DDoS 通俗绍介</title><link>https://wstek.win/posts/ddos_introduce/</link><pubDate>Mon, 27 Jul 2026 19:30:00 +0800</pubDate><guid>https://wstek.win/posts/ddos_introduce/</guid><description>
<![CDATA[<h1>DDoS 通俗绍介</h1><p>作者：WuSi（）</p>
        
          <p>（复制了自己以前的文章）</p>
<h2 id="0x00-ddos的概念">
<a class="header-anchor" href="#0x00-ddos%e7%9a%84%e6%a6%82%e5%bf%b5"></a>
<strong>0x00 DDoS的概念</strong>
</h2><p>DDoS(DDoS:Distributed Denial of Service)<strong>分布式拒绝服务攻击</strong>，就是让多台计算机联合起来对目标发动拒绝服务攻击。</p>
<h2 id="0x10什么是拒绝服务攻击dos攻击呢">
<a class="header-anchor" href="#0x10%e4%bb%80%e4%b9%88%e6%98%af%e6%8b%92%e7%bb%9d%e6%9c%8d%e5%8a%a1%e6%94%bb%e5%87%bbdos%e6%94%bb%e5%87%bb%e5%91%a2"></a>
<strong>0x10什么是“拒绝服务攻击（DoS攻击）”呢？</strong>
</h2><p>拒绝服务攻击是一种网络攻击，通过中断设备的正常功能，使目标用户无法使用计算机或其他设备。攻击者通过发送大量请求，占用目标系统的关键资源（如内存、带宽和CPU），导致系统不堪重负，来不及处理正常请求。另一种方式是利用协议设计或实现中的漏洞，使目标系统陷入异常状态，无法正常提供服务。</p>
<h2 id="0x11为什么叫拒绝服务攻击">
<a class="header-anchor" href="#0x11%e4%b8%ba%e4%bb%80%e4%b9%88%e5%8f%ab%e6%8b%92%e7%bb%9d%e6%9c%8d%e5%8a%a1%e6%94%bb%e5%87%bb"></a>
<strong>0x11为什么叫拒绝服务攻击？</strong>
</h2><p>因为攻击成功的结果就是让服务器无法正常对用户服务，即拒绝服务。</p>
<h2 id="0x20-ddos的原理">
<a class="header-anchor" href="#0x20-ddos%e7%9a%84%e5%8e%9f%e7%90%86"></a>
<strong>0x20 DDoS的原理</strong>
</h2><p>在0x10中已经略讲了DoS的原理，DDoS与DoS之差在于D（distributed，分布式）。DoS的攻击是一台机器对服务器的攻击，DDoS攻击可以看作DoS攻击的Plus版本，它可以将分布在不同地方的多台计算机联合起来形成攻击平台，对一个或多个目标发动攻击，从而产生成倍的拒绝服务攻击的威力。如图</p>
<p><a
  href="/images/ddos_introduce_files/image1.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ddos_introduce_files/image1.webp"
    data-sizes="auto"
    alt="IMG_256"
  />
</a></p>
<p>一个完整的DDoS攻击体系包括攻击者、主控端、代理机（傀儡机/肉鸡）和攻击目标（服务器）四部分组成</p>
<p>关于什么是傀儡机/肉鸡，请自行搜索。</p>
<h2 id="0x30攻击者的心理">
<a class="header-anchor" href="#0x30%e6%94%bb%e5%87%bb%e8%80%85%e7%9a%84%e5%bf%83%e7%90%86"></a>
<strong>0x30攻击者的心理</strong>
</h2><p>同行之间恶性竞争，如VPS厂商之间的竞争，内网穿透厂商的竞争（某些付费的厂商看不惯免费的内网穿透的工作室）以及某些视频网站。</p>
<p>请注意：<strong>DDoS在国际上所禁止</strong>，根据我国法律，处五年以下有期徒刑或者拘役，后果特别严重的，处五年以上有期徒刑。</p>
<h2 id="1x00-ddos的类型">
<a class="header-anchor" href="#1x00-ddos%e7%9a%84%e7%b1%bb%e5%9e%8b"></a>
<strong>1x00 DDoS的类型</strong>
</h2><h2 id="1x10-流量型攻击">
<a class="header-anchor" href="#1x10-%e6%b5%81%e9%87%8f%e5%9e%8b%e6%94%bb%e5%87%bb"></a>
<strong>1x10 流量型攻击</strong>
</h2><p>攻击原理：通过多个随机源“肉鸡”向攻击目标发送大量的数据包，占用攻击目标网络资源和处理单元，造成攻击目标的网络堵塞或宕机。这也是上文中主要谈到的攻击</p>
<p>简单来说，就是服务器太挤，被肉鸡堵住了，不让你进去</p>
<p>流量型DDoS攻击根据攻击方式的不同可以分为IP flood、SYN Flood、UDP Flood以及UDP反射放大攻击等。</p>
<h2 id="1x11">
<a class="header-anchor" href="#1x11"></a>
<strong>1x11 <strong><strong>ICMP Flood</strong></strong>攻击（大部分是copy的，只做总结处理）</strong>
</h2><h3 id="什么是icmp协议">
<a class="header-anchor" href="#%e4%bb%80%e4%b9%88%e6%98%aficmp%e5%8d%8f%e8%ae%ae"></a>
<strong>什么是ICMP协议？</strong>
</h3><p><br>
ICMP全称Internet Control Message Protocol（网际控制信息协议）。提起ICMP，一些人可能会感到陌生，实际上，ICMP与我们息息相关。在网络体系结构的各层次中，都需要控制，而不同的层次有不同的分工和控制内容，IP层的控制功能是最复杂的，主要负责差错控制、拥塞控制等，任何控制都是建立在信息的基础之上的，在基于IP数据 报的网络体系中，网关必须自己处理数据报的传输工作，而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误，TCP/IP设计了ICMP协 议，当某个网关发现传输错误时，立即向信源主机发送ICMP报文，报告出错信息，让信源主机采取相应处理措施，它是一种差错和控制报文协议，不仅用于传输 差错报文，还传输控制报文。</p>
<h3 id="icmp报文格式">
<a class="header-anchor" href="#icmp%e6%8a%a5%e6%96%87%e6%a0%bc%e5%bc%8f"></a>
<strong>ICMP报文格式</strong>
</h3><p><br>
ICMP报文包含在IP数据报中，属于IP的一个用户，IP头部就在ICMP报文的前面，所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文（见图表，ICMP报文的结构和几种常见的ICMP报文格式），IP头部的Protocol值为1就说明这是一个ICMP报文，ICMP头部中的类型 （Type）域用于说明ICMP报文的作用及格式，此外还有一个代码（Code）域用于详细说明某种ICMP报文的类型，所有数据都在ICMP头部后面。 RFC定义了13种ICMP报文格式，具体如下：</p>
<p>类型代码 类型描述<br>
0 响应应答（ECHO-REPLY）<br>
3 不可到达<br>
4 源抑制<br>
5 重定向<br>
8 响应请求（ECHO-REQUEST）<br>
11 超时<br>
12 参数失灵<br>
13 时间戳请求<br>
14 时间戳应答<br>
17 地址掩码请求<br>
18 地址掩码应答</p>
        
        <hr><p>本文2026-07-27首发于<a href='https://wstek.win/'>吾思 梦阁</a>，最后修改于2026-07-27</p>]]></description><category>网络</category></item><item><title>Ubuntu下载及安装</title><link>https://wstek.win/posts/ubuntu_install/</link><pubDate>Wed, 22 Jul 2026 19:30:00 +0800</pubDate><guid>https://wstek.win/posts/ubuntu_install/</guid><description>
<![CDATA[<h1>Ubuntu下载及安装</h1><p>作者：WuSi（）</p>
        
          <p>（复制了自己以前的文章）</p>
<h2 id="ubuntu下载及安装实体机">
<a class="header-anchor" href="#ubuntu%e4%b8%8b%e8%bd%bd%e5%8f%8a%e5%ae%89%e8%a3%85%e5%ae%9e%e4%bd%93%e6%9c%ba"></a>
<strong>Ubuntu下载及安装（实体机）</strong>
</h2><h3 id="造锅下载">
<a class="header-anchor" href="#%e9%80%a0%e9%94%85%e4%b8%8b%e8%bd%bd"></a>
**造锅：**<strong>下载</strong>
</h3><p>下载网址(一种即可):</p>
<p><a href="https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/">https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/</a>清华大学开源软件镜像站 （速度较快）</p>
<p><a href="https://mirrors.ustc.edu.cn/ubuntu-releases/">https://mirrors.ustc.edu.cn/ubuntu-releases/</a>中科大开源软件镜像站</p>
<p>以为清华站为例:</p>
<p>选择版本，这里我选择20.04(因为Ubuntu20.04较稳定好用)。单击20.04进入，然后选择ubuntu-20.04.6-live-server-amd64.iso下载</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image1.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image1.webp"
    data-sizes="auto"
    alt="IMG_256"
  />
</a></p>
<p>下载完成后找一个2G以上的可移动存储介质(如U盘，移动硬盘，最好找个速度快的)并插入计算机</p>
<p>下载Win32DiskImger:直接百度搜索就行</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image2.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image2.webp"
    data-sizes="auto"
    alt="IMG_257"
  />
</a></p>
<p>点击“映像文件”中的文件夹图标，再切换过滤文件类型(“打开”按钮上面，单击然后选择“.”）然后选择刚才下载的映像，如图</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image3.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image3.webp"
    data-sizes="auto"
    alt="IMG_258"
  />
</a></p>
<p>然后在“设备”中选择可移动介质的盘符，点击写入，等待写入完成</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image4.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image4.webp"
    data-sizes="auto"
    alt="IMG_259"
  />
</a></p>
<p><a
  href="/images/ubuntu_install_files/image5.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image5.webp"
    data-sizes="auto"
    alt="IMG_260"
  />
</a></p>
<p>直到这样就好了</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image6.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image6.webp"
    data-sizes="auto"
    alt="IMG_261"
  />
</a></p>
<p>把可移动介质弹出并拔下，本步骤完成！</p>
<h3 id="起锅安装">
<a class="header-anchor" href="#%e8%b5%b7%e9%94%85%e5%ae%89%e8%a3%85"></a>
<strong>起锅:安装</strong>
</h3><p><strong>警告：要安装Ubuntu的机器的磁盘将会被清除，请提前做好备份</strong></p>
<p>在要安装Ubuntu的机器中插入U盘，进入BIOS选择自己的U盘启动(都会吧)，热键查询：</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image7.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image7.webp"
    data-sizes="auto"
    alt="IMG_262"
  />
</a></p>
<p>安装过程中(不管哪一步)出现如图情况，请用上下方向键把光标移到[Restart the installer](重启安装程序)并回车</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image8.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image8.webp"
    data-sizes="auto"
    alt="IMG_263"
  />
</a></p>
<p>重启后会进入系统安装程序，如图界面会持续较长时间（电脑配置与加载时间成正比）,此外还有其他界面出现。</p>
<hr>
<p><a
  href="/images/ubuntu_install_files/image9.webp"
  data-fancybox="gallery">
  <img
    class="lazyload"
    data-src="/images/ubuntu_install_files/image9.webp"
    data-sizes="auto"
    alt="IMG_264"
  />
</a></p>
        
        <hr><p>本文2026-07-22首发于<a href='https://wstek.win/'>吾思 梦阁</a>，最后修改于2026-07-22</p>]]></description><category>Ubuntu</category></item></channel></rss>