<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>温墨竹</title>
  
  <subtitle>514</subtitle>
  <link href="http://blog.wenmozhu.de5.net/atom.xml" rel="self"/>
  
  <link href="http://blog.wenmozhu.de5.net/"/>
  <updated>2026-09-09T10:57:22.165Z</updated>
  <id>http://blog.wenmozhu.de5.net/</id>
  
  <author>
    <name>charles-webber</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>解决 Hexo Aplayer 无法播放 VIP 音乐的问题：自建 Local Meting API</title>
    <link href="http://blog.wenmozhu.de5.net/2026/01/14/meting-api/"/>
    <id>http://blog.wenmozhu.de5.net/2026/01/14/meting-api/</id>
    <published>2026-01-14T02:00:00.000Z</published>
    <updated>2026-09-09T10:57:22.165Z</updated>
    
    <content type="html"><![CDATA[<p>在使用 Hexo 搭建博客时，我们常常使用 Aplayer + MetingJS 来插入背景音乐。然而，由于版权保护和反爬策略，公共的 Meting API 往往无法解析 VIP 歌曲，导致博客上的歌单经常变灰或无法播放。</p><p>今天我终于解决了这个问题，通过<strong>自建本地 Meting API</strong> 并配合 <strong>NeteaseCloudMusicApi</strong> 和 <strong>内网穿透</strong>，完美实现了 VIP 歌曲的播放。</p><p>这里复盘一下这次 Debug 的过程，并整理成教程指导后人。</p><p><strong>可以看见这里的播放时长只有45s，这其实就是网易云会员音乐的试播时长</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20260114103422236.png" alt="image-20260114103422236"></p><h2 id="问题复盘"><a href="#问题复盘" class="headerlink" title="问题复盘"></a>问题复盘</h2><p>Aplayer 配合 MetingJS 的工作原理是：前端网页向 Meting API 发送请求（如 <code>GET /api?server=netease&amp;type=url&amp;id=xxx</code>），API 返回歌曲的真实 MP3 链接。</p><p>公共 API 失效的原因通常有两点：</p><ol><li><strong>IP 限制</strong>：API 服务器的 IP 被网易云拉黑。</li><li><strong>Cookie 缺失</strong>：没有 VIP 账号的 Cookie，无法调用获取 VIP 歌曲链接的接口。</li></ol><p>解决方案非常直观：<strong>自己跑一个 API</strong>。并在 API 请求中带上自己的 VIP Cookie，然后让 Hexo 博客去请求这个私有 API。</p><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>我的方案架构如下：</p><ol><li><strong>本地后端</strong>：在本地运行一个 Node.js 服务，使用 <code>NeteaseCloudMusicApi</code> 库转发请求。</li><li><strong>内网穿透</strong>：通过 FRP 或 Cloudflare Tunnel 将本地服务暴露到公网（如 <code>api.wenmozhu.de5.net</code>）。</li><li><strong>前端配置</strong>：修改 Hexo 的 <code>_config.yml</code>，将 <code>meting_api</code> 指向我们自己的域名。</li></ol><h3 id="第一步：编写后端代码"><a href="#第一步：编写后端代码" class="headerlink" title="第一步：编写后端代码"></a>第一步：编写后端代码</h3><p>在博客根目录下创建一个 <code>local-meting</code> 文件夹，这就是我们的 API 服务端。</p><p><strong>1. 初始化项目并安装依赖</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> local-meting</span><br><span class="line">npm init -y</span><br><span class="line">npm install express cors NeteaseCloudMusicApi dotenv</span><br></pre></td></tr></table></figure><p><strong>2. 编写 <code>app.js</code></strong></p><p>这是核心代码，负责处理请求并注入 VIP Cookie。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* local-meting/app.js */</span></span><br><span class="line"><span class="keyword">const</span> express = <span class="built_in">require</span>(<span class="string">&#x27;express&#x27;</span>);</span><br><span class="line"><span class="built_in">require</span>(<span class="string">&#x27;dotenv&#x27;</span>).<span class="title function_">config</span>(); <span class="comment">// 引入 dotenv</span></span><br><span class="line"><span class="keyword">const</span> &#123; song_url, lyric, playlist_track_all, song_detail, playlist_detail &#125; = <span class="built_in">require</span>(<span class="string">&#x27;NeteaseCloudMusicApi&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> cors = <span class="built_in">require</span>(<span class="string">&#x27;cors&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">express</span>();</span><br><span class="line"><span class="keyword">const</span> port = <span class="number">3000</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// ====== 配置区域 ======</span></span><br><span class="line"><span class="comment">// 从环境变量读取网易云 Cookie</span></span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">MY_COOKIE</span> = process.<span class="property">env</span>.<span class="property">METING_COOKIE</span> || <span class="string">&#x27;&#x27;</span>; </span><br><span class="line"><span class="comment">// ====================</span></span><br><span class="line"></span><br><span class="line">app.<span class="title function_">use</span>(<span class="title function_">cors</span>());</span><br><span class="line"></span><br><span class="line"><span class="comment">// 辅助函数：格式化返回结果，适配 MetingJS 格式</span></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">createMetingResponse</span> = (<span class="params">req, list</span>) =&gt; &#123;</span><br><span class="line">    <span class="keyword">const</span> &#123; headers &#125; = req;</span><br><span class="line">    <span class="comment">// 自动获取当前访问的域名（兼容穿透域名）</span></span><br><span class="line">    <span class="keyword">const</span> host = headers.<span class="property">host</span>; </span><br><span class="line">    <span class="keyword">const</span> baseUrl = <span class="string">`https://<span class="subst">$&#123;host&#125;</span>/`</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> list.<span class="title function_">map</span>(<span class="function"><span class="params">item</span> =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> &#123;</span><br><span class="line">            <span class="attr">title</span>: item.<span class="property">name</span>,</span><br><span class="line">            <span class="attr">author</span>: item.<span class="property">ar</span> ? item.<span class="property">ar</span>.<span class="title function_">map</span>(<span class="function"><span class="params">a</span> =&gt;</span> a.<span class="property">name</span>).<span class="title function_">join</span>(<span class="string">&#x27;/&#x27;</span>) : <span class="string">&#x27;Unknown&#x27;</span>,</span><br><span class="line">            <span class="comment">// 构造递归链接，让前端再次请求本 API 获取具体资源</span></span><br><span class="line">            <span class="attr">url</span>: <span class="string">`<span class="subst">$&#123;baseUrl&#125;</span>?server=netease&amp;type=url&amp;id=<span class="subst">$&#123;item.id&#125;</span>`</span>,</span><br><span class="line">            <span class="attr">pic</span>: <span class="string">`<span class="subst">$&#123;baseUrl&#125;</span>?server=netease&amp;type=pic&amp;id=<span class="subst">$&#123;item.id&#125;</span>`</span>,</span><br><span class="line">            <span class="attr">lrc</span>: <span class="string">`<span class="subst">$&#123;baseUrl&#125;</span>?server=netease&amp;type=lrc&amp;id=<span class="subst">$&#123;item.id&#125;</span>`</span></span><br><span class="line">        &#125;;</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 路由处理</span></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">handleRequest</span> = <span class="keyword">async</span> (<span class="params">req, res</span>) =&gt; &#123;</span><br><span class="line">    <span class="keyword">const</span> &#123; server, type, id &#125; = req.<span class="property">query</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (server !== <span class="string">&#x27;netease&#x27;</span>) <span class="keyword">return</span> res.<span class="title function_">json</span>(&#123; <span class="attr">error</span>: <span class="string">&#x27;Only netease is supported locally&#x27;</span> &#125;);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">        <span class="keyword">const</span> commonConfig = &#123; <span class="attr">cookie</span>: <span class="variable constant_">MY_COOKIE</span>, <span class="attr">realIP</span>: <span class="string">&#x27;116.25.146.177&#x27;</span> &#125;; <span class="comment">// 伪造国内 IP</span></span><br><span class="line"></span><br><span class="line">        <span class="comment">// 1. 获取歌单</span></span><br><span class="line">        <span class="keyword">if</span> (type === <span class="string">&#x27;playlist&#x27;</span>) &#123;</span><br><span class="line">            <span class="keyword">const</span> data = <span class="keyword">await</span> <span class="title function_">playlist_detail</span>(&#123; id, ...commonConfig &#125;);</span><br><span class="line">            <span class="comment">// 处理歌单可能只返回 ID 的情况，需要进一步获取详情...</span></span><br><span class="line">            <span class="comment">// (略: 完整逻辑见源码，这里主要是获取 tracks 并调用 createMetingResponse)</span></span><br><span class="line">             <span class="keyword">const</span> list = data.<span class="property">body</span>.<span class="property">playlist</span>.<span class="property">tracks</span> || [];</span><br><span class="line">             <span class="keyword">return</span> res.<span class="title function_">json</span>(<span class="title function_">createMetingResponse</span>(req, list));</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 2. 获取歌曲链接 (VIP 关键点)</span></span><br><span class="line">        <span class="keyword">if</span> (type === <span class="string">&#x27;url&#x27;</span>) &#123;</span><br><span class="line">            <span class="keyword">const</span> data = <span class="keyword">await</span> <span class="title function_">song_url</span>(&#123; id, ...commonConfig &#125;);</span><br><span class="line">            <span class="keyword">if</span> (data.<span class="property">body</span>.<span class="property">data</span> &amp;&amp; data.<span class="property">body</span>.<span class="property">data</span>[<span class="number">0</span>].<span class="property">url</span>) &#123;</span><br><span class="line">                <span class="keyword">return</span> res.<span class="title function_">redirect</span>(data.<span class="property">body</span>.<span class="property">data</span>[<span class="number">0</span>].<span class="property">url</span>); <span class="comment">// 重定向到真实 MP3</span></span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="keyword">return</span> res.<span class="title function_">status</span>(<span class="number">404</span>).<span class="title function_">send</span>(<span class="string">&#x27;Not found&#x27;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// ... 处理 pic 和 lrc</span></span><br><span class="line">    &#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">error</span>(err);</span><br><span class="line">        res.<span class="title function_">status</span>(<span class="number">500</span>).<span class="title function_">json</span>(&#123; <span class="attr">error</span>: err.<span class="property">message</span> &#125;);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&#x27;/&#x27;</span>, handleRequest);</span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&#x27;/api&#x27;</span>, handleRequest);</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">listen</span>(port, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">`Local Meting API running at http://localhost:<span class="subst">$&#123;port&#125;</span>`</span>);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><h3 id="第二步：配置环境变量与安全措施"><a href="#第二步：配置环境变量与安全措施" class="headerlink" title="第二步：配置环境变量与安全措施"></a>第二步：配置环境变量与安全措施</h3><p>为了保护你的 Cookie 不被泄露（尤其是如果你打算将代码提交到 GitHub），我们需要将敏感信息放入 <code>.env</code> 文件。</p><p><strong>1. 创建 <code>.env</code> 文件</strong></p><p>在 <code>local-meting</code> 目录下创建 <code>.env</code>：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">METING_COOKIE=&quot;你的完整网易云 Cookie&quot;</span><br></pre></td></tr></table></figure><p><strong>2. 配置 <code>.gitignore</code></strong></p><p>在博客根目录的 <code>.gitignore</code> 中加入以下内容，防止敏感文件被上传：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"># Meting API Security</span><br><span class="line">local-meting/node_modules/</span><br><span class="line">local-meting/.env</span><br></pre></td></tr></table></figure><h3 id="第三步：配置内网穿透"><a href="#第三步：配置内网穿透" class="headerlink" title="第三步：配置内网穿透"></a>第三步：配置内网穿透</h3><p>这里我使用的是 Cloudflare Tunnel（或者 FRP），将本地的 <code>localhost:3000</code> 映射到了公网域名 <code>https://api.wenmozhu.de5.net</code>。</p><p>这一步保证了无论访客在何处访问博客，都能通过这个公网域名请求到我本地运行的 API。</p><h3 id="第三步：修改-Hexo-配置"><a href="#第三步：修改-Hexo-配置" class="headerlink" title="第三步：修改 Hexo 配置"></a>第三步：修改 Hexo 配置</h3><p>打开站点配置文件 <code>_config.yml</code>，找到 <code>aplayer</code> 配置项，启用自定义 API：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># _config.yml</span></span><br><span class="line"><span class="attr">aplayer:</span></span><br><span class="line">  <span class="attr">meting:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># 填入你穿透后的 API 地址</span></span><br><span class="line">  <span class="attr">meting_api:</span> <span class="string">&#x27;https://api.wenmozhu.de5.net/api?server=:server&amp;type=:type&amp;id=:id&amp;r=:r&#x27;</span></span><br><span class="line">  <span class="attr">asset_inject:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><h3 id="第四步：静默启动脚本"><a href="#第四步：静默启动脚本" class="headerlink" title="第四步：静默启动脚本"></a>第四步：静默启动脚本</h3><p>为了方便，我写了一个 VBS 脚本 <code>start_meting_hidden.vbs</code>，可以后台静默启动 API 服务，看不到黑框框：</p><figure class="highlight vbscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">Set</span> WshShell = <span class="built_in">CreateObject</span>(<span class="string">&quot;WScript.Shell&quot;</span>) </span><br><span class="line">WshShell.Run <span class="string">&quot;cmd /c cd local-meting &amp;&amp; node app.js&quot;</span>, <span class="number">0</span></span><br><span class="line"><span class="keyword">Set</span> WshShell = <span class="literal">Nothing</span> </span><br></pre></td></tr></table></figure><p>将该脚本放入启动文件夹或每次开机运行即可。</p><h2 id="效果展示"><a href="#效果展示" class="headerlink" title="效果展示"></a>效果展示</h2><p>配置完成后，重新部署 Hexo (<code>hexo clean &amp;&amp; hexo g &amp;&amp; hexo d</code>)。</p><p>现在打开博客，原本灰色的 VIP 歌曲已经可以流畅播放了！因为请求实际上是经过你的本地服务，带着你的 VIP Cookie 去向网易云要数据的。</p><hr><blockquote><p><strong>注意</strong>：</p><p>1.请妥善保管你的cookie！不要上传到github等网站！</p><p>2.这样处理主要是因为我的vps在海外，网易云把我的地址屏蔽了，如果你有一个在国内的vps，那么完全可以在上面跑。</p><p>3.只要你有cookie，替换掉app.js的cookie即可使用</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在使用 Hexo 搭建博客时，我们常常使用 Aplayer + MetingJS 来插入背景音乐。然而，由于版权保护和反爬策略，公共的 Meting API 往往无法解析 VIP 歌曲，导致博客上的歌单经常变灰或无法播放。&lt;/p&gt;
&lt;p&gt;今天我终于解决了这个问题，通过&lt;st</summary>
      
    
    
    
    <category term="技术分享" scheme="http://blog.wenmozhu.de5.net/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/"/>
    
    <category term="Hexo" scheme="http://blog.wenmozhu.de5.net/categories/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://blog.wenmozhu.de5.net/tags/Hexo/"/>
    
    <category term="Aplayer" scheme="http://blog.wenmozhu.de5.net/tags/Aplayer/"/>
    
    <category term="Meting" scheme="http://blog.wenmozhu.de5.net/tags/Meting/"/>
    
    <category term="Node.js" scheme="http://blog.wenmozhu.de5.net/tags/Node-js/"/>
    
    <category term="教程" scheme="http://blog.wenmozhu.de5.net/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>实习</title>
    <link href="http://blog.wenmozhu.de5.net/2026/01/11/%E5%AE%9E%E4%B9%A0/"/>
    <id>http://blog.wenmozhu.de5.net/2026/01/11/%E5%AE%9E%E4%B9%A0/</id>
    <published>2026-01-11T08:38:37.000Z</published>
    <updated>2026-09-09T10:57:23.520Z</updated>
    
    <content type="html"><![CDATA[<p>规则设计，选择关键词，深度学习训练ai</p><h2 id="day1"><a href="#day1" class="headerlink" title="day1"></a>day1</h2><p><strong>实验主题</strong>：理论学习与 Python 基础语法实践</p><h3 id="上午时段"><a href="#上午时段" class="headerlink" title="上午时段"></a>上午时段</h3><ol><li><strong>额外事项处理</strong>：接触消防安全相关事宜，占用部分上午时间，后续需协调好理论学习与这类事务的时间分配。</li><li><strong>理论学习</strong>：学习<strong>模型黑箱机制</strong>相关内容，了解到模型黑箱是指算法模型在运行过程中，其内部的决策逻辑、特征权重等细节难以被人类解释和理解的特性，该特性在部分复杂机器学习模型中表现尤为明显，后续可结合具体案例深入探究其可解释性优化方案。</li></ol><h3 id="下午时段"><a href="#下午时段" class="headerlink" title="下午时段"></a>下午时段</h3><ol><li><p><strong>环境准备</strong>：完成 Python 实验环境的安装与配置，确保编程环境可正常运行，为后续语法学习和题目训练奠定基础。</p></li><li><p>Python 基础语法学习</p><ul><li>系统学习 Python 基础语法规则，包括变量定义、数据类型等核心内容。</li><li>重点掌握字符串拼接操作，熟悉<code>+</code>运算符拼接、<code>join()</code>方法拼接等多种实现方式及各自适用场景。</li><li>深入学习列表相关操作，涵盖列表元素的修改（通过索引直接修改、切片修改）、查找（<code>index()</code>方法）、统计（<code>count()</code>方法）等核心功能。</li><li>学习函数相关知识，包括函数的定义（<code>def</code>关键字）、封装思想（将功能代码整合为函数，提高复用性），以及外部库的调用方法（<code>import</code>语句导入）。</li></ul></li><li><p><strong>实操训练</strong>：完成两道 Python 基础训练题目，将所学语法知识应用到实际编程中，检验学习效果，提升代码编写和调试能力。</p></li><li><p><strong>特殊事项</strong>：参与神秘开班仪式，具体内容待后续进一步明确。</p></li><li><p><strong>额外事项处理</strong>：涉及百度云相关事宜，增加了当日任务量，后续需梳理相关流程，提高事务处理效率。</p></li></ol><h3 id="问题与反思"><a href="#问题与反思" class="headerlink" title="问题与反思"></a>问题与反思</h3><ol><li>当日需处理消防安全、百度云等额外事务，导致学习和实验时间被分割，后续需制定更合理的时间规划表。</li><li>模型黑箱机制的理论内容较为抽象，需结合具体的机器学习模型案例进行深入学习，才能更好地理解其原理和应用局限。</li><li>Python 语法学习中，对于列表的复杂操作和外部库的灵活调用仍需加强练习，通过更多实操题目巩固知识点。</li></ol><h3 id="后续计划"><a href="#后续计划" class="headerlink" title="后续计划"></a>后续计划</h3><ol><li>协调好理论学习、编程实操与额外事务的时间分配，确保学习进度不受影响。</li><li>查找模型黑箱机制的相关案例和文献，加深对理论知识的理解。</li><li>增加 Python 编程练习量，重点练习列表高级操作和第三方库的调用。</li><li>梳理百度云相关事宜的处理流程，提高事务处理效率。</li></ol><h2 id="day2"><a href="#day2" class="headerlink" title="day2"></a>day2</h2><h3 id="（一）上午：算法模型代码练习"><a href="#（一）上午：算法模型代码练习" class="headerlink" title="（一）上午：算法模型代码练习"></a>（一）上午：算法模型代码练习</h3><p>聚焦机器学习与深度学习核心算法，完成多类模型的代码实现与训练验证，具体包括：</p><ol><li><strong>线性回归模型</strong>：基于 PyTorch 构建简单线性回归网络，以<code>x_data=[[1.0],[2.0],[3.0]]</code>、<code>y_data=[[2.2],[3.3],[4.4]]</code>为训练数据，定义<code>LinearModel</code>类封装线性层，使用均方误差损失（MSELoss）和随机梯度下降（SGD）优化器完成 100 轮训练，验证模型对输入<code>4.0</code>的预测能力，输出权重<code>w</code>和偏置<code>b</code>的迭代结果。</li><li><strong>K-Means 聚类</strong>：利用<code>sklearn</code>生成含 3 个聚类中心的模拟数据（<code>centers=[[1, 1], [-1, -1], [1, -1]]</code>），实现 K-Means 聚类算法（初始化方式为<code>k-means++</code>），对比原始数据分布与聚类结果，可视化聚类中心与样本分类，并统计训练耗时。</li><li><strong>RNN 序列建模</strong>：基于 PyTorch 实现简单 RNN 模型，针对自定义字典（<code>dict=[&#39;e&#39;,&#39;h&#39;,&#39;l&#39;,&#39;o&#39;]</code>）的序列数据（<code>x_data=[1,0,2,2,3]</code>、<code>y_data=[3,1,2,3,2]</code>），通过 Embedding 层将离散索引转为向量，结合 RNN 层与全连接层完成序列分类任务，使用交叉熵损失（CrossEntropyLoss）和 Adam 优化器训练 15 轮，输出每轮损失值与模型预测的字符序列。</li></ol><h3 id="（二）下午：进阶模型练习-实验记录撰写"><a href="#（二）下午：进阶模型练习-实验记录撰写" class="headerlink" title="（二）下午：进阶模型练习 + 实验记录撰写"></a>（二）下午：进阶模型练习 + 实验记录撰写</h3><ol><li><strong>BP 神经网络回归</strong>：基于 PyTorch 构建多层全连接神经网络（3 层隐藏层 + Sigmoid 激活），读取<code>number_list.xlsx</code>数据并标准化处理，以均方误差为损失函数、Adam 为优化器，按批次（<code>batch_size=2</code>）训练 300 轮，记录每 10 轮的平均损失值，绘制损失曲线，并将训练完成的模型保存为<code>BP.pt</code>。</li><li><strong>实验记录整理</strong>：梳理上午 + 下午所有代码练习的核心逻辑、参数设置、训练过程与结果，规范记录各模型的实现细节、关键参数（如学习率、迭代次数、隐藏层维度）及可视化结果，形成完整实验文档。</li></ol><h3 id="三、实验总结"><a href="#三、实验总结" class="headerlink" title="三、实验总结"></a>三、实验总结</h3><ol><li>技术层面：熟练掌握 PyTorch 构建神经网络的核心流程（模型定义、损失函数 &#x2F; 优化器选择、训练循环、反向传播），理解线性回归、聚类、RNN、BP 神经网络的核心原理与代码实现差异；</li><li>实践层面：掌握数据预处理（标准化、张量转换）、模型保存与加载、结果可视化（Matplotlib 绘图）等工程化技巧；</li><li>待优化点：可进一步增加模型评估指标（如聚类准确率、回归 R² 值），对比不同优化器 &#x2F; 超参数对模型性能的影响。</li></ol><h2 id="day3"><a href="#day3" class="headerlink" title="day3"></a>day3</h2><h3 id="上午"><a href="#上午" class="headerlink" title="上午"></a>上午</h3><p>人工智能体：角色，目标，规则，限制</p><p>关键是写提示词：1.上下文前置规则2.反思机制3.trae内置优化</p><p>栗子：<strong>1.</strong> <strong>股票分析智能体</strong></p><p><strong>目标</strong>：构建一个能智能回答股票证券知识并快速生成网站的智能体。</p><p><strong>步骤</strong>：</p><ol><li><p>创建智能体，命名为”股票智能分析达人王”</p></li><li><p>添加所需MCP工具：sequential-thinking、Puppeteer、Notion API</p></li><li><p>编写提示词，定义智能体角色和工作流程</p></li><li><p>测试智能体功能，输入指令如”帮我分析当前股市行情并生成分析网页”</p></li></ol><p><strong>效果</strong>：智能体自动搜索股票数据，生成包含K线图、趋势分析和预测的网页。</p><h3 id="下午"><a href="#下午" class="headerlink" title="下午"></a>下午</h3><p>机器学习和数据处理</p><p>爬虫收集数据，数据不干净，有缺失值，中位数补充</p><p>机器学习十大经典算法：<strong>这里最好找一下</strong></p><p>数据集分成三部分：1.训练部分2.没有训练的数据放进训练好的模型进行验证—交叉验证（训练集80，测试集20）3.验证集</p><p>继续ppt介绍机器学习：1.监督学习（给标签，标注）2.无监督（聚类，分类）3.半监督，强化练习（输入立刻给相应的调整）</p><p>时间管理app</p><h2 id="day4"><a href="#day4" class="headerlink" title="day4"></a>day4</h2><p>飞机，飞，有代码不管他</p><p>你这段代码的核心功能是<strong>使用 PyTorch 实现一个简单的 RNN（循环神经网络）模型，来学习并预测三维空间中的轨迹数据</strong>，本质上是一个时间序列预测任务。生成一组带轻微噪声的三维轨迹数据（x 轴线性增长，y 轴固定值 + 噪声，z 轴固定值），然后用 RNN 模型学习这组轨迹的规律，最终基于已知轨迹片段预测后续的轨迹点，并通过可视化对比原始轨迹和预测轨迹。</p><h4 id="深度学习基础（PyTorch）"><a href="#深度学习基础（PyTorch）" class="headerlink" title="深度学习基础（PyTorch）"></a>深度学习基础（PyTorch）</h4><ul><li><p><strong>自定义模型</strong>：继承<code>nn.Module</code>类，实现<code>__init__</code>（定义层）和<code>forward</code>（定义前向传播）；</p></li><li><p><strong>参数初始化</strong>：用<code>nn.init.normal_</code>初始化 RNN 参数，避免初始值异常导致训练不稳定；</p></li><li><p>损失函数与优化器</p><p>：</p><ul><li><code>nn.MSELoss()</code>：回归任务核心损失（分类任务常用<code>nn.CrossEntropyLoss</code>）；</li><li><code>optim.Adam()</code>：工业界常用的优化器（比 SGD 收敛更快，自带自适应学习率）；</li></ul></li><li><p>梯度管理</p><p>：</p><ul><li><code>optimizer.zero_grad()</code>：清空梯度，避免梯度累加；</li><li><code>detach()</code>：分离张量，切断梯度回传（此处用于隐藏状态，避免跨迭代梯度干扰）。</li></ul></li></ul><h4 id="循环神经网络（RNN）核心"><a href="#循环神经网络（RNN）核心" class="headerlink" title="循环神经网络（RNN）核心"></a>循环神经网络（RNN）核心</h4><ul><li><strong>序列数据处理</strong>：RNN 的核心优势是处理时序 &#x2F; 序列数据（如轨迹、文本、时间序列），通过隐藏状态保存历史信息；</li><li><strong>输入输出形状</strong>：<code>batch_first=True</code>时，输入形状为<code>[batch_size, seq_len, input_size]</code>（此处 batch_size&#x3D;1，seq_len&#x3D;15，input_size&#x3D;3）；</li><li><strong>隐藏状态</strong>：RNN 的隐藏层输出（<code>out</code>）是每个时间步的结果，<code>hidden_prev</code>是最后一个时间步的隐藏状态（可用于后续预测的初始状态）。</li></ul><h4 id="数据处理与可视化"><a href="#数据处理与可视化" class="headerlink" title="数据处理与可视化"></a>数据处理与可视化</h4><ul><li><strong>numpy 与 torch 张量转换</strong>：<code>torch.Tensor()</code>将 numpy 数组转为张量，<code>detach().numpy()</code>将张量转回 numpy（预测后需分离梯度才能转）；</li><li><strong>形状调整</strong>：<code>view()</code>（等价于<code>reshape</code>）调整张量形状，适配模型输入要求；</li><li><strong>3D 可视化</strong>：用<code>mpl_toolkits.mplot3d.Axes3D</code>绘制 3D 散点图，展示三维轨迹；</li><li><strong>中文字体配置</strong>：解决 matplotlib 中文乱码和负号显示问题。</li></ul><h4 id="时间序列预测任务"><a href="#时间序列预测任务" class="headerlink" title="时间序列预测任务"></a>时间序列预测任务</h4><ul><li><strong>序列回归</strong>：预测连续值（三维坐标），区别于分类任务（预测离散标签）；</li><li><strong>训练数据构造</strong>：用 “历史序列” 预测 “未来序列”（此处是输入后移 5 步的序列作为目标）；</li><li><strong>随机采样训练</strong>：训练时随机选取起始点，避免模型过拟合固定序列。</li></ul><h2 id="day5"><a href="#day5" class="headerlink" title="day5"></a>day5</h2><p>在报告厅疯狂玩手机，说是参观什么实验室</p><h2 id="day6"><a href="#day6" class="headerlink" title="day6"></a>day6</h2><p>写代码</p><h2 id="day7"><a href="#day7" class="headerlink" title="day7"></a>day7</h2><p>上午：深度神经网络</p><p>sudo bash reinstall.sh ubuntu 22.04 –password 357159</p><p>bash reinstall.sh    ubuntu  22.04 </p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;规则设计，选择关键词，深度学习训练ai&lt;/p&gt;
&lt;h2 id=&quot;day1&quot;&gt;&lt;a href=&quot;#day1&quot; class=&quot;headerlink&quot; title=&quot;day1&quot;&gt;&lt;/a&gt;day1&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;实验主题&lt;/strong&gt;：理论学习与 Python </summary>
      
    
    
    
    <category term="实习" scheme="http://blog.wenmozhu.de5.net/categories/%E5%AE%9E%E4%B9%A0/"/>
    
    
    <category term="实习" scheme="http://blog.wenmozhu.de5.net/tags/%E5%AE%9E%E4%B9%A0/"/>
    
    <category term="笔记" scheme="http://blog.wenmozhu.de5.net/tags/%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>AI-HCIP</title>
    <link href="http://blog.wenmozhu.de5.net/2024/09/02/AI-HCIP/"/>
    <id>http://blog.wenmozhu.de5.net/2024/09/02/AI-HCIP/</id>
    <published>2024-09-02T01:09:19.000Z</published>
    <updated>2026-09-09T10:57:22.159Z</updated>
    
    <content type="html"><![CDATA[<h1 id="大三培训"><a href="#大三培训" class="headerlink" title="大三培训"></a>大三培训</h1><h2 id="第一天"><a href="#第一天" class="headerlink" title="第一天"></a>第一天</h2><p>没有车票没回来</p><h2 id="第二天"><a href="#第二天" class="headerlink" title="第二天"></a>第二天</h2><p>做实验-玩弄虚拟机</p><h3 id="虚拟机安装和使用"><a href="#虚拟机安装和使用" class="headerlink" title="虚拟机安装和使用"></a>虚拟机安装和使用</h3><p>1.先要有VMWareNet16</p><p>2.资源下载</p><p>3.解压</p><p>4.打开方式用vMware打开22biqdata01.vmx等三台机器<br>5.开启虚拟机并点击“已移动此虚拟机“<br>6.登录 root 123456<br>7.在开启的桌面点击右键打开console<br>8.修改对应ip 编辑-&gt;虚拟网络编辑器-&gt;NAT设置-&gt;修改成对应网段即可<br>9.cd &#x2F;etc&#x2F;sysconfig&#x2F;network-scripts<br>vi ifcfg-ens33</p><p>IPADDR&#x3D; 192. 168. 198.112</p><p>GATEWAY&#x3D;192.168.198.2</p><p>10.重启网卡service network restart </p><p>11.改主机的映射</p><p>vi etc&#x2F;hosts </p><p>192.168.198.111 bigdata01</p><p>12.启动yarn前置（data111启动）：start-dfs.sh 启动hdfs start-yarn.sh启动yarn</p><p>13.mysql在112机器上systemtcl start mysqld</p><p>14.启动hive在113 hive –service metastore &amp; hive –service hiveserver2 &amp; beeline —&gt; 等待20秒 !connect jdbc:hive2:&#x2F;&#x2F;bigdata03:10000</p><p>15.zkServer.sh start 启动    zkServer.sh status状态  </p><ol start="16"><li><p>启动kafka(信息垃圾站，还能互相沟通)</p><p> cd &#x2F;usr&#x2F;software&#x2F;kafka&#x2F;kafka_bin&#x2F;config</p></li><li><p>执行kafka-server-start.sh -daemon .&#x2F;server.properties</p></li><li><p>执行producer和consumer之间的通信验证</p><pre><code> kafka-console-producer.sh --broker-list bigdata01:9092 --topic test01</code></pre></li></ol><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kafka-console-consumer.<span class="keyword">sh </span>--<span class="keyword">bootstrap-server </span><span class="keyword">bigdata01:9092 </span>--topic test01</span><br></pre></td></tr></table></figure><ol start="19"><li>停止kafka通信：kafka-server-stop.sh</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240831092506370.png" alt="image-20240831092506370"></p><h2 id="一些行话"><a href="#一些行话" class="headerlink" title="一些行话"></a>一些行话</h2><h3 id="机器学习"><a href="#机器学习" class="headerlink" title="机器学习"></a>机器学习</h3><ul><li>有监督学习：有一些初始的历史数据用于拟合模型</li><li>无监督学习：对要处理的数据进行一个大致的分类</li><li>半监督学习&#x3D;有监督加无监督</li><li>强化学习：为了未来，付出现在（画饼流）</li></ul><h3 id="分类算法"><a href="#分类算法" class="headerlink" title="分类算法"></a>分类算法</h3><p>构造分类函数和分类器的方法把数据项映射到大致类别中</p><h3 id="回归"><a href="#回归" class="headerlink" title="回归"></a>回归</h3><p>等价于函数拟合：使用一条函数曲线，使其很好的拟合已知函数</p><h3 id="偏差（数据训练）-x2F-方差（数据测试）"><a href="#偏差（数据训练）-x2F-方差（数据测试）" class="headerlink" title="偏差（数据训练）&#x2F;方差（数据测试）"></a>偏差（数据训练）&#x2F;方差（数据测试）</h3><p>值越小拟合的越好</p><h3 id="过拟合-x2F-欠拟合"><a href="#过拟合-x2F-欠拟合" class="headerlink" title="过拟合&#x2F;欠拟合"></a>过拟合&#x2F;欠拟合</h3><p>过拟合：吸收了噪声（高方低偏）</p><p>欠拟合：没有突出到特征（高偏低方）</p><h3 id="logistic分布"><a href="#logistic分布" class="headerlink" title="logistic分布"></a>logistic分布</h3><h3 id="sigmoid函数"><a href="#sigmoid函数" class="headerlink" title="sigmoid函数"></a>sigmoid函数</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8f06752c-8eb8-44d8-a92e-bb056606dd5f.png" alt="image-20240831145555487"></p><h3 id="损失函数"><a href="#损失函数" class="headerlink" title="损失函数"></a>损失函数</h3><p>优化方法-极大似然法</p><h3 id="逻辑回归的优缺点"><a href="#逻辑回归的优缺点" class="headerlink" title="逻辑回归的优缺点"></a>逻辑回归的优缺点</h3><ul><li>优点：实现简单，广泛的应用于工业上，用l2正则化解决多重共线性</li><li>缺点：拟合不是很好</li></ul><h2 id="一些算法"><a href="#一些算法" class="headerlink" title="一些算法"></a>一些算法</h2><h3 id="分类算法-knn最近邻"><a href="#分类算法-knn最近邻" class="headerlink" title="分类算法-knn最近邻"></a>分类算法-knn最近邻</h3><p>k个最近的邻居的意思，即每个样本都可以用它最接近的k个邻居来代表</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/77a7faf5-6ad9-4e1b-ab67-0ceb76877468.png" alt="image-20240831151818583"></p><p>距离度量和分类规则</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8103b039-d03c-4a42-b35e-a972d0369b01.png" alt="image-20240831151935672"></p><h3 id="朴素贝叶斯分类算法"><a href="#朴素贝叶斯分类算法" class="headerlink" title="朴素贝叶斯分类算法"></a>朴素贝叶斯分类算法</h3><p>认为数据之间独立并且同分布</p><h3 id="决策树"><a href="#决策树" class="headerlink" title="决策树"></a>决策树</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4607d294-ba5a-4e21-889d-0c0457446298.png" alt="image-20240831152639222"></p><ul><li>特征选择：从数据中选择一个特征作为分类的标准</li><li>决策树生成</li><li>剪枝：防止过拟合，缩小树的结构和规模</li></ul><h3 id="信息熵"><a href="#信息熵" class="headerlink" title="信息熵"></a>信息熵</h3><p>概率越平均熵越大，信息越少，反之熵小信息量大</p><h3 id="ID3"><a href="#ID3" class="headerlink" title="ID3"></a>ID3</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a104b533-865a-4bf4-8d62-40a1ea72f3ea.png" alt="image-20240831153900556"></p><p>大多数情况下不会提供多少有价值的信息</p><h3 id="C4-5"><a href="#C4-5" class="headerlink" title="C4.5"></a>C4.5</h3><p>改进了id3的依靠信息增益来选择属性，改用信息增益率</p><h3 id="集成学习"><a href="#集成学习" class="headerlink" title="集成学习"></a>集成学习</h3><p>多个弱学习器合成为强学习器</p><ul><li><p>bagging：并行—<strong>随机森林</strong>（很多决策树）</p></li><li><p>boosting：串行—每一个决策树都会对上一个决策树进行修正</p></li><li><p>stacking：栈算法</p></li><li><p>voting：投票算法</p></li></ul><h2 id="关联算法"><a href="#关联算法" class="headerlink" title="关联算法"></a>关联算法</h2><h3 id="apriori算法（找出现次数大的，删次数小的）"><a href="#apriori算法（找出现次数大的，删次数小的）" class="headerlink" title="apriori算法（找出现次数大的，删次数小的）"></a>apriori算法（找出现次数大的，删次数小的）</h3><p>“A时间发生，B也有可能发生”</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c7d845ed-1b18-4b2e-9aa2-82e5f9d1a58b.png" alt="image-20240831163442409"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/275d36f9-879e-4b84-aa85-bf21617759f6.png" alt="image-20240831164102981"></p><h3 id="FP-growth算法（链表）"><a href="#FP-growth算法（链表）" class="headerlink" title="FP-growth算法（链表）"></a>FP-growth算法（链表）</h3><p>是apriori的升级版，采用了更加先进的数据结构，减少了i&#x2F;o次数，减少扫描次数</p><ul><li>比apriori快一点</li><li>实现困难</li><li>只适用于离散型数据</li></ul><h3 id="prefixSpan算法（递归）"><a href="#prefixSpan算法（递归）" class="headerlink" title="prefixSpan算法（递归）"></a>prefixSpan算法（递归）</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/703213de-f33d-4218-92e0-e9663cc58918.png" alt="image-20240831170220192"></p><h2 id="推荐算法"><a href="#推荐算法" class="headerlink" title="推荐算法"></a>推荐算法</h2><h3 id="协同过滤"><a href="#协同过滤" class="headerlink" title="协同过滤"></a>协同过滤</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/073f445f-2ffa-449d-9b39-eea217d41fb2.png" alt="image-20240831172612816"></p><h4 id="基于用户推荐"><a href="#基于用户推荐" class="headerlink" title="基于用户推荐"></a>基于用户推荐</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/56e75f7f-32a9-4fa1-a67c-c28a835f4743.png" alt="image-20240831172838013"></p><p>已知A推荐物品D，看他们之前购物重合度大不大，如果相同则推荐</p><h4 id="基于项目推荐"><a href="#基于项目推荐" class="headerlink" title="基于项目推荐"></a>基于项目推荐</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/973593ca-90b2-4ba3-95dd-b767d363b564.png" alt="image-20240831173033453"></p><h3 id="基于内容推荐"><a href="#基于内容推荐" class="headerlink" title="基于内容推荐"></a>基于内容推荐</h3><h3 id="基于知识推荐"><a href="#基于知识推荐" class="headerlink" title="基于知识推荐"></a>基于知识推荐</h3><h3 id="混合推荐"><a href="#混合推荐" class="headerlink" title="混合推荐"></a>混合推荐</h3><h2 id="第三天（大数据）"><a href="#第三天（大数据）" class="headerlink" title="第三天（大数据）"></a>第三天（大数据）</h2><h3 id="数据治理"><a href="#数据治理" class="headerlink" title="数据治理"></a>数据治理</h3><ul><li>数据元</li><li>元数据</li><li>主题数据</li><li>数据仓库（hive）</li><li>数据湖：存储结构化的数据</li></ul><p><strong>价值</strong></p><ul><li>改善数据质量</li><li>控制数据风险</li><li>增强数据安全</li><li>赋能管理决策</li></ul><p><strong>挑战</strong></p><ul><li>对数据治理的业务价值认识不足</li><li>领导不重视</li><li>数据标准不统一，数据整合困难</li><li>业务人员认为这是it部门的事情</li><li>缺乏数据治理组织和专业人才</li></ul><p><strong>框架</strong></p><ul><li>DAMA-DMBOK</li><li>DCMM</li><li>DGI</li></ul><p>​<strong>管理面、业务面、样本面、存储面</strong></p><p>大数据模型L0-L2</p><p>数据治理统一的数据语言L1-l5</p><p>人工智能汽车L0-L5</p><h3 id="DataArts"><a href="#DataArts" class="headerlink" title="DataArts"></a>DataArts</h3><h4 id="DataArts-LakeFormation-DataArts-Studio"><a href="#DataArts-LakeFormation-DataArts-Studio" class="headerlink" title="DataArts LakeFormation+DataArts Studio"></a>DataArts LakeFormation+<strong>DataArts Studio</strong></h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a360dbb1-5306-4c96-8ae5-6cec1fb67d15.png" alt="image-20240901100515876"></p><p><strong>功能：数据集成、架构、开发、质量、资产管理、数据服务、数据安全</strong></p><h3 id="计算机视觉-图像识别"><a href="#计算机视觉-图像识别" class="headerlink" title="计算机视觉-图像识别"></a>计算机视觉-图像识别</h3><ol><li>图像数字化：包含两个过程：采样和量化（将连续色调的图片转换为计算机可以识别的图像）</li></ol><p>​采样：将连续的图像变化为离散的点</p><p>​量化：一副8位的图像表示每个采样点有2^8^ &#x3D;256级</p><ol start="2"><li><p>灰度图表示</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f89cdf36-b6b6-43fd-a96b-f72c6e989b2b.png" alt="image-20240901105336504"></p></li></ol><p>​在数学上用一个矩阵进行图像存储，坐标在左上角</p><ol start="3"><li>RGB三色图</li><li>HSV比RGB色彩更加丰富</li></ol><p>​<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ae1be1fa-66a6-48b8-8c10-0f4c7986645d.png" alt="image-20240901105605021"></p><ol start="5"><li>其他颜色空间</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/565871ff-75c2-47bc-9989-44523e92db83.png" alt="image-20240901105836424">6. 灰度化计算</p><p>​<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f2cd3776-4155-47dd-aeb9-c1244ba93e92.png" alt="image-20240901110210774"></p><p>呼叫强大的python库</p><ol start="7"><li><p>像素关系：每个像素上下左右叫4-邻域，对角线上的4个点为D-邻域，加一起叫8邻域</p></li><li><p>灰度计算：<strong>反转：黑变白，白变黑</strong>    <strong>对比度增强</strong>：把数值放大  <strong>对比度压缩</strong>：把数值减小  <strong>伽马矫正：背公式，指数变化</strong></p></li></ol><h3 id="CNN卷积神经网络"><a href="#CNN卷积神经网络" class="headerlink" title="CNN卷积神经网络"></a>CNN卷积神经网络</h3><p>输入层–卷积层–池化层–全连接层–输出层</p><h3 id="DNN深度神经网络"><a href="#DNN深度神经网络" class="headerlink" title="DNN深度神经网络"></a>DNN深度神经网络</h3><h3 id="RNN循环神经网络"><a href="#RNN循环神经网络" class="headerlink" title="RNN循环神经网络"></a>RNN循环神经网络</h3><h3 id="语音处理"><a href="#语音处理" class="headerlink" title="语音处理"></a>语音处理</h3><p>约定大于规范，规范大于编程</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3fc19d43-6e2e-4c54-b196-b98cf9d8d634.png" alt="image-20240901145301847"></p><p><strong>在语音识别中最常见的语音特征是MFCC</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6714cf21-a267-4807-a91b-9ba084a23f2e.png" alt="image-20240901145609715"></p><h3 id="语音识别"><a href="#语音识别" class="headerlink" title="语音识别"></a>语音识别</h3><p>最伟大的发明</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/5d102efe-0d33-4d06-b949-fdc1a3e79c16.png" alt="image-20240901150246235"></p><h3 id="EM算法"><a href="#EM算法" class="headerlink" title="EM算法"></a>EM算法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e829e0af-4ff2-4114-b9e5-790ee35cf89e.png" alt="image-20240901151425040"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8b3b316e-9d6d-4136-af4b-4149242dc267.png" alt="image-20240901151621993"></p><p>boosting（自助算法-穿靴子要自己穿）</p><h3 id="长短期记忆网络"><a href="#长短期记忆网络" class="headerlink" title="长短期记忆网络"></a>长短期记忆网络</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c4326b17-4388-4550-bc2c-223ad2d08b15.png" alt="image-20240901153333185"></p><h3 id="GRU"><a href="#GRU" class="headerlink" title="GRU"></a>GRU</h3><p>将lstm的遗忘门和输入门合成为一个更新门，属于简化</p><h2 id="第四天（好像已经学过了）"><a href="#第四天（好像已经学过了）" class="headerlink" title="第四天（好像已经学过了）"></a>第四天（好像已经学过了）</h2><h3 id="云计算优势"><a href="#云计算优势" class="headerlink" title="云计算优势"></a>云计算优势</h3><ol><li>按需自助</li><li>广泛的网络接入</li><li>资源池化，屏蔽底层硬件的差异性</li><li>快速弹性伸缩，按需增加或者减少服务器的数量</li><li>可计量服务，计量不等于收费</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;大三培训&quot;&gt;&lt;a href=&quot;#大三培训&quot; class=&quot;headerlink&quot; title=&quot;大三培训&quot;&gt;&lt;/a&gt;大三培训&lt;/h1&gt;&lt;h2 id=&quot;第一天&quot;&gt;&lt;a href=&quot;#第一天&quot; class=&quot;headerlink&quot; title=&quot;第一天&quot;&gt;&lt;/a&gt;第一</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>openwrt</title>
    <link href="http://blog.wenmozhu.de5.net/2024/07/10/openwrt/"/>
    <id>http://blog.wenmozhu.de5.net/2024/07/10/openwrt/</id>
    <published>2024-07-10T12:10:47.000Z</published>
    <updated>2026-09-09T10:57:22.166Z</updated>
    
    <content type="html"><![CDATA[<h1 id="openwrt-第一周"><a href="#openwrt-第一周" class="headerlink" title="openwrt-第一周"></a>openwrt-第一周</h1><p>芯片</p><h2 id="web界面"><a href="#web界面" class="headerlink" title="web界面"></a>web界面</h2><p>nx30 pro已经刷入了immortalWrt的系统，我们将路由器的wan口用双绞线和电脑相连，进入浏览器输入192.168.6.1即可打开web界面</p><p>进入之后发现有系统概况、防火墙、路由表、负载均衡等功能，非常直观就能配置而省去了输入命令的麻烦</p><p><img src="C:/Users/alex/Documents/Tencent%20Files/1484145749/FileRecv/MobileFile/IMG20240516221533.jpg" alt="IMG20240516221533"></p><p>除此之外openwrt还能支持多种插件服务，比如说clash来对流量进行代理</p><p><img src="C:/Users/alex/Documents/Tencent%20Files/1484145749/FileRecv/MobileFile/IMG20240516223237.jpg" alt="IMG20240516223237"></p><h2 id="系统安装"><a href="#系统安装" class="headerlink" title="系统安装"></a>系统安装</h2><h3 id="有usb口"><a href="#有usb口" class="headerlink" title="有usb口"></a>有usb口</h3><ol><li>利用写盘工具将固件烧录到我们的u盘中变成启动盘</li><li>将u盘插入路由器并且连接显示器、鼠标键盘后开机</li><li>进行系统安装</li></ol><h3 id="无usb口"><a href="#无usb口" class="headerlink" title="无usb口"></a>无usb口</h3><ol><li>利用putty工具登录到路由器</li><li>开启ssh</li><li>刷写uboot（系统引导加载程序）</li><li>路由器插电脑上，电脑更改静态ip为192.168.1.2 网关设置为192.168.1.1，浏览器输入192.168.1.1进入uboot的web界面，再选择并且刷入固件</li><li>等待路由器重启，将路由器的wan口用双绞线和电脑相连，进入浏览器输入192.168.6.1即可打开web界面</li></ol><h2 id="入门课"><a href="#入门课" class="headerlink" title="入门课"></a>入门课</h2><h3 id="路由器硬件构成"><a href="#路由器硬件构成" class="headerlink" title="路由器硬件构成"></a>路由器硬件构成</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/379b3d6e-9841-4ddd-9957-ebe3292b5f31.png" alt="image-20240520150340298"></p><p>usb总线速度有点慢，跑802.ac不够</p><p><strong>板子</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c4b12be2-6fe4-49d0-b845-192192510462.png" alt="image-20240520150917301"></p><ul><li><p>wifi芯片2.4g，5g一般是外挂的（7621，2.4g，5g）</p></li><li><p>电平：ttl和cmos</p></li><li><p>ram：DD2&#x2F;DDR3</p></li><li><p>rom：常见8-32M，一般是spi和nand（nor不用了），spi（串型）是工业用总线，容量不能太大；nand比spi好使，家用型</p></li></ul><h1 id="openwrt-第二周"><a href="#openwrt-第二周" class="headerlink" title="openwrt-第二周"></a>openwrt-第二周</h1><h1 id="openwrt暑假期"><a href="#openwrt暑假期" class="headerlink" title="openwrt暑假期"></a>openwrt暑假期</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3099f746-bcc4-42d4-8ef1-f99165f31a3f.png" alt="image-20240710194723121"></p><p>我们的问题就是第三点，因为我们的芯片崭新出厂</p><p>方案：使用官方的或者主线kernel，把openwrt当rootfs使用，需要适配kernel、u-boot、configs、脚本、patch、makefile等</p><p>大致过程？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240710201038400.png" alt="image-20240710201038400"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;openwrt-第一周&quot;&gt;&lt;a href=&quot;#openwrt-第一周&quot; class=&quot;headerlink&quot; title=&quot;openwrt-第一周&quot;&gt;&lt;/a&gt;openwrt-第一周&lt;/h1&gt;&lt;p&gt;芯片&lt;/p&gt;
&lt;h2 id=&quot;web界面&quot;&gt;&lt;a href=&quot;#we</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>云服务</title>
    <link href="http://blog.wenmozhu.de5.net/2024/07/10/%E4%BA%91%E6%9C%8D%E5%8A%A1/"/>
    <id>http://blog.wenmozhu.de5.net/2024/07/10/%E4%BA%91%E6%9C%8D%E5%8A%A1/</id>
    <published>2024-07-10T07:46:21.000Z</published>
    <updated>2026-09-09T10:57:22.167Z</updated>
    
    <content type="html"><![CDATA[<h1 id="云服务"><a href="#云服务" class="headerlink" title="云服务"></a>云服务</h1><p>云计算侧重怎么搭建平台和管理</p><p>云服务侧重如何使用公有云平台</p><p>核心是在公有云使用云服务</p><p>云服务是将资源以服务的形式提供，用户仅仅需要在公有云上申请服务就好了</p><p>华为云一个账号下可以有很多用户</p><p>华为云在注册账号时，会按照账号名自动创建一个用户，这个用户为超级管理员</p><p>为了保证后续对系统维护时权限的详细管理，华为云支持iam的管理员创建</p><h2 id="云服务地区"><a href="#云服务地区" class="headerlink" title="云服务地区"></a>云服务地区</h2><ul><li>成本</li><li>不同区域的云服务可能存在硬件上的差别等等</li><li>要选择靠近你业务的区域，可减少延迟，提高访问速度</li></ul><h2 id="1-单个vpc：计算类服务实践"><a href="#1-单个vpc：计算类服务实践" class="headerlink" title="1.单个vpc：计算类服务实践"></a>1.单个vpc：计算类服务实践</h2><ol><li>创建vpc，这个是最大的整体，一个vpc下可以有多台ecs</li><li>创建ecs，这是我们的虚拟机，也是我们的服务器，这个ecs之后可以进行镜像的保存（dew）</li><li>AS的使用，as本质上就是一个服务器的增加和删除的过程，可以设计不同的策略比如说每天0点增加实例，内存使用超过30减少实例等。</li><li>不用的资源记得关掉，不然经费顶不住</li></ol><h2 id="2-多个vpc之间：网络的实践"><a href="#2-多个vpc之间：网络的实践" class="headerlink" title="2.多个vpc之间：网络的实践"></a>2.多个vpc之间：网络的实践</h2><p>一些名称解释：</p><p><strong>虚拟私有云</strong>（Virtual Private Cloud，以下简称VPC），为云服务器、云容器、云数据库等资源构建隔离的、用户自主配置和管理的虚拟网络环境，提升用户云上资源的安全性，简化用户的网络部署。</p><p><strong>安全组</strong>是一个逻辑上的分组，为具有相同安全保护需求并相互信任的云服务器提供访问策略。安全组创建后，用户可以在安全组中定义各种访问规则，当云服务器加入该安全组后，即受到这些访问规则的保护。</p><p><strong>弹性公网IP</strong>（Elastic IP，简称EIP）提供独立的公网IP资源，包括公网IP地址与公网出口带宽服务，以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑。</p><h3 id="弹性负载均衡"><a href="#弹性负载均衡" class="headerlink" title="弹性负载均衡"></a><strong>弹性负载均衡</strong></h3><p>（Elastic Load Balance，简称ELB）是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力，同时通过消除单点故障提升应用系统的可用性。</p><p>分配策略类型：</p><p>1.加权轮询算法</p><p>2.加权最少连接</p><p>3.源 ip 算法</p><p><strong>配置过程：</strong></p><p>$\mathbf{1}.$购买弹性负载均衡.</p><p>2.配置弹性负载均衡(重新创建&#x2F;或使用已有).</p><p>3.配置监听器</p><p>4.配置后端服务器组(添加后端服务器，配置端口&#x2F;权</p><p>重),</p><p>5.配置安全组，</p><p>6.测试(弹性负载均衡公网 ip:端口号)</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/aaa4ff81-d2c3-495a-b123-7351cbf7ea01.png" alt="image-20240903105727798"></p><p><strong>对等连接</strong>是指两个VPC之间的网络连接。用户可以使用私有IP地址在两个VPC之间进行通信，就像两个VPC在同一个网络中一样。同一区域内，用户可以在自己的VPC之间创建对等连接，也可以在自己的VPC与其他帐户的VPC之间创建对等连接。不同区域间的VPC之间不能创建对等连接。</p><p><strong>虚拟专用网络</strong>（Virtual Private Network，以下简称VPN），用于在远端用户和虚拟私有云（Virtual Private Cloud，以下简称VPC）之间建立一条安全加密的公网通信隧道。当用户作为远端用户需要访问VPC的业务资源时，可以通过VPN连通VPC。</p><p>本实验介绍网络类服务的使用，包括：同一个VPC内两台ECS默认互通、不同VPC间可以利用VPC对等连接互通，不同区域间的VPC通过VPN互通、验证可以利用安全组控制通信、ECS绑定EIP后可以访问公网、ELB进行流量分发等任务。</p><h3 id="实验配置要求"><a href="#实验配置要求" class="headerlink" title="实验配置要求"></a><strong>实验配置要求</strong></h3><ul><li>在上海一区域创建2个VPC，在北京四区域创建1个VPC，体验VPC的使用。</li><li>l  在上海一区域的同一VPC下验证安全组的控制。</li><li>l  在上海一区域下验证EIP的功能。</li><li>l  在上海一区域的不同VPC下验证VPC对等连接的功能。</li><li>l  在上海一区域和北京四区域间验证VPN的功能。</li><li>l  资源释放</li></ul><p><img src="C:/Users/alex/AppData/Roaming/Typora/typora-user-images/image-20240707150558784.png" alt="image-20240707150558784"></p><p>实验步骤：</p><ol><li>创建网络环境，*如图所示在A区（上海）创建两个VPC1、VPC2，vpc1中包含两个ecs，进行一个elb负载均衡，eip给到一个公网ip，B区（北京创建一个vpc3包含一个ecs）</li><li><strong>创建服务器的过程在之前已经实现了，详细看手册</strong>，注意的是vpc2和vpc1的网络号不能相同</li><li><strong>同一个vpc下ecs互通：</strong>默认情况下是可以正常通信的，但是如果将安全组的策略全关闭的话就会ping失败，因为ping的动作被拒绝了，重新放行即可ping通</li><li>绑定eip弹性公网地址，在未绑定时还可以使用dns服务找到baidu。com的地址，但是没有公网地址不能通信，在申请并且绑定地址后可以正常通信</li></ol><p><strong>为了确保安全登录设备，可采取密钥对的登录方式，需要使用到putty和puttygen等工具，详细参考手册</strong></p><ol start="5"><li><p>Elb进行流量分发：在ecs上启动http服务，购买配置elb，访问web页面，详细参考手册，<strong>需要注意的是出现告警大部分情况下要在安全组中放行某个网段的流量</strong>，还有ecs没开机也会报警。（访问elb的公网地址：8881可以看见web界面，刷新界面可以看到不同的server文件，说明有负载分担）</p></li><li><p>不同vpc之间的ecs之间进行通信—-对等连接（其实我感觉和数通差不多，就是配个路由指过去），<strong>注意！！vpc1和vpc2的网段不能相同！！！</strong>  <u>如果在已经创建好的对等连接中，继续向本段vpc扩展子网且和目标网段一样，此时不仅对等连接失效，新添加的子网和原来的在同一个vpc也无法通信，但是删除对等连接后又好了</u></p></li><li><p>vpn配置挺贵的。。。   第一步购买vpn网关，其实就是买一个或者两个公网地址用来和对方建立ipsec连接，这点和ensp中的配置类似嘛  第二步就是指明对端网关开始对接  第三步就是建立ipsec连接，注意指明对方的子网，<strong>越详细越好</strong></p></li></ol><h3 id="云的计费模式"><a href="#云的计费模式" class="headerlink" title="云的计费模式"></a>云的计费模式</h3><ul><li>包年&#x2F;月</li></ul><p>预付费模式，拉长周期增加优惠</p><ul><li>按需计费</li></ul><p>后付费模式，按实际使用云服务器的时间进行付费</p><ul><li>竞价计费</li></ul><p>按市场价格进行计费，也是后付费模式，以更低的折扣按实际使用时长计费</p><h3 id="可用区"><a href="#可用区" class="headerlink" title="可用区"></a>可用区</h3><p>可用区是在同一区域下，电力、网络隔离的物理区域，可用区之间内网互通，不同可用区之间物理隔离</p><p>一个区域内可有多个可用区，一个可用区发生故障后不会影响同一区域内下的其他可用区</p><h3 id="随机分配"><a href="#随机分配" class="headerlink" title="随机分配"></a>随机分配</h3><p>随机丢到不同的可用区域</p><h3 id="镜像"><a href="#镜像" class="headerlink" title="镜像"></a>镜像</h3><ul><li>公共镜像</li></ul><p>云平台提供的标准的操作系统镜像，正版</p><ul><li>私有镜像</li></ul><p>基于云服务器或者外部镜像文件等方式创建的个人镜像，仅用户自己可见。包含了操作系统、<strong>预装的公共应用</strong>以及用户的<strong>私有应用</strong></p><ul><li>共享镜像</li></ul><p>你可以接收其他用户共享的私有镜像</p><ul><li>市场镜像</li></ul><p>提供预装操作系统、应用环境和各类软件的<strong>优质化第三方镜像</strong>，无需配置，可一键部署，满足建站、应用开发、可视化管理的个性化需求</p><h2 id="3-存储类服务实践"><a href="#3-存储类服务实践" class="headerlink" title="3.存储类服务实践"></a>3.存储类服务实践</h2><p>呜呜呜说是不考喵</p><h3 id="云硬盘evs"><a href="#云硬盘evs" class="headerlink" title="云硬盘evs"></a>云硬盘evs</h3><p>顾名思义就是在云上面跑的硬盘呗</p><p>我们要学会：</p><ul><li>购买硬盘</li><li>挂载硬盘</li><li>初始化硬盘</li><li>使用快照</li></ul><p><img src="C:/Users/alex/AppData/Roaming/Typora/typora-user-images/image-20240708170856847.png" alt="image-20240708170856847"></p><p>我们需要先在ecs-mp的服务器上挂载-初始化硬盘然后创建一些文件，之后取消挂载再挂载到ecs-test的服务器上面，<strong>结果是这个文件不会消失，除非你再次初始化硬盘</strong></p><ol><li>购买硬盘：参考书很详细，和前面的购买操作类似‘</li><li>初始化硬盘：这个更简单，就和你实体机的操作一样，例如windows就直接在磁盘管理中就可以完成这个操作了</li><li>挂载：<strong>而linux相对复杂，你需要1.fdisk -l看看有哪些可以初始化，2.再对其进行fdisk &#x2F;dev&#x2F;vdb进行分盘，3.输入n进行分区，4.输入p查看信息，5.输入w以保存；6.输入partprobe将新的分区表变更同步到操作系统，7.输入mkfs -t ext4 &#x2F;dev&#x2F;vdb1更改格式8.mkdir &#x2F;mnt&#x2F;sdc创建挂载点9.mount &#x2F;dev&#x2F;vdb1 &#x2F;mnt&#x2F;sdc来进行挂载10.输入df -TH查看挂载情况</strong></li><li>自动挂载：改系统配置文件&#x2F;etc&#x2F;fstab，替换对应的uuid（<strong>blkid &#x2F;dev&#x2F;vdb1以查看设备的uuid</strong>）</li><li><strong>快照</strong>：这个很有意思，你先在硬盘下乱创建一些文件，然后来到网页控制台创建快照，之后呢只要你用这个快照去创建evs再挂载到ecs上你就能发现这个硬盘里面有东西哦，还和之前那个一模一样哦（<strong>相当于给硬盘拍了一张照片</strong>）</li></ol><h3 id="对象存储服务OBS"><a href="#对象存储服务OBS" class="headerlink" title="对象存储服务OBS"></a>对象存储服务OBS</h3><p>如果说evs时是只能给服务器使用的存储服务，那么OBS就是专门给用户进行使用的存储服务，你可以将你windows下的文件夹整个上传到桶里面，等需要的时候再把它拿出来即可</p><p><strong>配置过程</strong></p><ol><li>获取访问密钥AK和SK，在我的凭证下可以进行创建，下载得到一个excel文件里面就放着我们的AK和SK</li><li>下载OBS Browsers+工具，使用AK方式进行登录<img src="C:/Users/alex/AppData/Roaming/Typora/typora-user-images/image-20240709234428735.png" alt="image-20240709234428735"></li><li>创建桶，上传文件或者文件夹</li><li>需要下载文件时选择下载即可</li><li><strong>多版本控制</strong>：开启这个服务后，上传同名文件会同时保留，唯一不同的区别就是<strong>修改时间</strong>，就很像游戏版本这样</li></ol><h3 id="弹性文件服务SFS"><a href="#弹性文件服务SFS" class="headerlink" title="弹性文件服务SFS"></a>弹性文件服务SFS</h3><p>就是说一个NFS文件系统同时给多个服务器进行使用</p><p><strong>配置步骤</strong></p><ol><li>创建虚拟云vpc</li><li>创建一个windows的服务器，一个linux服务器，都绑定一个公网ip</li><li>创建单个文件系统NFV</li><li>在linux挂载该文件系统，并且在该文件系统下创建一个文件</li><li>然后再在windows下绑定该文件系统，<strong>我的服务器不知道为什么没有NFS的客户端角色导致绑定失败</strong>，绑定成功后可以在文件管理中看见我们在linux下创建的文件</li></ol><h3 id="存储类型总结"><a href="#存储类型总结" class="headerlink" title="存储类型总结"></a>存储类型总结</h3><table><thead><tr><th>存储类型</th><th>面向用户</th><th>文件系统</th><th>协议</th><th>应用场景</th></tr></thead><tbody><tr><td>块存储EVS</td><td>硬盘</td><td>由使用者格式化</td><td>scsi</td><td>普通系统用作存放数据，太慢了</td></tr><tr><td>文件存储SFS</td><td>文件夹</td><td>服务的提供者已经完成格式化</td><td>nfs、cifs</td><td>共享，很便宜，快</td></tr><tr><td>对象存储OBS</td><td>桶</td><td>服务的提供者已经完成格式化</td><td>http&#x2F;https</td><td>共享，适合存放大量的<strong>非结构化数据</strong>，有点贵</td></tr></tbody></table><h3 id="自主学习任务"><a href="#自主学习任务" class="headerlink" title="自主学习任务"></a>自主学习任务</h3><ol><li>快照回滚：就是将磁盘的状态保存到某一时间点，当磁盘发生故障或者丢失重要数据的时候就可以使用<strong>快照回滚</strong>功能将磁盘恢复到之前的状态</li><li>obs定时上传：之前那个软件里面有定时上传功能，例子：每天0点把更新的数据发到obs桶中</li><li>云备份CBR和快照回滚很像，是“面向服务器的快照”</li></ol><h3 id="公网带宽"><a href="#公网带宽" class="headerlink" title="公网带宽"></a>公网带宽</h3><ul><li>按带宽计费：指定公网出方向的带宽大小。按带宽计费适用于访问流量大、访问量稳定的场景</li><li>按流量计费：；流量值得深思服务网使用过程中产生的出网流量。按流量计费适用于访问流量低、访问量波动较大的场景，带宽不同计费不变</li><li>加入共享带宽：多ip聚合计费，适用于多业务流量高峰分布于不同的时段，需节约公网成本的场景</li></ul><h3 id="流量分配策略"><a href="#流量分配策略" class="headerlink" title="流量分配策略"></a>流量分配策略</h3><ul><li><strong>加权轮询算法</strong>：根据组内后端服务器设置的权重，依次将请求分发给不同的服务器（转圈圈）</li><li><strong>加权最少连接</strong>：将请求分发给比值最小的后端服务器进行处理（找弱鸡—连接数&#x2F;加权值）</li><li><strong>一致性哈希算法：源ip算法</strong>—对请求的特定字段进行一致性哈希计算，并根据计算的哈希值将请求均匀地分配到后端服务器中。相同哈希值的请求，将会被分发到相同的后端服务器，及时后端服务器个数在发生变化。  源ip算法：根据请求的源ip地址进行哈希计算，源ip相同的请求会被分配到同一台后端服务器（找ip）</li></ul><p><strong>会话保持：在一定时间内用户请求服务响应的服务器不发生变化，即是你刷新页面不会发生另外一台服务器来提供服务的情况</strong></p><p>四层协议支持源ip</p><p>七层协议支持cookie</p><p>如果需要从专线、vpn访问时请选择源ip负载均衡</p><h2 id="4-运维服务实践"><a href="#4-运维服务实践" class="headerlink" title="4.运维服务实践"></a>4.运维服务实践</h2><p><img src="C:/Users/alex/AppData/Roaming/Typora/typora-user-images/image-20240710004732510.png" alt="image-20240710004732510"></p><ul><li><p>CTS：云审计：有一个追踪器，可以监控我们的obs桶，还可以配置关键操作通知，创建主题并且用手机订阅–得到华为云的短信轰炸（<strong>操作审计，用来约束和管理人为操作是否合理</strong>—支持对用户的操作进行全栈式追踪，支持转存和订阅）</p></li><li><p>CES：云监控：需要给服务器安装一个插件，详细看手册或者网站指导，安装之后就可以在控制台看见主机的运行状态和性能参数    <strong>创建告警</strong>：和自动增加减少实例那个例子很像，根据不同的策略来产生告警短信通知你（<strong>服务器监控，记录·设备的工作状态</strong>—自动监控硬件的情况，自动预警，支持订阅）</p></li><li><p>LTS：云日志：就是云上的日志，用来记录系统的一些信息（<strong>系统日志，记录了系统的工作状态</strong>—自动收集系统日志，支持快速查阅，支持转存）</p><pre><code>          1. 创建弹性云服务器日志组和日志流          2. 安装IC agent，网站有教你怎么做，关键点就是AK和SK一定不能搞错，&#123;&#125;这个符号不保留          3. 之后加入到主机组即可，等待一段时间就可以看见日志信息了</code></pre></li></ul><h2 id="5-综合实践-企业网部署到云上"><a href="#5-综合实践-企业网部署到云上" class="headerlink" title="5.综合实践-企业网部署到云上"></a>5.<strong>综合实践-企业网部署到云上</strong></h2><p><img src="C:/Users/alex/AppData/Roaming/Typora/typora-user-images/image-20240710104558085.png" alt="image-20240710104558085"></p><p>这里我们就不去做云审计了，没钱钱了&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;好怪，好多任务都做不完，没做出来，没有感想</p>]]></content>
    
    
    <summary type="html">ict培训云服务</summary>
    
    
    
    
    <category term="云相关" scheme="http://blog.wenmozhu.de5.net/tags/%E4%BA%91%E7%9B%B8%E5%85%B3/"/>
    
  </entry>
  
  <entry>
    <title>数据通信</title>
    <link href="http://blog.wenmozhu.de5.net/2024/07/10/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/"/>
    <id>http://blog.wenmozhu.de5.net/2024/07/10/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/</id>
    <published>2024-07-10T07:46:10.000Z</published>
    <updated>2026-09-09T10:57:23.669Z</updated>
    
    <content type="html"><![CDATA[<h1 id="数据通信1"><a href="#数据通信1" class="headerlink" title="数据通信1"></a><strong>数据通信1</strong></h1><p>核心思想：积极提问，积极甩锅</p><h2 id="开课知识科普："><a href="#开课知识科普：" class="headerlink" title="开课知识科普："></a>开课知识科普：</h2><h2 id="osi七层结结构"><a href="#osi七层结结构" class="headerlink" title="osi七层结结构"></a>osi七层结结构</h2><p>osi中的网络层可能会用，更详细，排错会使用osi分层排错，从底层往上层逐级修bug</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230924093959737.png" alt="image-20230924093959737"></p><h3 id="物理层："><a href="#物理层：" class="headerlink" title="物理层："></a>物理层：</h3><p>定义电压，接口，网线长度等</p><h3 id="数据链路层："><a href="#数据链路层：" class="headerlink" title="数据链路层："></a>数据链路层：</h3><p>承上启下，承担翻译官的功能，不同线路对数据包装，分为MAC层和LLC层，主要协议是PPP</p><h5 id="MAC层："><a href="#MAC层：" class="headerlink" title="MAC层："></a>MAC层：</h5><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924103900397.png" alt="image-20230924103900397"></p><p>怎么找非法主机的MAC地址——ARP协议</p><p>1.先广播发送一个ARP请求</p><p>2.目标收到ARP协议后再发送一个ARP回应报文</p><p>缺点：安全性较差，可以欺骗路由器说我是他的用户，这样所有信息就跑别的地方了</p><p>二级交换机可以配ip，但它的本质工作不是这个，现在二层和三层的界限和模糊</p><h3 id="网络层："><a href="#网络层：" class="headerlink" title="网络层："></a>网络层：</h3><p>osi的网络编址不是ip（NSAP）</p><p>子网号是网络地址的一部分</p><p>网络地址是小区，主机地址是你家门牌号</p><h4 id="abc类地址分类"><a href="#abc类地址分类" class="headerlink" title="abc类地址分类"></a><strong>abc类地址分类</strong></h4><p>已经变得不太重要了，主要还是看子网掩码</p><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924110725911.png" alt="image-20230924110725911"></p><p>首部：0-10-110-1110</p><p>子网掩码是多少就写多少个一再补0，再将点的中间按下面转换</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230924112952207.png" alt="image-20230924112952207"></p><p>子网划分：</p><p>公式：2的n次方-2&gt;&#x3D;需求</p><p>n为主机位</p><p>网络位&#x3D;32-主机位</p><p>例子：</p><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924113739771.png" alt="image-20230924113739771"></p><p>30位的一个IP给终端，一个IP给网关</p><p>一般使用的子网划分地址为172.16.和10.</p><h4 id="特殊IP地址："><a href="#特殊IP地址：" class="headerlink" title="特殊IP地址："></a>特殊IP地址：</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924110807920.png" alt="image-20230924110807920"></p><p>广播分为在一个网络广播和对所有主机广播</p><h4 id="私有地址："><a href="#私有地址：" class="headerlink" title="私有地址："></a>私有地址：</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924111025286.png" alt="image-20230924111025286"></p><p>B类16的0到31的255</p><h4 id="地址聚合："><a href="#地址聚合：" class="headerlink" title="地址聚合："></a>地址聚合：</h4><p>就是将二进制相同的部分当做主机位</p><h4 id="代理ARP"><a href="#代理ARP" class="headerlink" title="代理ARP"></a>代理ARP</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924115526084.png" alt="image-20230924115526084"></p><p>会产生ARP欺骗的类似效果</p><h4 id="Gratuitous-ARP"><a href="#Gratuitous-ARP" class="headerlink" title="Gratuitous ARP"></a>Gratuitous ARP</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230924115838202.png" alt="image-20230924115838202"></p><p>即请求自己的IP地址的MAC地址。</p><p>作用:1.验证IP是否冲突</p><p>2.更换物理网卡</p><h4 id="RARP"><a href="#RARP" class="headerlink" title="RARP"></a>RARP</h4><p> RARP使只知道自己硬件地址的主机能够知道其IP地址。ARP是知道IP求MAC，RARP是知道MAC求IP</p><h4 id="IP"><a href="#IP" class="headerlink" title="IP"></a>IP</h4><p>版本：不是4就是6</p><p>首部长度和总长度配合来算载荷</p><p>服务类型：TOS包括共8位，包括3 bit的优先权字段（取值可以从000-111所有值），4 bit的TOS子字段和1 bit未用位但必须置0。</p><p>标识符：数据报由于长度超过网络的MTU而必须分片时，这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原数据</p><p>标志：标志字段中的最低位为MF（More Fragment）。MF&#x3D;1即表示后面“还有分片”的数据报。MF&#x3D;0表示这已是若干数据报片中的最后一个。</p><p>  标志字段中间的一位记为DF（Don’t Fragment），意思是“不能分片”。只有当DF&#x3D;0时才允许分片。</p><p>片偏移：<strong>片偏移指的是较长的分组在分片后，某片在原分组中的相对位置</strong></p><p>生存时间： 每经过一个路由器减一</p><p>协议：嗯记，每个协议有特定的数字，例如TCP（6），UDP（17）</p><h3 id="传输层："><a href="#传输层：" class="headerlink" title="传输层："></a>传输层：</h3><p>经典——TCP&#x2F;UDP，除此之外还有很多其他的协议，如OSPF</p><h4 id="tcp首部格式"><a href="#tcp首部格式" class="headerlink" title="tcp首部格式"></a>tcp首部格式</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924143112188.png" alt="image-20230924143112188"></p><h4 id="三次握手："><a href="#三次握手：" class="headerlink" title="三次握手："></a>三次握手：</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924143522270.png" alt="image-20230924143522270"></p><p>这里是显式确认</p><p>用户希望a，对方回应确认a+1，希望得b，用户回应确认b+1</p><p>&#x2F;&#x2F;后来补充，每个步骤相对应的状态机</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240429142442113.png" alt="image-20240429142442113"></p><p>客户端发出syn请求（a），进入<strong>syn_sent状态</strong>，对方接收到后回复a+1的ack,进入到<strong>SYN—RCVD状态</strong>，并且要求对方回复b，客户端接收到后回复b+1，<strong>进入到establish状态</strong>，对方<strong>接收到后也成为establish状态</strong></p><h4 id="四次挥手"><a href="#四次挥手" class="headerlink" title="四次挥手"></a>四次挥手</h4><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924144920245.png" alt="image-20230924144920245"></p><p>tcp是建立在IP不可靠上的，tcp用三次握手和四次挥手来保证可靠传输</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240429143114076.png" alt="image-20240429143114076">建立<strong>连接后大家都是establish状态，</strong>接着客户端<strong>发起结束请求</strong>，<strong>进入FIN-WAIT1状态</strong>，发送u，对方<strong>接收到后进入到CLOSE-WAIT</strong>状态，并且回复u+1，对方<strong>接收到后进入FIN-WAIT2状态，</strong>接着服务端再发送最后确认信号seq&#x3D;w，进入<strong>LAST—ACK状态</strong>，对方接收到后<strong>进入TIME-WAIT状态</strong>，发送w+1，<strong>等待一段时间后进入CLOSED状态</strong>，对方服务器<strong>接收到回复后进入到CLOSED状态</strong></p><h4 id="UDP的首部格式"><a href="#UDP的首部格式" class="headerlink" title="UDP的首部格式"></a>UDP的首部格式</h4><p>与TCP对比</p><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230924145427701.png" alt="image-20230924145427701"></p><p>机房：</p><p>列头柜不要摸，380v高压！！！</p><p>接口：FC，SC，LC，ST</p><p>光纤：靠颜色区分，黄色是单模（SM）光纤（1310nm），多模光纤（850nm）：om1，2（橘黄色）om3（蓝色），om4（紫色）</p><h2 id="设备配置"><a href="#设备配置" class="headerlink" title="设备配置"></a>设备配置</h2><p>1.console配置–实地配置</p><p>2.telent配置–远程配置</p><p>配置方式：1.仅靠密码控制</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;Quidway&gt;system-view -----进入配置模式</span><br><span class="line">[Quidway]interface vlan <span class="number">1</span> -----进入管理vlan</span><br><span class="line">[Quidway-Vlanif1]ip address <span class="number">192.168</span><span class="number">.28</span><span class="number">.49</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span> -----配置管理ip地址</span><br><span class="line">[Quidway-Vlanif1]quit -----退出</span><br><span class="line">[Quidway]telnet server enable -----打开telnet服务 （一般默认开启）</span><br><span class="line">[Quidway]user-interface vty <span class="number">0</span> <span class="number">4</span> -----用户指定虚拟用户终端接口</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]authentication-mode password -----配置用户终端接口认证方式 密码验证</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]<span class="built_in">set</span> authentication password cipher huawei123 -----设置接口验证密码,密码为huawei123</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]user privilege level <span class="number">15</span> -----设置用户优先级 （可选）</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]idle-timeout <span class="number">1</span> -----设置登陆超时为一分钟 （可选）</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]<span class="keyword">return</span> -----返回用户视图</span><br><span class="line">&lt;Quidway&gt;save -----保存</span><br></pre></td></tr></table></figure><p>2.用户名加密码控制（aaa）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;Quidway&gt;system-view -----进入配置模式</span><br><span class="line">[Quidway]interface vlan <span class="number">1</span> -----进入管理vlan</span><br><span class="line">[Quidway-Vlanif1]ip address <span class="number">192.168</span><span class="number">.28</span><span class="number">.49</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span> -----配置管理ip地址</span><br><span class="line">[Quidway-Vlanif1]quit -----退出</span><br><span class="line">[Quidway]telnet server enable -----打开telnet服务 （一般默认开启）</span><br><span class="line">[Quidway]user-interface vty <span class="number">0</span> <span class="number">4</span> -----用户指定虚拟用户终端接口</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]authentication-mode aaa -----配置用户终端接口认证方式 aaa验证</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]user privilege level <span class="number">15</span> -----设置用户优先级</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]idle-timeout <span class="number">1</span> -----设置登陆超时为一分钟</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]quit -----退出</span><br><span class="line">[Quidway]aaa -----进入aaa</span><br><span class="line">[Quidway-aaa]local-user huawei password cipher huawei123 -----创建用户名huawei 密码huawei123</span><br><span class="line">[Quidway-aaa]local-user huawei privilege level <span class="number">15</span> -----设置用户优先级</span><br><span class="line">[Quidway-aaa]local-user huawei service-type telnet -----授权用户使用telnet</span><br><span class="line">[Quidway-ui-vty0<span class="number">-4</span>]<span class="keyword">return</span> -----返回用户视图</span><br><span class="line">&lt;Quidway&gt;save -----保存</span><br></pre></td></tr></table></figure><p>实验远程连接成功：</p><p><img src="/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1.assets/image-20230925232936666.png" alt="image-20230925232936666"></p><p>3.ssh,类telnet，但是更加安全</p><p>配置方式：1.账号密码方式（与telnet差不多，略）</p><p>2.密钥控制:</p><ol><li>服务器端生成本地密钥对<br>ecc local-key-pair create</li><li>配置VTY用户界面</li></ol><p>user-interface vty 0 4</p><p> authentication-mode aaa</p><p> user privilege level 3</p><p>protocol inbound ssh</p><ol start="3"><li>创建SSH用户Client001，ecc认证（自己取名字）</li></ol><p>SSH Server:<br>ssh user client001<br>ssh user client001 authentication-type password</p><ol start="4"><li>客户端先生成一个本地密钥对</li></ol><p>SSH Server:<br>sysname client002<br>ecc local-key-pair create</p><ol start="5"><li>查看密钥信息</li></ol><p>display ecc local-key-pair public</p><ol start="6"><li>想办法将密钥复制发送到服务器端，再输入保存在服务器里</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">SSH Server:</span><br><span class="line">ecc peer-public-key <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span><span class="comment">//</span></span><br><span class="line"> public-key-code begin<span class="comment">//</span></span><br><span class="line">  <span class="number">0400</span>CB04 <span class="number">85</span>C462A2 <span class="number">2169E6</span>B4 CD089C0D <span class="number">4E27</span>A587 C7D8AAE3 A3FD2714 A7414857</span><br><span class="line">  <span class="number">747B</span>C1F8 E4797A8E CBA0FCE6 <span class="number">475260F</span>E BB5F3C5B <span class="number">219594</span>DF D7A59B3C <span class="number">1</span>C5CEEA2</span><br><span class="line">  <span class="number">6</span>ADD5400 B10DF3F1 DDC7A255 <span class="number">38</span>A27469 <span class="number">2B</span>D67DBD AE0A0B40 C3B9C7DC <span class="number">6</span>D7C83DD</span><br><span class="line">  <span class="number">5F</span>BB3E84 CC057512 <span class="number">1B</span>6D652B <span class="number">1E722161</span> <span class="number">3915932B</span> <span class="number">003</span>C2B7E CC591551 <span class="number">4</span>A4F31E1</span><br><span class="line">  <span class="number">5</span>D5E140E F9（这段就是密钥）</span><br><span class="line"> public-key-code end<span class="comment">//</span></span><br><span class="line"> peer-public-key end<span class="comment">//</span></span><br></pre></td></tr></table></figure><ol start="7"><li><p>服务端为这个密钥起名字并与用户绑定,打开stelnet服务<br>ssh user client002 assign ecc-key ecckey001</p><pre><code> stelnet server enable</code></pre></li><li><p>首次认证并连接<br>ssh client first-time enable</p><pre><code> stelnet 1.1.1.1</code></pre></li></ol><p>（rsa与ecc配置命令类似）</p><h2 id="问题："><a href="#问题：" class="headerlink" title="问题："></a>问题：</h2><p>asl，qs，mpo是啥？</p><p>代理ARP？</p><p><strong>代理ARP</strong>是 ARP协议 的一个变种。 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信，网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。 代理ARP就是将一个主机作为对另一个主机ARP进行应答—-度娘</p><h2 id=""><a href="#" class="headerlink" title=""></a></h2><h1 id="数据通信2"><a href="#数据通信2" class="headerlink" title="数据通信2"></a>数据通信2</h1><p>[TOC]</p><h2 id="ICMP（互联网控制信息协议）"><a href="#ICMP（互联网控制信息协议）" class="headerlink" title="ICMP（互联网控制信息协议）"></a>ICMP（互联网控制信息协议）</h2><h3 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h3><p>ping以及traceroute工作基于icmp，icmp是网络层协议，如果某个包丢失了，那么icmp报文就要把丢失原因告知</p><h3 id="ping使用icmp的流程"><a href="#ping使用icmp的流程" class="headerlink" title="ping使用icmp的流程"></a>ping使用icmp的流程</h3><ol><li>源服务器向目的服务器发送ICMP回显请求消息数据包</li><li>目的服务器发送回显应答</li><li>源服务器显示相关数据</li></ol><h3 id="traceroute命令"><a href="#traceroute命令" class="headerlink" title="traceroute命令"></a>traceroute命令</h3><ol><li><p>首先 traceroute 会将 IP 包的 TTL 设置 为 1，然后发送 UDP 包，他会填入一个端口号（不可达）作为 UDP 目标端口号（默认是：33434-33534）</p></li><li><p>当目的主机收到 UDP 包后，会返回 ICMP 差错报文消息（类型 3，代码 3）。参照上面的表，该错报文类型是端口不可达，说明发送方发出的 UDP 包到达了目的主机（该报文中含有IP地址）</p></li><li><p>*有的路由器禁用 ICMP ，那么他就根本不会返回这个 ICMP 差错报文，所以是看不到中间经过的路由IP的。</p></li><li><p>traceroute 在类 Unix&#x2F;Linux 系统中默认使用的是 UDP 协议，也可以通过参数修改为使用 ICMP 协议；Windows 操作系统中只使用 ICMP 协议</p></li></ol><p>*有时候ApingB可以通，但是反过来就不行了，可能是B的防火墙把ICMP过滤掉了，但是把ICMP封装到UDP或者TCP就可以了</p><h3 id="协议类型"><a href="#协议类型" class="headerlink" title="协议类型"></a>协议类型</h3><p>ICMP有type码和code码</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929091544569.png" alt="image-20230929091544569"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929091610758.png" alt="image-20230929091610758"></p><h2 id="FTP-Client"><a href="#FTP-Client" class="headerlink" title="FTP-Client"></a>FTP-Client</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929091725044.png" alt="image-20230929091725044"></p><p>路由器启动会从硬盘读取一个镜像然后启动操作系统（.bin） 更换系统就是把它的这个镜像文件替换就好了</p><h3 id="换镜像操作："><a href="#换镜像操作：" class="headerlink" title="换镜像操作："></a>换镜像操作：</h3><ol><li><p>搭建FTP服务器（网络上有很多这种视频帮助搭建，例如windows的 IIS）</p></li><li><p>配置和镜像都要备份（FTP加自己的IP地址）</p></li><li><p>put（上传）加路径就能把配置上传到你的云上</p></li><li><p>从服务器下载镜像文件更换</p></li></ol><h2 id="文件管理FTP"><a href="#文件管理FTP" class="headerlink" title="文件管理FTP"></a>文件管理FTP</h2><ol><li>配置路由器Ip</li><li>服务器端配置ftp的用户名和密码</li><li>服务器开启ftp服务</li><li>客户端登陆ftp服务器，dir查看路径，get下载</li></ol><h2 id="-1"><a href="#-1" class="headerlink" title=""></a></h2><h2 id="DHCP（UDP）"><a href="#DHCP（UDP）" class="headerlink" title="DHCP（UDP）"></a>DHCP（UDP）</h2><p>本质：配IP</p><h3 id="简介："><a href="#简介：" class="headerlink" title="简介："></a>简介：</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929105515002.png" alt="image-20230929105515002"></p><h3 id="特点："><a href="#特点：" class="headerlink" title="特点："></a>特点：</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929105632077.png" alt="image-20230929105632077"></p><p>ipv6时代DHCP更加不可或缺</p><p>DHCP租期不易过长，不然会有大量IP被占用（占着茅坑不拉屎）–两小时推荐</p><h3 id="DHCP系统组成"><a href="#DHCP系统组成" class="headerlink" title="DHCP系统组成"></a>DHCP系统组成</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929110439020.png" alt="image-20230929110439020"></p><h3 id="DHCP的地址分配方式"><a href="#DHCP的地址分配方式" class="headerlink" title="DHCP的地址分配方式"></a>DHCP的地址分配方式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929110844992.png" alt="image-20230929110844992"></p><h3 id="IP地址的动态获取过程"><a href="#IP地址的动态获取过程" class="headerlink" title="IP地址的动态获取过程"></a>IP地址的动态获取过程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929111125227.png" alt="image-20230929111125227"></p><ol><li>discover–能不能给我分配一个ip地址？</li><li>offer–给它一个IP地址</li><li>request–我能不能用这个IP？</li><li>ack（允许）–nak（不允许）</li></ol><h2 id="DHCP实验"><a href="#DHCP实验" class="headerlink" title="DHCP实验"></a>DHCP实验</h2><h3 id="基于端口"><a href="#基于端口" class="headerlink" title="基于端口"></a>基于端口</h3><p>*进入端口，配置pool，打开服务</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930092042484.png" alt="image-20230930092042484"></p><ol><li><p>首先最关键的就是将路由器的端口ip配置</p></li><li><p>打开dhcp服务</p></li><li><p>配置地址池，也就是网段，主机会被分配到这些ip地址中的其中一个（元素：网段，网关，dns地址，租约时间）</p></li><li><p>排除不需要的地址</p></li><li><p>主机启动dhcp模式，输入ipconfig查看获取的ip地址</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20200516095009195.png" alt="在这里插入图片描述"></p></li></ol><h3 id="全局DHCP"><a href="#全局DHCP" class="headerlink" title="全局DHCP"></a>全局DHCP</h3><p>*配置pool，进入端口，打开全局</p><p>*图片案例同上</p><ol><li>还是先为端口配置ip地址</li><li>接着创建地址池（IP pool 1）</li><li>为这个地址池配置元素（网段，网关，dns服务器，租约）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930091813581.png" alt="image-20230930091813581"></p><ol start="4"><li>排除不分配的地址</li><li>为接口启动全局dhcp服务##</li><li>pc机输入ipconfig查看分配的ip地址</li></ol><h3 id="中继DHCP"><a href="#中继DHCP" class="headerlink" title="中继DHCP"></a>中继DHCP</h3><p>*配置服务器端口pool，声明下一跳，网关路由连上服务器端口</p><p>分为了服务端路由器和网关路由（中继）</p><h4 id="服务器"><a href="#服务器" class="headerlink" title="服务器"></a>服务器</h4><ol><li>端口配置ip</li><li>关键：告知路由器要到达某一网段的下一跳在哪（静态路由：ip route-static 192.168.1.0 255.255.255.0 10.0.0.2）</li><li>接着就是配置pool池的元素（网段，网关，dns服务器，排除ip，租期时间）</li></ol><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">ip pool vlan100<span class="regexp">//</span>pool池创建</span><br><span class="line"> gateway-list <span class="number">192.168</span>.<span class="number">100.254</span> <span class="regexp">//</span>网关</span><br><span class="line"> network <span class="number">192.168</span>.<span class="number">100.0</span> mask <span class="number">255.255</span>.<span class="number">255.0</span> <span class="regexp">//</span>地址段</span><br><span class="line"> excluded-ip-address <span class="number">192.168</span>.<span class="number">100.99</span> <span class="regexp">//</span>保留地址</span><br><span class="line"> lease day <span class="number">0</span> hour <span class="number">3</span> minute <span class="number">0</span> <span class="regexp">//</span>设置租期</span><br><span class="line"> dns-list <span class="number">114.114</span>.<span class="number">114.114</span> <span class="regexp">//</span>dns</span><br><span class="line"><span class="comment">#</span></span><br></pre></td></tr></table></figure><ol start="4"><li><strong>为端口打开全局DHCP服务（很容易忘记）</strong></li></ol><p>dhcp select global</p><h4 id="网关路由"><a href="#网关路由" class="headerlink" title="网关路由"></a>网关路由</h4><ol><li>接口配置ip</li><li>在端口做代理，指明（绑定）dhcp服务器的端口</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930105742459.png" alt="image-20230930105742459"></p><h2 id="华为设备密码破解"><a href="#华为设备密码破解" class="headerlink" title="华为设备密码破解"></a>华为设备密码破解</h2><p>*user-interface 是管理接口</p><h4 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h4><p>*如果进入端口后启动aaa模式然后一直quit，就会登不上设备（用户名和密码都没有设置）</p><h4 id="实验"><a href="#实验" class="headerlink" title="实验"></a>实验</h4><p>ensp做不了</p><ol><li>交换机断电重启，按ctrl+b（华为设备一般账号名admin，密码为admin@huawei，忘记了就打咨询电话）</li><li>在bootrom 中选择清除console密码</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210423085811348.jpeg" alt="img"></p><ol start="3"><li>确认后选择模式1启动，设置新的密码</li></ol><h2 id="LLDP"><a href="#LLDP" class="headerlink" title="LLDP"></a>LLDP</h2><p>通过打开协议将不清晰的网络架构生成出来</p><p>display lldp neighbor brief—-查看一个设备所有接口的连接情况</p><p>display lldp neighbor interface g0&#x2F;0&#x2F;0—-查看某一具体接口连接情况</p><p>步骤：</p><ol><li>远程控制其中的一台设备</li><li>display lldp neighbor brief查看一个设备所有接口的连接情况</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005195645420.png" alt="image-20231005195645420"></p><ol start="3"><li><p>画大致的拓扑图，再进入具体接口看IP：display lldp neighbor interface g0&#x2F;0&#x2F;0—-查看某一具体接口连接情况</p></li><li><p>重复前三点，直到拓扑完善</p></li></ol><p>*注意：有些线路可能无法显示，解决方法是？</p><h2 id="VLAN技术"><a href="#VLAN技术" class="headerlink" title="VLAN技术"></a>VLAN技术</h2><ol><li>创建vlan （vlan 2或者 vlan batch 2 3）</li><li>进入端口</li><li>切换模式为access</li><li>划分vlan（port default vlan 2）</li></ol><p>逻辑上将一个大的交换机划分成两个以上，两个不同的vlan间无法正常通信</p><h2 id="hybrid端口"><a href="#hybrid端口" class="headerlink" title="hybrid端口"></a>hybrid端口</h2><p>拥有两个列表——TAG和UNTAG，在TAG列表中的编号的数据打上标签进行转发，在UNTAG列表中的编号的数据剥夺标签转发</p><h2 id="VLAN标签"><a href="#VLAN标签" class="headerlink" title="VLAN标签"></a>VLAN标签</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230929162902372.png" alt="image-20230929162902372"></p><p>802.1q或者串口封装为vlan打上标签</p><p>vlan数量1-4094</p><p>本征vlan不打标签（一般将用不到的vlan设置成本征镜像vlan）</p><p>arp会从非接收端先广播发送给相同vlan的部分再发送到trunk口</p><p>*两个交换机的本征vlan必需相同，不然很可能丢包（port trunk vid 2）</p><hr><h1 id="数据通信3"><a href="#数据通信3" class="headerlink" title="数据通信3"></a>数据通信3</h1><h2 id="VLAN路由"><a href="#VLAN路由" class="headerlink" title="VLAN路由"></a>VLAN路由</h2><p>不同vlan不能通信，划分成了不同的广播域和网段（虚拟）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930093842745.png" alt="image-20230930093842745"></p><p>创建vlan相当于创建了一个网段，但是还缺少了网关，而vlanif接口就解决了这个问题，就相当于vlan网络的网关，这样交换机就能将不同vlan的信息进行转发（拥有他们的ip地址）</p><p>*同网段可以通信，跨网段不能通信，可能是pc的网关没配</p><p>如果右边的pc3想pingpc4是无法直接通过sw2转发，因为没有配置vlanif接口，这个时候就要依靠左边的sw1（此时扮演的就是vlan路由）pc3通过sw2转发到sw1，sw1发现是转发给vlan2的，把标签改变再转发</p><h2 id="VLAN-单臂路由"><a href="#VLAN-单臂路由" class="headerlink" title="VLAN-单臂路由"></a>VLAN-单臂路由</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930101050638.png" alt="image-20230930101050638"></p><p>配置一个不用的vlan id 是很重要的！！！</p><p>单臂路由一条线路怎么加两个以上的vlan呢？</p><p>在一个物理端口上添加虚拟端口int g0&#x2F;0&#x2F;0.1,dot1q terminal vid ？连上vlan，配置ip作为网关，打开arp broadcast enable</p><h2 id="以太网端口技术"><a href="#以太网端口技术" class="headerlink" title="以太网端口技术"></a>以太网端口技术</h2><h3 id="自协商"><a href="#自协商" class="headerlink" title="自协商"></a>自协商</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930110343580.png" alt="image-20230930110343580"></p><p>带宽很大而主机不需要这么带宽是时，路由器可以根据主机的带宽进行自协商分配带宽（auto negotiation）</p><p><strong>以太网的接口模式</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930111242876.png" alt="image-20230930111242876"></p><h3 id="流量控制"><a href="#流量控制" class="headerlink" title="流量控制"></a>流量控制</h3><p>老师省略了，查资料发现根本看不明白：)</p><h3 id="链路聚合"><a href="#链路聚合" class="headerlink" title="链路聚合"></a>链路聚合</h3><p>将物理线路逻辑上聚合为一条线路</p><p><em>配置一致（速度一样）</em> <em>最多八根</em></p><p>*带宽做加法</p><ol><li>全局创建eth-trunk 1</li><li>端口输入eth-trunk</li><li><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930114602155.png" alt="image-20230930114602155">例子</li></ol><p>优点：增大容错率，其中一个线路寄了网络不会寄；带宽增加</p><p><em>注意</em> 逻辑上两个物理变成逻辑接口了，vlan配置都基于这个逻辑接口</p><h4 id="手动模式"><a href="#手动模式" class="headerlink" title="手动模式"></a>手动模式</h4><p>指LAG不启用任何链路聚合协议，Eth-Trunk的建立、成员接口的加入由手工配置。</p><p>（手敲代码）</p><h4 id="LACP模式"><a href="#LACP模式" class="headerlink" title="LACP模式"></a>LACP模式</h4><h5 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h5><p>指LAG启用LACP链路聚合协议，Eth-Trunk的建立、成员接口的加入基于LACP协议协商完成。</p><h5 id="优点"><a href="#优点" class="headerlink" title="优点"></a>优点</h5><p>由LACP确定聚合组中的活动和非活动链路，又称为M:N模式，即M条活动链路与N条备份链路的模式。这种模式提供了更高的链路可靠性，并且可以在M条链路中实现不同方式的负载均衡。（M里面哪条链路寄了就从N条中选择一条替换）</p><h5 id="实验配置"><a href="#实验配置" class="headerlink" title="实验配置"></a>实验配置</h5><ol><li>交换机创建eth-trunk接口</li><li>模式确认为lacp模式</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005201753041.png" alt="image-20231005201753041"></p><ol start="3"><li>将端口加入到eth-trunk中，设置优先级（就是确认谁是M谁是N）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005202014987.png" alt="image-20231005202014987"></p><ol start="3"><li><p>设置活动接口数量（M有多少个）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005202025173.png" alt="image-20231005202025173"></p></li></ol><h5 id="实验结果"><a href="#实验结果" class="headerlink" title="实验结果"></a>实验结果</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005203606433.png" alt="image-20231005203606433"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/download" alt="手工模式与LACP模式的对比"></p><h4 id="跨交换机的链路聚合"><a href="#跨交换机的链路聚合" class="headerlink" title="跨交换机的链路聚合"></a>跨交换机的链路聚合</h4><p>以后教</p><h3 id="端口镜像"><a href="#端口镜像" class="headerlink" title="端口镜像"></a>端口镜像</h3><p>把某一个接口的数据复制到你指定的端口，相当于多播 </p><ol><li>先将你要添加的端口作为observe-port</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005204920979.png" alt="image-20231005204920979"></p><ol start="2"><li>再将监听的端口mirror添加到observe-port（模式，in&#x2F;out&#x2F;both）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005204950325.png" alt="image-20231005204950325"></p><h2 id="STP的原理及配置"><a href="#STP的原理及配置" class="headerlink" title="STP的原理及配置"></a>STP的原理及配置</h2><p>*一些叫法：802.1D，802.1W，802.1S（3个版本）</p><p>802.1D衍生：华为设备：STP 思科设备：PVST—&gt;PVST+</p><p>802.1W衍生：华为设备：R（快速）STP 思科设备：PVRST</p><p>802.1S衍生：华为：MSTP</p><p>*本质上就是防止闭环</p><p>*主要是进行调优，理论知识更重要</p><h3 id="交换机的转发流程"><a href="#交换机的转发流程" class="headerlink" title="交换机的转发流程"></a>交换机的转发流程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930143112850.png" alt="image-20230930143112850"></p><ol><li>先将信息来源的mac地址登记</li><li>查看转发表进行转发</li><li>找不到，泛洪</li></ol><h3 id="环路问题"><a href="#环路问题" class="headerlink" title="环路问题"></a>环路问题</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930143349605.png" alt="image-20230930143349605">PC机占用率拉满</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930143743905.png" alt="image-20230930143743905"></p><p>在E0&#x2F;3和E0&#x2F;4之间反复横跳</p><h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h3><h4 id="消除环路"><a href="#消除环路" class="headerlink" title="消除环路"></a>消除环路</h4><p>阻塞某一端口（无关端口）–block（仅能接收一种报文BPDU）</p><h4 id="根交换机"><a href="#根交换机" class="headerlink" title="根交换机"></a>根交换机</h4><p>一个广播域选一个根交换机（判读依据：<em><strong>BID&#x3D;桥ID&#x3D;网桥优先级（32768）+MAC地址</strong></em>），比小不比大，优先级可以更改。（增量4096）</p><h4 id="根端口"><a href="#根端口" class="headerlink" title="根端口"></a>根端口</h4><p>一个非根桥交换机上选一个根端口</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930152937878.png" alt="image-20230930152937878"></p><ol><li><p>开始都会发送SPDU报文进行第一次选举（比较根桥id大小）</p></li><li><p>然后比较到达根桥累计路径开销（1G-20000，小的优先）</p></li><li><p>第二点相同时，比较发送者桥ID（中继桥id小优先）</p></li><li><p>第三点相同时，比较发送者端口（发送端口小的相连的为根端口）：端口&#x3D;端口优先级（128）+端口号（只能改优先级，增量16）</p></li><li><p>比较自己的端口号</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930154303861.png" alt="image-20230930154303861"></p><h4 id="指定端口"><a href="#指定端口" class="headerlink" title="指定端口"></a>指定端口</h4><p>一个冲突域内选一个指定端口（一般是一个网段）</p><p>先找出根交换机（root），再找出根端口（Root port），再找出指定端口（Designed port），最后生成无关端口（NP）</p><h4 id="端口状态描述"><a href="#端口状态描述" class="headerlink" title="端口状态描述"></a>端口状态描述</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930160810200.png" alt="image-20230930160810200"></p><p>头脑风暴了哥们,这里的重启时间是真的搞不明白</p><p>从断链到重启大约需要50s</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930161657390.png" alt="image-20230930161657390"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930161740965.png" alt="image-20230930161740965"></p><h4 id="stp配置"><a href="#stp配置" class="headerlink" title="stp配置"></a>stp配置</h4><p>*理论很烧脑，实验很简单</p><p>特殊：stp root primary&#x2F;secondary（降低优先级）</p><p>一般：stp mode stp 和stp priority 4096（设置交换机的优先级）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930162718508.png" alt="image-20230930162718508"></p><p>要改变b的根端口，修改a的端口优先级（int g0&#x2F;0&#x2F;0  stp port priority 32）或者改b的端口开销（int g0&#x2F;0&#x2F;0  stp cost 2000）</p><h2 id="RSTP（快！）"><a href="#RSTP（快！）" class="headerlink" title="RSTP（快！）"></a>RSTP（快！）</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930163114220.png" alt="image-20230930163114220"></p><ol><li>状态只有三个了</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930163602080.png" alt="image-20230930163602080"></p><ol start="2"><li>端口角色变成4个</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930163620583.png" alt="image-20230930163620583"></p><ol start="3"><li>BPDU格式变化</li></ol><h2 id="拓扑变更"><a href="#拓扑变更" class="headerlink" title="拓扑变更"></a>拓扑变更</h2><p>每两秒发送的bdpu（hello）是configuration报文</p><p>*TCN：topo change notification</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930165036940.png" alt="image-20230930165036940"></p><p>收到TC老化时间会从300s减少到15s</p><p>这些叫flag信息</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230930165319736.png" alt="image-20230930165319736"></p><h1 id="课后作业"><a href="#课后作业" class="headerlink" title="课后作业"></a>课后作业</h1><h2 id="故障排查"><a href="#故障排查" class="headerlink" title="故障排查"></a>故障排查</h2><h3 id="要求"><a href="#要求" class="headerlink" title="要求"></a>要求</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005212238276.png" alt="image-20231005212238276"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231005212317830.png" alt="image-20231005212317830"></p><h3 id="问题来源："><a href="#问题来源：" class="headerlink" title="问题来源："></a>问题来源：</h3><ol><li>pc的网关就ping不通,发现是vlanif地址没有配置</li><li>部分pc的地址错误</li><li>有些接口被shutdown了</li><li>交换机3的两个接口没有配置</li><li>交换机2的vlan 100 和200没有创建（马虎了没有发现导致卡了很久）</li><li>同一网段接口pvid不同</li></ol><h2 id="mstp-多生成树"><a href="#mstp-多生成树" class="headerlink" title="mstp(多生成树)"></a>mstp(多生成树)</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231006164129296.png" alt="image-20231006164129296"></p><ol><li>实例–基于实例来生成二叉树</li><li>每个实例包含一个或者多个VLAN</li><li>vlan会按照所在的生成树结构转发数据</li></ol><h3 id="单实例"><a href="#单实例" class="headerlink" title="单实例"></a>单实例</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/592e27d2e87046fcab33a7ac32419200.png" alt="img"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[Huawei]stp region-configuration   <span class="comment">//进入设备的MST域视图，针对MST域的相关配置需在该视图下进行。</span></span><br><span class="line">[Huawei-mst-region]region-name HCNP  <span class="comment">//修改MST域名称</span></span><br><span class="line">[Huawei-mst-region]revision-level <span class="number">1</span>  <span class="comment">//将MST域的修订级别修改为1，缺省为0</span></span><br><span class="line">[Huawei-mst-region]active region-configuration   <span class="comment">//激活上述配置</span></span><br><span class="line">Info: This operation may take a few seconds. Please wait <span class="keyword">for</span> a moment...done.</span><br><span class="line">[Huawei-mst-region]q</span><br><span class="line">[Huawei]stp mode mstp </span><br><span class="line">[Huawei]stp root primary   <span class="comment">//指定主根桥(或者打：stp priority 0，数字越小优先级越高)，备份桥stp secondary</span></span><br><span class="line">[Huawei]stp enable </span><br><span class="line">[Huawei]</span><br></pre></td></tr></table></figure><h3 id="多实例"><a href="#多实例" class="headerlink" title="多实例"></a>多实例</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/dda938c4f4704c41a5999b1639e7dae0.png" alt="img"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">[Huawei]stp region-configuration </span><br><span class="line">[Huawei-mst-region]region-name ##</span><br><span class="line">[Huawei-mst-region]instance <span class="number">1</span> vlan <span class="number">2</span> to <span class="number">10</span></span><br><span class="line">[Huawei-mst-region]instance <span class="number">2</span> vlan <span class="number">11</span> to <span class="number">20</span></span><br><span class="line">[Huawei-mst-region]active region-configuration </span><br><span class="line">Info: This operation may take a few seconds. Please wait <span class="keyword">for</span> a moment...done.</span><br><span class="line">[Huawei-mst-region]q</span><br><span class="line">[Huawei]stp mode mstp </span><br><span class="line">[Huawei]stp instance <span class="number">0</span> root primary <span class="comment">//按照实际设计要求设置，不同交换机主要更改这个</span></span><br><span class="line">[Huawei]stp instance <span class="number">1</span> root primary </span><br><span class="line">[Huawei]stp instance <span class="number">2</span> root secondary </span><br><span class="line">[Huawei]stp enable </span><br><span class="line"><span class="comment">//mstp配置模式-》命名，vlan添加到实例-》交换机在实例中优先级设置-》启动</span></span><br></pre></td></tr></table></figure><h2 id="综合实验"><a href="#综合实验" class="headerlink" title="综合实验"></a>综合实验</h2><p>主要考察vlan划分，链路聚合和dhcp配置的知识点# 数据通信3</p><p>[TOC]</p><h2 id="MSTP的原理与配置"><a href="#MSTP的原理与配置" class="headerlink" title="MSTP的原理与配置"></a>MSTP的原理与配置</h2><h3 id="MSTP的基本概念"><a href="#MSTP的基本概念" class="headerlink" title="MSTP的基本概念"></a>MSTP的基本概念</h3><p>问题：单个生成树的弊端—一部分VLAN路径不通&#x2F;路径可能过长</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014091131471.png" alt="image-20231014091131471"></p><p>stp判断向量：根交换机-路径开销–桥ID–端口ID–自己的端口id（有STP就要考虑优化问题）</p><h3 id="多生成树实例"><a href="#多生成树实例" class="headerlink" title="多生成树实例"></a>多生成树实例</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014092050882.png" alt="image-20231014092050882"></p><p>vlan2的3700和5700-B断开</p><p>vlan3的3700和5700-A断开</p><p>*每根线都得到了利用，且能够避免环路</p><p>*默认的实例为instance 0</p><h3 id="MSTP配置"><a href="#MSTP配置" class="headerlink" title="MSTP配置"></a>MSTP配置</h3><ol><li>将vlan划分到不同的实例</li><li>设置交换机的优先级（dis stp可以查看桥ID和路径开销），配置优先级要突出在哪一个实例下（stp instance 1 priority 0）</li><li>注意：交换机可能会出bug，需要配置一个备份交换机（stp instance 1 priority 4096）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014101751340.png" alt="image-20231014101751340"></p><h3 id="MSTP区域"><a href="#MSTP区域" class="headerlink" title="MSTP区域"></a>MSTP区域</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014100039452.png" alt="image-20231014100039452"></p><p>将多个交换机划分不同的区域，一个区域可以看成一个交换机，这个根桥叫域根</p><h3 id="端口角色"><a href="#端口角色" class="headerlink" title="端口角色"></a>端口角色</h3><p><strong>根端口</strong>在非根桥上，离根桥最近的端口是本交换设备的根端口。根交换设备没有根端口。根端口负责向树根方向转发数据。</p><p><strong>指定端口</strong>对一台交换设备而言，它的指定端口是向下游交换设备转发BPDU报文的端口。</p><p><strong>Alternate端口</strong>从配置BPDU报文发送角度来看，Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。 从用户流量角度来看，Alternate端口提供了从指定桥到根的另一条可切换路径，作为根端口的备份端口。</p><p><strong>Backup端口</strong>从配置BPDU报文发送角度来看，Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。 从用户流量角度来看，Backup端口作为指定端口的备份，提供了另外一条从根节点到叶节点的备份通路。</p><p><strong><u>新鲜的知识点啊</u></strong></p><p><strong>Master端口</strong>1、 Master端口是MST域和总根相连的所有路径中最短路径上的端口，它是交换设备上连接MST域到总根的端口。 2、 Master端口是域中的报文去往总根的必经之路。 3、 Master端口是特殊域边缘端口，Master端口在CIST上的角色是Root Port，在其它各实例上的角色都是Master端口。（在多个实例中有一个最好的路径，那么这个实例这个端口叫根端口，在其他实例之中叫master端口）</p><p><strong>域边缘端口</strong><strong>域边缘端口是指位于MST域的边缘并连接其它MST域或SST的端口。</strong></p><p><strong>边缘端口</strong>1、如果指定端口位于整个域的边缘，不再与任何交换设备连接，这种端口叫做边缘端口。2、 边缘端口一般与用户终端设备直接连接。 3、 端口使能MSTP功能后，会默认启用边缘端口自动探测功能，当端口在（2 × Hello Timer + 1）秒的时间内收不到BPDU报文，自动将端口设置为边缘端口，否则设置为非边缘端口。</p><p><strong><u>alternate端口是根端口的备份，backup是指定端口的备份</u></strong></p><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240518203634565.png" alt="image-20240518203634565"></strong></p><h3 id="边缘端口"><a href="#边缘端口" class="headerlink" title="边缘端口"></a>边缘端口</h3><p>*stp edged-port设置为边缘端口后tcn报文根本发不出来</p><p>P（提议：我要成为指定端口）</p><p>先将非边缘端口down掉，再发送提议确定新的指定端口，再恢复其他端口（？）</p><h3 id="实验配置-1"><a href="#实验配置-1" class="headerlink" title="实验配置"></a>实验配置</h3><ol><li>stp region-configuration</li><li>region-name mstp（改名）</li><li>revision-level 1（版本）</li><li>instance 10 vlan 100（vlan 绑定实例）</li><li>instance 20 vlan 200</li><li>active regionconfiguration（激活配置</li></ol><h3 id="优先级（根桥）设置"><a href="#优先级（根桥）设置" class="headerlink" title="优先级（根桥）设置"></a>优先级（根桥）设置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231015230719333.png" alt="image-20231015230719333"></p><p>vlan 100通过sw1&#x2F;sw2-sw3-sw5<br>vlan 200通过sw1&#x2F;sw2-sw4-sw5</p><p>对比两条线路发现不同点就在sw3和sw4，所以它们分别就作为实例10的根桥和实例20的根桥</p><p>这样vlan100的数据只会由sw3转发</p><p>vlan100只会由sw4转发</p><h2 id="路由"><a href="#路由" class="headerlink" title="路由"></a>路由</h2><p><strong>路由基于路由表进行数据转发</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014111246920.png" alt="image-20231014111246920"></p><p>问题：AR1没有PC2网段</p><h3 id="路由来源"><a href="#路由来源" class="headerlink" title="路由来源"></a>路由来源</h3><ol><li>静态路由(static)</li></ol><p>pc1连pc2</p><p>IP route-static <code>192.168.2.0 24</code>(目标)<code>12.1.1.2</code>(下一跳)</p><p>IP route-static <code>192.168.2.0 24</code>(目标)<code>23.1.1.3</code>(下一跳)</p><p>pc2连pc1（去的地址打了，回来的还没打）</p><p>IP route-static <code>192.168.1.0 24</code>(目标)<code>23.1.1.2</code>(下一跳)</p><p>IP route-static <code>192.168.1.0 24</code>(目标)<code>12.1.1.1</code>(下一跳)</p><p>本地出接口模式：下一跳可以写g0&#x2F;0&#x2F;0</p><p>（不是点到点网络不能用，最好别用）</p><p>下一跳的ip地址（你要把数据给谁就写谁的ip地址）</p><ol start="2"><li><p>动态路由(具体协议名)</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014113914426.png" alt="image-20231014113914426"></p></li><li><p>直连路由(Direct)</p></li></ol><p>每个交换机接口连接的网段是可以直接记录在路由表的</p><ul><li><p>配置完成后pc1和pc2可以互通，但这不代表pc1可以ping通AR3（本质上就是看设备中路由表有没有目的地址的路由，而并不是类似于水管管道处处通畅）</p></li><li><p>实际上路由表正确也可能出错:crying_cat_face:</p></li><li><p>静态路由可以根据优先级和NQA可以做浮动路由，很方便</p></li></ul><h3 id="现实抓包"><a href="#现实抓包" class="headerlink" title="现实抓包"></a>现实抓包</h3><p>debug命令—debugging IP icmp verbose（可以选择参数）</p><p><code>ACL可以优化debug体验</code></p><p>terminal debugging</p><h3 id="路由协议分类"><a href="#路由协议分类" class="headerlink" title="路由协议分类"></a>路由协议分类</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014114436399.png" alt="image-20231014114436399"></p><ol><li>道听途说，基于跳数</li><li>会将不同线路进行对比选择，线路已知，基于开销</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014114910705.png" alt="image-20231014114910705"></p><h3 id="路由表"><a href="#路由表" class="headerlink" title="路由表"></a>路由表</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014114929706.png" alt="image-20231014114929706"></p><p>不同协议之间对比优先级（开销参考不同），相同协议比较开销（地位同等才有对比的意义）</p><p><strong>优先级</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014115440271.png" alt="image-20231014115440271"></p><h3 id="等价路由：ECMP"><a href="#等价路由：ECMP" class="headerlink" title="等价路由：ECMP"></a>等价路由：ECMP</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014140630950.png" alt="image-20231014140630950"></p><p>开销相同的时候会有多个下一跳</p><h3 id="最长匹配原则"><a href="#最长匹配原则" class="headerlink" title="最长匹配原则"></a>最长匹配原则</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014140802739.png" alt="image-20231014140802739"></p><p>新的地址进入路由表，会优先与子网掩码大的网段先匹配</p><p>（0.0.0.0&#x2F;0为默认路由-指向外网，在路由表里面兜底）</p><h3 id="路由环路"><a href="#路由环路" class="headerlink" title="路由环路"></a>路由环路</h3><p>默认路由配置不当容易产生路由环路</p><h3 id="浮动路由"><a href="#浮动路由" class="headerlink" title="浮动路由"></a>浮动路由</h3><p>静态路由可以配置相同的目标网段但不同的下一跳，优先级设置不同即为浮动路由</p><h2 id="动态路由协议"><a href="#动态路由协议" class="headerlink" title="动态路由协议"></a>动态路由协议</h2><h3 id="协议概述"><a href="#协议概述" class="headerlink" title="协议概述"></a>协议概述</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014151533861.png" alt="image-20231014151533861"></p><h3 id="路由泛洪"><a href="#路由泛洪" class="headerlink" title="路由泛洪"></a>路由泛洪</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014151621676.png" alt="image-20231014151621676"></p><p>伟大的互联网分享精神：每个路由器会和自己的直连路由器分享自己的路由表，路由器将自己没有的路由添加（30s更新一次）</p><p>更新原则：</p><ol><li><p>覆盖：相同路径，选取跳数小的进行覆盖</p></li><li><p>删除：180s后没有更新认为为无效路由，进行删除—线路断掉，发送路由更新，跳数为16跳，16跳不可达，删除！</p></li></ol><h3 id="路由环路-1"><a href="#路由环路-1" class="headerlink" title="路由环路"></a>路由环路</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014152642148.png" alt="image-20231014152642148"></p><h4 id="解决环路方法–最大跳数16"><a href="#解决环路方法–最大跳数16" class="headerlink" title="解决环路方法–最大跳数16"></a>解决环路方法–最大跳数16</h4><p>180s才能删除，可是30s就更新一次，导致应该删除的路径跳数一直增加，一直存在</p><p>解决方法：跳数为16时即认为不可达，直接删除</p><h4 id="解决环路方法–水平分割"><a href="#解决环路方法–水平分割" class="headerlink" title="解决环路方法–水平分割"></a>解决环路方法–水平分割</h4><p>*我给你发的消息，你就不要再发给我了（燕子你不要走啊~）</p><h4 id="解决环路方法–路由抑制"><a href="#解决环路方法–路由抑制" class="headerlink" title="解决环路方法–路由抑制"></a>解决环路方法–路由抑制</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014154012852.png" alt="image-20231014154012852"></p><p>就是某一个路由器的路由down掉后会立刻向周边路由器“投毒”，发送带16跳的路由更新</p><h3 id="RIP"><a href="#RIP" class="headerlink" title="RIP"></a>RIP</h3><p><strong>RIPv1基本上用不上了</strong></p><h4 id="协议概述-1"><a href="#协议概述-1" class="headerlink" title="协议概述"></a>协议概述</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014154903388.png" alt="image-20231014154903388"></p><p>水平分割、毒性逆转、最大跳数和触发更新</p><h4 id="V1和V2区别"><a href="#V1和V2区别" class="headerlink" title="V1和V2区别"></a>V1和V2区别</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014155045614.png" alt="image-20231014155045614"></p><p>v2是主播地址：224.0.0.9</p><p>v1是广播地址：255.255.255.255</p><p>无类：ip地址不按A,B,C类地址进行设置，不超范围就随便打，抓包有掩码</p><p>有类：按主类地址进行设置，不用写掩码，抓包也没有掩码</p><h4 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231014160108210.png" alt="image-20231014160108210"></p><p>建议：加上undo summary防止多个地址合并例如10.1.1.0变成10.0.0.0</p><p>*network不仅宣告了网段，还启动了接口的rip接收和发送功能，相反的，想要手动关闭功能就用silent-interface 接口&#x2F;all</p><h4 id="RIP接口密码登录模式"><a href="#RIP接口密码登录模式" class="headerlink" title="RIP接口密码登录模式"></a>RIP接口密码登录模式</h4><p>rip authentication-mode simple ciper 357159</p><p>rip authentication-mode md5 nonstandard ciper alex357159 <strong>1</strong></p><p>两边的key值要一样，认证不匹配路由表不存在</p><h1 id="数据通信4"><a href="#数据通信4" class="headerlink" title="数据通信4"></a>数据通信4</h1><p>[TOC]</p><h2 id="思维导图"><a href="#思维导图" class="headerlink" title="思维导图"></a>思维导图</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/QQ%E5%9B%BE%E7%89%8720231024210659.png" alt="QQ图片20231024210659"></p><p>这里的DD报文打错了，其实是DBD报文</p><h2 id="OSPF路由协议基础"><a href="#OSPF路由协议基础" class="headerlink" title="OSPF路由协议基础"></a>OSPF路由协议基础</h2><p>dis ospf peer(full算建立完成)</p><p>dis ospf lsdb</p><p>ospf router-id xxxx</p><p>ospf的协议字段为89</p><p>是内部网关协议的一种，基于链路状态算法</p><h3 id="基本特点"><a href="#基本特点" class="headerlink" title="基本特点"></a>基本特点</h3><ol><li>CIDR（无类域间路由）是一种用于对互联网IP地址进行聚合和分配的技术。它通过改变IP地址的分配方式，有效地解决了IPv4地址空间不足的问题。</li><li>无路由自环</li><li>收敛速度快</li><li>使用IP组播收发协议数据224.0.0.5（村民）和 224.0.0.6（村长）（rip v1是224.0.0.9）</li><li>支持多条等值路由</li><li>协议报文认证(rip v2 的那种认证)</li></ol><h3 id="链路状态算法的路由计算过程"><a href="#链路状态算法的路由计算过程" class="headerlink" title="链路状态算法的路由计算过程"></a>链路状态算法的路由计算过程</h3><ol><li>建立邻接关系（物理和逻辑上很亲密），不等同邻居关系</li><li>泛洪LSA（类似于rip的泛洪），将收到的信息放进LSDB数据库里面</li><li>通过SPF算法计算最短路径树</li><li>计算路由并且存入IP路由表中</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021093340407.png" alt="image-20231021093340407"></p><h3 id="OSPF的基本概念"><a href="#OSPF的基本概念" class="headerlink" title="OSPF的基本概念"></a>OSPF的基本概念</h3><h4 id="自治系统AS"><a href="#自治系统AS" class="headerlink" title="自治系统AS"></a>自治系统AS</h4><p>在互联网中，一个或多个实体管辖下的所有IP网络和路由器的组合，它们对互联网执行共同的路由策略</p><h4 id="Router-ID"><a href="#Router-ID" class="headerlink" title="Router ID"></a>Router ID</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021094025564.png" alt="image-20231021094025564"></p><p>很多ospf的服务需要id，来源：</p><ol><li>手动分配 2.通过活动环回口接口的最大IP 3.通过物理环回口接口的最大IP</li></ol><p>（没有邻接关系随便改，否则要重启）</p><h4 id="划分区域"><a href="#划分区域" class="headerlink" title="划分区域"></a>划分区域</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021094712402.png" alt="image-20231021094712402"></p><p>area 0：骨干区域，有且只有一个，其他区域必须和骨干区域直连</p><h4 id="路由器分类"><a href="#路由器分类" class="headerlink" title="路由器分类"></a>路由器分类</h4><p>BR（略）: 所有接口都在area0</p><p>ABR（区域边界路由器）：一个在area0 其他的在其他区域</p><p>IR（略）：全部接口在其他区域</p><p>ASBR（自治系统边界路由器）：使用BGP连接另外一个AS</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021095718238.png" alt="image-20231021095718238"></p><h4 id="OSPF的五个报文"><a href="#OSPF的五个报文" class="headerlink" title="OSPF的五个报文"></a>OSPF的五个报文</h4><ol><li>Hello报文</li><li>DD报文</li><li>LSR报文</li><li>LSU报文</li><li>LSACK报文</li></ol><h4 id="OSPF的七个邻居状态"><a href="#OSPF的七个邻居状态" class="headerlink" title="OSPF的七个邻居状态"></a>OSPF的七个邻居状态</h4><ol><li>Down</li><li>Init</li><li>Two way</li><li>Exstart</li><li>Exchange</li><li>Loading </li><li>Full</li></ol><h3 id="实验基本配置"><a href="#实验基本配置" class="headerlink" title="实验基本配置"></a>实验基本配置</h3><ol><li>ospf 进程</li><li>area X进入区域配置</li><li>network宣告网段</li><li>（如果需要）设置stub区域或者nssa区域</li></ol><h2 id="进阶知识"><a href="#进阶知识" class="headerlink" title="进阶知识"></a>进阶知识</h2><h3 id="邻居和邻接"><a href="#邻居和邻接" class="headerlink" title="邻居和邻接"></a>邻居和邻接</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021104339150.png" alt="image-20231021104339150"></p><p>当线路中出现多余的信息转发，就需要DR（村长）和BDR（副村长）</p><p>224.0.0.5—其他路由器给DR发信息</p><p>224.0.0.6—DR给其他路由器发信息</p><h3 id="DR和BDR的选举过程"><a href="#DR和BDR的选举过程" class="headerlink" title="DR和BDR的选举过程"></a>DR和BDR的选举过程</h3><p>其他路由器只会和DR建立邻接关系</p><ol><li><p>一开始是先选举BDR，如果发现区域没有DR就成为DR</p></li><li><p>DR寄了之后BDR成为新的DR，然后再将id大的改为BDR</p></li></ol><h3 id="OSPF支持的网络类型"><a href="#OSPF支持的网络类型" class="headerlink" title="OSPF支持的网络类型"></a>OSPF支持的网络类型</h3><p>点对点通信，广播通信，多播，NBMA</p><p>（p2p和p2mp不进行DR和BDR的选举–两个人还选什么村长）</p><p>（广播和NBMA进行DR和BDR的选举）</p><p>那么我们怎么更改类型呢？</p><ol><li><p>进入接口</p></li><li><p>ospf network-type xxx</p></li></ol><p>两个接口不一致时只可以建立邻接关系，但是不能交换路由条目</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021110624606.png" alt="image-20231021110624606"></p><h3 id="邻居建立"><a href="#邻居建立" class="headerlink" title="邻居建立"></a>邻居建立</h3><h5 id="邻居状态"><a href="#邻居状态" class="headerlink" title="邻居状态"></a>邻居状态</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021110938049.png" alt="img"></p><ol><li>down</li><li>attempt（nbma里面会出现）</li><li>int：向外发送hello包（空包，没有地址，有自己的router-id），对方收到hello包再回复它的router-id，进入到2-way</li><li>2-way（选DR，BDR）：能进入2-way的条件是收到的hello中有自己的router-id</li><li>exstart(选master和servant)：2-way进start条件：1. 选完BDR（第一个BDR会立刻成为DR）2. 等待40s 3. 不选DR和BDR的链路跳过2-way进入exstart</li></ol><p>显示确认：ack发1回2，发2回3</p><p>隐式确认：发送序列号为1，回复的数据包也得是1</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021113134250.png" alt="image-20231021113134250"></p><p>DBD：类似书本的目录，进行master的选举，servant的序列号改为master的序列号</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021113545862.png" alt="image-20231021113545862"></p><ol start="6"><li><p>exchange交换DBD包（有内容）</p></li><li><p>loading：我给你发request，你给我回update</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021115239349.png" alt="image-20231021115239349"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021115431457.png" alt="image-20231021115431457"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021115633017.png" alt="image-20231021115633017"></p><h5 id="邻居关系建立"><a href="#邻居关系建立" class="headerlink" title="邻居关系建立"></a>邻居关系建立</h5><ol><li><strong>router-id不能相同</strong></li><li>区域必须相同</li><li>认证类型必须相同，密码也要相同         </li><li>直连接口掩码必须相同</li><li>hello包，死亡时间必须设置一样</li><li><strong>直连路由器接口不能同时设置接口优先级为0</strong></li><li>相同区域的路由器的LSDB必须保持一致（几类LSA相同）</li><li>两端mtu的值应该设置成一样</li></ol><h3 id="LSA（6种常见）"><a href="#LSA（6种常见）" class="headerlink" title="LSA（6种常见）"></a>LSA（6种常见）</h3><p>不是一种报文类型，全部放在LS update报文中</p><h4 id="Router-LSA（1）"><a href="#Router-LSA（1）" class="headerlink" title="Router-LSA（1）"></a>Router-LSA（1）</h4><p>Router-LSA是一种最基本的LSA，即Type1 LSA。</p><p>OSPF网络里的每一台路由设备都会发布Type1 LSA。这种类型的LSA用于描述设备的链路状态和开销，在路由器所属的区域内传播。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914282.png" alt="img"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914474.png" alt="img"></p><h4 id="Network-LSA（2）"><a href="#Network-LSA（2）" class="headerlink" title="Network-LSA（2）"></a>Network-LSA（2）</h4><p>Network-LSA，也就是Type2 LSA，由DR（Designated Router）产生，描述本网段的链路状态，在所属的区域内传播。如图所示，R3向R2发送一条Network-LSA，列出了所有与DR形成完全邻接关系的路由器的Router ID。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914337.png" alt="img"></p><p> <img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914470.png" alt="img"></p><h4 id="Network-summary-LSA（3）"><a href="#Network-summary-LSA（3）" class="headerlink" title="Network-summary-LSA（3）"></a>Network-summary-LSA（3）</h4><p>Network-summary-LSA，也叫Type3 LSA，由ABR发布，用来描述区域间的路由信息。ABR将Network-summary-LSA发布到一个区域，通告该区域到其他区域的目的地址。实际上，ABR是将区域内部的Type1和Type2的信息收集起来并汇总之后扩散出去，这就是Summary的含义。如图所示，R2作为ABR，将Area 0和Area 1中的路由信息分别发布对方区域。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914376.png" alt="img"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914471.png" alt="img"></p><h4 id="ASBR-Summary-LSA（4）"><a href="#ASBR-Summary-LSA（4）" class="headerlink" title="ASBR-Summary-LSA（4）"></a>ASBR-Summary-LSA（4）</h4><p>ASBR-summary-LSA，也叫Type4 LSA，由ABR发布，描述到ASBR的路由信息，并通告给除ASBR所在区域的其他相关区域。如图所示，R3作为ABR通告ASBR-summary-LSA到Area 0中。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914344.png" alt="img"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914463.png" alt="img"></p><h4 id="AS-external-LSA（5）"><a href="#AS-external-LSA（5）" class="headerlink" title="AS-external-LSA（5）"></a>AS-external-LSA（5）</h4><p>AS-external-LSA，也叫Type5 LSA，由ASBR产生，描述到AS外部的路由，通告到除Stub区域和NSSA区域以外所有的区域。如图所示，R4作为ASBR发布了一条OSPF AS到外部目的网络的路由信息。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914338.png" alt="img"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210607095914473.png" alt="img"></p><h4 id="NSSA-LSA（7）"><a href="#NSSA-LSA（7）" class="headerlink" title="NSSA LSA（7）"></a>NSSA LSA（7）</h4><p>除了上述几种LSA之外，还有一种比较特殊的LSA，NSSA LSA，也叫Type7 LSA。NSSA LSA由ASBR产生，描述到AS外部的路由，仅在NSSA区域内传播。NSSA区域的ABR收到NSSA LSA时，会有选择地将其转化为Type5 LSA，以便将外部路由信息通告到OSPF网络的其它区域。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/102d5942944f48edb1452a0f99fec6e3.png" alt="在这里插入图片描述"></p><h2 id="实验配置-2"><a href="#实验配置-2" class="headerlink" title="实验配置"></a>实验配置</h2><h3 id="虚连接的配置"><a href="#虚连接的配置" class="headerlink" title="虚连接的配置"></a>虚连接的配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231021154333804.png" alt="image-20231021154333804"></p><p>区域2没有和区域0相连，区域0和1就无法获取到区域2的路由信息，需要配置虚拟连接以获得area2的路由信息</p><p>area2要经过area1和area0连接，所以在area1中设置</p><p>在AR2中指向Ar3（v-link peer #router-id）</p><p>AR3中指向AR2（v-link peer #router-id）</p><p>vlink和回环路由？？？</p><h3 id="OSPF特殊区域"><a href="#OSPF特殊区域" class="headerlink" title="OSPF特殊区域"></a>OSPF特殊区域</h3><p>末梢路由就是只与一个路由器连接</p><p>stub：不接受4类，5类，7类LSA</p><p>totally stub：不接受3，4，5，7类LSA</p><p>NSSA（Not-So-Stubby Area）：不接受4，5 LSA类</p><p><strong>与nssa区域连接的abr在收到七类的lsa会转成5类</strong></p><p>totally NSSA 区域：不接受3，4，5</p><h4 id="实验配置-3"><a href="#实验配置-3" class="headerlink" title="实验配置"></a>实验配置</h4><h5 id="stub"><a href="#stub" class="headerlink" title="stub"></a>stub</h5><p>就在区域的两台路由器里面打个stub就好了</p><p>进入区域，输入stub</p><h5 id="nssa"><a href="#nssa" class="headerlink" title="nssa"></a>nssa</h5><p>就在区域的两台路由器里面打个nssa就好了</p><p>进入区域，输入nssa</p><h3 id="ospf下放默认路由"><a href="#ospf下放默认路由" class="headerlink" title="ospf下放默认路由"></a>ospf下放默认路由</h3><h4 id="手动配置"><a href="#手动配置" class="headerlink" title="手动配置"></a>手动配置</h4><p>在路由器的ospf进程下下放默认路由</p><figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ospf</span><br><span class="line"><span class="keyword">default</span>-route-advertise</span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20200224093436860.png" alt="在这里插入图片描述"></p><h4 id="特殊区域配置"><a href="#特殊区域配置" class="headerlink" title="特殊区域配置"></a>特殊区域配置</h4><p>基于上面的特殊区域的后stub和nssa会自动下发默认路由（注意协议优先级，若已经有了优先级更高的协议产生的默认路由则不会显示）</p><p>stub路由表</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231024221242320.png" alt="image-20231024221242320"></p><p>NSSA路由表</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20200224133021628.png" alt="在这里插入图片描述"></p><h3 id="ospf认证"><a href="#ospf认证" class="headerlink" title="ospf认证"></a>ospf认证</h3><h4 id="区域认证："><a href="#区域认证：" class="headerlink" title="区域认证："></a>区域认证：</h4><ol><li>simple认证：authentication-mode simple plain huawei1</li><li>md5认证：authentication-mode md5 1 huawei3</li><li>key chain 认证：authentication-mode md5 1 huawei3 key 1</li></ol><p>进入区域进行相关的配置</p><p>区域内设置必须完全一致</p><h4 id="链路认证："><a href="#链路认证：" class="headerlink" title="链路认证："></a>链路认证：</h4><ol><li>simple认证（同上）</li><li>md5认证（同上）</li><li>key chain 认证（同上）</li></ol><p>进入接口进行相关的配置</p><p>接口内的设置必须完全一致</p><h3 id="ospf路由聚合（？）"><a href="#ospf路由聚合（？）" class="headerlink" title="ospf路由聚合（？）"></a>ospf路由聚合（？）</h3><p>看不懂喵，等待教学：</p><h4 id="原理-1"><a href="#原理-1" class="headerlink" title="原理"></a>原理</h4><ol><li><p>与Rip不同，OSPF不支持自动路由聚合，仅支持手动路由聚合。</p></li><li><p>OSPF聚合路由分为区域间路由聚合和外部路由聚合<br>1）区域间路由聚合必须配置在ABR路由器上，指的是ABR在把与自己直接相连区域中的Type-1和Type-2LSA转换成Type-3LSA时，对生成的Type-3LSA进行聚合。<br>2）外部路由聚合必须配置在ASBR路由器上，值得时ASBR对Type-5LSA进行聚合</p></li><li><p>区域间路由聚合是ABR对自己直接相连区域内的路由进行聚合，从而减少传播至与自己直接相连的其他区域的Type-3LSA的数量。<br>强调：区域间路由只能聚合由Type-1LSA或Type-2LSA产生的路由；如果路由是由外部或其他区域传到本区域的，则这样的ABR路由不进行聚合。</p></li><li><p>外部路由聚合是指在ASBR路由器上针对引入OSPF网络的外部路由进行聚合，目的是减少在OSPF网络中的Type-5LSA的数量。外部路由聚合必须在外部路由进入OSPF网络的ASBR上进行；外部路由进入OSPF网络后，在ABR上是无法对相应的Type-5LSA进行聚合的。</p></li><li><p>对于NSSA区域，当该区域的ABR将Type-7LSA转换为Type-5LSA时，该ABR也可以充当ASBR的角色，并对Type－５LSA进行聚合。</p></li><li><p>注意：当NSSA区域存在多台ABR时，必须由Router－ID最大的ABR进行Type－７LSA到Type－５LSA转换的操作。NSSA区域的外部路由聚合有两种方式，一种是在NSSA区域的ASBR上直接对外部路由进行聚合，另一种是在NSSA区域中Router－ID最大的，负责将Type－７LSA转成Type－５LSA的ABR进行聚合。</p></li></ol><p>注：<br>外部路由聚合，如本区域有多个ABR，必须在router-id最大的ABR上完成<br>需先添加vlan和配置每个路由器的接口IP，以及路由协议，没给代码，要自己完成<br>交换机端口还要配access模式，不要忘记<br>OSPF路由区域间路由聚合（可在本区域ABR上完成）<br>外部路由聚合（可在ASBR上完成，也可在本区域ABR上完成）</p><h4 id="命令配置"><a href="#命令配置" class="headerlink" title="命令配置"></a>命令配置</h4><h5 id="区域内部聚合"><a href="#区域内部聚合" class="headerlink" title="区域内部聚合"></a>区域内部聚合</h5><p>进入到要配置的设备中的ospf进程&gt;&gt;&gt;area X，输入命令abr-summary 20.0.0.0 255.255.252.0</p><h5 id="外部链路聚合"><a href="#外部链路聚合" class="headerlink" title="外部链路聚合"></a>外部链路聚合</h5><p>进入到要配置的设备中的ospf进程，输入命令：abr-summary 20.0.0.0 255.255.252.0</p><h3 id="ospf多进程"><a href="#ospf多进程" class="headerlink" title="ospf多进程"></a>ospf多进程</h3><p>不同的进程号就是不同的进程，一台设备可以在不同的进程下，但是一个接口只能在一个接口下</p><h2 id="ACL：第一代防火墙"><a href="#ACL：第一代防火墙" class="headerlink" title="ACL：第一代防火墙"></a>ACL：第一代防火墙</h2><h3 id="规则"><a href="#规则" class="headerlink" title="规则"></a>规则</h3><h4 id="基本ACL：（根据）源IP地址（过滤）"><a href="#基本ACL：（根据）源IP地址（过滤）" class="headerlink" title="基本ACL：（根据）源IP地址（过滤）"></a>基本ACL：（根据）源IP地址（过滤）</h4><h4 id="高级ACL：整个网段、某个IP、协议"><a href="#高级ACL：整个网段、某个IP、协议" class="headerlink" title="高级ACL：整个网段、某个IP、协议"></a>高级ACL：整个网段、某个IP、协议</h4><h4 id="二层ACL：mac地址、802-1q、二层协议类型"><a href="#二层ACL：mac地址、802-1q、二层协议类型" class="headerlink" title="二层ACL：mac地址、802.1q、二层协议类型"></a>二层ACL：mac地址、802.1q、二层协议类型</h4><h4 id="用户自定义ACL-？"><a href="#用户自定义ACL-？" class="headerlink" title="用户自定义ACL:？"></a>用户自定义ACL:？</h4><h4 id="用户ACL-？"><a href="#用户ACL-？" class="headerlink" title="用户ACL:？"></a>用户ACL:？</h4><h3 id="组成"><a href="#组成" class="headerlink" title="组成"></a>组成</h3><ol><li>标识</li><li>规则{1. 编号-从小到大 2. 动作：permit&#x2F;deny 3. 匹配项}</li></ol><h3 id="匹配机制"><a href="#匹配机制" class="headerlink" title="匹配机制"></a>匹配机制</h3><ol><li>检查是否开启了ACL服务（是，进行下一步）</li><li>检查是否设置了规则（是，进行下一步）</li><li>检查设置规则的编号，从小到大检索</li><li>检查规则是否执行（permit&#x2F;deny）</li><li>规则如果是permit，执行后停止匹配，继续检索下一个规则</li></ol><h2 id="ospf故障排查"><a href="#ospf故障排查" class="headerlink" title="ospf故障排查"></a>ospf故障排查</h2><ol><li><p>首先查看接口ip是否配置</p></li><li><p>我看每台交换机都有配置一个换回接口，除了telnet登录使用，还有什么作用？（<a href="https://blog.csdn.net/qq_29864185/article/details/106902375?ops_request_misc=%7B%22request_id%22:%22169824703616800226547436%22,%22scm%22:%2220140713.130102334..%22%7D&request_id=169824703616800226547436&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-106902375-null-null.142%5Ev96%5Epc_search_result_base7&utm_term=%E8%B7%AF%E7%94%B1%E5%99%A8%E7%8E%AF%E5%9B%9E%E6%8E%A5%E5%8F%A3&spm=1018.2226.3001.4187">路由器环回接口(loopback)详解-CSDN博客</a>）</p></li><li><p>查看路由表里有没有其他的协议已经配置导致ospf邻居建立失败</p></li><li><p>ospf区域宣告直连网段就是将路由器所在的接口的网段进行宣告（环回接口要接到哪个区域呢？还是不用接？）</p></li><li><p>正常stub区域设置，注意stub区域不能使用telnet</p></li><li><p>vlink虚链路建立注意点：1. 除了router-id和优先级设置不同其他配置都要一样（hello包配置一样）2. vlink指向的是router-id而不是ip地址，注意不要配错！！！</p></li><li><p>抓包抓的是ip地址！！！被这个坑惨了</p></li></ol><h1 id="数据通信5"><a href="#数据通信5" class="headerlink" title="数据通信5"></a>数据通信5</h1><p>[TOC]</p><h2 id="访问控制列表实现包过滤（acl）"><a href="#访问控制列表实现包过滤（acl）" class="headerlink" title="访问控制列表实现包过滤（acl）"></a>访问控制列表实现包过滤（acl）</h2><p>两大作用：过滤and分类</p><h3 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h3><p>实现数据包识别功能</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028090829419.png" alt="image-20231028090829419"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028091148097.png" alt="image-20231028091148097"></p><h3 id="ACL包过滤技术"><a href="#ACL包过滤技术" class="headerlink" title="ACL包过滤技术"></a>ACL包过滤技术</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028091529526.png" alt="image-20231028091529526"></p><p>ACL如果想过滤，肯定要在数据流必经之路：接口上配置</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028091809721.png" alt="image-20231028091809721"></p><h3 id="工作流程"><a href="#工作流程" class="headerlink" title="工作流程"></a>工作流程</h3><p><em>规则：找谁     动作：做啥</em></p><p><em>越详细的规则越优先</em></p><p><em>所有规则都没匹配，匹配默认规则：都可以通过</em></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028091921207.png" alt="image-20231028091921207"></p><p>（默认规则最好也自己配）</p><h3 id="通配符掩码"><a href="#通配符掩码" class="headerlink" title="*通配符掩码"></a>*通配符掩码</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028093023191.png" alt="image-20231028093023191"></p><p>0表示匹配，1代表忽略</p><p>192.168.1.0-127</p><p>192.168.1.0</p><p>0.0.0.127</p><p>——————</p><p>192.168.1.10000000</p><p>192.168.1.128</p><p>0.0.0.127</p><p>——————</p><p>10.1.1.0&#x2F;24（匹配奇数）</p><p>10.1.1.255</p><p>0.0.0.254</p><p>——————</p><p>10.1.1.0&#x2F;24（匹配偶数）</p><p>10.1.1.254</p><p>0.0.0.254</p><h3 id="ACL的标识"><a href="#ACL的标识" class="headerlink" title="ACL的标识"></a>ACL的标识</h3><ol><li>利用数字序号标识访问控制列表</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028100933079.png" alt="image-20231028100933079"></p><p>2000和3000可以选择的参数不同，3000的是高级acl，可以使用的参数更多，更高级（源ip目标ip，源端口目标端口，协议）</p><p>2000看作一个进程，里面会有多条规则</p><ol start="2"><li>命名型ACL：通过名称代替编号来标识ACL</li></ol><h3 id="ACL的分类（按规则定义方式）"><a href="#ACL的分类（按规则定义方式）" class="headerlink" title="ACL的分类（按规则定义方式）"></a>ACL的分类（按规则定义方式）</h3><table><thead><tr><th>分类</th><th>适用的IP版本</th><th>规则定义描述</th><th>编号范围</th></tr></thead><tbody><tr><td>基本ACL</td><td>IPv4</td><td>仅使用报文的<strong>源IP地址</strong>、分片信息和生效时间段信息来定义规则。</td><td>2000～2999</td></tr><tr><td>高级ACL</td><td>IPv4</td><td>既可使用IPv4报文的<strong>源IP地址</strong>，也可使用<strong>目的IP地址</strong>、IP协议类型、ICMP类型、TCP源&#x2F;目的端口、UDP源&#x2F;目的端口号、生效时间段等来定义规则。</td><td>3000～3999</td></tr><tr><td>二层ACL</td><td>IPv4&amp;IPv6</td><td>使用报文的<strong>以太网帧头信息</strong>来定义规则，如根据源MAC（Media Access Control）地址、目的MAC地址、二层协议类型等。</td><td>4000～4999</td></tr><tr><td>用户自定义ACL</td><td>IPv4&amp;IPv6</td><td>使用<strong>报文头、偏移位置、字符串掩码和用户自定义字符串</strong>来定义规则，即以报文头为基准，指定从报文的第几个字节开始与字符串掩码进行“与”操作，并将提取出的字符串与用户自定义的字符串进行比较，从而过滤出相匹配的报文。</td><td>5000～5999</td></tr><tr><td>用户ACL</td><td>IPv4</td><td>既可使用IPv4报文的<strong>源IP地址</strong>，也可使用<strong>目的IP地址</strong>、IP协议类型、ICMP类型、TCP源端口&#x2F;目的端口、UDP源端口&#x2F;目的端口号等来定义规则。</td><td>6000～6031</td></tr><tr><td>基本ACL6</td><td>IPv6</td><td>可使用IPv6报文的<strong>源IPv6地址</strong>、分片信息和生效时间段来定义规则。</td><td>2000～2999</td></tr><tr><td>高级ACL6</td><td>IPv6</td><td>可以使用IPv6报文的<strong>源IPv6地址</strong>、<strong>目的IPv6地址</strong>、IPv6协议类型、ICMPv6类型、TCP源&#x2F;目的端口、UDP源&#x2F;目的端口号、生效时间段等来定义规则。</td><td>3000～3999</td></tr></tbody></table><h3 id="应用方面"><a href="#应用方面" class="headerlink" title="应用方面"></a>应用方面</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028223212084.png" alt="image-20231028223212084"></p><h3 id="生效时间（儿童锁）"><a href="#生效时间（儿童锁）" class="headerlink" title="生效时间（儿童锁）"></a>生效时间（儿童锁）</h3><p>配置要求：某公司要求，在上班时间只允许员工浏览与工作相关的几个网站，下班或周末时间才可以访问其他互联网网站；再如，在每天20:00～22:00的网络流量的高峰期，为防止P2P、下载类业务占用大量带宽对其他数据业务的正常使用造成影响，需要对P2P、下载类业务的带宽进行限制。</p><p>解决方法：基于时间的ACL过滤</p><h4 id="第一种模式——周期时间段"><a href="#第一种模式——周期时间段" class="headerlink" title="第一种模式——周期时间段"></a>第一种模式——周期时间段</h4><p>以星期为参数来定义时间范围，表示规则以一周为周期（如每周一的8至12点）循环生效。</p><p>格式：<strong>time-range</strong> <em>time-name</em> <em>start-time</em> <strong>to</strong> <em>end-time</em> { <em>days</em> } &amp;&lt;1-7&gt;</p><p>栗子： time-range test 8:00 to 18:00 working-day  </p><ul><li><p><em>time-name</em>：时间段名称，以英文字母开头的字符串。</p></li><li><p><em>start-time</em> <strong>to</strong> <em>end-time</em>：开始时间和结束时间。格式为[小时:分钟] to [小时:分钟]。</p></li><li><p>days</p><p>：有多种表达方式。</p><ul><li><strong>Mon</strong>、<strong>Tue</strong>、<strong>Wed</strong>、<strong>Thu</strong>、<strong>Fri</strong>、<strong>Sat</strong>、<strong>Sun</strong>中的一个或者几个的组合，也可以用数字表达，0表示星期日，1表示星期一，……6表示星期六。</li><li><strong>working-day</strong>：从星期一到星期五，五天。</li><li><strong>daily</strong>：包括一周七天。</li><li><strong>off-day</strong>：包括星期六和星期日，两天。</li></ul></li></ul><h4 id="第二种模式——绝对时间段"><a href="#第二种模式——绝对时间段" class="headerlink" title="第二种模式——绝对时间段"></a>第二种模式——绝对时间段</h4><p>从某年某月某日的某一时间开始，到某年某月某日的某一时间结束，表示规则在这段时间范围内生效。</p><p>栗子：time-range test from 00:00 2014&#x2F;01&#x2F;01 to 23:59 2014&#x2F;12&#x2F;31  </p><ul><li><em>time-name</em>：时间段名称，以英文字母开头的字符串。</li><li><em>time1</em>&#x2F;<em>time2</em>：格式为[小时:分钟]。</li><li><em>date1</em>&#x2F;<em>date2</em>：格式为[YYYY&#x2F;MM&#x2F;DD]，表示年&#x2F;月&#x2F;日。</li></ul><h3 id="实验配置-4"><a href="#实验配置-4" class="headerlink" title="实验配置"></a>实验配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028225103053.png" alt="image-20231028225103053"></p><p>任务一：pc1不能和pc2进行通信，使用的是基本acl，但是pc1可以和别pc通信，就是在ar1上进行acl设置拒绝pc1的地址</p><figure class="highlight tap"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">1.在ar1上创建acl2000</span><br><span class="line">2.写规则：</span><br><span class="line">acl number<span class="number"> 2000 </span> </span><br><span class="line">rule<span class="number"> 5 </span>deny source 10.1.2.254<span class="number"> 0 </span></span><br><span class="line">rule<span class="number"> 10 </span>permit</span><br><span class="line">3.进入端口绑定acl2000：</span><br><span class="line">traffic-filter outbound acl 2000</span><br><span class="line">ospf enable<span class="number"> 1 </span>area 0.0.0.1</span><br><span class="line">//需要分析是接入还是流出，本体在g0/0/0的出接口使得pc2不能进入pc1但是可以进如192，168.1.0网段</span><br></pre></td></tr></table></figure><p>任务二：仅允许10.1.2.0&#x2F;24中Clent1通过http访问server1</p><p>分析可得涉及协议要使用高级acl</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">  <span class="attribute">acl</span> <span class="number">3000</span></span><br><span class="line">  <span class="attribute">rule</span> permit tcp source <span class="number">10.1.2.250</span> <span class="number">0</span> destination <span class="number">192.168.1.250</span> <span class="number">0</span> destination-po</span><br><span class="line"><span class="attribute">rt</span> eq <span class="number">80</span></span><br><span class="line">  <span class="attribute">rule</span> <span class="literal">deny</span> tcp source any destination <span class="number">192.168.1.250</span> <span class="number">0</span> destination-port eq <span class="number">80</span></span><br><span class="line">    <span class="attribute">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      <span class="attribute">traffic</span>-filter outbound acl <span class="number">3000</span></span><br></pre></td></tr></table></figure><p>这里in或者out没影响</p><p>结果：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028110827168.png" alt="image-20231028110827168"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028110841641.png" alt="image-20231028110841641"></p><h4 id="普通acl（2000-2999）"><a href="#普通acl（2000-2999）" class="headerlink" title="普通acl（2000-2999）"></a>普通acl（2000-2999）</h4><p>栗子</p><p><strong>rule permit&#x2F;deny source 10.1.1.250 0.0.0.0</strong> </p><p>没有目的地址，没有协议</p><h4 id="高级acl（3000-3999）"><a href="#高级acl（3000-3999）" class="headerlink" title="高级acl（3000-3999）"></a>高级acl（3000-3999）</h4><p><strong>rule permit&#x2F;deny tcp source 10.1.2.250 0 destination 192.168.1.250 0 destination-port eq 80</strong></p><p>有目的地址，有协议</p><p><strong>高级acl尽量靠近源，普通acl尽量靠近目标</strong></p><h2 id="NAT组网"><a href="#NAT组网" class="headerlink" title="NAT组网"></a>NAT组网</h2><h3 id="Basic-NAT"><a href="#Basic-NAT" class="headerlink" title="Basic NAT"></a>Basic NAT</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028142148039.png" alt="image-20231028142148039"></p><p> Basic NAT只转化IP，不映射端口。</p><h3 id="NAPT"><a href="#NAPT" class="headerlink" title="NAPT"></a>NAPT</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028150554383.png" alt="image-20231028150554383"></p><p><strong>NAPT除了转化IP，还做端口映射</strong>，可以用于多个内部地址映射到少量（甚至一个）外部地址。</p><p><strong>解决basic nat抢地址的问题</strong></p><h4 id="端口NAT："><a href="#端口NAT：" class="headerlink" title="端口NAT："></a>端口NAT：</h4><p>[R2]acl 2000</p><p>[R2-acl-basic-2000]rule  permit  </p><p>[R2]inter g0&#x2F;0&#x2F;0 </p><p>[R2-GigabitEthernet0&#x2F;0&#x2F;0]nat outbound 2000 </p><h4 id="端口映射（转发）："><a href="#端口映射（转发）：" class="headerlink" title="端口映射（转发）："></a>端口映射（转发）：</h4><p>[R1-GigabitEthernet0&#x2F;0&#x2F;2]nat server protocol tcp global  current-interface 8003 inside 10.1.3.250 80（访问0&#x2F;0&#x2F;2的ip地址的8083端口会转发到10.1.3.250的80端口） 、</p><h4 id="Easy-IP"><a href="#Easy-IP" class="headerlink" title="Easy IP"></a>Easy IP</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028153204765.png" alt="image-20231028153204765"></p><p>用于拨号上网中</p><h3 id="动态NAT"><a href="#动态NAT" class="headerlink" title="动态NAT"></a>动态NAT</h3><p><strong>在外部网络中定义了一个或多个合法地址，采用动态分配的方法映射到内部网络。</strong></p><p>栗子：<br>步骤一：使用分类那些主机进行NAT转换<br>[R1]acl 2000<br>[R1-acl-basic-2000]rule deny source 10.1.1.0 0.0.0.255<br>[R1-acl-basic-2000]rule  permit source any<br>[R1-acl-basic-2000]quit<br>步骤二：定义公网地址池范围<br>[R1]nat address-group 0 192.168.1.66 192.168.1.67<br>步骤三：出接口上配置NAT<br>[R1-GigabitEthernet0&#x2F;0&#x2F;2]nat outbound 2000 address-group 0</p><h4 id="静态NAT"><a href="#静态NAT" class="headerlink" title="静态NAT"></a>静态NAT</h4><p>将内部网络中的每个主机都永久映射成外部网络中的某个合法的地址，多用于服务器(需要单独的一个公网地址)</p><p>栗子:</p><p>[R1-GigabitEthernet0&#x2F;0&#x2F;2]nat static global 192.168.1.68 inside 10.1.1.254 </p><h2 id="PPP协议"><a href="#PPP协议" class="headerlink" title="PPP协议"></a>PPP协议</h2><h3 id="帧格式"><a href="#帧格式" class="headerlink" title="帧格式"></a>帧格式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028235310480.png" alt="image-20231028235310480"></p><h3 id="链路建立过程"><a href="#链路建立过程" class="headerlink" title="链路建立过程"></a>链路建立过程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028235531692.png" alt="image-20231028235531692"></p><p>在Link Dead阶段，PPP链路进行初始化，当物理层接口联通后，状态自动进入到Link Establishment阶段。</p><p>进入到Link Establishment阶段，通信双方互相发送LCP报文，进行参数协商，如果参数协商失败，则会回退到Link Dead阶段。如果参数协商成功，并且双方需要认证，则进入到authentication阶段，如果不需要认证，则会直接进入到Network Layer Protocol阶段。</p><p>在Authentication阶段，通信双方会进行认证。<br>在Network Layer Protocol阶段，双方会再次进行协商，这次协商主要协商网络层参数，比如发送自己的IP地址、子网掩码等信息，看是否存在IP地址冲突或者不属于一个网段等情况。如果参数协商一致，那么此时就可以进行正常的数据包传送了。</p><p>在Link Termination阶段，代表PPP链接终止，除了Link Dead阶段之外，任何协商过程失败都会进入这一阶段，而如果处于Network Layer Protocol阶段，管理员手动关闭了链路，也会进入这一状态。</p><h3 id="协议组成"><a href="#协议组成" class="headerlink" title="协议组成"></a>协议组成</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028162827573.png" alt="image-20231028162827573"></p><h3 id="PPP地址协商"><a href="#PPP地址协商" class="headerlink" title="PPP地址协商"></a>PPP地址协商</h3><p>服务器：</p><ol><li><p>创建地址池<br>ip pool aa<br>gateway-list 12.1.1.2<br>network 12.1.1.0 mask 255.255.255.0</p></li><li><p>指定给对端分配的ip地址池<br>remote address pool aa</p></li></ol><p>客户端：</p><ol><li>interface Serial4&#x2F;0&#x2F;0<br>link-protocol ppp</li><li>#通过PPP协商机制自动获取ip地址<br>ip address ppp-negotiate</li></ol><h3 id="PAP验证"><a href="#PAP验证" class="headerlink" title="PAP验证"></a>PAP验证</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231028163138673.png" alt="image-20231028163138673"></p><p><strong>明文，被验证方先发</strong></p><h4 id="认证方"><a href="#认证方" class="headerlink" title="认证方"></a>认证方</h4><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[Huawei-<span class="type">Serial4</span>/<span class="number">0</span>/<span class="number">0</span>]ppp authentication-mode pap                 开启pap认证</span><br><span class="line">aaa                                                             进入aaa认证</span><br><span class="line"><span class="keyword">local</span>-<span class="keyword">user</span> 用户 <span class="keyword">password</span> cipher 密码                             配置用户账号和密码</span><br><span class="line"><span class="keyword">local</span>-<span class="keyword">user</span> 用户 service-<span class="keyword">type</span> ppp                                服务用于ppp验证</span><br></pre></td></tr></table></figure><h4 id="被认证方"><a href="#被认证方" class="headerlink" title="被认证方"></a>被认证方</h4><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[Huawei-<span class="type">Serial4</span>/<span class="number">0</span>/<span class="number">0</span>]link-protocol ppp</span><br><span class="line"></span><br><span class="line">ppp pap <span class="keyword">local</span>-<span class="keyword">user</span> 用户 <span class="keyword">password</span> cipher 密码</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="CHAP验证"><a href="#CHAP验证" class="headerlink" title="CHAP验证"></a>CHAP验证</h3><p><strong>密文，验证方先发</strong></p><h4 id="认证方-1"><a href="#认证方-1" class="headerlink" title="认证方"></a>认证方</h4><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">interface <span class="type">Serial4</span>/<span class="number">0</span>/<span class="number">0</span>                               进入接口</span><br><span class="line">ppp authentication-mode chap                        开启chap认证</span><br><span class="line"><span class="keyword">local</span>-<span class="keyword">user</span> <span class="keyword">admin</span> <span class="keyword">password</span> cipher 密码                配置账户密码   </span><br><span class="line"><span class="keyword">local</span>-<span class="keyword">user</span> <span class="keyword">admin</span> service-<span class="keyword">type</span> ppp                   将账户密码用于ppp服务</span><br></pre></td></tr></table></figure><h4 id="被认证方-1"><a href="#被认证方-1" class="headerlink" title="被认证方"></a>被认证方</h4><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> <span class="symbol">Serial4</span>/<span class="symbol">0</span>/<span class="symbol">0</span>                    进入接口</span><br><span class="line"><span class="symbol">ppp</span> <span class="symbol">chap</span> <span class="symbol">user</span> <span class="symbol">admin</span>                      认证用户</span><br><span class="line"><span class="symbol">ppp</span> <span class="symbol">chap</span> <span class="symbol">password</span> <span class="symbol">cipher</span> 密码            认证密码</span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231029004351286.png" alt="image-20231029004351286"></p><h2 id="预习"><a href="#预习" class="headerlink" title="预习"></a>预习</h2><p>预习：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/K7Q2N0XHXY~U3UY[1IJ6[DG.jpg" alt="img"></p><h3 id="地址前缀列表"><a href="#地址前缀列表" class="headerlink" title="地址前缀列表"></a>地址前缀列表</h3><h4 id="定义-1"><a href="#定义-1" class="headerlink" title="定义"></a>定义</h4><p>  地址前缀列表是一种包含一组路由信息过滤规则的过滤器，用户可以在规则中定义前缀和掩码范围，用于匹配路由。</p><h4 id="匹配依据"><a href="#匹配依据" class="headerlink" title="匹配依据"></a>匹配依据</h4><p>   地址前缀列表进行匹配的依据有两个：掩码长度和掩码范围。</p><p>掩码长度：地址前缀列表匹配的对象是<strong>IP地址前缀</strong>，前缀由IP地址和掩码长度共同定义。<u>例如，10.1.1.1&#x2F;16这条路由，掩码长度是16，这个地址的有效前缀为16位，即10.1.0.0。</u></p><p>掩码范围（？）：对于前缀相同，掩码不同的路由，可以指定待匹配的前缀掩码长度范围来实现精确匹配或者在一定掩码长度范围内匹配。10.1.128.1&#x2F;24和10.1.128.1&#x2F;25<br>匹配顺序</p><h4 id="顺序匹配"><a href="#顺序匹配" class="headerlink" title="顺序匹配"></a>顺序匹配</h4><p>按索引号从小到大顺序进行匹配。<br>唯一匹配：待过滤路由只要与一个表项匹配，就不会再去尝试匹配其他表项。<br>默认拒绝：默认所有未与任何一个表项匹配的路由都视为未通过地址前缀列表的过滤。因此在一个地址前缀列表中创建了一个或多个deny模式的表项后，需要创建一个表项来允许所有其他路由通过。（和acl很像啊）</p><h4 id="和acl的区别"><a href="#和acl的区别" class="headerlink" title="和acl的区别"></a>和acl的区别</h4><p>栗子：</p><p>匹配以下地址</p><p>192.168.200.0&#x2F;30<br> 192.168.200.4&#x2F;30<br> 192.168.206.96&#x2F;30<br>192.168.206.100&#x2F;30<br>192.168.206.108&#x2F;30<br>192.168.206.112&#x2F;30</p><p>acl：rule 5 permit source 192.168.0.0 0.0.255.255（全通）</p><p>ip-prefix：ip ip-prefix test0721 index 10 permit 192.168.0.0 16（不通过）</p><p>修改为： ip ip-prefix test0721 permit 192.168.0.0 16 greater-equal 30 less-equal 32 后和acl等价</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231029140436824.png" alt="image-20231029140436824"></p><h3 id="路由策略（？）"><a href="#路由策略（？）" class="headerlink" title="路由策略（？）"></a>路由策略（？）</h3><h4 id="定义-2"><a href="#定义-2" class="headerlink" title="定义"></a>定义</h4><p>路由策略（Routing Policy）的作用是当路由器在发布、接收和引入路由信息时，可根据实际组网需要实施一些策略，以便对路由信息进行过滤或改变路由信息的属性</p><h4 id="应用方式"><a href="#应用方式" class="headerlink" title="应用方式"></a>应用方式</h4><ol><li>可利用Filter-Policy工具对RTA向OSPF引入的路由和RTC写入路由表的路由进行过滤</li><li>可利用Route-Policy工具，在RTA引入直连路由时对路由进行过滤</li></ol><h3 id="策略路由（？）"><a href="#策略路由（？）" class="headerlink" title="策略路由（？）"></a>策略路由（？）</h3><p>传统的路由策略没有负载分担，策略路由有负载分担，提高带宽使用率，策略路由PBR分为三种：</p><ol><li>本地策略路由</li><li>智能策略路由</li><li>接口策略路由</li></ol><p><strong>和路由策略的区别</strong></p><table><thead><tr><th>路由策略</th><th>策略路由</th></tr></thead><tbody><tr><td>基于控制平面，会影响路由表表项</td><td>基于转发平面，不会影响路由表表项，且设备收到报文，就会查找策略路由进行匹配转发，如匹配失败，则再由路由表进行转发</td></tr><tr><td>只能基于目的地址进行策略制定</td><td>可基于源地址、目的地址、协议类型、报文大小等进行制定</td></tr><tr><td>与路由协议相结合使用</td><td>需手工逐跳配置，以保证报文按照策略进行转发</td></tr><tr><td>常用工具：Route-Policy、Filter-Policy等</td><td>常用工具：Traffic-Fliter、Traffic-Policy、Policy-Based-Route等</td></tr></tbody></table><h3 id="路由引入（？）"><a href="#路由引入（？）" class="headerlink" title="路由引入（？）"></a>路由引入（？）</h3><p>看不懂史密达</p><h4 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h4><p>由于不同路由协议之间的<strong>路由算法、机制、开销等不同</strong>，不同的路由协议之间无法直接分享彼此的路由；此时就需要通过路由引入技术将某个路由协议的路由引入到另一个路由协议中也可以相同路由协议之间引入</p><h4 id="方式"><a href="#方式" class="headerlink" title="方式"></a>方式</h4><ol><li>单点双向</li><li>单点单向</li><li>多点双向路由# 数据通信6</li></ol><p>[TOC]</p><p>需要地址前缀匹配的原因是acl不能对子网掩码进行过滤，无能为力</p><p>IP ip-prefix ben deny 23.1.1.0&#x2F;24（不打就代表24）</p><h2 id="路由选择工具"><a href="#路由选择工具" class="headerlink" title="路由选择工具"></a>路由选择工具</h2><h3 id="使用ACL过滤路由"><a href="#使用ACL过滤路由" class="headerlink" title="使用ACL过滤路由"></a>使用ACL过滤路由</h3><p>先进行路由分类，再用filter-policy过滤</p><ol><li>配置相关地址</li><li>rip配置</li><li>acl进行配置（2000）</li><li>使用filter-policy 2000 import(入方向)&#x2F;export（出方向）</li></ol><p><strong>acl默认拒绝，针对的是数据包，不能对网络号相同但是子网掩码不同进行过滤</strong></p><p>栗子：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231109164129372.png" alt="image-20231109164129372"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">AR1</span><br><span class="line"><span class="comment">//ip地址的配置</span></span><br><span class="line">   <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">    ip ad <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line">   <span class="type">int</span> loop <span class="number">0</span><span class="comment">//配置环回口地址</span></span><br><span class="line">    ip ad <span class="number">192.168</span><span class="number">.1</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.128</span></span><br><span class="line">       <span class="type">int</span> loop <span class="number">1</span><span class="comment">//配置环回口地址</span></span><br><span class="line">    ip ad <span class="number">192.168</span><span class="number">.1</span><span class="number">.129</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.192</span></span><br><span class="line">       <span class="type">int</span> loop <span class="number">2</span><span class="comment">//配置环回口地址</span></span><br><span class="line">    ip ad <span class="number">192.168</span><span class="number">.1</span><span class="number">.220</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.240</span></span><br><span class="line">    <span class="comment">//宣告网段</span></span><br><span class="line">    rip相关配置省略</span><br><span class="line">  </span><br><span class="line">    </span><br><span class="line">AR2</span><br><span class="line">    <span class="comment">//配置端口ip地址</span></span><br><span class="line">    <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">    ip ad <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line">    <span class="comment">//配置acl的分类</span></span><br><span class="line">    acl num <span class="number">2000</span></span><br><span class="line">    rule deny source <span class="number">192</span>，<span class="number">168.1</span><span class="number">.128</span> <span class="number">0</span></span><br><span class="line">    rule <span class="number">10</span> permit（默认是禁止所以要允许全部）</span><br><span class="line">    <span class="comment">//rip配置：宣告网段，开启rip，调用acl</span></span><br><span class="line">    rip <span class="number">1</span></span><br><span class="line">    ver <span class="number">2</span></span><br><span class="line">    network <span class="number">12.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">    filter-policy <span class="number">2000</span> import（路由引入时进行路由过滤）</span><br></pre></td></tr></table></figure><h3 id="前缀过滤路由"><a href="#前缀过滤路由" class="headerlink" title="前缀过滤路由"></a>前缀过滤路由</h3><h4 id="定义-3"><a href="#定义-3" class="headerlink" title="定义"></a>定义</h4><p>  地址前缀列表是一种包含一组路由信息过滤规则的过滤器，用户可以在规则中定义前缀和掩码范围，用于匹配路由。</p><h4 id="匹配依据-1"><a href="#匹配依据-1" class="headerlink" title="匹配依据"></a>匹配依据</h4><p>   地址前缀列表进行匹配的依据有两个：掩码长度和掩码范围。</p><p>掩码长度：地址前缀列表匹配的对象是<strong>IP地址前缀</strong>，前缀由IP地址和掩码长度共同定义。<u>例如，10.1.1.1&#x2F;16这条路由，掩码长度是16，这个地址的有效前缀为16位，即10.1.0.0。</u></p><p>掩码范围（？）：对于前缀相同，掩码不同的路由，可以指定待匹配的前缀掩码长度范围来实现精确匹配或者在一定掩码长度范围内匹配。（greater-equal 30 less-equal 32 —–30到32的长度）</p><h4 id="顺序匹配-1"><a href="#顺序匹配-1" class="headerlink" title="顺序匹配"></a>顺序匹配</h4><p>按索引号从小到大顺序进行匹配。<br>唯一匹配：待过滤路由只要与一个表项匹配，就不会再去尝试匹配其他表项。<br>默认拒绝：默认所有未与任何一个表项匹配的路由都视为未通过地址前缀列表的过滤。因此在一个地址前缀列表中创建了一个或多个deny模式的表项后，需要创建一个表项来允许所有其他路由通过。（和acl很像啊）</p><h3 id="基于BGP的部分工具"><a href="#基于BGP的部分工具" class="headerlink" title="基于BGP的部分工具"></a>基于BGP的部分工具</h3><p>自治系统路径信息访问列表（ as-path-filter）</p><ul><li>仅用于BGP协议，匹配BGP路由信息的自治系统路径域</li></ul><p>团体属性列表（ community-filter）</p><ul><li>仅用于BGP协议，匹配BGP路由信息的自治系统团体域</li></ul><h2 id="路由策略"><a href="#路由策略" class="headerlink" title="路由策略"></a>路由策略</h2><h3 id="路由引入"><a href="#路由引入" class="headerlink" title="路由引入"></a>路由引入</h3><h4 id="rip-x2F-ospf引入"><a href="#rip-x2F-ospf引入" class="headerlink" title="rip&#x2F;ospf引入"></a>rip&#x2F;ospf引入</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231109180514586.png" alt="image-20231109180514586"></p><p>配置相关基本rip和ospf区域地址</p><p>rip引入：在ABR——R1上配置import-route rip1</p><p>ospf引入：在ABR——R1上配置import-route ospf 1 cost 3</p><h3 id="路由过滤"><a href="#路由过滤" class="headerlink" title="路由过滤"></a>路由过滤</h3><h4 id="acl过滤路由"><a href="#acl过滤路由" class="headerlink" title="acl过滤路由"></a>acl过滤路由</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231109180912799.png" alt="image-20231109180912799"></p><p>要求：在R3配置rip路由过滤，将4.4.4.4路由过滤掉</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">acl num <span class="number">1145</span></span><br><span class="line">rule <span class="number">5</span> deny source <span class="number">4.4</span><span class="number">.4</span><span class="number">.4</span> <span class="number">0</span> </span><br><span class="line">rule <span class="number">10</span> permit </span><br><span class="line">rip <span class="number">1</span></span><br><span class="line"><span class="built_in">filter</span>-policy <span class="number">2000</span> <span class="keyword">import</span></span><br></pre></td></tr></table></figure><h4 id="IP前缀列表过滤"><a href="#IP前缀列表过滤" class="headerlink" title="IP前缀列表过滤"></a>IP前缀列表过滤</h4><p>要求：过滤R3的192.168.1.0&#x2F;24 的路由条目</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ip-prefix alex deny 192.168.1.0 24 greater-equal 25 less-equal 25</span><br><span class="line">ip-prefix alex permit</span><br><span class="line">rip </span><br><span class="line">filter-policy ip-prefix alex import </span><br></pre></td></tr></table></figure><h4 id="使用OSPF过滤路由"><a href="#使用OSPF过滤路由" class="headerlink" title="使用OSPF过滤路由"></a>使用OSPF过滤路由</h4><p><strong>只能在in方向</strong>，<strong>永远不要在ospf的出方向做过滤</strong></p><p>**路由表中虽然没有路由但是过滤器的数据库里面还存在，但是rip是直接删除</p><p>要求：在R4上过滤3.3.3.0</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">//基本属性配置</span><br><span class="line">ospf 1</span><br><span class="line">import-route rip 1</span><br><span class="line">int loop 0 </span><br><span class="line">ip ad 3.3.3.3 24 </span><br><span class="line">network 3.0.0.0</span><br><span class="line">//实验配置</span><br><span class="line">ip-prefix alex deny 3.3.3.0 24 </span><br><span class="line">ip-prefix alex permit</span><br><span class="line">ospf</span><br><span class="line">filter-policy ip-prefix alex import </span><br></pre></td></tr></table></figure><h4 id="路由引入时过滤路由"><a href="#路由引入时过滤路由" class="headerlink" title="路由引入时过滤路由"></a>路由引入时过滤路由</h4><ul><li><p>路由引入的作用是让不同路由协议域之间进行路由共享</p></li><li><p>路由引入时记得带一个开销值，不同设备默认值不同（参考带宽&#x2F;接口带宽—往上取整）</p></li><li><p>输入display IP ip-routing table  xxxx verbose以查看某条路由的详细信息</p></li><li><p>type（1）开销可以改变|type（2）开销一直不变（cost &#x3D;100M&#x2F;接口带宽）</p></li></ul><p>要求：rip在引入ospf域的路由时不将3.3.3.0引入</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">ip-prefix alex deny <span class="number">3.3</span><span class="number">.3</span><span class="number">.0</span> <span class="number">24</span> </span><br><span class="line">ip-prefix alex permit</span><br><span class="line">route-policy cw permit node <span class="number">10</span> </span><br><span class="line"><span class="keyword">if</span>-match ip-prefix alex</span><br><span class="line">ospf </span><br><span class="line">import-route rip <span class="comment">//route-policy cw</span></span><br></pre></td></tr></table></figure><h2 id="路由引入导致次优路径"><a href="#路由引入导致次优路径" class="headerlink" title="路由引入导致次优路径"></a>路由引入导致次优路径</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231104140346637.png" alt="image-20231104140346637"></p><p>问题：数据包会从100的rip和15的isisi中选择15的isis的路进行转发而绕远路耗费更多的资源</p><p><strong>改协议的优先级&#x2F;接口的优先级只能解决一时的问题，而不能完美解决次优路径</strong></p><p>对此我们需要对某一个具体的路由进行优先级配置：</p><ol><li>基于前缀列表匹配地址后在优先级设置中使用route-policy（先前缀列表设置ip ip-prefix test0721 permit 192.168.0.0 16 greater-equal 30 less-equal 32</li><li>再设置route-policy</li><li>再if-match test0721</li><li>再apply preference 160</li></ol><h2 id="防止路由环路"><a href="#防止路由环路" class="headerlink" title="防止路由环路"></a>防止路由环路</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231104163234350.png" alt="image-20231104163234350"></p><p>问题：我发的数据包到头又还给了我自己（老师把知识给我我再还回去:smile:）</p><p>解决方法：</p><p>将数据打上标签（类似vlan）</p><p>在ABR1上禁止标签10，再打上20的标签（rip-ospf方向）</p><p>在ABR2上禁止标签20，再打上10的标签（ospf-rip方向）</p><p>这样相当于一个rip域上只有20标签的数据，ospf上只有10的标签的数据</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">r1</span><br><span class="line">route-policy r1 deny node <span class="number">10</span> </span><br><span class="line"><span class="keyword">if</span>-match tag <span class="number">10</span></span><br><span class="line">route-policy r1 deny node <span class="number">20</span> </span><br><span class="line">apply tag <span class="number">20</span></span><br><span class="line">rip</span><br><span class="line">import-route ospf <span class="number">1</span> route-policy r1</span><br><span class="line"></span><br><span class="line">r2</span><br><span class="line">route-policy r2 deny node <span class="number">10</span> </span><br><span class="line"><span class="keyword">if</span>-match tag <span class="number">20</span></span><br><span class="line">route-policy r1 deny node <span class="number">20</span> </span><br><span class="line">apply tag <span class="number">10</span></span><br><span class="line">rip</span><br><span class="line">import-route ospf <span class="number">1</span> route-policy r2</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="策略路由"><a href="#策略路由" class="headerlink" title="策略路由"></a>策略路由</h2><h3 id="定义-4"><a href="#定义-4" class="headerlink" title="定义"></a>定义</h3><p><em><strong>*策略路由简称PBR（Policy-Based Routing），是针对某种数据包，直接制定的选路策略*</strong></em></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20210209104917756.png" alt="在这里插入图片描述"></p><h3 id="流程"><a href="#流程" class="headerlink" title="流程"></a>流程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231109184146269.png" alt="image-20231109184146269"></p><h1 id="数据通信7"><a href="#数据通信7" class="headerlink" title="数据通信7"></a>数据通信7</h1><p>[TOC]</p><h2 id="策略路由-1"><a href="#策略路由-1" class="headerlink" title="策略路由"></a>策略路由</h2><h2 id="策略路由的作用"><a href="#策略路由的作用" class="headerlink" title="策略路由的作用"></a>策略路由的作用</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231116224550728.png" alt="image-20231116224550728"></p><h2 id="策略路由和路由策略的区别"><a href="#策略路由和路由策略的区别" class="headerlink" title="策略路由和路由策略的区别"></a>策略路由和路由策略的区别</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231116224731322.png" alt="image-20231116224731322"></p><p>路由策略基于控制平面，策略路由基于转发平面</p><h2 id="接口策略路由"><a href="#接口策略路由" class="headerlink" title="接口策略路由"></a>接口策略路由</h2><h3 id="概述-1"><a href="#概述-1" class="headerlink" title="概述"></a>概述</h3><p><em><strong>*策略路由简称PBR是针对某种数据包，直接制定的选路策略。*</strong></em></p><p><em><strong>*策略路由的做法是，首先用ACL来定义一种特别的数据包（比如源地址为张三的包），然后再针对这个ACL定义的包，配置一个选路策略（走线路1）*</strong></em></p><h3 id="配置步骤"><a href="#配置步骤" class="headerlink" title="配置步骤"></a>配置步骤</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//第一步：定义感兴趣流，也就是策略路由要针对什么样的数据包做动作 如：用acl 3000来定义1.0访问3.0的数据包。</span></span><br><span class="line"></span><br><span class="line">acl <span class="number">3000</span></span><br><span class="line"></span><br><span class="line">rule <span class="number">5</span> permit ip source <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span> dest <span class="number">10.1</span><span class="number">.3</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//第二步：定义流分类，流分类是关联ACL的。如：用名字为huawei-control1的流分类，来关联acl 3000</span></span><br><span class="line"></span><br><span class="line">traffic classifier huawei-control1</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>-match acl <span class="number">3000</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//第三步：定义流行为，流行为是配置选路规则的，如：用名字为huuawei-control1的流行为，做一个选路策略，选路的规则，是下一跳12.1.1.2</span></span><br><span class="line"></span><br><span class="line">traffic behavior huawei-control1</span><br><span class="line"></span><br><span class="line">redirect ip-nexthop <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//第四步：定义流策略，流策略是将前面配好的流分类和流行为进行关联</span></span><br><span class="line"></span><br><span class="line">traffic policy huawei-control1</span><br><span class="line"></span><br><span class="line">classifier huawei-control1 behavior huawei-control1</span><br><span class="line"></span><br><span class="line"><span class="comment">//第五步：在路由器的入接口调用流策略</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"></span><br><span class="line">traffic-policy huawei-control1 inbound</span><br></pre></td></tr></table></figure><h2 id="IPV6"><a href="#IPV6" class="headerlink" title="IPV6"></a>IPV6</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112140802526.png" alt="image-20231112140802526"></p><h3 id="IPV6协议概述"><a href="#IPV6协议概述" class="headerlink" title="IPV6协议概述"></a>IPV6协议概述</h3><h3 id="IPV6和IPV4"><a href="#IPV6和IPV4" class="headerlink" title="IPV6和IPV4"></a>IPV6和IPV4</h3><p>v4的局限：</p><ol><li>地址空间不足且分配不均匀</li><li>达瓦</li></ol><p>v6的优势</p><ol><li><p>128位非常多</p></li><li><p>层次化的路由设计</p></li><li><p>效率高，扩展灵活</p></li><li><p>即插即用</p></li><li><p>更安全</p></li><li><p>引入了流标签的概念</p><p>IPv6地址没有了ARP（NDP（Neighbor Discovery Protocol）是ICMPv6的子协议，由于在IPv6中没有ARP协议，所以在IPv6上层定义了NDP协议实现ARP的地址解析，冲突地址检测等功能以及IPV6的邻居发现功能。）</p></li></ol><h3 id="IPv6地址分类"><a href="#IPv6地址分类" class="headerlink" title="IPv6地址分类"></a>IPv6地址分类</h3><h3 id="IPv6地址结构"><a href="#IPv6地址结构" class="headerlink" title="IPv6地址结构"></a>IPv6地址结构</h3><p>一个IPv6地址可以分为如下两部分：</p><ul><li>网络前缀：n比特，相当于IPv4地址中的网络ID</li><li>接口标识：128-n比特，相当于IPv4地址中的主机ID</li></ul><h3 id="IPv6单播地址"><a href="#IPv6单播地址" class="headerlink" title="IPv6单播地址"></a>IPv6单播地址</h3><h4 id="链路本地地址（fe80-x2F-10—-1111111010）"><a href="#链路本地地址（fe80-x2F-10—-1111111010）" class="headerlink" title="链路本地地址（fe80::&#x2F;10—-1111111010）"></a>链路本地地址（fe80::&#x2F;10—-1111111010）</h4><p>不用自己配，爽</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112145905666.png" alt="image-20231112145905666"></p><p>*mac地址是48位</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112150224922.png" alt="image-20231112150224922"></p><h4 id="唯一本地地址"><a href="#唯一本地地址" class="headerlink" title="唯一本地地址"></a>唯一本地地址</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112150516615.png" alt="image-20231112150516615"></p><h4 id="全球单播地址"><a href="#全球单播地址" class="headerlink" title="全球单播地址"></a>全球单播地址</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112150732596.png" alt="image-20231112150732596"></p><h3 id="IPv6任播地址"><a href="#IPv6任播地址" class="headerlink" title="IPv6任播地址"></a><strong>IPv6任播地址</strong></h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112152811488.png" alt="image-20231112152811488"></p><p>仁波就是特殊的单播，谁近找谁</p><h3 id="IPv6组播地址"><a href="#IPv6组播地址" class="headerlink" title="IPv6组播地址"></a>IPv6组播地址</h3><p>ipv6没有广播地址，广播就是组播的一个特列</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112152422360.png" alt="image-20231112152422360"></p><p>特殊地址：0：0：0：0：0：0：0：1环回地址</p><p>（在v4中127.后面的都是环回地址）</p><h3 id="IPV6的数据包封装"><a href="#IPV6的数据包封装" class="headerlink" title="IPV6的数据包封装"></a>IPV6的数据包封装</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112142041712.png" alt="image-20231112142041712"></p><p>《下头》</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112143106292.png" alt="image-20231112143106292"></p><p>可以用这个next header 无线拓展报文长度</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112143345884.png" alt="image-20231112143345884"></p><h3 id="IPv6地址的表示方式"><a href="#IPv6地址的表示方式" class="headerlink" title="IPv6地址的表示方式"></a>IPv6地址的表示方式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112143432386.png" alt="image-20231112143432386"></p><ol><li><p>用16进制表示，4位为一个hexo数，我们叫冒号16进制</p></li><li><p>简化表达：<strong>两个冒号之间开头的0可以省略</strong>，全0写个0<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112143747666.png" alt="image-20231112143747666"></p></li><li><p>连续的0可以用::代替（双冒号只能出现一次）</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112144235631.png" alt="image-20231112144235631"></p><ol start="4"><li>网络位和主机位（&#x2F;x确认网络号）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112144615747.png" alt="image-20231112144615747"></p><h3 id="IPv6地址的配置"><a href="#IPv6地址的配置" class="headerlink" title="IPv6地址的配置"></a>IPv6地址的配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112144633454.png" alt="image-20231112144633454"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231112144652990.png" alt="image-20231112144652990"></p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">R1 ipv6 </span><br><span class="line">R1 <span class="built_in">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">ipv6 en//关键</span><br><span class="line">ipv6 add <span class="number">2001</span>::<span class="number">1</span>/<span class="number">64</span></span><br><span class="line">//ping ipv6 地址</span><br></pre></td></tr></table></figure><h3 id="IPv6的静态路由引入"><a href="#IPv6的静态路由引入" class="headerlink" title="IPv6的静态路由引入"></a>IPv6的静态路由引入</h3><p>和IPv4很像，把IP改为IPv6就行了</p><p>ipv6 route-static XXXXX</p><p>栗子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ipv6 route <span class="number">2001</span>:ab1:<span class="number">0</span>:<span class="number">3</span>::/<span class="number">64</span> <span class="number">2001</span>:ab1:<span class="number">0</span>:<span class="number">2</span>::<span class="number">1</span></span><br><span class="line">ipv6 route <span class="number">2001</span>:ab1:<span class="number">0</span>:<span class="number">4</span>::/<span class="number">64</span> <span class="number">2001</span>:ab1:<span class="number">0</span>:<span class="number">2</span>::<span class="number">1</span></span><br><span class="line"><span class="comment">//IPv6的静态路由配置与IPv4类似。</span></span><br><span class="line"><span class="comment">//具体解释是：到达2001:ab1:0:3::/64的网络，其下一跳为2001:ab1:0:2::1</span></span><br></pre></td></tr></table></figure><h3 id="IPv6的OSPFv3"><a href="#IPv6的OSPFv3" class="headerlink" title="IPv6的OSPFv3"></a>IPv6的OSPFv3</h3><ul><li>新增两种LSA<ul><li>Link LSA：用于路由器宣告各个链路上对应的链路本地地址及其所配置的IPv6全局地址，仅在链路内洪泛。</li><li>Intra Area Prefix LSA：用于向其他路由器宣告本路由器或本网络（广播网及NBMA）的IPv6全局地址信息，在区域内洪泛。</li></ul></li></ul><p>栗子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[R1]ospfv3 <span class="number">2</span></span><br><span class="line">[R1-ospfv3<span class="number">-2</span>]router-id <span class="number">10.10</span><span class="number">.10</span><span class="number">.10</span><span class="comment">//但是建立连接的时候router-id还是ipv4的，所以我们建立不了邻居关系，要自己输入id（要在ospfv3里面输入id）</span></span><br><span class="line">[R1-ospfv3<span class="number">-2</span>]quit</span><br><span class="line"></span><br><span class="line">**[R1]interface GigabitEthernet <span class="number">0</span>/<span class="number">0</span>/<span class="number">1</span>**<span class="comment">//太方便了，连地址都不用宣告了，它直接将接口接入到了区域里</span></span><br><span class="line">[R1-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]ospfv3 <span class="number">2</span> area <span class="number">0</span></span><br><span class="line">[R1-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]quit</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="IPv6的rip"><a href="#IPv6的rip" class="headerlink" title="IPv6的rip"></a>IPv6的rip</h3><p>原理概述<br>RIPng (RIP next generation，下一代RIP协议）<strong>是IPv4中 RIPv2协议在IPv6网络上的扩展。</strong></p><p>UDP端口号:使<strong>用UDP的521端口</strong>(RIP使用520端口)发送和接收路由信息;组播地址:使<strong>用FF02::9作</strong>为链路本地范围内的RIPng路由器组播地址;</p><p>目的地址和下一跳地址:<strong>使用128 bit的IPv6地址，并使用前缀长度来代替子网掩码</strong>。</p><p>RIPng 协议路由算法和RIPv2一样，同样支持水平分割、毒性逆转和触发更新功能，用来防止环路。<strong>默认情况下，启用水平分割功能和触发更新，不启用毒性逆转功能。</strong></p><p>也很简单，就在接口下ripng+进程号+enable</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"><span class="attribute">ripng</span> <span class="number">1</span> enable</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>预习：</p><ol><li><p>BGP</p><p>动态路由协议可以按照工作范围分为IGP以及EGP。</p><p>IGP工作在同一个AS内，主要用来发现和计算路由，为AS内提供路由信息的交换；</p><p>而EGP工作在AS与AS之间，在AS间提供无环路的路由信息交换，BGP则是EGP的一种。</p><p>BGP是一种增强的路径矢量路由协议，同时BGP是拥有丰富的策略控制技术的外部网关协议。多运行于AS与AS之间。</p></li><li><p>IS-IS</p></li></ol><p>IS-IS和OSPF有很多相同和不同的地方</p><p>IS-IS有些术语和OSPF有所不同<br>1.一台路由器就是一个中间系统（Intermediate System，IS）<br>2.一台主机就是一个端系统（End System，ES）<br>因此，主机和路由器之间的通信的协议被称为ES-IS协议<br>被路由器用来进行彼此通告路由的协议称为IS-IS协议</p><h1 id="数据通信8"><a href="#数据通信8" class="headerlink" title="数据通信8"></a>数据通信8</h1><p>[TOC]</p><h2 id="概述-2"><a href="#概述-2" class="headerlink" title="概述"></a>概述</h2><p><strong>介绍</strong></p><ul><li><p>bgp的前身叫egp</p></li><li><p><strong>自治系统内部ibgp</strong>，外部ebgp</p></li><li><p>可以将一个自治系统看成运营商，运营商的内部用什么协议无所谓，之间必须用bgp统一沟通方法</p></li></ul><p><strong>ibgp和ebgp对比</strong></p><ul><li>ibgp作用于区域内部，engp作用于区域之间</li><li>使用的bgp的属性不同</li><li>避免环路的措施不同：i—不转发学习到的路由前缀  e—as_path里有自己就会丢弃，as短越优先</li></ul><h2 id="bgp特征"><a href="#bgp特征" class="headerlink" title="bgp特征"></a>bgp特征</h2><p><strong>是一种增强的距离矢量路由协议</strong></p><p><strong>特点</strong></p><ul><li><p>设计避免了路由环路</p></li><li><p>路由附加信息多</p></li><li><p>路由过滤和路由策略多</p></li><li><p>可靠的路由更新机制</p></li><li><p><strong>丰富的Metric度量方法</strong></p></li><li><p>从设计上避免了环路的发生</p></li><li><p>支持CIDR（无类别域间选路）</p></li><li><p>每一个设备只能有一个as</p></li></ul><h2 id="BGP五条5报文"><a href="#BGP五条5报文" class="headerlink" title="BGP五条5报文"></a>BGP五条5报文</h2><ul><li><p>open：建立邻居关系（打开心扉）</p></li><li><p>KeepAlive：字面意思，维持邻居关系</p></li><li><p>Update：更新路由的报文</p></li><li><p>Notification：翻译为注意，相当于一个告警,当你配错了会指出你的问题</p></li><li><p>route-refresh:用于在改变<strong>路由策略</strong>后请求对等体重新发送路由信息（请求更新）</p></li></ul><h2 id="BGP的状态机"><a href="#BGP的状态机" class="headerlink" title="BGP的状态机"></a>BGP的状态机</h2><p>connect：tcp的连接（三次握手）</p><p>open-sent：tcp连接成功后发送open报文</p><p>open-confirm：准备接收对方报文（keep alive？notici？）</p><p>active：connet的tcp连接失败进入active不断尝试tcp建立</p><p>established：建立完成后的状态</p><p>idle：出现错误之后的状态</p><p><strong>可能的active原因（待补充）</strong></p><ul><li>过滤了本设备IP流量或者TCP流量或者TCP-179端口数据</li><li>本BGP设备配置错误的对等体地址</li></ul><h2 id="工作过程"><a href="#工作过程" class="headerlink" title="工作过程"></a>工作过程</h2><h3 id="连接过程"><a href="#连接过程" class="headerlink" title="连接过程"></a>连接过程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231121233214701.png" alt="image-20231121233214701"></p><ol><li>先进入到connect进行tcp三次握手tcp连接（失败后进入alive不断进行tcp连接，成功后发送open-sent ）</li><li>之后发送open报文</li><li>进入到openconfirm 后等待对方发送报文（接收到keep alive 进入established ，收到noticification进入到idle）</li><li>之后在established之间发update报文更新新加入路由，发keep alive维持邻居关系（ospf 是hello）</li><li><strong>idle是bgp的初始状态，任何状态出错都会回到idle</strong></li></ol><h3 id="可靠路由更新"><a href="#可靠路由更新" class="headerlink" title="可靠路由更新"></a>可靠路由更新</h3><p><strong>BGP也会利用IGP</strong></p><ul><li><p>协议：tcp 端口：179</p></li><li><p>无周期（路由）更新</p></li><li><p>更新增加的路由</p></li><li><p>周期发keepalive报文检测tcp连通</p></li></ul><h2 id="实验配置-5"><a href="#实验配置-5" class="headerlink" title="实验配置"></a>实验配置</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231118111336011.png" alt="image-20231118111336011"></p><ol><li><p>先宣告as：bgp 1（as 1）</p></li><li><p>宣告相连as：peer xxxx（目的地址）asnumber xxxx（双向奔赴）</p></li><li><p>如果要使用环回口进行bgp连接不能直接加目的地址，还要加上自己的发送环回口：（1）peer  4.4.4.4 asnumer 16（2）<strong>peer 4.4.4.4 connect-interface loop 0</strong>（注意：bgp建立邻居关系不能使用默认路由 ）</p></li><li><p><strong>nexthop</strong>：ibgp得到的路由信息只是简单的copy，但是中间的路由器下一跳路由表里面没有，增加一个下一跳行为（<strong>方式一</strong>：添加静态路由  <strong>方式二</strong>：<strong>next-hop-local</strong>—–[R2-bgp]peer 4.4.4.4 next-hop-local ）(?)</p></li><li><p>ebgp的一个特性是ttl值默认为1，那么在两个路由器之间跳数大于1时tcp就连接不了（双向修改ttl—peer 6.6.6.6 ebgp-max-hop 255）</p></li><li><p><strong>路由黑洞</strong>：中间的路由器缺少路由丢包  </p><pre><code> 解决方法：</code></pre></li></ol><ul><li><p>直接写一个静态路由（缺点有些路由器空间可能不够）</p></li><li><p>配置MPLS，用MPLS的标签交换数据包（?）</p></li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">[R2]route recursive-lookup tunnel </span><br><span class="line">[R2]mpls lsr-id <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span></span><br><span class="line">[R2]mpls </span><br><span class="line">[R2]mpls ldp </span><br><span class="line">[R2]inter g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[R2-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]mpls </span><br><span class="line">[R2-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]mpls ldp </span><br><span class="line"></span><br><span class="line">[R2]display  mpls lsp #查看标签转发规则</span><br><span class="line"></span><br><span class="line">[R3]route recursive-lookup tunnel </span><br><span class="line">[R3]mpls lsr-id <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> </span><br><span class="line">[R3]mpls </span><br><span class="line">[R3]mpls ldp </span><br><span class="line">[R3]inter g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[R3-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]mpls</span><br><span class="line">[R3-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]mpls ldp </span><br><span class="line">[R3]inter g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[R3-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]mpls </span><br><span class="line">[R3-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]mpls ldp</span><br><span class="line"></span><br><span class="line">[R4]route recursive-lookup tunnel </span><br><span class="line">[R4]mpls lsr-id <span class="number">4.4</span><span class="number">.4</span><span class="number">.4</span></span><br><span class="line">[R4]mpls </span><br><span class="line">[R4]mpls ldp </span><br><span class="line">[R4]inter g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[R4-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]mpls </span><br><span class="line">[R4-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]mpls ldp </span><br></pre></td></tr></table></figure><p>解释：在进入到mpls区域里面之前不打标签（r2的0接口），进入到mpls之后启动mpls ldp的接口会为数据打上标签，按照标签表进行转发（可以打dis mpls lsp 查看标签表），出mpls的出接口不做配置，会自己将标签解除。</p><ul><li>使用路由联盟和路由反射</li><li>bgp同步</li><li>路由引入</li><li></li></ul><ol start="7"><li><p><strong>bgp认证</strong>：bgp 1 然后peer 4.4.4.4 password cipher 123456</p></li><li><p><strong>bgp中使用路由策略</strong>：1.acl 2000 2.rule x deny&#x2F;permit 3.peer 4.4.4.4 as-num 16 filter-policy 2000 export&#x2F;import</p></li><li><p><strong>路由聚合</strong>：</p></li></ol><p>方式1(自动)：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">1.</span> bgp 1</span><br><span class="line"><span class="bullet">2.</span> import-route direct</span><br><span class="line"><span class="bullet">3.</span> summary automatic（只能聚合路由引入的路由）</span><br></pre></td></tr></table></figure><p>方式2（静态）：</p><p>太暴力了，能不能自定义聚合的长度呢？</p><p>有！</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[<span class="meta">R1</span>]bgp <span class="number">1</span></span><br><span class="line">[<span class="meta">R1-bgp</span>]network <span class="number">10.1</span><span class="number">.0</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line">[<span class="meta">R1-bgp</span>]network <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line">[<span class="meta">R1-bgp</span>]network <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line">[<span class="meta">R1-bgp</span>]network <span class="number">10.1</span><span class="number">.3</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line">[<span class="meta">R1-bgp</span>]ip route-<span class="keyword">static</span> <span class="number">10.1</span><span class="number">.0</span><span class="number">.0</span> <span class="number">22</span> <span class="literal">null</span> <span class="number">0</span></span><br></pre></td></tr></table></figure><p>用引入路由聚合会直接聚合范围太大了，可以用引入静态路由的方法，优点是既可以自定义掩码长度，又可以防止成环（一个路由down了就跑到10.10.0.0 22 ，又因为是null 0直接就丢弃了，不会再去请求路由了）</p><pre><code>方式3（手动）：</code></pre><figure class="highlight v"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[R1]bgp <span class="number">1</span></span><br><span class="line">[R1-bgp]network <span class="number">10</span><span class="variable">.1</span><span class="variable">.0</span><span class="variable">.0</span> <span class="number">24</span></span><br><span class="line">[R1-bgp]network <span class="number">10</span><span class="variable">.1</span><span class="variable">.1</span><span class="variable">.0</span> <span class="number">24</span></span><br><span class="line">[R1-bgp]network <span class="number">10</span><span class="variable">.1</span><span class="variable">.2</span><span class="variable">.0</span> <span class="number">24</span></span><br><span class="line">[R1-bgp]network <span class="number">10</span><span class="variable">.1</span><span class="variable">.3</span><span class="variable">.0</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[R1-bgp]aggregate <span class="number">10</span><span class="variable">.1</span><span class="variable">.0</span><span class="variable">.0</span> <span class="number">22</span>   使用此命令会使明细路由和汇总路由同时被宣告</span><br><span class="line">[R1-bgp]aggregate <span class="number">10</span><span class="variable">.1</span><span class="variable">.0</span><span class="variable">.0</span> <span class="number">22</span> detail-suppressed   只宣告汇总路由</span><br></pre></td></tr></table></figure><ol start="10"><li><p><strong>peer group</strong></p><p>就是为了方便打命令，类似于ctrl + v</p></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[R2-bgp]group benben </span><br><span class="line">[R2-bgp]peer benben as-number <span class="number">16</span> </span><br><span class="line">[R2-bgp]peer <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> group benben</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>​</p><h2 id="BGP管理距离（优先级）"><a href="#BGP管理距离（优先级）" class="headerlink" title="BGP管理距离（优先级）"></a>BGP管理距离（优先级）</h2><p>ibgp：200</p><p>ebgp：255</p><h2 id="bgp表的分析"><a href="#bgp表的分析" class="headerlink" title="bgp表的分析"></a>bgp表的分析</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231118100119104.png" alt="image-20231118100119104"></p><ol><li>path用来防环操作</li><li>ogn表示用什么学习到路由，i代表igp，e代表bgp，？代表其他</li><li>*&gt;奇怪的命名，bgp和ibgp的这个符号不同(i)</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"> Status codes: * - valid, &gt; - best, d - damped,</span><br><span class="line">               h - history,  i - internal, s - suppressed, S - Stale</span><br><span class="line">                   </span><br><span class="line">Origin : i - IGP, e - EGP, ? - incomplete（引入路由）</span><br></pre></td></tr></table></figure><h2 id="BGP属性和路径选择处理"><a href="#BGP属性和路径选择处理" class="headerlink" title="BGP属性和路径选择处理"></a><strong>BGP属性和路径选择处理</strong></h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231123105752364.png" alt="image-20231123105752364"></p><h3 id="BGP的属性"><a href="#BGP的属性" class="headerlink" title="BGP的属性"></a>BGP的属性</h3><table><thead><tr><th>属性名</th><th>传播范围</th><th>默认值</th><th>评判标准</th></tr></thead><tbody><tr><td>PV</td><td>不传播</td><td>0</td><td>越大越好</td></tr><tr><td>LP</td><td>IGBP之间传播</td><td>100</td><td>越大越好</td></tr><tr><td>AS_PATH</td><td>EBGP 之间</td><td>无</td><td>记录数越少越好</td></tr><tr><td>OGN</td><td>EBGP 之间</td><td>根据起源类型决定</td><td>i&gt;e&gt;?</td></tr><tr><td>MED</td><td>EBGP 之间</td><td>继承了路由表中该路由条目的开销值</td><td>越小越优先</td></tr></tbody></table><h3 id="属性分类"><a href="#属性分类" class="headerlink" title="属性分类"></a>属性分类</h3><table><thead><tr><th>公认必遵（Well-known mandatory</th><th>公认任意（Well-known discretionary）</th><th>可选过渡（Optional transtive）</th><th>可选非过渡（Optional non-transtive）</th></tr></thead><tbody><tr><td><strong>Origin(起源)</strong></td><td><strong>LOCAL-PREF（本地优先级）</strong></td><td><strong>AGGREGATOR（聚合）</strong></td><td><strong>MED（多出口鉴别器）</strong></td></tr><tr><td><strong>AS_PATH（AS路径）</strong></td><td><strong>ATOMIC_AGGREGATE（原子聚合）</strong></td><td><strong>COMMUNITY（团体）</strong></td><td><strong>ORIGINATOR_ ID（发起人ID）</strong></td></tr><tr><td><strong>NEXT_HOP（下一跳）</strong></td><td>&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;</td><td>&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;</td><td><strong>WEIGHT（权重值）</strong></td></tr></tbody></table><h3 id="BGP的路径选择"><a href="#BGP的路径选择" class="headerlink" title="BGP的路径选择"></a>BGP的路径选择</h3><ol><li><strong>WEIGHT&#x2F;Prefval属性</strong></li></ol><ul><li><p>多条路径weight&#x2F;prefval值高就先选哪一个</p></li><li><p>本地有效</p></li><li><p>路由策略永远都是import</p><p>  方式一：</p></li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[r4-bgp]peer <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> preferred-value <span class="number">100</span></span><br></pre></td></tr></table></figure><pre><code>方式二：</code></pre><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span>，抓取流量</span><br><span class="line">[r4]ip ip-prefix PV permit <span class="number">10.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line"><span class="number">2</span>，做路由策略</span><br><span class="line">[r4]route-policy PV permit node <span class="number">10</span></span><br><span class="line">[r4-route-policy]<span class="keyword">if</span>-match ip-prefix pv</span><br><span class="line">[r4-route-policy]apply preferred-value <span class="number">100</span></span><br><span class="line">[r4]route-policy PV permit node <span class="number">20</span> --- 注意，必须要配置空表放通剩余所有流量</span><br><span class="line"><span class="number">3</span>，在BGP中调用路由策略</span><br><span class="line">[r4-bgp]peer <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> route-policy PV import</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><ol start="2"><li><strong>local preference</strong></li></ol><ul><li>Local preference是被用作去通告IBGP邻居怎样去离开他们的AS</li><li>Local preference被仅仅被发送给IBGP邻居的，（即仅同一AS内，是AS内部最常用的选路属性）</li><li>默认值是100</li></ul><p>方式一（全局）：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[r3-bgp]<span class="keyword">default</span> local-preference <span class="number">200</span> --- R3之后发给IBGP对等体的路由的LP属性都将被改为<span class="number">200</span></span><br></pre></td></tr></table></figure><p>方式二（精细）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">在R3的出方向做</span><br><span class="line"><span class="number">1</span>，抓取流量</span><br><span class="line">[r3]ip ip-prefix lp permit <span class="number">10.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line"><span class="number">2</span>，做路由策略</span><br><span class="line">[r3]route-policy lp permit node <span class="number">10</span></span><br><span class="line">[r3-route-policy]<span class="keyword">if</span>-match ip-prefix lp</span><br><span class="line">[r3-route-policy]apply local-preference <span class="number">300</span></span><br><span class="line">[r3]route-policy lp permit node <span class="number">20</span></span><br><span class="line"><span class="number">3</span>，在BGP进程中调用</span><br><span class="line">[r3-bgp]peer <span class="number">4.4</span><span class="number">.4</span><span class="number">.4</span> route-policy lp export</span><br><span class="line"></span><br></pre></td></tr></table></figure><ol start="3"><li>路由起源于<strong>本地优先</strong>于从其他bgp邻居中学习到</li></ol><p>手工聚合 &gt; 自动聚合 &gt; network &gt; import</p><ol start="4"><li><strong>ASPath越短越优先</strong></li></ol><ul><li><pre><code>**仅在EBGP中有效**</code></pre></li><li>AS_PATH属性在进行选路时，<strong>仅关注AS号的长短</strong>，不关注内容。</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">方法一：在R1的出方向修改AS_PATH属性。</span><br><span class="line"><span class="number">1</span>，抓取流量</span><br><span class="line">[r1]ip ip-prefix as permit <span class="number">10.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line"><span class="number">2</span>，配置路由策略</span><br><span class="line">[r1]route-policy as permit node <span class="number">10</span></span><br><span class="line">[r1-route-policy]<span class="keyword">if</span>-match ip-prefix as</span><br><span class="line">[r1-route-policy]apply as-path <span class="number">11</span> <span class="number">22</span> <span class="number">33</span> ?</span><br><span class="line"><span class="comment">/*additive*/</span> Append to original As Number ---- 在原有AS_PATH属性的基础上添加配置的AS号</span><br><span class="line"><span class="comment">/*overwrite*/</span> Overwrite original As Number ---- 直接覆盖原有的AS_PATH属性值</span><br><span class="line">  </span><br><span class="line">[r1-route-policy]apply as-path <span class="number">11</span> <span class="number">22</span> <span class="number">33</span> additive --- 建议使用添加，因为AS_path属性主要任务用来防止环路，将原有属性覆盖可能导致路由回传，造成环路产生。</span><br><span class="line">[r1]route-policy as permit node <span class="number">20</span><span class="comment">//放行其他</span></span><br><span class="line"><span class="number">3</span>，在BGP中调用策略</span><br><span class="line">[r1-bgp]peer <span class="number">12.0</span><span class="number">.0</span><span class="number">.2</span> route-policy as export</span><br><span class="line"></span><br></pre></td></tr></table></figure><ol start="5"><li><strong>路由起源属性</strong></li></ol><ul><li><pre><code>    **全局有效**</code></pre></li><li>I — 代表该<strong>路由信息起源于IGP协议</strong></li><li>E — 代表该路由信息<strong>起源于EGP协议</strong> — EGP指的是BGP之前使用的外部网关协议</li><li>？ — 通过除了以上两种方式学习到的路由 -<strong>– 重发布导入的路由</strong>起源码都是？</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">控制选路的方法：</span><br><span class="line"><span class="number">1</span>，抓流量</span><br><span class="line">[r2]ip ip-prefix ogn permit <span class="number">10.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line"><span class="number">2</span>，配置路由策略</span><br><span class="line">[r2]route-policy ogn permit node <span class="number">10</span></span><br><span class="line">[r2-route-policy]<span class="keyword">if</span>-match ip-prefix ogn</span><br><span class="line">[r2-route-policy]apply origin incomplete</span><br><span class="line">[r2]route-policy ogn permit node <span class="number">20</span></span><br><span class="line"><span class="number">3</span>，在BGP中进行调用</span><br><span class="line">[r2-bgp]peer <span class="number">12.0</span><span class="number">.0</span><span class="number">.1</span> route-policy ogn import</span><br><span class="line"></span><br></pre></td></tr></table></figure><ol start="6"><li><p><strong>MED</strong>：</p><ul><li>只能用于EGBP</li><li>路由引入的cost值引入到bgp里面不变，存到med中，开销小优先（多路选择）</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">在R2上配置，影响R1的选路</span><br><span class="line"><span class="number">1</span>，抓取流量</span><br><span class="line">[r2]ip ip-prefix med permit <span class="number">4.4</span><span class="number">.4</span><span class="number">.0</span> <span class="number">24</span></span><br><span class="line"><span class="number">2</span>，配置路由策略</span><br><span class="line">[r2]route-policy med permit node <span class="number">10</span></span><br><span class="line">[r2-route-policy]<span class="keyword">if</span>-match ip-prefix med</span><br><span class="line">[r2-route-policy]apply cost <span class="number">10</span></span><br><span class="line">[r2]route-policy med permit node <span class="number">20</span></span><br><span class="line"><span class="number">3</span>，在BGP进程中调用</span><br><span class="line">[r2-bgp]peer <span class="number">12.0</span><span class="number">.0</span><span class="number">.1</span> route-policy med export</span><br><span class="line">注意：MED值影响的是别的AS的流量通过多个出口进入到本AS内部，如果流入的不是同一个AS，即收到的路由条目中AS_PATH属性最左边的AS号不同，则将不比较第六条，直接比较第<span class="number">7</span>条。</span><br><span class="line"></span><br></pre></td></tr></table></figure></li><li><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231118161507165.png" alt="image-20231118161507165"></p><pre><code> 剩下的省略...</code></pre></li></ol><p>总结（？）：</p><ol><li>一个路由器有多个出口时一般用weight&#x2F;pv来控制选路</li><li>一个AS内有多个出口时一般用Local_pref</li><li>影响其他人选路用MED out方向，影响自己选路用MED in方向</li><li>影响多个AS选路用AS-path</li><li>origin next-hop一般不用，有时会影响BGP的正常选路</li></ol><h2 id="路由反射"><a href="#路由反射" class="headerlink" title="路由反射"></a>路由反射</h2><ul><li><p>水平分割不允许ibgp转发从ibgp学习到的路由，但是你把它升级成路由反射器再配置相应的客户机就可以进行路由转发了</p></li><li><p>当RR从<strong>客户机</strong>收到一个路由更新时，会将它发送给<strong>客户机和非客户机。</strong></p></li><li><p>当RR从<strong>非客户机</strong>收到一个路由更新时，只发送给<strong>客户机</strong>路由器，而不发送给其他非客户机路由器</p></li><li><p>当RR从<strong>EBGP</strong>收到一个路由更新时，会将它发送给<strong>客户机和非客户机。</strong></p><p>  <strong><u>省流：非非不传，其他全传</u></strong></p></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231122004449268.png" alt="image-20231122004449268"></p><p>在图中的ar2和3建立一个连接，ar3和4建立一个连接（r3做rr，r2和r4做客户端）</p><p><strong>配置</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[r3]bgp <span class="number">16</span></span><br><span class="line">[r3-bgp]peer <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span>  reflect-client </span><br><span class="line">[r3-bgp]peer <span class="number">34.1</span><span class="number">.1</span><span class="number">.4</span>  reflect-client</span><br></pre></td></tr></table></figure><p>路由反射问题解决：</p><ul><li><strong>反射簇</strong>解决路由<strong>环路</strong></li><li><strong>Originator ID属性</strong>解决<strong>再次学习</strong>问题</li></ul><h2 id="路由联盟"><a href="#路由联盟" class="headerlink" title="路由联盟"></a>路由联盟</h2><p>在大的as中分割出更小的as</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231118163953382.png" alt="image-20231118163953382"></p><p>在这个图中r1发送给r2，r2可以再把数据给r3，一般的r3不能发给r4，但是我们做了两个小的as，那么逻辑上r2和r3就成为了ebgp，可以进行路由转发</p><p><strong>配置</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*在R1上配置：*/</span></span><br><span class="line">bgp <span class="number">1</span></span><br><span class="line">peer <span class="number">12.0</span><span class="number">.0</span><span class="number">.2</span> as-number <span class="number">2</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/*R2上关键配置：*/</span></span><br><span class="line">bgp <span class="number">65512</span> <span class="comment">//本机AS为成员AS号（小as）</span></span><br><span class="line">confederation id <span class="number">2</span><span class="comment">//联盟ID，外部路由器看来，连接AS仍然为2</span></span><br><span class="line">confederation peer-as <span class="number">65512</span> <span class="comment">//说明本机连接了其他哪些成员AS，都是小区域（as3）</span></span><br><span class="line"></span><br><span class="line">peer <span class="number">23.0</span><span class="number">.0</span><span class="number">.3</span> as-number <span class="number">65512</span> <span class="comment">//和成员建立EBGP邻居关系</span></span><br><span class="line">    </span><br><span class="line">peer <span class="number">12.0</span><span class="number">.0</span><span class="number">.1</span> as-number <span class="number">1</span> <span class="comment">//和非成员建立IBGP邻居关系</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/*R3上关键配置：*/</span></span><br><span class="line">bgp <span class="number">65512</span> <span class="comment">//本机AS为成员AS号（小as）</span></span><br><span class="line">confederation id <span class="number">2</span><span class="comment">//联盟ID，外部路由器看来，连接AS仍然为2</span></span><br><span class="line">confederation peer-as <span class="number">65512</span> <span class="comment">//说明本机连接了其他哪些成员AS（as3）</span></span><br><span class="line">confederation peer-as <span class="number">65513</span> <span class="comment">//说明本机连接了其他哪些成员AS（as3）</span></span><br><span class="line"></span><br><span class="line">peer <span class="number">23.0</span><span class="number">.0</span><span class="number">.2</span> as-number <span class="number">65512</span> <span class="comment">//和成员建立EBGP邻居关系</span></span><br><span class="line">    </span><br><span class="line">peer <span class="number">34.0</span><span class="number">.0</span><span class="number">.4</span> as-number <span class="number">63513</span><span class="comment">//和非成员建立IBGP邻居关系</span></span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"><span class="comment">/*R4上关键配置：*/</span></span><br><span class="line">bgp <span class="number">65513</span> <span class="comment">//本机AS为成员AS号（小as）</span></span><br><span class="line">confederation id <span class="number">2</span><span class="comment">//联盟ID，外部路由器看来，连接AS仍然为2</span></span><br><span class="line">confederation peer-as <span class="number">65512</span> <span class="comment">//说明本机连接了其他哪些成员AS（as3）</span></span><br><span class="line">confederation peer-as <span class="number">65513</span> <span class="comment">//说明本机连接了其他哪些成员AS（as3）</span></span><br><span class="line"></span><br><span class="line">peer <span class="number">45.0</span><span class="number">.0</span><span class="number">.5</span> as-number <span class="number">65513</span> <span class="comment">//和成员建立EBGP邻居关系</span></span><br><span class="line">    </span><br><span class="line">peer <span class="number">34.0</span><span class="number">.0</span><span class="number">.3</span> as-number <span class="number">63512</span><span class="comment">//和非成员建立IBGP邻居关系</span></span><br><span class="line">    </span><br><span class="line"><span class="comment">/*R5上关键配置：*/</span></span><br><span class="line">bgp <span class="number">65513</span> <span class="comment">//本机AS为成员AS号（小as）</span></span><br><span class="line">confederation id <span class="number">2</span><span class="comment">//联盟ID，外部路由器看来，连接AS仍然为2</span></span><br><span class="line">    </span><br><span class="line">confederation peer-as <span class="number">65513</span> <span class="comment">//说明本机连接了其他哪些成员AS（as3）</span></span><br><span class="line"></span><br><span class="line">peer <span class="number">45.0</span><span class="number">.0</span><span class="number">.4</span> as-number <span class="number">65513</span> <span class="comment">//和成员建立EBGP邻居关系</span></span><br><span class="line">    </span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="数据通信9"><a href="#数据通信9" class="headerlink" title="数据通信9"></a>数据通信9</h1><p>[TOC]</p><h2 id="smart-link（断了选路）"><a href="#smart-link（断了选路）" class="headerlink" title="smart-link（断了选路）"></a>smart-link（断了选路）</h2><h3 id="概述-3"><a href="#概述-3" class="headerlink" title="概述"></a>概述</h3><p>实现两根线的备份，和生成树类似，但是不用计算</p><p><strong>设置一个master和slave，主挂了次就顶上来</strong></p><h3 id="特点"><a href="#特点" class="headerlink" title="特点"></a><strong>特点</strong></h3><ol><li>两根上行链路只走一条，打破回路</li><li>主链路故障后流量会立刻切换到备用的链路上</li><li>配置简单</li><li>没有协议交互报文，大大提升收敛速度</li></ol><h3 id="实验配置-6"><a href="#实验配置-6" class="headerlink" title="实验配置"></a>实验配置</h3><p><strong>samrt-link的功能与生成树冲突，因此要先关闭stp</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">stp disable</span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">stp disable</span><br><span class="line">smart-link group <span class="number">1</span></span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">0</span> master </span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">2</span> slave</span><br><span class="line">restore enable<span class="comment">//回切功能打开</span></span><br><span class="line">time wtr <span class="number">30</span><span class="comment">//等待回切时间</span></span><br></pre></td></tr></table></figure><h2 id="monitor-link（一起断）"><a href="#monitor-link（一起断）" class="headerlink" title="monitor-link（一起断）"></a>monitor-link（一起断）</h2><h3 id="概述-4"><a href="#概述-4" class="headerlink" title="概述"></a>概述</h3><p>为了解决smart-link的的缺点</p><h3 id="实验配置-7"><a href="#实验配置-7" class="headerlink" title="实验配置"></a>实验配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231202110137413.png" alt="image-20231202110137413"></p><p>将交换机LSW2 1和2端口配置monitor link，将2号口设置为uplink，1号口设置为downink</p><p>将交换机LSW3 1和2端口配置monitor link，将2号口设置为uplink，1号口设置为downink</p><p>R1</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">stp disable</span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">stp disable</span><br><span class="line">smart-link enable</span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">1</span> master</span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">2</span> slave</span><br><span class="line">flush send contorl-vlan <span class="number">1</span></span><br></pre></td></tr></table></figure><p>R2</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">stp disable</span><br><span class="line">smart-link flush receive control-vlan <span class="number">1</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">stp disable</span><br><span class="line">smart-link flush receive control-vlan <span class="number">1</span></span><br><span class="line">smart-link enable</span><br><span class="line">monitor-link group <span class="number">1</span></span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">1</span> uplink</span><br><span class="line">port g0/<span class="number">0</span>/<span class="number">2</span> downlink <span class="number">1</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>R3</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"><span class="attribute">stp</span> disable</span><br><span class="line"><span class="attribute">smart</span>-link flush receive control-vlan <span class="number">1</span></span><br><span class="line"><span class="attribute">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"><span class="attribute">stp</span> disable</span><br><span class="line"><span class="attribute">smart</span>-link flush receive control-vlan <span class="number">1</span></span><br><span class="line"><span class="attribute">smart</span>-link enable</span><br><span class="line"><span class="attribute">monitor</span>-link group <span class="number">1</span></span><br><span class="line"><span class="attribute">port</span> g0/<span class="number">0</span>/<span class="number">1</span> uplink</span><br><span class="line"><span class="attribute">port</span> g0/<span class="number">0</span>/<span class="number">2</span> downlink <span class="number">1</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="VRRP（备份-一个断了另一个补上）"><a href="#VRRP（备份-一个断了另一个补上）" class="headerlink" title="VRRP（备份-一个断了另一个补上）"></a>VRRP（备份-一个断了另一个补上）</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231202103235036.png" alt="image-20231202103235036"></p><h3 id="概述-5"><a href="#概述-5" class="headerlink" title="概述"></a>概述</h3><ul><li><p>虚拟路由器备份协议，用于一个pc有多个链路选择但是仅有一个网关（<strong>网关备份</strong>）</p></li><li><p>先在多个路由器里面选一个主机（master），其他的作为备份机（back-up）</p></li><li><p>pc在找自己的网关的时候会发送arp请求报文，只有master会回应arp请求</p></li></ul><h3 id="实验配置-8"><a href="#实验配置-8" class="headerlink" title="实验配置"></a>实验配置</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vrrp vrid <span class="number">1</span></span><br><span class="line">vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.234</span><span class="number">.0</span><span class="number">.1</span><span class="comment">//不存在的ip地址</span></span><br></pre></td></tr></table></figure><p><strong>虚拟mac地址<u>00:00:5e:00:01</u>:xx</strong>(16进制)</p><p>？那么master是<strong>怎么选举</strong>出来的呢？</p><ol><li>比较优先级，默认100（<strong>具备抢占性</strong>，可以自己关）</li><li>比较ip地址（<strong>不具备抢占性</strong>，一开始配置的就是master，如果需要更换，把接口关了再开，就会切换了）</li></ol><h3 id="链路状态监测"><a href="#链路状态监测" class="headerlink" title="链路状态监测"></a>链路状态监测</h3><h4 id="基于端口-1"><a href="#基于端口-1" class="headerlink" title="基于端口"></a>基于端口</h4><p><strong>下行链路做的vrrp，那么向上的链路down了怎么办呢？</strong></p><p>我们可以做一个<strong>vrrp跟踪</strong>来监控特定端口，如果端口出现异常使得优先级降低，这样就可以切换master了</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vrrp vrid <span class="number">1</span> track <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span> reduced <span class="number">10</span> </span><br></pre></td></tr></table></figure><h4 id="基于nqa"><a href="#基于nqa" class="headerlink" title="基于nqa"></a>基于nqa</h4><p><strong>但是这样也有问题，线路没断就不会切换，要使用nqa来解决（判断标准更多）</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[RouterA] nqa test-instance user test</span><br><span class="line">[RouterA-user-test] test-type icmp</span><br><span class="line">[RouterA-user-test] destination-address ipv4 <span class="number">20.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line">[RouterA-user-test] frequency <span class="number">20</span></span><br><span class="line">[RouterA-user-test] probe-count <span class="number">5</span></span><br><span class="line">[RouterA-user-test] fail-percent <span class="number">80</span></span><br><span class="line">[RouterA-user-test] start now</span><br><span class="line">[RouterA-user-test] quit</span><br></pre></td></tr></table></figure><h2 id="MUX-VLAN（分隔vlan）"><a href="#MUX-VLAN（分隔vlan）" class="headerlink" title="MUX-VLAN（分隔vlan）"></a>MUX-VLAN（分隔vlan）</h2><h3 id="访问规则"><a href="#访问规则" class="headerlink" title="访问规则"></a>访问规则</h3><ul><li>在隔离域内部的主机既不能和本域主机通信，也不可以和外部通信</li><li>在一个组里面的主机可以互相通信</li><li>主vlan可以和所有的主机通信</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231206224235529.png" alt="image-20231206224235529"></p><h3 id="实验配置-9"><a href="#实验配置-9" class="headerlink" title="实验配置"></a>实验配置</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">- vlan batch <span class="number">100</span> <span class="number">200</span> <span class="number">300</span> <span class="number">400</span></span><br><span class="line"></span><br><span class="line">- vlan <span class="number">100</span></span><br><span class="line">- mux-vlan  </span><br><span class="line"></span><br><span class="line">- subordinate separate <span class="number">400</span>（该vlan内pc谁都联系不了）</span><br><span class="line"></span><br><span class="line">- subordinate group <span class="number">200</span> <span class="number">300</span>（该vlan200内pc可以互相通信，但是<span class="number">200</span>和<span class="number">300</span>不可以）</span><br><span class="line"></span><br><span class="line">- 其他就和之前学的vlan划分类似：</span><br><span class="line"></span><br><span class="line">- interface GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">100</span></span><br><span class="line">  **port mux-vlan enable**<span class="comment">//但是多了句</span></span><br></pre></td></tr></table></figure><h2 id="VLAN聚合（SUPER-VLAN）"><a href="#VLAN聚合（SUPER-VLAN）" class="headerlink" title="VLAN聚合（SUPER VLAN）"></a>VLAN聚合（SUPER VLAN）</h2><h4 id="概述-6"><a href="#概述-6" class="headerlink" title="概述"></a>概述</h4><p>定义Super-VLAN和Sub-VLAN</p><p>实现所有Sub-VLAN共用一个网关与外部网络通信，并用ARP Proxy实现Sub-VLAN间的三层通信，从而在实现普通VLAN的隔离广播域的同时，达到节省IP地址的目的。</p><h4 id="实验配置-10"><a href="#实验配置-10" class="headerlink" title="实验配置"></a>实验配置</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231206230552259.png" alt="image-20231206230552259"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line">lsw2</span><br><span class="line">vlan <span class="number">10</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">10</span>  </span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">10</span></span><br><span class="line"></span><br><span class="line">lsw3</span><br><span class="line">vlan <span class="number">20</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">20</span>  </span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">20</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">lsw4</span><br><span class="line">vlan <span class="number">30</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">30</span>  </span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">30</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">lsw1 </span><br><span class="line">vlan batch <span class="number">10</span> <span class="number">20</span> <span class="number">30</span> <span class="number">100</span> <span class="number">200</span></span><br><span class="line">vlan <span class="number">100</span> </span><br><span class="line">aggregate-vlan<span class="comment">// 打开vlan聚合</span></span><br><span class="line">access-vlan <span class="number">10</span> <span class="number">20</span> <span class="number">30</span><span class="comment">//聚合对象是10 20 30</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">port link-type access</span><br><span class="line">port <span class="keyword">default</span> vlan <span class="number">200</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">port link-type trunk</span><br><span class="line">port trunk allow-pass vlan <span class="number">10</span> <span class="number">20</span> <span class="number">30</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">3</span></span><br><span class="line">port link-type trunk</span><br><span class="line">port trunk allow-pass vlan <span class="number">10</span> <span class="number">20</span> <span class="number">30</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="VLAN-QinQ（vlan的嵌套映射增加）"><a href="#VLAN-QinQ（vlan的嵌套映射增加）" class="headerlink" title="VLAN-QinQ（vlan的嵌套映射增加）"></a>VLAN-QinQ（vlan的嵌套映射增加）</h2><p>QinQ是指在802.1Q VLAN的基础上增加一层802.1Q VLAN标签，从而拓展VLAN的使用空间。在<strong>公网</strong>的传输过程中，设备只根据<strong>外层VLAN Tag转发报文</strong>，并根据报文的外层VLAN Tag进行MAC地址学习，而用户的<strong>私网VLAN Tag将被当作报文的数据部分进行传输。</strong></p><h3 id="实验配置-11"><a href="#实验配置-11" class="headerlink" title="实验配置"></a>实验配置</h3><ol><li>LSW1和LSW2的gi0&#x2F;0&#x2F;1上配置QinQ。外层VLAN是100或300。</li><li>PC的IP地址是192.168.10.x&#x2F;24，X是PC编号。</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231206231436788.png" alt="image-20231206231436788"></p><h4 id="简单qinq-多vlan映射一个vlan"><a href="#简单qinq-多vlan映射一个vlan" class="headerlink" title="简单qinq(多vlan映射一个vlan)"></a>简单qinq(多vlan映射一个vlan)</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">lsw1</span><br><span class="line">    vlan batch <span class="number">100</span><span class="comment">//创建vlan</span></span><br><span class="line">    <span class="comment">//配置qinq端口//</span></span><br><span class="line">    <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">    port link-type dolt1q-tunnel<span class="comment">//关键就是这句命令</span></span><br><span class="line">    port <span class="keyword">default</span> vlan <span class="number">100</span></span><br><span class="line">    q</span><br><span class="line">    </span><br><span class="line">    <span class="comment">//配置trunk口，在g0/0/2开启trunk模式并且允许vlan100</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">  port link-type trunk</span><br><span class="line">  port trunk allow-pass vlan <span class="number">100</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">lsw3</span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  port link-type trunk</span><br><span class="line">  port trunk allow-pass vlan <span class="number">10</span> <span class="number">30</span></span><br><span class="line"></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">10</span></span><br><span class="line">    </span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">3</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">30</span></span><br><span class="line">  </span><br><span class="line">    </span><br><span class="line">   </span><br></pre></td></tr></table></figure><h4 id="灵活qinq（单个vlan映射单个vlan）"><a href="#灵活qinq（单个vlan映射单个vlan）" class="headerlink" title="灵活qinq（单个vlan映射单个vlan）"></a>灵活qinq（单个vlan映射单个vlan）</h4><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">lsw1</span><br><span class="line">    vlan batch <span class="number">100</span> <span class="number">300</span><span class="regexp">//</span>创建vlan</span><br><span class="line">    <span class="regexp">//</span>配置qinq端口<span class="regexp">//</span></span><br><span class="line">    int g0<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">    <span class="regexp">//</span>port link-type hybrid</span><br><span class="line">    <span class="regexp">//</span>port hybrid untag <span class="number">100</span> <span class="number">300</span></span><br><span class="line">  <span class="regexp">//</span>port vlan translation enable</span><br><span class="line">    <span class="regexp">//</span>port vlan-stacking vlan <span class="number">10</span> stack <span class="number">100</span></span><br><span class="line">    <span class="regexp">//</span>port vlan-stacking vlan <span class="number">30</span> stack <span class="number">300</span></span><br><span class="line">    </span><br><span class="line">    <span class="regexp">//</span>配置trunk口，在g0<span class="regexp">/0/</span><span class="number">2</span>开启trunk模式并且允许vlan100</span><br><span class="line">  int g0<span class="regexp">/0/</span><span class="number">2</span></span><br><span class="line">  port link-type trunk</span><br><span class="line">  port trunk allow-pass vlan <span class="number">100</span> <span class="number">300</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">lsw3</span><br><span class="line">vlan batch <span class="number">10</span> <span class="number">30</span></span><br><span class="line">  int g0<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">  port link-type trunk</span><br><span class="line">  port trunk allow-pass vlan <span class="number">10</span> <span class="number">30</span></span><br><span class="line"></span><br><span class="line">  int g0<span class="regexp">/0/</span><span class="number">2</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port default vlan <span class="number">10</span></span><br><span class="line">    </span><br><span class="line">  int g0<span class="regexp">/0/</span><span class="number">3</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port default vlan <span class="number">30</span></span><br><span class="line">  </span><br></pre></td></tr></table></figure><h2 id="VLAN-MAPPING"><a href="#VLAN-MAPPING" class="headerlink" title="VLAN-MAPPING"></a>VLAN-MAPPING</h2><p>不同于QINQ的在原来的tag头部前再添加一个头部进行映射，mapping直接<strong>将一个vlan转换成另一个vlan</strong></p><h3 id="实验配置-12"><a href="#实验配置-12" class="headerlink" title="实验配置"></a>实验配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20180521131532123" alt="这里写图片描述"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">lsw1/lsw4</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet0/0/1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">10</span> <span class="number">20</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet0/0/2</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet0/0/3</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">20</span></span><br><span class="line">#</span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">lsw2/lsw3   </span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet0/0/1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">100</span> <span class="number">200</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet0/0/2</span></span><br><span class="line"> qinq vlan-translation enable</span><br><span class="line"> <span class="comment">//开启vlan转换功能</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">100</span> <span class="number">200</span></span><br><span class="line"> port vlan-mapping vlan <span class="number">10</span> <span class="built_in">map</span>-vlan <span class="number">100</span><span class="comment">//最重要的一步，类似于灵活qinq的配置模式</span></span><br><span class="line">  <span class="comment">//配置VLAN10映射为VLAN100</span></span><br><span class="line"> port vlan-mapping vlan <span class="number">20</span> <span class="built_in">map</span>-vlan <span class="number">200</span></span><br><span class="line">#</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="数据通信10"><a href="#数据通信10" class="headerlink" title="数据通信10"></a>数据通信10</h1><p>从计网入门到网络黑客大成</p><p>[TOC]</p><h2 id="MAC地址表项配置"><a href="#MAC地址表项配置" class="headerlink" title="MAC地址表项配置"></a>MAC地址表项配置</h2><h3 id="配置静态mac表项"><a href="#配置静态mac表项" class="headerlink" title="配置静态mac表项"></a>配置静态mac表项</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mac-address <span class="type">static</span> mac-address interface-type inter-number vlan XX</span><br></pre></td></tr></table></figure><h3 id="配置mac黑洞MAC表项"><a href="#配置mac黑洞MAC表项" class="headerlink" title="配置mac黑洞MAC表项"></a>配置mac黑洞MAC表项</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mac-address blackhole mac-address 【vlan xx】</span><br></pre></td></tr></table></figure><h3 id="配置动态MAC表项的老化时间"><a href="#配置动态MAC表项的老化时间" class="headerlink" title="配置动态MAC表项的老化时间"></a>配置动态MAC表项的老化时间</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mac-address aging-time ading-time</span><br></pre></td></tr></table></figure><h3 id="MAC地址表安全配置举例"><a href="#MAC地址表安全配置举例" class="headerlink" title="MAC地址表安全配置举例"></a>MAC地址表安全配置举例</h3><p><strong>防止其他人的mac地址表攻击：</strong>发送大量的假的mac地址占据交换机的mac地址表，然后接收它的泛洪信息以破解命令(kali的macof)</p><h3 id="端口安全技术"><a href="#端口安全技术" class="headerlink" title="端口安全技术"></a>端口安全技术</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">port-security enable</span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">port-security mac-address sticky<span class="comment">//开启粘性mac模式</span></span><br><span class="line">port-security max-mac-num xx<span class="comment">//前xx个加入的pc的mac地址会记录，只有这些可以上网</span></span><br><span class="line">port-security protect-action &#123; protect | <span class="keyword">restrict</span> | shutdown &#125;<span class="comment">//配置端口安全保护动作</span></span><br><span class="line"><span class="comment">/*protect：当学习到的MAC地址数达到接口限制数时，接口丢弃源地址在MAC表以外的报文。</span></span><br><span class="line"><span class="comment">restrict：当学习到的MAC地址数超过接口限制数时，接口丢弃源地址在MAC表以外的报文，同时发出告警。</span></span><br><span class="line"><span class="comment">shutdown：当学习到的MAC地址数超过接口限制数时，将接口Error-Down，同时发出告警。*/</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="DHCP-snooping（窥探）"><a href="#DHCP-snooping（窥探）" class="headerlink" title="DHCP snooping（窥探）"></a>DHCP snooping（窥探）</h2><h3 id="出现背景"><a href="#出现背景" class="headerlink" title="出现背景"></a>出现背景</h3><p>一种攻击方式是打掉原来局域网的dhcp服务器然后再自己当上dhcp，为其他主机写ip地址，并且将相关的网关设置成自己，以此来”引流”</p><p><strong>dos dhcp discover 不断广播discover报文把原来的服务器搞崩，然后自己再假冒dhcp服务器分发ip</strong></p><h3 id="实验配置-13"><a href="#实验配置-13" class="headerlink" title="实验配置"></a>实验配置</h3><p>先<strong>全部设置为不信任端口</strong>（这时候收不到一点offer），再手动设置信任端口，信任端口可以通过offer包，不信任端口不通过offer包</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">dhcp snooping enable<span class="comment">//全局</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span><span class="comment">//进入接口或者vlan</span></span><br><span class="line">dhcp snooping enable</span><br><span class="line"></span><br><span class="line">dhcp snooping trusted<span class="comment">//配置信任端口</span></span><br></pre></td></tr></table></figure><h2 id="IPSG"><a href="#IPSG" class="headerlink" title="IPSG"></a>IPSG</h2><p><strong>IP源防攻击</strong></p><p>出现原因：一些攻击者通过伪造合法用户的IP地址获取网络访问权限，非法访问网络</p><p><strong>实验配置</strong></p><p>基于dhcp snooping功能</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">IP source check user-bind enable</span><br></pre></td></tr></table></figure><p>如果说有人在一个路由器上接线并且伪造了原网络的一个设备的ip的话，路由器查ipsg的绑定表发现不对后会堵塞掉新接入的那个端口</p><h2 id="VXLAN：虚拟拓展局域网–隧道技术"><a href="#VXLAN：虚拟拓展局域网–隧道技术" class="headerlink" title="VXLAN：虚拟拓展局域网–隧道技术"></a>VXLAN：虚拟拓展局域网–隧道技术</h2><h3 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h3><p><strong>将三层的设备两两相连，在逻辑上构成一个二层交换机，实现l2封装在l4上并且在l3中传输</strong></p><p><strong><u>采用mac in udp 封装，将以太报文封装在ip报文上</u></strong></p><h3 id="相关概念"><a href="#相关概念" class="headerlink" title="相关概念"></a>相关概念</h3><h4 id="bdif"><a href="#bdif" class="headerlink" title="bdif"></a>bdif</h4><p>BDIF接口的功能与VLANIF接口类似，是基于BD创建的三层逻辑接口，用以实现不同子网之间的通信，或VXLAN网络与非VXLAN网络之间的通信。</p><h4 id="VAP"><a href="#VAP" class="headerlink" title="VAP"></a>VAP</h4><p>虚拟接入点VAP，即VXLAN业务接入点，可以是二层子接口或VLAN</p><p>当接入节点是二层子接口时，通过在二层子接口上配置<strong>流封装类型</strong>（那4种）实现不同的接口接入不同的数据报文，将二层子接口关联广播域BD后，可实现数据报文通过BD转发。当业务接入点是VLAN时，需要将VLAN绑定到广播域BD，也可以实现数据报文通过BD转发。</p><h4 id="spine-leaf"><a href="#spine-leaf" class="headerlink" title="spine-leaf"></a>spine-leaf</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231209145518270.png" alt="image-20231209145518270"></p><p>vxlan<strong>配置在leaf（交换机）之间</strong>，完成vxlan的封装和解封装，spine节点（<strong>路由器）只进行路由转发</strong>，类似于之前学习到的ibgp之间进行配置，而中间那个路由器就不管了</p><h4 id="NVE"><a href="#NVE" class="headerlink" title="NVE"></a>NVE</h4><p>网络虚拟边缘节点NVE，实现网络虚拟化功能的网络实体。报文经过NVE封装转换后，NVE间就可基于三层基础网络建立二层虚拟化网络。（设备和服务器上的虚拟交换机VSwitch都可以作为NVE）</p><ul><li><p>硬件模式：所有的NVE都部署在支持NVE的设备上，所有的VXLAN报文封装与解封装都在设备上进行。</p></li><li><p>软件模式：所有的NVE都部署在vSwitch（开放的虚拟交换机）上，所有的VXLAN报文封装与解封装都在vSwitch上进行。</p></li><li><p>混合模式：部分NVE部署在vSwitch上，部分NVE部署在支持NVE的设备上，在vSwitch和设备上都有可能会进行VXLAN报文封装与解封装。</p></li></ul><h3 id="vxlan出现的原因"><a href="#vxlan出现的原因" class="headerlink" title="vxlan出现的原因"></a>vxlan出现的原因</h3><ol><li>虚拟机的动态迁移需要无障碍接入</li><li>租户过多，传统的valn技术不再适用，需要隔离海量的租户</li></ol><h3 id="服务器虚拟化技术"><a href="#服务器虚拟化技术" class="headerlink" title="服务器虚拟化技术"></a>服务器虚拟化技术</h3><p>将<strong>物理服务器</strong>分成多个<strong>虚拟服务器</strong>，这些服务器<strong>通过虚拟交换机（vswitch）与外界相连</strong></p><p>虚拟化的问题：</p><ol><li>vlan个数不够</li><li>mac地址表过大</li></ol><h3 id="服务器动态迁移"><a href="#服务器动态迁移" class="headerlink" title="服务器动态迁移"></a>服务器动态迁移</h3><p>原服务器正常运行的同时，将系统从一个物理服务器迁移到另一个物理服务器上，这要求服务器的<strong>tcp会话状态不变</strong>（ip不改变），所以<strong>只能在二层之中进行迁移</strong>，但是大型网络都会有三层结构，服务器迁移就需要<strong>vxlan技术将三层设备抽象成二层交换机</strong></p><h3 id="vxlan的报文格式"><a href="#vxlan的报文格式" class="headerlink" title="vxlan的报文格式"></a>vxlan的报文格式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231209150126013.png" alt="image-20231209150126013"></p><h4 id="VTEP"><a href="#VTEP" class="headerlink" title="VTEP"></a>VTEP</h4><p><strong>VXLAN Tunnel Endpoints，VXLAN隧道端点</strong></p><p>就是之前的leaf节点，完成vxlan的封装和解封装</p><p>VTEP既可以是一台<strong>独立的网络设备</strong>（比如华为的CloudEngine系列交换机），也可以是在服务器中的<strong>虚拟交换机</strong>（vswitch）</p><h4 id="VNI"><a href="#VNI" class="headerlink" title="VNI"></a>VNI</h4><p><strong>VXLAN Network Identifier，VXLAN 网络标识符</strong></p><p>解决掉vlan id 不足的问题，功能类似，一个vni代表一个租户（虚拟机）</p><p>二层&#x2F;三层vni？</p><h4 id="vxlan报文"><a href="#vxlan报文" class="headerlink" title="vxlan报文"></a>vxlan报文</h4><ul><li><p>vxlan header :24比特的vni字段用来定义不同的租户，类似于vlan id。还有vxlan flags（0000 1000），两个保留字段</p></li><li><p>udp header：vxlan头部和原始数据帧组成udp数据。源udp端口通过哈希算法得到，源端口固定为4789</p></li><li><p>外部 IP 头部：源ip—源端vtep的ip地址   目的ip—目的端vtep的ip地址</p></li><li><p>外部mac头部：源mac—源端vtep的mac地址   目的mac—目的端vtep的mac地址</p></li></ul><h3 id="哪些vtep建立隧道连接"><a href="#哪些vtep建立隧道连接" class="headerlink" title="哪些vtep建立隧道连接"></a>哪些vtep建立隧道连接</h3><h4 id="大二层网络"><a href="#大二层网络" class="headerlink" title="大二层网络"></a>大二层网络</h4><p>两两互连</p><h4 id="同一大二层域BD"><a href="#同一大二层域BD" class="headerlink" title="同一大二层域BD"></a>同一大二层域BD</h4><p>类似于之前的vlan区域，但是vxlan这里叫BD（bridge-domain）</p><p><strong>创建配置</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">bride-domain <span class="number">10</span><span class="comment">//创建bd 10</span></span><br><span class="line">vxlan vni <span class="number">5000</span><span class="comment">//bd 10下与之关联的是vni 500</span></span><br><span class="line"><span class="comment">//感觉像进入端口配置模式acess再default的感觉</span></span><br></pre></td></tr></table></figure><p>一个vni对应一个bd，一个bd下可以有多个vni</p><h3 id="哪些报文会走vxlan隧道"><a href="#哪些报文会走vxlan隧道" class="headerlink" title="哪些报文会走vxlan隧道"></a>哪些报文会走vxlan隧道</h3><h4 id="传统派"><a href="#传统派" class="headerlink" title="传统派"></a>传统派</h4><p>传统vlan技术中定义了三种不同类型的接口：Access、Trunk、Hybrid。这三种类型的接口虽然应用场景不同，但它们的最终目的是一样的：一是<strong>根据配置来检查哪些报文是允许通过的</strong>；二是判断对<strong>检查通过的报文做怎样的处理。</strong></p><h4 id="维新派"><a href="#维新派" class="headerlink" title="维新派"></a>维新派</h4><p>VXLAN网络中，VTEP上的<strong>“二层子接口”的逻辑接口</strong>也承担着类似的任务。二层子接口主要做两件事：一是<strong>根据配置来检查哪些报文需要进入VXLAN隧道</strong>；二是<strong>判断对检查通过的报文做怎样的处理</strong>。支持的流封装类型有<strong>dot1q</strong>、<strong>untag</strong>、<strong>qinq</strong>和<strong>default</strong>四种类型：</p><ul><li>dot1q：对于带有<strong>一层VLAN Tag</strong>的报文，该类型接口<strong>只接收与指定VLAN Ta</strong>g匹配的报文；对于带有<strong>两层VLAN</strong><br><strong>Tag的报文</strong>，该类型接口<strong>只接收外层VLAN Tag</strong>与指定VLAN Tag匹配的报文。（1层对应，两层对vni）</li><li>untag：该类型接口只接收<u>不带VLAN Tag</u>的报文。（0）</li><li>qinq：该类型接口<strong>只接收带有指定两层VLAN Tag</strong>的报文。（两层都对）</li><li>default：允许接口<strong>接收所有报文</strong>，不区分报文中是否带VLAN Tag。该类型接口都<strong>不会对原始报文进行任何VLAN Tag处理</strong>，包括添加、替换或剥离。（1）</li></ul><p><u>类型三变四，任务类似</u></p><p><strong>将二层子接口加入到指定的BD，再根据二层子接口上的配置，设备就可以确定报文属于哪个BD了</strong></p><h4 id="栗子"><a href="#栗子" class="headerlink" title="栗子"></a><strong>栗子</strong></h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20201112101102241.png" alt="在这里插入图片描述"></p><ol><li><p>分别在VTEP的物理接口10GE 1&#x2F;0&#x2F;1上，分别针对VM1和VM2封装不同的二层子接口1&#x2F;0&#x2F;1.1</p></li><li><p>在VTEP的接入口上创建两个二层子接口，分别配置为dot1q和untag的封装类型，并将其分别加入不同的BD</p></li><li><p>vSwitch的上行口配置成Trunk模式，这样vSwitch发给VTEP的报文中，既有带tag的VM1流量，又有untag的VM2流量（pvid是20，truck口出去的时候会把vlan 20的标签删掉）</p></li></ol><p>标签复习一下：</p><table><thead><tr><th>access</th><th>truck</th></tr></thead><tbody><tr><td>收：没标签，打上，进入|有标签，丢弃数据</td><td>收：没有vid，打上pvid，进入|有vid，允许进入，不允许丢弃</td></tr><tr><td><strong>发：去掉标签</strong></td><td>发：<strong>vid&#x3D;&#x3D;pvid，去标签</strong>发|vid！&#x3D;pvid，直接发送</td></tr></tbody></table><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/v2-8b9d084da4096742fcd8215187274765_1440w.webp" alt="img"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="number">10</span>GE1/<span class="number">0</span>/<span class="number">1.1</span> mode l2<span class="comment">//创建二层接口</span></span><br><span class="line">encapsulation dolt1q vid <span class="number">10</span><span class="comment">//只允许vlan tag 10的报文进入vxlan隧道</span></span><br><span class="line">bride-domain <span class="number">10</span><span class="comment">//绑定bd 10</span></span><br><span class="line"></span><br><span class="line">    </span><br><span class="line"><span class="type">int</span> <span class="number">10</span>GE1/<span class="number">0</span>/<span class="number">1.2</span> mode l2<span class="comment">//创建二层接口</span></span><br><span class="line">encapsulation untag<span class="comment">//只允许vlan tag 20的报文进入vxlan隧道</span></span><br><span class="line">bride-domain <span class="number">20</span><span class="comment">//绑定bd 20</span></span><br></pre></td></tr></table></figure><p><strong>本质上还是靠标签进行确认</strong></p><h3 id="VXLAN隧道的建立"><a href="#VXLAN隧道的建立" class="headerlink" title="VXLAN隧道的建立"></a>VXLAN隧道的建立</h3><h4 id="手动"><a href="#手动" class="headerlink" title="手动"></a>手动</h4><p><strong>用户手动指定VXLAN隧道的源IP为本端VTEP的IP、目的IP为对端VTEP的IP</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> Nve <span class="number">1</span><span class="comment">//创建逻辑接口Nve 1</span></span><br><span class="line">source <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span> <span class="comment">//源ip</span></span><br><span class="line">vni <span class="number">5000</span> head-end peer-<span class="built_in">list</span> <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span><span class="comment">//对端ip（1）</span></span><br><span class="line">vni <span class="number">5000</span> head-end peer-<span class="built_in">list</span> <span class="number">2.2</span><span class="number">.2</span><span class="number">.3</span><span class="comment">//对端ip（2）</span></span><br></pre></td></tr></table></figure><p><strong>头端复制列表</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20201112103425968.png" alt="**头端复制列表**"></p><p>感觉上类似于转发表，Peer List指明同一个bd下的vtep有哪些</p><p>，bum指Broadcast&amp;Unknown-unicast&amp;Multicast，广播&amp;未知单播&amp;组播报文，一个vtep收到bum时会发给其他的对端vtep</p><h4 id="自动"><a href="#自动" class="headerlink" title="自动"></a>自动</h4><p>evpn学</p><h3 id="VXLAN隧道的选择"><a href="#VXLAN隧道的选择" class="headerlink" title="VXLAN隧道的选择"></a>VXLAN隧道的选择</h3><h4 id="VXLAN网关"><a href="#VXLAN网关" class="headerlink" title="VXLAN网关"></a>VXLAN网关</h4><p>不同的vni之间的主机不能相互通信，为此出现了vxlan网关</p><ul><li>VXLAN二层网关：用于终端接入VXLAN网络，也可用于同一VXLAN网络的子网通信。</li><li>VXLAN三层网关：用于VXLAN网络中跨子网通信以及访问外部网络。</li></ul><p>其中三层网关又分为<strong>集中式网关与分布式网关</strong></p><h4 id="集中式网关"><a href="#集中式网关" class="headerlink" title="集中式网关"></a>集中式网关</h4><h3 id="集中式VXLAN中不同子网互通流程"><a href="#集中式VXLAN中不同子网互通流程" class="headerlink" title="集中式VXLAN中不同子网互通流程"></a>集中式VXLAN中不同子网互通流程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231213144040730.png" alt="image-20231213144040730"></p><ol><li>A将报文先交给vtep1，源ip是自己，源mac是自己，目标ip是b的ip，<strong>目标mac是自己网关的mac（下一跳</strong>：bdif 10）</li><li>vtep1收到报文之后识别到报文要走vni隧道，进行报文封装，将源ip和mac修改成vtep1的ip和mac地址</li><li>vtep3收到报文发现数据要去b，于是根据路由表得到下一跳（bdif20），将源ip和mac进行修改</li><li>bdif20收到报文后进行发送的过程和vtep1发的过程类似</li><li>vtep2收到数据后解封装发送给b</li></ol><p><strong>集中式网关由spine结点做三层网关，分布式也可以用leaf节点做三层网关</strong></p><h2 id="实验配置-14"><a href="#实验配置-14" class="headerlink" title="实验配置"></a>实验配置</h2><h3 id="配置同网段用户通过VXLAN隧道互通"><a href="#配置同网段用户通过VXLAN隧道互通" class="headerlink" title="配置同网段用户通过VXLAN隧道互通"></a>配置同网段用户通过VXLAN隧道互通</h3><h4 id="拓扑图"><a href="#拓扑图" class="headerlink" title="拓扑图"></a><strong>拓扑图</strong></h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231214001656597.png" alt="image-20231214001656597"></p><ol><li>基础配置：设备名称，ip地址，vlan，接口模式等</li><li>配置ospf路由协议，使得环回口互通</li><li>vxlan配置</li><li>验证</li></ol><h4 id="命令"><a href="#命令" class="headerlink" title="命令"></a>命令</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">ce1</span><br><span class="line">bridge-domain <span class="number">10</span></span><br><span class="line"> vxlan vni <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GE1/0/0</span></span><br><span class="line"> undo portswitch</span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"> un shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">int lo 0</span></span><br><span class="line">ip ad <span class="number">10.10</span><span class="number">.10</span><span class="number">.10</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GE1/0/1</span></span><br><span class="line"> undo shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">interface GE1/0/1.1 mode l2</span></span><br><span class="line"> encapsulation dot1q vid <span class="number">10</span></span><br><span class="line"> bridge-domain <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Nve1</span></span><br><span class="line"> source <span class="number">10.10</span><span class="number">.10</span><span class="number">.10</span></span><br><span class="line"> vni <span class="number">10</span> head-end peer-<span class="built_in">list</span> <span class="number">30.30</span><span class="number">.30</span><span class="number">.30</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">ospf 1</span></span><br><span class="line"> area <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">10.10</span><span class="number">.10</span><span class="number">.10</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">#</span><br><span class="line"></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">ce2</span><br><span class="line">bridge-domain <span class="number">10</span></span><br><span class="line"> vxlan vni <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GE1/0/0</span></span><br><span class="line"> undo portswitch</span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"> un shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">interface GE1/0/1</span></span><br><span class="line"> undo portswitch</span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"> un shutdown</span><br><span class="line"> <span class="meta">#</span></span><br><span class="line"><span class="meta">int lo 0</span></span><br><span class="line">ip ad <span class="number">20.20</span><span class="number">.20</span><span class="number">.20</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">ospf 1</span></span><br><span class="line"> area <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">23.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">20.20</span><span class="number">.20</span><span class="number">.20</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">#</span><br><span class="line"></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">ce3</span><br><span class="line">bridge-domain <span class="number">10</span></span><br><span class="line"> vxlan vni <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GE1/0/0</span></span><br><span class="line"> undo portswitch</span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">23.1</span><span class="number">.1</span><span class="number">.3</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"> un shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">int lo 0</span></span><br><span class="line">ip ad <span class="number">30.30</span><span class="number">.30</span><span class="number">.30</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GE1/0/1</span></span><br><span class="line"> undo shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">interface GE1/0/1.1 mode l2</span></span><br><span class="line"> encapsulation dot1q vid <span class="number">10</span></span><br><span class="line"> bridge-domain <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Nve1</span></span><br><span class="line"> source <span class="number">30.30</span><span class="number">.30</span><span class="number">.30</span></span><br><span class="line"> vni <span class="number">10</span> head-end peer-<span class="built_in">list</span> <span class="number">10.10</span><span class="number">.10</span><span class="number">.10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">ospf 1</span></span><br><span class="line"> area <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">23.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">30.30</span><span class="number">.30</span><span class="number">.30</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">#</span><br><span class="line"></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">lsw2</span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">2</span> to <span class="number">4094</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">10</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">lsw3</span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">2</span> to <span class="number">4094</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">10</span></span><br></pre></td></tr></table></figure><h4 id="结果验证"><a href="#结果验证" class="headerlink" title="结果验证"></a>结果验证</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231213234315233.png" alt="image-20231213234315233"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231214001503541.png" alt="image-20231214001503541"></p><h3 id="配置不同网段用户通过VXLAN三层网关通信"><a href="#配置不同网段用户通过VXLAN三层网关通信" class="headerlink" title="配置不同网段用户通过VXLAN三层网关通信"></a>配置不同网段用户通过VXLAN三层网关通信</h3><h4 id="拓扑图-1"><a href="#拓扑图-1" class="headerlink" title="拓扑图"></a><strong>拓扑图</strong></h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231214013253705.png" alt="image-20231214013253705"></p><h4 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h4><ol><li>分别在ce1、ce2和ce3上配置ospf路由协议，保证网络三层互通。</li><li>分别在ce1和ce3上配置业务接入点实现区分业务流量。</li><li>分别在ce1、ce2和ce3上配置VXLAN隧道转发业务流量。</li><li><strong>在ce2上配置VXLAN三层网关，实现不同网段用户通过VXLAN三层网关互</strong></li></ol><p><strong><u>和同网段实验的区别就在于中间设备进行了配置：分别和leaf建立隧道并且设立了三层网关bdif</u></strong></p><h4 id="实验配置-15"><a href="#实验配置-15" class="headerlink" title="实验配置"></a>实验配置</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">ce1</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">sysname Device1</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">bridge-domain 10</span></span><br><span class="line"> vxlan vni <span class="number">5010</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet1/0/1</span></span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">192.168</span><span class="number">.1</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet1/0/2</span></span><br><span class="line"> undo shutdown</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet1/0/2.1 mode l2</span></span><br><span class="line"> encapsulation dot1q vid <span class="number">10</span></span><br><span class="line"> rewrite pop single</span><br><span class="line"> bridge-domain <span class="number">10</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface LoopBack1</span></span><br><span class="line"> ip address <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.255</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Nve1</span></span><br><span class="line"> source <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span></span><br><span class="line"> vni <span class="number">5010</span> head-end peer-<span class="built_in">list</span> <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">ospf 1</span></span><br><span class="line"> area <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.1</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">return</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">ce2</span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">sysname Device2</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">bridge-domain 10</span></span><br><span class="line"> vxlan vni <span class="number">5010</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">bridge-domain 20</span></span><br><span class="line"> vxlan vni <span class="number">5020</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Vbdif10</span></span><br><span class="line"> ip address <span class="number">192.168</span><span class="number">.10</span><span class="number">.10</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Vbdif20</span></span><br><span class="line"> ip address <span class="number">192.168</span><span class="number">.20</span><span class="number">.10</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet1/0/1</span></span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">192.168</span><span class="number">.1</span><span class="number">.2</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface GigabitEthernet1/0/2</span></span><br><span class="line"> undo shutdown</span><br><span class="line"> ip address <span class="number">192.168</span><span class="number">.2</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface LoopBack1</span></span><br><span class="line"> ip address <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.255</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">interface Nve1</span></span><br><span class="line"> source <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span></span><br><span class="line"> vni <span class="number">5010</span> head-end peer-<span class="built_in">list</span> <span class="number">2.2</span><span class="number">.2</span><span class="number">.2</span></span><br><span class="line"> vni <span class="number">5020</span> head-end peer-<span class="built_in">list</span> <span class="number">4.4</span><span class="number">.4</span><span class="number">.4</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">ospf 1</span></span><br><span class="line"> area <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">3.3</span><span class="number">.3</span><span class="number">.3</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.1</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.2</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"><span class="meta">#</span></span><br><span class="line"><span class="meta">return</span></span><br></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ce3</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">sysname</span> Device3</span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">bridge</span>-domain <span class="number">20</span></span><br><span class="line"> <span class="attribute">vxlan</span> vni <span class="number">5020</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">interface</span> GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> <span class="attribute">undo</span> shutdown</span><br><span class="line"> <span class="attribute">ip</span> address <span class="number">192.168.2.2</span> <span class="number">255.255.255.0</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">interface</span> GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"> <span class="attribute">undo</span> shutdown</span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">interface</span> GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>.<span class="number">1</span> mode l2</span><br><span class="line"> <span class="attribute">encapsulation</span> dot1q vid <span class="number">20</span></span><br><span class="line"> <span class="attribute">rewrite</span> pop single</span><br><span class="line"> <span class="attribute">bridge</span>-domain <span class="number">20</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">interface</span> LoopBack1</span><br><span class="line"> <span class="attribute">ip</span> address <span class="number">4.4.4.4</span> <span class="number">255.255.255.255</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">interface</span> Nve1</span><br><span class="line"> <span class="attribute">source</span> <span class="number">4.4.4.4</span></span><br><span class="line"> <span class="attribute">vni</span> <span class="number">5020</span> head-end peer-list <span class="number">3.3.3.3</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">ospf</span> <span class="number">1</span></span><br><span class="line"> <span class="attribute">area</span> <span class="number">0.0.0.0</span></span><br><span class="line">  <span class="attribute">network</span> <span class="number">4.4.4.4</span> <span class="number">0.0.0.0</span></span><br><span class="line">  <span class="attribute">network</span> <span class="number">10.2.1.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">  <span class="attribute">network</span> <span class="number">192.168.2.0</span> <span class="number">0.0.0.255</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="attribute">return</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">lsw2</span><br><span class="line">    vlan <span class="number">10</span></span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">2</span> to <span class="number">4094</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">10</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">lsw3</span><br><span class="line">    vlan <span class="number">20</span></span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">2</span> to <span class="number">4094</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">interface GigabitEthernet0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line"> port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">20</span></span><br></pre></td></tr></table></figure><h4 id="结果检验"><a href="#结果检验" class="headerlink" title="结果检验"></a>结果检验</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231214012446954.png" alt="image-20231214012446954"></p><h1 id="数据通信11"><a href="#数据通信11" class="headerlink" title="数据通信11"></a>数据通信11</h1><p>要学会避责，成为甩锅大神</p><h2 id="网络准入控制NAC"><a href="#网络准入控制NAC" class="headerlink" title="网络准入控制NAC"></a>网络准入控制NAC</h2><h3 id="简介-1"><a href="#简介-1" class="headerlink" title="简介"></a>简介</h3><p>NAC（Network Admission Control）称为网络接入控制，是一种“端到端”的安全结构，包括<strong>802.1x认证</strong>、<strong>MAC认证</strong>（不建议使用）与<strong>Portal</strong>认证。</p><p>NAC安全构架包括三个关键组件：NAC终端、网络准入设备和准入服务器。</p><p><strong>基本原理</strong></p><ol><li>终端和网络准入设备交换报文，准入设备获取身份认证信息</li><li>准入设备将认证信息发送给服务器进行对比认证</li><li>查看合不合法，发送认证结果和策略</li><li>准入设备再转发给终端</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231217095059072.png" alt="image-20231217095059072"></p><h3 id="802-1x认证"><a href="#802-1x认证" class="headerlink" title="802.1x认证"></a>802.1x认证</h3><p>前提：搭建acs服务器，丢个iso镜像进模拟器，一路下一步（硬盘给80个g，进入之后要做一系列预配置）</p><ol><li>终端发送认证请求给接入设备(EAPOL-Start)</li><li>接入设备询问终端的用户名(EAP-Request&#x2F;Identity)</li><li>响应询问请求，回复准入设备身份信息</li><li>接入设备转发终端的信息给服务器（EAP封装在RADIUS报文中）</li><li>RADIUS服务器收到设备端转发的用户名信息后，将该信息与数据库中的用户名列表中对比，找到该用户名对应的密码信息，用<strong>随机生成的一个MD5 Challenge对密码进行加密处理</strong>，同时将此MD5 Challenge通过RADIUS Access-Challenge报文发送给设备端。</li><li>接入设备转发给终端MD5 challenge</li><li>终端又将这个报文对密码加密在发回去一个EAP-Response&#x2F;MD5 Challenge报文</li><li>接入设备封装后再转发</li><li>RADIUS服务器将收到的已加密的密码信息和本地经过加密运算后的密码信息进行对比，如果相同，则认为该用户为合法用户，并向设备端发送认证<strong>通过报文（RADIUS Access-Accept）。</strong>（双加密认证）</li><li>接入设备收到通过报文后打开端口允许通信</li><li>之后会有类似于ospf的邻居维持的过程：设备端会通过向客户端<strong>定期发送握手报文</strong>的方法，对用户的在线情况进行监测，若设备端发送的<strong>两次握手请求报文都未得到客户端应答，设备端就会让用户下线</strong>，防止用户因为异常原因下线而设备无法感知。</li><li>客户端可以发送EAPOL-Logoff帧给设备端，主动要求下线，设备端把端口状态从授权状态改变成未授权状态，并向客户端发送EAP-Failure报文。</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fig_dc_fd_nac_000403.png" alt="img"></p><p>实验爆炸了，acs服务器玩不了</p><h3 id="实验配置-16"><a href="#实验配置-16" class="headerlink" title="实验配置"></a>实验配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231222003055211.png" alt="image-20231222003055211"></p><h2 id="pppoe"><a href="#pppoe" class="headerlink" title="pppoe"></a>pppoe</h2><h3 id="概述-7"><a href="#概述-7" class="headerlink" title="概述"></a>概述</h3><p>ppp就是之前学的点对点通信，有两种认证方式，后面的oabcde就是封装在什么协议上，比如oe就是在以太网进行的ppp</p><h3 id="实验配置-17"><a href="#实验配置-17" class="headerlink" title="实验配置"></a>实验配置</h3><ol><li>配置R1为pppoe服务端</li><li>在R1上创建认证用户（账号：02365308051密码:992713,账号一般是手机号，密码一般是身份证后六位）</li><li>配置R2为pppoe客户端</li></ol><p>关键点：服务器端口为virtual-template客户端为dialer口</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line">一、預配置，配置路由器接口</span><br><span class="line">r1：<span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">ip ad <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line">r2：<span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">ip ad <span class="number">192.168</span><span class="number">.77</span><span class="number">.1</span> <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line">    </span><br><span class="line">二、AR1上配置pppoe service</span><br><span class="line">a，配置ip地址池</span><br><span class="line">    ip pool ben</span><br><span class="line">    net <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line">b，配置认证用户</span><br><span class="line">    aaa</span><br><span class="line">    local-user <span class="number">02365308051</span> password ciper <span class="number">992713</span></span><br><span class="line">    local-user <span class="number">02365308051</span> service-type ppp</span><br><span class="line">c、创建虚拟vt接口</span><br><span class="line">    <span class="type">int</span> virtual-template <span class="number">1</span></span><br><span class="line">    ppp authentication-mode pap</span><br><span class="line">    ip ad <span class="number">10.1</span><span class="number">.2</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line">    remote add pool ben</span><br><span class="line">d，关联物理接口</span><br><span class="line">    <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">    pppoe-sever bind virtual-template <span class="number">1</span></span><br><span class="line">    </span><br><span class="line">三、AR2上配置pppoe client</span><br><span class="line">a，创建虚拟接口dialer</span><br><span class="line">    <span class="type">int</span> dialer <span class="number">2</span></span><br><span class="line">link-protocol ppp<span class="comment">//配置链路为ppp</span></span><br><span class="line">ppp ipcp <span class="keyword">default</span>-route<span class="comment">//通过ipcp自动获取默认路由</span></span><br><span class="line">ppp pap  local-user <span class="number">02365308051</span> password ciper <span class="number">992713</span><span class="comment">//配置ppp用户名密码</span></span><br><span class="line">ppp chap user <span class="number">02365308051</span> <span class="comment">//配置chap用户名密码</span></span><br><span class="line">ppp chap password cipher <span class="number">992713</span><span class="comment">//配置chap用户名密码</span></span><br><span class="line">ip ad ppp-negotiate<span class="comment">//地址为自动协商</span></span><br><span class="line">dialer user <span class="number">02365308051</span><span class="comment">//配置为共享拨号中心</span></span><br><span class="line">dialer bundle <span class="number">2</span><span class="comment">//配置拨号捆绑接口为2</span></span><br><span class="line">    </span><br><span class="line">四、配置nat地址转换（easy ip）</span><br><span class="line">a,配置acl</span><br><span class="line">acl number <span class="number">2000</span></span><br><span class="line">rule permit </span><br><span class="line">b，配置easy nat</span><br><span class="line"><span class="type">int</span> dialer <span class="number">1</span><span class="comment">//三层通信是进行在这个虚拟接口上，物理接口变成了二层通信</span></span><br><span class="line">nat outbound <span class="number">2000</span></span><br></pre></td></tr></table></figure><h2 id="路由堆叠"><a href="#路由堆叠" class="headerlink" title="路由堆叠"></a>路由堆叠</h2><h3 id="堆叠的优点"><a href="#堆叠的优点" class="headerlink" title="堆叠的优点"></a>堆叠的优点</h3><ul><li>提高可靠性（一个坏了还有另外一个）</li><li>扩展端口数量（增加接入用户）</li><li>简化组网（逻辑上变成一个路由器，可以避免stp生成树的问题）</li><li>长距离堆叠（？）</li></ul><h3 id="成员交换机"><a href="#成员交换机" class="headerlink" title="成员交换机"></a>成员交换机</h3><ul><li><p>主交换机（<strong>Master</strong>）</p><p>主交换机负责管理整个堆叠。堆叠系统中只有一台主交换机。</p></li><li><p>备交换机（<strong>Standby</strong>）</p><p>备交换机是主交换机的备份交换机。堆叠系统中只有一台备交换机。当主交换机故障时，备交换机会接替原主交换机的所有业务。</p></li><li><p>从交换机（<strong>Slave</strong>）</p><p>从交换机用于业务转发，堆叠系统中可以有多台从交换机。从交换机数量越多，堆叠系统的转发带宽越大。</p></li></ul><h3 id="堆叠ID"><a href="#堆叠ID" class="headerlink" title="堆叠ID"></a>堆叠ID</h3><p>堆叠ID用来标识堆叠成员交换机，是成员交换机的<strong>槽位号</strong>。每个堆叠成员交换机在堆叠系统中具<strong>有唯一的堆叠ID。</strong></p><h3 id="堆叠优先级"><a href="#堆叠优先级" class="headerlink" title="堆叠优先级"></a>堆叠优先级</h3><p>堆叠优先级是成员交换机的一个属性<strong>，主要用于角色选举过程中确定成员交换机的角色</strong>，优先级值越大表示优先级越高<strong>，优先级越高当选为主交换机的可能性越大</strong></p><h3 id="实验配置-18"><a href="#实验配置-18" class="headerlink" title="实验配置"></a>实验配置</h3><h4 id="拓扑图-2"><a href="#拓扑图-2" class="headerlink" title="拓扑图"></a>拓扑图</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/v2-39cfb4594def153284ad964e72ccaea2_1440w.webp" alt="img"></p><h4 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//如拓扑图所示，完成2台SR8800路由器的IRF堆叠配置</span></span><br><span class="line"></span><br><span class="line">SR8808<span class="number">-01</span>路由器IRF配置：</span><br><span class="line"></span><br><span class="line">步骤<span class="number">1</span>：将运行模式由独立运行模式切换为IRF模式</span><br><span class="line"></span><br><span class="line">[H3C]chassis convert mode irf <span class="comment">//将运行模式由独立运行模式切换为IRF模式</span></span><br><span class="line"></span><br><span class="line">步骤<span class="number">2</span>：配置IRF</span><br><span class="line"></span><br><span class="line">[H3C]irf member <span class="number">1</span> priority <span class="number">20</span> <span class="comment">//配置成员编号及优先级</span></span><br><span class="line"></span><br><span class="line">[H3C]irf member <span class="number">1</span> description SR8808<span class="number">-01</span> <span class="comment">//配置成员编号及成员描述</span></span><br><span class="line"></span><br><span class="line">[H3C]irf domain <span class="number">100</span> <span class="comment">//配置域编号（2台IRF成员设备必须属于同一个域否则堆叠没法形成IRF关系）</span></span><br><span class="line"> </span><br><span class="line">步骤<span class="number">3</span>：将用于IRF堆叠的的成员端口切为二层模式，并shutdown，并关闭stp(可选）</span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]port link-mode bridge</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]undo stp enable</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]port link-mode bridge</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]undo stp enable</span><br><span class="line"></span><br><span class="line">步骤<span class="number">4</span>：配置irf-port</span><br><span class="line"></span><br><span class="line">irf-port <span class="number">1</span>/<span class="number">2</span></span><br><span class="line"></span><br><span class="line">port group interface GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span> <span class="comment">//添加用于IRF堆叠的成员端口</span></span><br><span class="line"></span><br><span class="line">port group interface GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br><span class="line">步骤<span class="number">5</span>：开启用于IRF堆叠的成员端口</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]undo shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]undo shutdown</span><br><span class="line"></span><br><span class="line">步骤<span class="number">5</span>：保存配置，并激活irf-port配置</span><br><span class="line"></span><br><span class="line">&lt;H3C&gt;Save</span><br><span class="line"></span><br><span class="line">[H3C]irf-port-configuration active <span class="comment">//激活irf-port配置</span></span><br><span class="line"></span><br><span class="line">SR8808<span class="number">-02</span>路由器IRF配置：</span><br><span class="line"></span><br><span class="line">步骤<span class="number">1</span>：将运行模式由独立运行模式切换为IRF模式</span><br><span class="line"></span><br><span class="line">[H3C]chassis convert mode irf <span class="comment">//将运行模式由独立运行模式切换为IRF模式</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">步骤<span class="number">2</span>：将SR8808<span class="number">-02</span>设备的成员编号修改为<span class="number">2</span>（默认为<span class="number">1</span>），然后重启</span><br><span class="line"></span><br><span class="line">[H3C]irf member <span class="number">1</span> renumber <span class="number">2</span></span><br><span class="line"></span><br><span class="line">&lt;H3C&gt;reboot</span><br><span class="line"></span><br><span class="line">步骤<span class="number">3</span>：配置IRF</span><br><span class="line"></span><br><span class="line">[H3C]irf member <span class="number">2</span> priority <span class="number">10</span> <span class="comment">//配置成员编号及优先级</span></span><br><span class="line"></span><br><span class="line">[H3C]irf member <span class="number">2</span> description SR8808<span class="number">-02</span> <span class="comment">//配置成员编号及成员描述</span></span><br><span class="line"></span><br><span class="line">[H3C]irf domain <span class="number">100</span> <span class="comment">//配置域编号（2台IRF成员设备必须属于同一个域否则堆叠没法形成IRF关系）</span></span><br><span class="line"></span><br><span class="line">步骤<span class="number">4</span>：将用于IRF堆叠的的成员端口切为二层模式，并shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">0</span>]port link-mode bridge</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">0</span>]shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">0</span>]undo stp enable</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">1</span>]port link-mode bridge</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">1</span>]shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">1</span>]undo stp enable</span><br><span class="line"></span><br><span class="line">步骤<span class="number">5</span>：配置irf-port</span><br><span class="line"></span><br><span class="line">irf-port <span class="number">2</span>/<span class="number">1</span></span><br><span class="line"></span><br><span class="line">port group interface GigabitEthernet2/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"></span><br><span class="line">port group interface GigabitEthernet2/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br><span class="line">步骤<span class="number">6</span>：开启用于IRF堆叠的成员端口</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">0</span>]undo shutdown</span><br><span class="line"></span><br><span class="line">[H3C-GigabitEthernet2/<span class="number">0</span>/<span class="number">1</span>]undo shutdown</span><br><span class="line"></span><br><span class="line">步骤<span class="number">7</span>：保存、连接IRF堆叠线缆</span><br><span class="line"></span><br><span class="line">&lt;H3C&gt;Save</span><br><span class="line"></span><br><span class="line">连接<span class="number">2</span>台路由器之间的IRF堆叠线缆</span><br><span class="line"></span><br><span class="line">步骤<span class="number">8</span>：并激活irf-port配置，此时<span class="number">2</span>台路由器会相互发送IRF协议报文(携带成员编号、优先级、域编号），优先级大的成为Master，优先级小的称为Slave(并自动重启)，然后形成IRF堆叠</span><br><span class="line"></span><br><span class="line">[H3C]irf-port-configuration active <span class="comment">//激活irf-port配置</span></span><br></pre></td></tr></table></figure><h1 id="数据通信12"><a href="#数据通信12" class="headerlink" title="数据通信12"></a>数据通信12</h1><p>&#x2F;&#x2F;寒假回来第一次上课</p><p>[TOC]</p><h2 id="信息安全"><a href="#信息安全" class="headerlink" title="信息安全"></a>信息安全</h2><p><strong>目标：</strong></p><ul><li><p>完整性</p></li><li><p>可用性</p></li><li><p>保密性</p></li></ul><p> <strong>攻击类别：</strong></p><ul><li>ddos</li><li>勒索攻击</li><li>dns</li><li>sql注入</li><li>dns隧道</li></ul><h2 id="防火墙web安装"><a href="#防火墙web安装" class="headerlink" title="防火墙web安装"></a>防火墙web安装</h2><ol><li>打开pnet，按如图连接拓扑图</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240305110539550.png" alt="image-20240305110539550"></p><ol start="2"><li>mgmt是管理员端口，进入该端口进行配置</li><li>配置IP（ip add 192.168.32.132  和模拟器在同一个网段）、打开service服务（service-manage all permit）</li><li>接着在浏览器输入地址进入web界面（192.168.32.132：8443    部分浏览器由于版本过高进入不了，使用火狐浏览器并且修改tls解决）</li></ol><h2 id="防火墙"><a href="#防火墙" class="headerlink" title="防火墙"></a>防火墙</h2><h3 id="安全区域"><a href="#安全区域" class="headerlink" title="安全区域"></a>安全区域</h3><p>是一个或者多个接口的集合，是防火墙区别于路由器的主要特性（有点像ospf域）</p><p>DMZ–缓冲区，可以访问untrust区，不可以访问trust区，一般是服务器区</p><p>trust区–办公设备</p><p>untrust–外网</p><h3 id="防火墙策略"><a href="#防火墙策略" class="headerlink" title="防火墙策略"></a>防火墙策略</h3><p>防火墙必备检测命令：display firewall session table verbose source inside x.x.x.x</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240302152031459.png" alt="image-20240302152031459"></p><p>多条策略被同一动作匹配按顺序使用</p><h3 id="状态检测"><a href="#状态检测" class="headerlink" title="状态检测"></a>状态检测</h3><ul><li><p>针对数据的首包</p></li><li><p>如果是一个首包，并且安全策略为允许的话，就会为该流量建立一个会话表，该流量其他的数据包就可以根据会话表而不是安全策略转发了。</p></li></ul><p>例如，如果要配置允许Trust区域PING Untrust区域。则在防火墙策略配置的时候，只需要配置Trust区域到Untrust区域的ICMP协议为允许即可，而不需要考虑ICMP Reply报文需要从Untrust区域发到Trust区域。</p><p>在状态检测机制开启状态下，只有首包通过设备才能建立会话表项，后续包直接匹配会话表项进行转发。在状态检测机制<strong>关闭状态下，<em>即使首包没有经过防火墙</em></strong>，后续包<strong>只需要通过防火墙也可以生成会话表项。</strong></p><p>关闭状态检测命令：undo firewall session link-state check</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20190314110851442.png" alt="在这里插入图片描述"></p><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">TCP: SYN <span class="comment">---------首包</span></span><br><span class="line"> SYN+ACK</span><br><span class="line"> ACK</span><br><span class="line"></span><br><span class="line">ICMP echo-request<span class="comment">----首包</span></span><br><span class="line"> echo-reply</span><br><span class="line"></span><br><span class="line">UDP没有首包概念</span><br></pre></td></tr></table></figure><h3 id="会话机制"><a href="#会话机制" class="headerlink" title="会话机制"></a>会话机制</h3><p><strong>会话表的十三项参数</strong></p><ul><li><p>协议—指明会话的协议</p></li><li><p>VPN—在虚拟防火墙中使用</p></li><li><p>ID—标志唯一的会话</p></li><li><p>ZONE（区域）—指明流量的区域走向。</p></li><li><p>TTL—会话的老化时间。</p></li><li><p>Left—会话剩余时间</p></li><li><p>output-interface—出接口</p></li><li><p>nextHop—下一跳</p></li><li><p>MAC—mac地址,</p></li><li><p>MAC地址为全0的情况：</p></li><li><p>反向流量统计</p></li><li><p>正向流量统计</p></li><li><p>五元组—<strong>源地址</strong>：<strong>源端口</strong>–&gt;<strong>目的地址</strong>：<strong>目的端口</strong>+<strong>4层通信协议</strong></p></li><li><p>PolicyName—匹配的策略名称</p></li></ul><p>栗子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[FW1]<span class="comment">//display firewall session table  ---------------查看会话表简要信息</span></span><br><span class="line"> Current Total Sessions : <span class="number">5</span></span><br><span class="line">  https  VPN:public --&gt; public <span class="number">192.168</span><span class="number">.0</span><span class="number">.100</span>:<span class="number">49363</span>--&gt;<span class="number">192.168</span><span class="number">.0</span><span class="number">.10</span>:<span class="number">8443</span></span><br><span class="line">  协议（https等）    虚拟防火墙有作用（vpn）         源地址：源端口 目标地址：目标端口</span><br><span class="line">  https  VPN:public --&gt; public <span class="number">192.168</span><span class="number">.0</span><span class="number">.100</span>:<span class="number">49350</span>--&gt;<span class="number">192.168</span><span class="number">.0</span><span class="number">.10</span>:<span class="number">8443</span></span><br><span class="line">  tcp  VPN:public --&gt; public <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span>:<span class="number">49395</span>--&gt;<span class="number">192.168</span><span class="number">.1</span><span class="number">.100</span>:<span class="number">17889</span></span><br><span class="line">  ftp-data  VPN:public --&gt; public <span class="number">192.168</span><span class="number">.1</span><span class="number">.1</span>:<span class="number">20</span>--&gt;<span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span>:<span class="number">49396</span></span><br><span class="line">  ftp  VPN:public --&gt; public <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span>:<span class="number">49393</span>+-&gt;<span class="number">192.168</span><span class="number">.1</span><span class="number">.1</span>:<span class="number">21</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="应用场景"><a href="#应用场景" class="headerlink" title="应用场景"></a>应用场景</h3><h4 id="双机热备实验"><a href="#双机热备实验" class="headerlink" title="双机热备实验"></a><strong>双机热备实验</strong></h4><h5 id="vrrp的特点"><a href="#vrrp的特点" class="headerlink" title="vrrp的特点"></a><strong>vrrp的特点</strong></h5><ul><li><p>默认优先级100-一样的情况下比较接口ip，IP大的是master</p></li><li><p>数据从master走</p></li><li><p>通过arp请求控制来让下层明白谁才是老大</p></li><li><p>一秒发hello包</p></li><li><p>三秒完成主备切换</p></li><li><p>上层线路可能会断开，需要进行检测</p></li></ul><h5 id="vrrp状态机"><a href="#vrrp状态机" class="headerlink" title="vrrp状态机"></a>vrrp状态机</h5><ul><li>initialize</li><li>backup</li><li>master</li></ul><h5 id="vrrp用于防火墙bug"><a href="#vrrp用于防火墙bug" class="headerlink" title="vrrp用于防火墙bug"></a><strong>vrrp用于防火墙bug</strong></h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240302210456607.png" alt="image-20240302210456607"></p><p>主要问题是由于两台防火墙<strong>的备份组角色不同</strong>导致出现线路故障而丢包（）</p><p>为了解决vrrp在防火墙配置中的bug，vrrp的升级版出现了—<strong>VGMP</strong></p><h5 id="VGMP特点"><a href="#VGMP特点" class="headerlink" title="VGMP特点"></a>VGMP特点</h5><ul><li>双机间增加线路心跳线用于检测对方是否正常工作，否则切换角色</li><li>主设备状态叫active，备份机叫standby</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240302211714218.png" alt="image-20240302211714218"></p><h5 id="VGMP状态机"><a href="#VGMP状态机" class="headerlink" title="VGMP状态机"></a>VGMP状态机</h5><ul><li>Initialise： 启用双机热备功能后，VGMP管理组的初始状态。</li><li><strong>Load Blance</strong>： 当防火墙本端的VGMP管理组与对端的VGMP管理组优先级相等时，两端的VGMP组都处于Load Blance状态。报文转发负载均衡。</li><li>Active： 当本端的VGMP管理组高于对端时，本端的VGMP组处于Active状态，负责报文的转发。</li><li>Standby： 当本端的VGMP管理组低于对端时，本端的VGMP组处于Standby状态，负责监听Active端的状态。</li></ul><h5 id="VGMP状态切换"><a href="#VGMP状态切换" class="headerlink" title="VGMP状态切换"></a>VGMP状态切换</h5><ul><li>接口故障导致优先级降低</li><li>心跳线故障（3s切换）</li><li>主机恢复</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240302190658065.png" alt="image-20240302190658065"></p><h6 id="切换原则"><a href="#切换原则" class="headerlink" title="切换原则"></a>切换原则</h6><ul><li>每个接口down，VGMP管理组优先级降低2。计算公式为：<strong>VGMP优先级&#x3D;VGMP初始优先级-2*接口宕的个数</strong></li><li>每台设备的VGMP管理组<strong>初始状态由用户指定</strong>（Active或Standby），且用户只能指定状态，<strong>不能指定VGMP组的具体的优先级</strong></li><li>③VGMP管理组的状态决定了该设备的主备状态，也决定了VGMP管理组成员（VRRP备份组成员或接口）的状态。（？）</li></ul><p>*实验下周</p><p><strong>拓扑图</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240305111446633.png" alt="image-20240305111446633"># 数据通信13</p><p>[TOC]</p><p>多模模块光纤会有可见光</p><h2 id="双机热备实验-1"><a href="#双机热备实验-1" class="headerlink" title="双机热备实验"></a>双机热备实验</h2><h3 id="拓扑图-3"><a href="#拓扑图-3" class="headerlink" title="拓扑图"></a>拓扑图</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240305111446633.png" alt="image-20240305111446633"></p><h3 id="目的"><a href="#目的" class="headerlink" title="目的"></a>目的</h3><p>为了<strong>规避一台设备故障导致网络业务中断的风险</strong>，可以在网络节点处同时部署两台设备，形成双机热备组网。当其中一台设备出现故障时，业务流量能<strong>平滑地切换到备用设备上</strong>，保证业务不中断，使内外网用户交互的时候感知不到曾经出现过网络故障。</p><ul><li>主备备份</li><li>负载分担</li></ul><h3 id="实现方法"><a href="#实现方法" class="headerlink" title="实现方法"></a>实现方法</h3><p>一般两个路由器就是使用vrrp，但是用在防火墙上就会产生一些bug，上节课有说，故我们<strong>使用vgmp</strong></p><h3 id="VGMP状态机-1"><a href="#VGMP状态机-1" class="headerlink" title="VGMP状态机"></a>VGMP状态机</h3><ul><li>initialize：VGMP管理组处于未启用状态。</li><li>Active：本端VGMP管理组的优先级比对端的VGMP管理组优先级高。</li><li>Standby：本端VGMP管理组的优先级比对端的VGMP管理组优先级低</li></ul><p>（vrrp是initialize和backup，master）</p><h3 id="VGMP主从切换"><a href="#VGMP主从切换" class="headerlink" title="VGMP主从切换"></a>VGMP主从切换</h3><ul><li>每个接口down，VGMP管理组优先级降低2。计算公式为：<strong>VGMP优先级&#x3D;VGMP初始优先级-2*接口宕的个数</strong></li><li>每台设备的VGMP管理组<strong>初始状态由用户指定</strong>（Active或Standby），且用户只能指定状态，<strong>不能指定VGMP组的具体的优先级</strong></li><li>③VGMP管理组的状态决定了该设备的主备状态，也决定了VGMP管理组成员（VRRP备份组成员或接口）的状态。（？）</li></ul><h3 id="实验配置-19"><a href="#实验配置-19" class="headerlink" title="实验配置"></a>实验配置</h3><p><strong>步骤一：配置ip地址</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#FW1</span><br><span class="line">[FW1]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]ip address <span class="number">10.1</span><span class="number">.2</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW1]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip address <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW1]firewall zone trust </span><br><span class="line">[FW1-zone-trust]add interface g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW1]firewall zone untrust </span><br><span class="line">[FW1-zone-untrust]add interface g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#FW2</span><br><span class="line">[FW2]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]ip address <span class="number">10.1</span><span class="number">.2</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW2]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip address <span class="number">10.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW2]firewall zone  trust </span><br><span class="line">[FW2-zone-trust]add interface g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW2]firewall zone untrust </span><br><span class="line">[FW2-zone-untrust]add interface g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤二：配置区域策略</strong></p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#FW1</span></span><br><span class="line">[FW1]<span class="keyword">security</span>-<span class="keyword">policy</span> </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>]<span class="keyword">rule</span> <span class="type">name</span> T2U</span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]source-<span class="type">zone</span> trust </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]destination-<span class="type">zone</span> untrust </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]action permit </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="meta">#FW2</span></span><br><span class="line">[FW2]<span class="keyword">security</span>-<span class="keyword">policy</span> </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>]<span class="keyword">rule</span> <span class="type">name</span> T2U</span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]source-<span class="type">zone</span> trust </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]destination-<span class="type">zone</span> untrust </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]action permit</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤三：配置vrrp</strong></p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">#FW1</span><br><span class="line">[FW1]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line"></span><br><span class="line">[FW1-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">1.254</span> active </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[FW1]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW1-GigabitEthernet1<span class="regexp">/0/</span><span class="number">0</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">2.254</span> active </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#FW2</span><br><span class="line">[FW2]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line"></span><br><span class="line">[FW2-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">1.254</span> standby </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[FW2]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW2-GigabitEthernet1<span class="regexp">/0/</span><span class="number">0</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">2.254</span> standby</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤四：配置hrp热备份</strong>!!!!</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[ FW1]hrp enable</span><br><span class="line"></span><br><span class="line">HRP_ S [FW1]hrp interface g1/<span class="number">0</span>/<span class="number">2</span> remote <span class="number">10.1</span><span class="number">.3</span><span class="number">.2</span></span><br><span class="line"></span><br><span class="line">[ FW2]hrp enable</span><br><span class="line"></span><br><span class="line">HRP_ S [FW2]hrp interface g1/<span class="number">0</span>/<span class="number">2</span> remote <span class="number">10.1</span><span class="number">.3</span><span class="number">.1</span>HRP_ M[ FW2]hrp standby-device</span><br><span class="line"></span><br><span class="line"><span class="comment">//感觉上就和那个ospf虚连接差不多</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="VPN"><a href="#VPN" class="headerlink" title="VPN"></a>VPN</h2><p>&#x2F;&#x2F;科学上网，请勿乱用</p><h3 id="分类"><a href="#分类" class="headerlink" title="分类"></a>分类</h3><p><strong>二层</strong></p><ul><li>l2tp</li><li>pptp(淘汰但简单)</li><li>mpls l2 vpn</li></ul><p><strong>三层</strong></p><ul><li>gre（重点简单）</li><li>ipsec（重点巅峰）</li><li>bgp&#x2F;mpls vpn</li></ul><h3 id="其他vpn"><a href="#其他vpn" class="headerlink" title="其他vpn"></a>其他vpn</h3><ul><li>ssl</li><li>l2f</li><li>dvpn</li><li>基于vlan的vpn</li><li>802.1qinq</li><li>xot</li></ul><h3 id="GRE（ip协议号47）"><a href="#GRE（ip协议号47）" class="headerlink" title="GRE（ip协议号47）"></a>GRE（ip协议号47）</h3><p><strong>虚拟的隧道（Tunnel接口）</strong></p><h4 id="定义-5"><a href="#定义-5" class="headerlink" title="定义"></a>定义</h4><p>通用路由封装协议（Generic Rrouting Encapsulation），他的作用是<strong>把一种协议的报文封装在另外一种协议的报文中</strong>的技术，是一种隧道技术（只要这样子做，都称为隧道技术）</p><h4 id="报文结构（加封装）"><a href="#报文结构（加封装）" class="headerlink" title="报文结构（加封装）"></a>报文结构（加封装）</h4><p>在原始封装的数据报文字段中<strong>加入新的IP头部</strong>，在<strong>新的IP报头和老的IP报头中间加一个协议</strong>，这就是GRE报头。 </p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309141300500.png" alt="image-20240309141300500"></p><p><strong>头部</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image7(421).png" alt="img"></p><p>把原本的IP报头当成货物，这个被称为<strong>乘客协议</strong>，GRE负责承载乘客协议的IP报文，<strong>GRE可以理解为车辆</strong>，然后由新的IP报头在公网进行传输，<strong>公网设备只会查看新的IP报头</strong>，然后进行转发。</p><h4 id="优点-1"><a href="#优点-1" class="headerlink" title="优点"></a>优点</h4><ul><li>支持多种协议</li><li>靠IP做为承载网络</li><li><strong>支持路由协议和IP组播</strong></li><li>配置简单</li></ul><h4 id="缺点"><a href="#缺点" class="headerlink" title="缺点"></a>缺点</h4><ul><li>点对点隧道</li><li>静态配置隧道参数</li><li>部署复杂连接时代价大</li><li><strong>不安全</strong></li></ul><h3 id="传输过程"><a href="#传输过程" class="headerlink" title="传输过程"></a>传输过程</h3><ul><li>私网数据报文保留，加上GRE报头和新的IP报头（隧道源和隧道目标）。</li><li><strong>数据报文发送出去后，中途运营商的设备会根据外层的IP报头进行转发。</strong></li><li>目标设备收到数据报文后，进行<strong>解封装</strong>，<strong>看到GRE报文后</strong>，会继续解封装，然后在看到原先发送的数据报文，<strong>发现是私网包头，进行查找路由</strong>，发现有就进行转发，回包也是如此，这就完成通讯。</li></ul><p><strong><u>做GRE时严禁将公网进行ospf宣告</u></strong></p><h3 id="GRE隧道keeplive"><a href="#GRE隧道keeplive" class="headerlink" title="GRE隧道keeplive"></a>GRE隧道keeplive</h3><p>和ospf保持邻居关系、心跳线设置差不多，都是检测对方或者线路有无故障</p><h3 id="GRE实验配置"><a href="#GRE实验配置" class="headerlink" title="GRE实验配置"></a>GRE实验配置</h3><h4 id="拓扑图-4"><a href="#拓扑图-4" class="headerlink" title="拓扑图"></a>拓扑图</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/45599" alt="img"></p><h4 id="配置设备IP地址"><a href="#配置设备IP地址" class="headerlink" title="配置设备IP地址"></a>配置设备IP地址</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">FW1]inter g1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]ip add <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]inter g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> [FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip add <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[Huawei]inter g0/<span class="number">0</span>/<span class="number">0</span> </span><br><span class="line">[Huawei-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]ip add </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.3</span> <span class="number">24</span> </span><br><span class="line">[Huawei]inter g0/<span class="number">0</span>/<span class="number">1</span> </span><br><span class="line">[Huawei-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]ip add </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.3</span> <span class="number">24</span></span><br><span class="line"><span class="comment">// [Huawei]int lo 0</span></span><br><span class="line"><span class="comment">//[Huawei-Loopback0]ip add 1.1.1.1 24</span></span><br><span class="line">[FW2]inter g1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]ip add <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[FW2]inter g1/<span class="number">0</span>/<span class="number">1</span> </span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip add <span class="number">10.1</span><span class="number">.2</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span></span><br></pre></td></tr></table></figure><h4 id="配置防火墙"><a href="#配置防火墙" class="headerlink" title="配置防火墙"></a>配置防火墙</h4><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#FW1</span></span><br><span class="line"> [<span class="meta">FW1</span>]firewall zone untrust </span><br><span class="line">[<span class="meta">FW1-zone-untrust</span>]<span class="keyword">add</span> <span class="keyword">interface</span> <span class="title">g1</span>/0/2 </span><br><span class="line">    </span><br><span class="line">[<span class="title">FW1</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">trust</span> </span><br><span class="line">[<span class="title">FW1</span>-<span class="title">zone</span>-<span class="title">trust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/1 </span><br><span class="line">    </span><br><span class="line">#<span class="title">FW2</span></span><br><span class="line"> [<span class="title">FW2</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">untrust</span> </span><br><span class="line">[<span class="title">FW2</span>-<span class="title">zone</span>-<span class="title">untrust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/2 </span><br><span class="line">    </span><br><span class="line">[<span class="title">FW2</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">trust</span> </span><br><span class="line">[<span class="title">FW2</span>-<span class="title">zone</span>-<span class="title">trust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/1</span><br></pre></td></tr></table></figure><h4 id="配置OSPF"><a href="#配置OSPF" class="headerlink" title="配置OSPF"></a>配置OSPF</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//严禁将公网ip通过ospf进行宣告 </span></span><br><span class="line">[FW1]ospf <span class="number">1</span> </span><br><span class="line">[FW1-ospf<span class="number">-1</span>]area <span class="number">0</span></span><br><span class="line"> [FW1-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">    </span><br><span class="line"> [AR3]ospf <span class="number">1</span> </span><br><span class="line">[AR3-ospf<span class="number">-1</span>]area <span class="number">0</span> </span><br><span class="line">[AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">13.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"> [AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">23.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"> [AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">    </span><br><span class="line"> [FW2]ospf <span class="number">1</span> </span><br><span class="line">[FW2-ospf<span class="number">-1</span>]area <span class="number">0</span> </span><br><span class="line">[FW2-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br></pre></td></tr></table></figure><h4 id="配置NAT"><a href="#配置NAT" class="headerlink" title="配置NAT"></a>配置NAT</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">//FW1 安全策略</span></span><br><span class="line">[FW1]security-policy </span><br><span class="line">[FW1-policy-security]rule name T2U</span><br><span class="line"> [FW1-policy-security-rule-T2U]source-zone </span><br><span class="line">trust </span><br><span class="line">[FW1-policy-security-rule-T2U]destination</span><br><span class="line">zone untrust </span><br><span class="line">[FW1-policy-security-rule-T2U]action permit</span><br><span class="line">    </span><br><span class="line"> <span class="comment">//FW1 配置NAT</span></span><br><span class="line"> [FW1]nat-policy </span><br><span class="line">[FW1-policy-nat]rule name all </span><br><span class="line">[FW1-policy-nat-rule-all] source-zone trust</span><br><span class="line"> [FW1-policy-nat-rule-all]egress-interface </span><br><span class="line">GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span><span class="comment">//选择出接口</span></span><br><span class="line"> [FW1-policy-nat-rule-all]action source-nat </span><br><span class="line">easy-ip<span class="comment">//转换ip靠接口</span></span><br><span class="line">    </span><br><span class="line"><span class="comment">//FW2 流量策略</span></span><br><span class="line">[FW2]security-policy </span><br><span class="line">[FW2-policy-security]rule name T2U </span><br><span class="line">[FW2-policy-security-rule-T2U]source-zone </span><br><span class="line">trust </span><br><span class="line">[FW2-policy-security-rule-T2U]destination</span><br><span class="line">zone untrust </span><br><span class="line">[FW2-policy-security-rule-T2U]action permit</span><br><span class="line">    </span><br><span class="line"> <span class="comment">//FW2 配置NAT</span></span><br><span class="line"> [FW2]nat-policy </span><br><span class="line">[FW2-policy-nat]rule name all </span><br><span class="line">[FW2-policy-nat-rule-all]source-zone trust </span><br><span class="line">[FW2-policy-nat-rule-all]egress-interface </span><br><span class="line">GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW2-policy-nat-rule-all]action source-nat </span><br><span class="line">easy-ip</span><br></pre></td></tr></table></figure><h4 id="配置GRE-VPN"><a href="#配置GRE-VPN" class="headerlink" title="配置GRE VPN"></a>配置GRE VPN</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]interface Tunnel <span class="number">0</span> </span><br><span class="line"><span class="comment">//[FW1-Tunnel0]tunnel-protocol gre </span></span><br><span class="line">[FW1-Tunnel0]source <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line">[FW1-Tunnel0]destination <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line">[FW1-Tunnel0]ip add <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]interface Tunnel <span class="number">0</span></span><br><span class="line"> [FW2-Tunnel0]tunnel-protocol gre </span><br><span class="line">[FW2-Tunnel0]source <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line">[FW2-Tunnel0]destination <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line">[FW2-Tunnel0]ip add <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//配置虚拟接口所属区域</span></span><br><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]firewall zone untrust </span><br><span class="line">[FW1-zone-untrust]add interface Tunnel <span class="number">0</span></span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]firewall zone untrust </span><br><span class="line">[FW2-zone-untrust]add interface Tunnel <span class="number">0</span></span><br></pre></td></tr></table></figure><h4 id="配置VPN路由"><a href="#配置VPN路由" class="headerlink" title="配置VPN路由"></a>配置VPN路由</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]ip route-<span class="type">static</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> <span class="number">24</span> <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]ip route-<span class="type">static</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> <span class="number">24</span> <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span></span><br></pre></td></tr></table></figure><h4 id="配置VPN接口的策略"><a href="#配置VPN接口的策略" class="headerlink" title="配置VPN接口的策略"></a>配置VPN接口的策略</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//fw1（配置这个的目的是等下做策略要使用的地址）</span></span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-23.1</span><span class="number">.1</span><span class="number">.2</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-13.1</span><span class="number">.1</span><span class="number">.1</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.1</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"></span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.2</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line"> <span class="comment">// 配置策略</span></span><br><span class="line">[FW1]security-policy</span><br><span class="line"> [FW1-policy-security]rule name U2T</span><br><span class="line"> [FW1-policy-security-rule-U2T]  source-zone </span><br><span class="line">untrust</span><br><span class="line"> [FW1-policy-security-rule-U2T]  </span><br><span class="line">destination-zone trust</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2T]  source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span></span><br><span class="line"> [FW1-policy-security-rule-U2T]  </span><br><span class="line">destination-address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span></span><br><span class="line"> [FW1-policy-security-rule-U2T]  action </span><br><span class="line">permit</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2T] rule name </span><br><span class="line">U2L</span><br><span class="line"> [FW1-policy-security-rule-U2L]  source-zone </span><br><span class="line">untrust</span><br><span class="line"> [FW1-policy-security-rule-U2L]  </span><br><span class="line">destination-zone local</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2L]  source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> [FW1-policy-security-rule-U2L]  </span><br><span class="line">destination-address address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line"> [FW1-policy-security-rule-U2L]  action </span><br><span class="line">permit</span><br><span class="line"> <span class="comment">//！！再添加Local to Untrust的策略！！</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//fw2</span></span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-13.1</span><span class="number">.1</span><span class="number">.1</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span>  <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-23.1</span><span class="number">.1</span><span class="number">.2</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> mask <span class="number">32</span></span><br><span class="line"></span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.1</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"> </span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.2</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"><span class="comment">// 配置策略</span></span><br><span class="line">[FW2]security-policy </span><br><span class="line">[FW2-policy-security]rule name U2T</span><br><span class="line"> [FW2-policy-security-rule-U2T]source-zone </span><br><span class="line">untrust </span><br><span class="line">[FW2-policy-security-rule-U2T]destination</span><br><span class="line">zone trust </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security-rule-U2T]source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span></span><br><span class="line"> [FW2-policy-security-rule-U2T]destination</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span></span><br><span class="line"> [FW2-policy-security-rule-U2T]action permit </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security]rule name U2L</span><br><span class="line"> [FW2-policy-security-rule-U2L]source-zone </span><br><span class="line">untrust </span><br><span class="line">[FW2-policy-security-rule-U2L]destination</span><br><span class="line">zone local </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security-rule-U2L]source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line"> [FW2-policy-security-rule-U2L]destination</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> [FW2-policy-security-rule-U2L]action permit </span><br><span class="line"><span class="comment">//！！再添加Local to Untrust的策略！！</span></span><br></pre></td></tr></table></figure><h4 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h4><h5 id="pc互ping"><a href="#pc互ping" class="headerlink" title="pc互ping"></a>pc互ping</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309181925871.png" alt="image-20240309181925871"></p><h5 id="虚接口互ping"><a href="#虚接口互ping" class="headerlink" title="虚接口互ping"></a>虚接口互ping</h5><p><strong>加上两条命令</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[FW1-Tunnel1]service-manage ping permit</span><br><span class="line"> [FW2-Tunnel1]service-manage ping permit</span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309182133724.png" alt="image-20240309182133724"></p><p>我的结果成功了，但是延迟普遍上了100ms，不知为何# 数据通信14</p><p>[TOC]</p><h2 id="IPsec"><a href="#IPsec" class="headerlink" title="IPsec"></a>IPsec</h2><p><strong>IPsec VPN最经典的应用场景为点到点建立IPsec隧道的场景</strong></p><ul><li>不能走组播</li><li>包含协议：</li><li>安全传输、防止监听</li><li>对等体加密密钥（非对称）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103753120.png" alt="image-20240316103753120"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103836251.png" alt="image-20240316103836251"></p><h3 id="AH（别用）"><a href="#AH（别用）" class="headerlink" title="AH（别用）"></a>AH（别用）</h3><ul><li>AH头不做加密，只做验证，和NAT矛盾（AH会把NAT报错）</li><li>ESP才进行数据加密&#x2F;解密</li><li>AH用IP协议号51来标识</li></ul><h3 id="ESP"><a href="#ESP" class="headerlink" title="ESP"></a>ESP</h3><ul><li>数据<strong>完整性</strong>，数据**<u>机密性</u>**（HMAC–key？）都有涉猎，比AH好得多</li><li>ip协议号52</li><li>和ah不同，esp可以和ip中的nat协议共存，校验除ip的部分</li></ul><h3 id="协议封装模式"><a href="#协议封装模式" class="headerlink" title="协议封装模式"></a>协议封装模式</h3><ol><li>传输模式（不加上新的ip地址，将ipsec报文插入传输层协议和ip之间）</li><li>隧道模式（原来的ip报文保持，在头部再加上一个新IP报头“总部和总部互连”）</li></ol><h3 id="DH算法"><a href="#DH算法" class="headerlink" title="DH算法"></a>DH算法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316111337845.png" alt="image-20240316111337845"></p><ul><li>a，b之间共享的p和g分别是17和3（dh-group一般非常大）</li><li>a，b之间选择自己的私钥，a拿15，b拿13</li><li>a计算公钥，3^15 mode p（17）&#x3D;6，发送给对方</li><li>b计算公钥，3^13 mode p（17）&#x3D;12，发送给对方</li><li>a共享密钥计算&#x3D;12^15 mod 17&#x3D;10</li><li>b共享密钥计算&#x3D;6^13 mod 17&#x3D;10</li></ul><h3 id="IKE协商"><a href="#IKE协商" class="headerlink" title="IKE协商"></a>IKE协商</h3><p>为什么要用IKE？为了将<strong>密钥通过自动协商</strong>产生（手动配浪费时间）</p><ul><li>通过地府赫尔曼算法进行密钥协商</li><li>dh-group中放的就是p，g</li></ul><h2 id="安全要素"><a href="#安全要素" class="headerlink" title="安全要素"></a>安全要素</h2><ul><li>机密性</li><li>完整性</li><li>身份验证</li><li>不可抵赖</li></ul><h2 id="加解密"><a href="#加解密" class="headerlink" title="加解密"></a>加解密</h2><h3 id="对称加密"><a href="#对称加密" class="headerlink" title="对称加密"></a>对称加密</h3><p>例子：des加密&#x2F;解密</p><p>密文加密钥（但是密钥要怎么传送给对方？）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316091706463.png" alt="image-20240316091706463"></p><h3 id="非对称加密"><a href="#非对称加密" class="headerlink" title="非对称加密"></a>非对称加密</h3><p>例子：RSA，分公钥和私钥</p><p>私钥加内容进行加密，只有一个公钥也可以解密出信息</p><p>公钥加密私钥解密，私钥加密公钥解密</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316092359455.png" alt="image-20240316092359455"></p><p>缺点：只能用公钥加密，而且速度太慢了</p><h3 id="混合加密"><a href="#混合加密" class="headerlink" title="混合加密"></a>混合加密</h3><p>des加rsa，将des的密钥进行rsa加密</p><h2 id="完整性校验"><a href="#完整性校验" class="headerlink" title="完整性校验"></a>完整性校验</h2><p>ah</p><p>关键元素：哈希值</p><h3 id="md5"><a href="#md5" class="headerlink" title="md5"></a>md5</h3><p>将收到的文件和哈希值进行校验</p><h3 id="HMAC"><a href="#HMAC" class="headerlink" title="HMAC"></a>HMAC</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316094929671.png" alt="image-20240316094929671"></p><p>收到信息时再加入一定的数据再计算哈希值</p><h2 id="数字签名"><a href="#数字签名" class="headerlink" title="数字签名"></a>数字签名</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316095953073.png" alt="image-20240316095953073"></p><p>可以类比于赛博身份证</p><p>第三方用私钥给a的信息进行加密，然后a给b发信息带上第三方的密文，那么b就可以用第三方的公钥验证a到底是不是a</p><p>display ike sa</p><h2 id="L2TP"><a href="#L2TP" class="headerlink" title="L2TP"></a>L2TP</h2><p>二层VPN，真正使用的是ppp协议，ppp协议外添加l2tp协议再添加ip报头（类似于pppoe协议，只是l2tp变成了pppoe）</p><h2 id="ipsec配置"><a href="#ipsec配置" class="headerlink" title="ipsec配置"></a>ipsec配置</h2><h3 id="网络拓扑图"><a href="#网络拓扑图" class="headerlink" title="网络拓扑图"></a>网络拓扑图</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327174207628.png" alt="image-20240327174207628"></p><h3 id="配置过程"><a href="#配置过程" class="headerlink" title="配置过程"></a>配置过程</h3><p><strong>二、配置过程</strong></p><p><strong>在FW1上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、定义被保护的数据流。配置高级ACL 3000，允许10.1.1.0&#x2F;24网段访问10.1.2.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] acl <span class="number">3000</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议，缺省参数可不配置</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_A]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] ike proposal <span class="number">10</span></span><br><span class="line">[FW_A-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">authentication</span>-<span class="title function_">algorithm</span> <span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ike peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> ike-proposal <span class="number">10</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> remote-<span class="selector-tag">address</span> <span class="number">23.1</span>.<span class="number">1.2</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> pre-shared-key Test!<span class="number">1234</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ipsec policy map1 <span class="number">10</span> isakmp</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> proposal tran1</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>在FW_B上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、配置高级ACL 3000，允许10.1.2.0&#x2F;24网段访问10.1.1.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] acl <span class="number">3000</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_B]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] ike proposal <span class="number">10</span></span><br><span class="line">[FW_B-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">prf</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">integrity</span>-<span class="title function_">algorithm</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256 </span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ike peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> ike-proposal <span class="number">10</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> remote-<span class="selector-tag">address</span> <span class="number">1.1</span>.<span class="number">3.1</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> pre-shared-key Test!<span class="number">1234</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ipsec policy map1 <span class="number">10</span> isakmp </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> proposal tran1 </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>二、GRE over IPSEC</strong></p><p>1、修改ACL,重新定义ipsec 感兴趣流</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[FW1]acl number <span class="number">3000</span></span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]undo <span class="keyword">rule</span> <span class="number">5</span> </span><br><span class="line">  <span class="built_in">Warning</span>: The ACL <span class="keyword">is</span> referenced <span class="keyword">by</span> IPSec, <span class="keyword">if</span> the data flows <span class="keyword">to</span> be <span class="keyword">encrypted</span> are deleted, this may cause service interruption. Are you sure <span class="keyword">to</span> d ：y</span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]<span class="keyword">rule</span>  <span class="number">5</span> permit gre </span><br></pre></td></tr></table></figure><h1 id="数据通信13"><a href="#数据通信13" class="headerlink" title="数据通信13"></a>数据通信13</h1><p>[TOC]</p><p>多模模块光纤会有可见光</p><h2 id="双机热备实验-2"><a href="#双机热备实验-2" class="headerlink" title="双机热备实验"></a>双机热备实验</h2><h3 id="拓扑图-5"><a href="#拓扑图-5" class="headerlink" title="拓扑图"></a>拓扑图</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240305111446633.png" alt="image-20240305111446633"></p><h3 id="目的-1"><a href="#目的-1" class="headerlink" title="目的"></a>目的</h3><p>为了<strong>规避一台设备故障导致网络业务中断的风险</strong>，可以在网络节点处同时部署两台设备，形成双机热备组网。当其中一台设备出现故障时，业务流量能<strong>平滑地切换到备用设备上</strong>，保证业务不中断，使内外网用户交互的时候感知不到曾经出现过网络故障。</p><ul><li>主备备份</li><li>负载分担</li></ul><h3 id="实现方法-1"><a href="#实现方法-1" class="headerlink" title="实现方法"></a>实现方法</h3><p>一般两个路由器就是使用vrrp，但是用在防火墙上就会产生一些bug，上节课有说，故我们<strong>使用vgmp</strong></p><h3 id="VGMP状态机-2"><a href="#VGMP状态机-2" class="headerlink" title="VGMP状态机"></a>VGMP状态机</h3><ul><li>initialize：VGMP管理组处于未启用状态。</li><li>Active：本端VGMP管理组的优先级比对端的VGMP管理组优先级高。</li><li>Standby：本端VGMP管理组的优先级比对端的VGMP管理组优先级低</li></ul><p>（vrrp是initialize和backup，master）</p><h3 id="VGMP主从切换-1"><a href="#VGMP主从切换-1" class="headerlink" title="VGMP主从切换"></a>VGMP主从切换</h3><ul><li>每个接口down，VGMP管理组优先级降低2。计算公式为：<strong>VGMP优先级&#x3D;VGMP初始优先级-2*接口宕的个数</strong></li><li>每台设备的VGMP管理组<strong>初始状态由用户指定</strong>（Active或Standby），且用户只能指定状态，<strong>不能指定VGMP组的具体的优先级</strong></li><li>③VGMP管理组的状态决定了该设备的主备状态，也决定了VGMP管理组成员（VRRP备份组成员或接口）的状态。（？）</li></ul><h3 id="实验配置-20"><a href="#实验配置-20" class="headerlink" title="实验配置"></a>实验配置</h3><p><strong>步骤一：配置ip地址</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#FW1</span><br><span class="line">[FW1]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]ip address <span class="number">10.1</span><span class="number">.2</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW1]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip address <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW1]firewall zone trust </span><br><span class="line">[FW1-zone-trust]add interface g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW1]firewall zone untrust </span><br><span class="line">[FW1-zone-untrust]add interface g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#FW2</span><br><span class="line">[FW2]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">0</span>]ip address <span class="number">10.1</span><span class="number">.2</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW2]<span class="type">int</span> g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip address <span class="number">10.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line">[FW2]firewall zone  trust </span><br><span class="line">[FW2-zone-trust]add interface g1/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW2]firewall zone untrust </span><br><span class="line">[FW2-zone-untrust]add interface g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤二：配置区域策略</strong></p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#FW1</span></span><br><span class="line">[FW1]<span class="keyword">security</span>-<span class="keyword">policy</span> </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>]<span class="keyword">rule</span> <span class="type">name</span> T2U</span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]source-<span class="type">zone</span> trust </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]destination-<span class="type">zone</span> untrust </span><br><span class="line"></span><br><span class="line">[FW1-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]action permit </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="meta">#FW2</span></span><br><span class="line">[FW2]<span class="keyword">security</span>-<span class="keyword">policy</span> </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>]<span class="keyword">rule</span> <span class="type">name</span> T2U</span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]source-<span class="type">zone</span> trust </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]destination-<span class="type">zone</span> untrust </span><br><span class="line"></span><br><span class="line">[FW2-<span class="keyword">policy</span>-<span class="keyword">security</span>-<span class="keyword">rule</span>-T2U]action permit</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤三：配置vrrp</strong></p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">#FW1</span><br><span class="line">[FW1]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line"></span><br><span class="line">[FW1-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">1.254</span> active </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[FW1]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW1-GigabitEthernet1<span class="regexp">/0/</span><span class="number">0</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">2.254</span> active </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#FW2</span><br><span class="line">[FW2]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line"></span><br><span class="line">[FW2-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">1.254</span> standby </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[FW2]<span class="keyword">int</span> g1<span class="regexp">/0/</span><span class="number">0</span></span><br><span class="line"></span><br><span class="line">[FW2-GigabitEthernet1<span class="regexp">/0/</span><span class="number">0</span>]vrrp vrid <span class="number">1</span> virtual-ip <span class="number">10.1</span>.<span class="number">2.254</span> standby</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>步骤四：配置hrp热备份</strong>!!!!</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[ FW1]hrp enable</span><br><span class="line"></span><br><span class="line">HRP_ S [FW1]hrp interface g1/<span class="number">0</span>/<span class="number">2</span> remote <span class="number">10.1</span><span class="number">.3</span><span class="number">.2</span></span><br><span class="line"></span><br><span class="line">[ FW2]hrp enable</span><br><span class="line"></span><br><span class="line">HRP_ S [FW2]hrp interface g1/<span class="number">0</span>/<span class="number">2</span> remote <span class="number">10.1</span><span class="number">.3</span><span class="number">.1</span>HRP_ M[ FW2]hrp standby-device</span><br><span class="line"></span><br><span class="line"><span class="comment">//感觉上就和那个ospf虚连接差不多</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="VPN-1"><a href="#VPN-1" class="headerlink" title="VPN"></a>VPN</h2><p>&#x2F;&#x2F;科学上网，请勿乱用</p><h3 id="分类-1"><a href="#分类-1" class="headerlink" title="分类"></a>分类</h3><p><strong>二层</strong></p><ul><li>l2tp</li><li>pptp(淘汰但简单)</li><li>mpls l2 vpn</li></ul><p><strong>三层</strong></p><ul><li>gre（重点简单）</li><li>ipsec（重点巅峰）</li><li>bgp&#x2F;mpls vpn</li></ul><h3 id="其他vpn-1"><a href="#其他vpn-1" class="headerlink" title="其他vpn"></a>其他vpn</h3><ul><li>ssl</li><li>l2f</li><li>dvpn</li><li>基于vlan的vpn</li><li>802.1qinq</li><li>xot</li></ul><h3 id="GRE（ip协议号47）-1"><a href="#GRE（ip协议号47）-1" class="headerlink" title="GRE（ip协议号47）"></a>GRE（ip协议号47）</h3><p><strong>虚拟的隧道（Tunnel接口）</strong></p><h4 id="定义-6"><a href="#定义-6" class="headerlink" title="定义"></a>定义</h4><p>通用路由封装协议（Generic Rrouting Encapsulation），他的作用是<strong>把一种协议的报文封装在另外一种协议的报文中</strong>的技术，是一种隧道技术（只要这样子做，都称为隧道技术）</p><h4 id="报文结构（加封装）-1"><a href="#报文结构（加封装）-1" class="headerlink" title="报文结构（加封装）"></a>报文结构（加封装）</h4><p>在原始封装的数据报文字段中<strong>加入新的IP头部</strong>，在<strong>新的IP报头和老的IP报头中间加一个协议</strong>，这就是GRE报头。 </p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309141300500.png" alt="image-20240309141300500"></p><p><strong>头部</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image7(421).png" alt="img"></p><p>把原本的IP报头当成货物，这个被称为<strong>乘客协议</strong>，GRE负责承载乘客协议的IP报文，<strong>GRE可以理解为车辆</strong>，然后由新的IP报头在公网进行传输，<strong>公网设备只会查看新的IP报头</strong>，然后进行转发。</p><h4 id="优点-2"><a href="#优点-2" class="headerlink" title="优点"></a>优点</h4><ul><li>支持多种协议</li><li>靠IP做为承载网络</li><li><strong>支持路由协议和IP组播</strong></li><li>配置简单</li></ul><h4 id="缺点-1"><a href="#缺点-1" class="headerlink" title="缺点"></a>缺点</h4><ul><li>点对点隧道</li><li>静态配置隧道参数</li><li>部署复杂连接时代价大</li><li><strong>不安全</strong></li></ul><h3 id="传输过程-1"><a href="#传输过程-1" class="headerlink" title="传输过程"></a>传输过程</h3><ul><li>私网数据报文保留，加上GRE报头和新的IP报头（隧道源和隧道目标）。</li><li><strong>数据报文发送出去后，中途运营商的设备会根据外层的IP报头进行转发。</strong></li><li>目标设备收到数据报文后，进行<strong>解封装</strong>，<strong>看到GRE报文后</strong>，会继续解封装，然后在看到原先发送的数据报文，<strong>发现是私网包头，进行查找路由</strong>，发现有就进行转发，回包也是如此，这就完成通讯。</li></ul><p><strong><u>做GRE时严禁将公网进行ospf宣告</u></strong></p><h3 id="GRE隧道keeplive-1"><a href="#GRE隧道keeplive-1" class="headerlink" title="GRE隧道keeplive"></a>GRE隧道keeplive</h3><p>和ospf保持邻居关系、心跳线设置差不多，都是检测对方或者线路有无故障</p><h3 id="GRE实验配置-1"><a href="#GRE实验配置-1" class="headerlink" title="GRE实验配置"></a>GRE实验配置</h3><h4 id="拓扑图-6"><a href="#拓扑图-6" class="headerlink" title="拓扑图"></a>拓扑图</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/45599" alt="img"></p><h4 id="配置设备IP地址-1"><a href="#配置设备IP地址-1" class="headerlink" title="配置设备IP地址"></a>配置设备IP地址</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">FW1]inter g1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]ip add <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]inter g1/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line"> [FW1-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip add <span class="number">10.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[Huawei]inter g0/<span class="number">0</span>/<span class="number">0</span> </span><br><span class="line">[Huawei-GigabitEthernet0/<span class="number">0</span>/<span class="number">0</span>]ip add </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.3</span> <span class="number">24</span> </span><br><span class="line">[Huawei]inter g0/<span class="number">0</span>/<span class="number">1</span> </span><br><span class="line">[Huawei-GigabitEthernet0/<span class="number">0</span>/<span class="number">1</span>]ip add </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.3</span> <span class="number">24</span></span><br><span class="line"><span class="comment">// [Huawei]int lo 0</span></span><br><span class="line"><span class="comment">//[Huawei-Loopback0]ip add 1.1.1.1 24</span></span><br><span class="line">[FW2]inter g1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span>]ip add <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line"><span class="number">24</span> </span><br><span class="line">[FW2]inter g1/<span class="number">0</span>/<span class="number">1</span> </span><br><span class="line">[FW2-GigabitEthernet1/<span class="number">0</span>/<span class="number">1</span>]ip add <span class="number">10.1</span><span class="number">.2</span><span class="number">.1</span> </span><br><span class="line"><span class="number">24</span></span><br></pre></td></tr></table></figure><h4 id="配置防火墙-1"><a href="#配置防火墙-1" class="headerlink" title="配置防火墙"></a>配置防火墙</h4><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#FW1</span></span><br><span class="line"> [<span class="meta">FW1</span>]firewall zone untrust </span><br><span class="line">[<span class="meta">FW1-zone-untrust</span>]<span class="keyword">add</span> <span class="keyword">interface</span> <span class="title">g1</span>/0/2 </span><br><span class="line">    </span><br><span class="line">[<span class="title">FW1</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">trust</span> </span><br><span class="line">[<span class="title">FW1</span>-<span class="title">zone</span>-<span class="title">trust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/1 </span><br><span class="line">    </span><br><span class="line">#<span class="title">FW2</span></span><br><span class="line"> [<span class="title">FW2</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">untrust</span> </span><br><span class="line">[<span class="title">FW2</span>-<span class="title">zone</span>-<span class="title">untrust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/2 </span><br><span class="line">    </span><br><span class="line">[<span class="title">FW2</span>]<span class="title">firewall</span> <span class="title">zone</span> <span class="title">trust</span> </span><br><span class="line">[<span class="title">FW2</span>-<span class="title">zone</span>-<span class="title">trust</span>]<span class="title">add</span> <span class="title">interface</span> <span class="title">g1</span>/0/1</span><br></pre></td></tr></table></figure><h4 id="配置OSPF-1"><a href="#配置OSPF-1" class="headerlink" title="配置OSPF"></a>配置OSPF</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//严禁将公网ip通过ospf进行宣告 </span></span><br><span class="line">[FW1]ospf <span class="number">1</span> </span><br><span class="line">[FW1-ospf<span class="number">-1</span>]area <span class="number">0</span></span><br><span class="line"> [FW1-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">    </span><br><span class="line"> [AR3]ospf <span class="number">1</span> </span><br><span class="line">[AR3-ospf<span class="number">-1</span>]area <span class="number">0</span> </span><br><span class="line">[AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">13.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"> [AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">23.1</span><span class="number">.1</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line"> [AR3-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">    </span><br><span class="line"> [FW2]ospf <span class="number">1</span> </span><br><span class="line">[FW2-ospf<span class="number">-1</span>]area <span class="number">0</span> </span><br><span class="line">[FW2-ospf<span class="number">-1</span>-area<span class="number">-0.0</span><span class="number">.0</span><span class="number">.0</span>]network <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> </span><br><span class="line"><span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br></pre></td></tr></table></figure><h4 id="配置NAT-1"><a href="#配置NAT-1" class="headerlink" title="配置NAT"></a>配置NAT</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">//FW1 安全策略</span></span><br><span class="line">[FW1]security-policy </span><br><span class="line">[FW1-policy-security]rule name T2U</span><br><span class="line"> [FW1-policy-security-rule-T2U]source-zone </span><br><span class="line">trust </span><br><span class="line">[FW1-policy-security-rule-T2U]destination</span><br><span class="line">zone untrust </span><br><span class="line">[FW1-policy-security-rule-T2U]action permit</span><br><span class="line">    </span><br><span class="line"> <span class="comment">//FW1 配置NAT</span></span><br><span class="line"> [FW1]nat-policy </span><br><span class="line">[FW1-policy-nat]rule name all </span><br><span class="line">[FW1-policy-nat-rule-all] source-zone trust</span><br><span class="line"> [FW1-policy-nat-rule-all]egress-interface </span><br><span class="line">GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span><span class="comment">//选择出接口</span></span><br><span class="line"> [FW1-policy-nat-rule-all]action source-nat </span><br><span class="line">easy-ip<span class="comment">//转换ip靠接口</span></span><br><span class="line">    </span><br><span class="line"><span class="comment">//FW2 流量策略</span></span><br><span class="line">[FW2]security-policy </span><br><span class="line">[FW2-policy-security]rule name T2U </span><br><span class="line">[FW2-policy-security-rule-T2U]source-zone </span><br><span class="line">trust </span><br><span class="line">[FW2-policy-security-rule-T2U]destination</span><br><span class="line">zone untrust </span><br><span class="line">[FW2-policy-security-rule-T2U]action permit</span><br><span class="line">    </span><br><span class="line"> <span class="comment">//FW2 配置NAT</span></span><br><span class="line"> [FW2]nat-policy </span><br><span class="line">[FW2-policy-nat]rule name all </span><br><span class="line">[FW2-policy-nat-rule-all]source-zone trust </span><br><span class="line">[FW2-policy-nat-rule-all]egress-interface </span><br><span class="line">GigabitEthernet1/<span class="number">0</span>/<span class="number">2</span> </span><br><span class="line">[FW2-policy-nat-rule-all]action source-nat </span><br><span class="line">easy-ip</span><br></pre></td></tr></table></figure><h4 id="配置GRE-VPN-1"><a href="#配置GRE-VPN-1" class="headerlink" title="配置GRE VPN"></a>配置GRE VPN</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]interface Tunnel <span class="number">0</span> </span><br><span class="line"><span class="comment">//[FW1-Tunnel0]tunnel-protocol gre </span></span><br><span class="line">[FW1-Tunnel0]source <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line">[FW1-Tunnel0]destination <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line">[FW1-Tunnel0]ip add <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span> <span class="number">24</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]interface Tunnel <span class="number">0</span></span><br><span class="line"> [FW2-Tunnel0]tunnel-protocol gre </span><br><span class="line">[FW2-Tunnel0]source <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> </span><br><span class="line">[FW2-Tunnel0]destination <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> </span><br><span class="line">[FW2-Tunnel0]ip add <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span> <span class="number">24</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//配置虚拟接口所属区域</span></span><br><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]firewall zone untrust </span><br><span class="line">[FW1-zone-untrust]add interface Tunnel <span class="number">0</span></span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]firewall zone untrust </span><br><span class="line">[FW2-zone-untrust]add interface Tunnel <span class="number">0</span></span><br></pre></td></tr></table></figure><h4 id="配置VPN路由-1"><a href="#配置VPN路由-1" class="headerlink" title="配置VPN路由"></a>配置VPN路由</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//FW1</span></span><br><span class="line"> [FW1]ip route-<span class="type">static</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> <span class="number">24</span> <span class="number">12.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> <span class="comment">//FW2</span></span><br><span class="line"> [FW2]ip route-<span class="type">static</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> <span class="number">24</span> <span class="number">12.1</span><span class="number">.1</span><span class="number">.1</span></span><br></pre></td></tr></table></figure><h4 id="配置VPN接口的策略-1"><a href="#配置VPN接口的策略-1" class="headerlink" title="配置VPN接口的策略"></a>配置VPN接口的策略</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//fw1（配置这个的目的是等下做策略要使用的地址）</span></span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-23.1</span><span class="number">.1</span><span class="number">.2</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-13.1</span><span class="number">.1</span><span class="number">.1</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.1</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"></span><br><span class="line"> [FW1]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> type object </span><br><span class="line">[FW1-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.2</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line"> <span class="comment">// 配置策略</span></span><br><span class="line">[FW1]security-policy</span><br><span class="line"> [FW1-policy-security]rule name U2T</span><br><span class="line"> [FW1-policy-security-rule-U2T]  source-zone </span><br><span class="line">untrust</span><br><span class="line"> [FW1-policy-security-rule-U2T]  </span><br><span class="line">destination-zone trust</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2T]  source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span></span><br><span class="line"> [FW1-policy-security-rule-U2T]  </span><br><span class="line">destination-address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span></span><br><span class="line"> [FW1-policy-security-rule-U2T]  action </span><br><span class="line">permit</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2T] rule name </span><br><span class="line">U2L</span><br><span class="line"> [FW1-policy-security-rule-U2L]  source-zone </span><br><span class="line">untrust</span><br><span class="line"> [FW1-policy-security-rule-U2L]  </span><br><span class="line">destination-zone local</span><br><span class="line">     </span><br><span class="line"> [FW1-policy-security-rule-U2L]  source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> [FW1-policy-security-rule-U2L]  </span><br><span class="line">destination-address address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line"> [FW1-policy-security-rule-U2L]  action </span><br><span class="line">permit</span><br><span class="line"> <span class="comment">//！！再添加Local to Untrust的策略！！</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//fw2</span></span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-13.1</span><span class="number">.1</span><span class="number">.1</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span> mask <span class="number">32</span></span><br><span class="line"> </span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span>  <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-23.1</span><span class="number">.1</span><span class="number">.2</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span> mask <span class="number">32</span></span><br><span class="line"></span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.1</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"> </span><br><span class="line"> [FW2]ip address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> type object </span><br><span class="line">[FW2-object-address-<span class="built_in">set</span><span class="number">-10.1</span><span class="number">.2</span><span class="number">.0</span>]address <span class="number">0</span> </span><br><span class="line"><span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span> mask <span class="number">24</span></span><br><span class="line"><span class="comment">// 配置策略</span></span><br><span class="line">[FW2]security-policy </span><br><span class="line">[FW2-policy-security]rule name U2T</span><br><span class="line"> [FW2-policy-security-rule-U2T]source-zone </span><br><span class="line">untrust </span><br><span class="line">[FW2-policy-security-rule-U2T]destination</span><br><span class="line">zone trust </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security-rule-U2T]source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.1</span><span class="number">.0</span></span><br><span class="line"> [FW2-policy-security-rule-U2T]destination</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">10.1</span><span class="number">.2</span><span class="number">.0</span></span><br><span class="line"> [FW2-policy-security-rule-U2T]action permit </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security]rule name U2L</span><br><span class="line"> [FW2-policy-security-rule-U2L]source-zone </span><br><span class="line">untrust </span><br><span class="line">[FW2-policy-security-rule-U2L]destination</span><br><span class="line">zone local </span><br><span class="line">     </span><br><span class="line">[FW2-policy-security-rule-U2L]source</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">13.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line"> [FW2-policy-security-rule-U2L]destination</span><br><span class="line">address address-<span class="built_in">set</span> <span class="number">23.1</span><span class="number">.1</span><span class="number">.2</span></span><br><span class="line"> [FW2-policy-security-rule-U2L]action permit </span><br><span class="line"><span class="comment">//！！再添加Local to Untrust的策略！！</span></span><br></pre></td></tr></table></figure><h4 id="测试-1"><a href="#测试-1" class="headerlink" title="测试"></a>测试</h4><h5 id="pc互ping-1"><a href="#pc互ping-1" class="headerlink" title="pc互ping"></a>pc互ping</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309181925871.png" alt="image-20240309181925871"></p><h5 id="虚接口互ping-1"><a href="#虚接口互ping-1" class="headerlink" title="虚接口互ping"></a>虚接口互ping</h5><p><strong>加上两条命令</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[FW1-Tunnel1]service-manage ping permit</span><br><span class="line"> [FW2-Tunnel1]service-manage ping permit</span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240309182133724.png" alt="image-20240309182133724"></p><p>我的结果成功了，但是延迟普遍上了100ms，不知为何# 数据通信14</p><p>[TOC]</p><h2 id="IPsec-1"><a href="#IPsec-1" class="headerlink" title="IPsec"></a>IPsec</h2><p><strong>IPsec VPN最经典的应用场景为点到点建立IPsec隧道的场景</strong></p><ul><li>不能走组播</li><li>包含协议：</li><li>安全传输、防止监听</li><li>对等体加密密钥（非对称）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103753120.png" alt="image-20240316103753120"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103836251.png" alt="image-20240316103836251"></p><h3 id="AH（别用）-1"><a href="#AH（别用）-1" class="headerlink" title="AH（别用）"></a>AH（别用）</h3><ul><li>AH头不做加密，只做验证，和NAT矛盾（AH会把NAT报错）</li><li>ESP才进行数据加密&#x2F;解密</li><li>AH用IP协议号51来标识</li></ul><h3 id="ESP-1"><a href="#ESP-1" class="headerlink" title="ESP"></a>ESP</h3><ul><li>数据<strong>完整性</strong>，数据**<u>机密性</u>**（HMAC–key？）都有涉猎，比AH好得多</li><li>ip协议号52</li><li>和ah不同，esp可以和ip中的nat协议共存，校验除ip的部分</li></ul><h3 id="协议封装模式-1"><a href="#协议封装模式-1" class="headerlink" title="协议封装模式"></a>协议封装模式</h3><ol><li>传输模式（不加上新的ip地址，将ipsec报文插入传输层协议和ip之间）</li><li>隧道模式（原来的ip报文保持，在头部再加上一个新IP报头“总部和总部互连”）</li></ol><h3 id="DH算法-1"><a href="#DH算法-1" class="headerlink" title="DH算法"></a>DH算法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316111337845.png" alt="image-20240316111337845"></p><ul><li>a，b之间共享的p和g分别是17和3（dh-group一般非常大）</li><li>a，b之间选择自己的私钥，a拿15，b拿13</li><li>a计算公钥，3^15 mode p（17）&#x3D;6，发送给对方</li><li>b计算公钥，3^13 mode p（17）&#x3D;12，发送给对方</li><li>a共享密钥计算&#x3D;12^15 mod 17&#x3D;10</li><li>b共享密钥计算&#x3D;6^13 mod 17&#x3D;10</li></ul><h3 id="IKE协商-1"><a href="#IKE协商-1" class="headerlink" title="IKE协商"></a>IKE协商</h3><p>为什么要用IKE？为了将<strong>密钥通过自动协商</strong>产生（手动配浪费时间）</p><ul><li>通过地府赫尔曼算法进行密钥协商</li><li>dh-group中放的就是p，g</li></ul><h2 id="安全要素-1"><a href="#安全要素-1" class="headerlink" title="安全要素"></a>安全要素</h2><ul><li>机密性</li><li>完整性</li><li>身份验证</li><li>不可抵赖</li></ul><h2 id="加解密-1"><a href="#加解密-1" class="headerlink" title="加解密"></a>加解密</h2><h3 id="对称加密-1"><a href="#对称加密-1" class="headerlink" title="对称加密"></a>对称加密</h3><p>例子：des加密&#x2F;解密</p><p>密文加密钥（但是密钥要怎么传送给对方？）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316091706463.png" alt="image-20240316091706463"></p><h3 id="非对称加密-1"><a href="#非对称加密-1" class="headerlink" title="非对称加密"></a>非对称加密</h3><p>例子：RSA，分公钥和私钥</p><p>私钥加内容进行加密，只有一个公钥也可以解密出信息</p><p>公钥加密私钥解密，私钥加密公钥解密</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316092359455.png" alt="image-20240316092359455"></p><p>缺点：只能用公钥加密，而且速度太慢了</p><h3 id="混合加密-1"><a href="#混合加密-1" class="headerlink" title="混合加密"></a>混合加密</h3><p>des加rsa，将des的密钥进行rsa加密</p><h2 id="完整性校验-1"><a href="#完整性校验-1" class="headerlink" title="完整性校验"></a>完整性校验</h2><p>ah</p><p>关键元素：哈希值</p><h3 id="md5-1"><a href="#md5-1" class="headerlink" title="md5"></a>md5</h3><p>将收到的文件和哈希值进行校验</p><h3 id="HMAC-1"><a href="#HMAC-1" class="headerlink" title="HMAC"></a>HMAC</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316094929671.png" alt="image-20240316094929671"></p><p>收到信息时再加入一定的数据再计算哈希值</p><h2 id="数字签名-1"><a href="#数字签名-1" class="headerlink" title="数字签名"></a>数字签名</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316095953073.png" alt="image-20240316095953073"></p><p>可以类比于赛博身份证</p><p>第三方用私钥给a的信息进行加密，然后a给b发信息带上第三方的密文，那么b就可以用第三方的公钥验证a到底是不是a</p><p>display ike sa</p><h2 id="L2TP-1"><a href="#L2TP-1" class="headerlink" title="L2TP"></a>L2TP</h2><p>二层VPN，真正使用的是ppp协议，ppp协议外添加l2tp协议再添加ip报头（类似于pppoe协议，只是l2tp变成了pppoe）</p><h2 id="ipsec配置-1"><a href="#ipsec配置-1" class="headerlink" title="ipsec配置"></a>ipsec配置</h2><h3 id="网络拓扑图-1"><a href="#网络拓扑图-1" class="headerlink" title="网络拓扑图"></a>网络拓扑图</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327174207628.png" alt="image-20240327174207628"></p><h3 id="配置过程-1"><a href="#配置过程-1" class="headerlink" title="配置过程"></a>配置过程</h3><p><strong>二、配置过程</strong></p><p><strong>在FW1上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、定义被保护的数据流。配置高级ACL 3000，允许10.1.1.0&#x2F;24网段访问10.1.2.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] acl <span class="number">3000</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议，缺省参数可不配置</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_A]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] ike proposal <span class="number">10</span></span><br><span class="line">[FW_A-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">authentication</span>-<span class="title function_">algorithm</span> <span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ike peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> ike-proposal <span class="number">10</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> remote-<span class="selector-tag">address</span> <span class="number">23.1</span>.<span class="number">1.2</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> pre-shared-key Test!<span class="number">1234</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ipsec policy map1 <span class="number">10</span> isakmp</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> proposal tran1</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>在FW_B上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、配置高级ACL 3000，允许10.1.2.0&#x2F;24网段访问10.1.1.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] acl <span class="number">3000</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_B]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] ike proposal <span class="number">10</span></span><br><span class="line">[FW_B-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">prf</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">integrity</span>-<span class="title function_">algorithm</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256 </span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ike peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> ike-proposal <span class="number">10</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> remote-<span class="selector-tag">address</span> <span class="number">1.1</span>.<span class="number">3.1</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> pre-shared-key Test!<span class="number">1234</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ipsec policy map1 <span class="number">10</span> isakmp </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> proposal tran1 </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>二、GRE over IPSEC</strong></p><p>1、修改ACL,重新定义ipsec 感兴趣流</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[FW1]acl number <span class="number">3000</span></span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]undo <span class="keyword">rule</span> <span class="number">5</span> </span><br><span class="line">  <span class="built_in">Warning</span>: The ACL <span class="keyword">is</span> referenced <span class="keyword">by</span> IPSec, <span class="keyword">if</span> the data flows <span class="keyword">to</span> be <span class="keyword">encrypted</span> are deleted, this may cause service interruption. Are you sure <span class="keyword">to</span> d ：y</span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]<span class="keyword">rule</span>  <span class="number">5</span> permit gre </span><br></pre></td></tr></table></figure><h1 id="数据通信14"><a href="#数据通信14" class="headerlink" title="数据通信14"></a>数据通信14</h1><p>[TOC]</p><h2 id="IPsec-2"><a href="#IPsec-2" class="headerlink" title="IPsec"></a>IPsec</h2><p><strong>IPsec VPN最经典的应用场景为点到点建立IPsec隧道的场景</strong></p><ul><li>不能走组播</li><li>包含协议：</li><li>安全传输、防止监听</li><li>对等体加密密钥（非对称）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103753120.png" alt="image-20240316103753120"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316103836251.png" alt="image-20240316103836251"></p><h3 id="AH（别用）-2"><a href="#AH（别用）-2" class="headerlink" title="AH（别用）"></a>AH（别用）</h3><ul><li>AH头不做加密，只做验证，和NAT矛盾（AH会把NAT报错）</li><li>ESP才进行数据加密&#x2F;解密</li><li>AH用IP协议号51来标识</li></ul><h3 id="ESP-2"><a href="#ESP-2" class="headerlink" title="ESP"></a>ESP</h3><ul><li>数据<strong>完整性</strong>，数据**<u>机密性</u>**（HMAC–key？）都有涉猎，比AH好得多</li><li>ip协议号52</li><li>和ah不同，esp可以和ip中的nat协议共存，校验除ip的部分</li></ul><h3 id="协议封装模式-2"><a href="#协议封装模式-2" class="headerlink" title="协议封装模式"></a>协议封装模式</h3><ol><li>传输模式（不加上新的ip地址，将ipsec报文插入传输层协议和ip之间）</li><li>隧道模式（原来的ip报文保持，在头部再加上一个新IP报头“总部和总部互连”）</li></ol><h3 id="DH算法-2"><a href="#DH算法-2" class="headerlink" title="DH算法"></a>DH算法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316111337845.png" alt="image-20240316111337845"></p><ul><li>a，b之间共享的p和g分别是17和3（dh-group一般非常大）</li><li>a，b之间选择自己的私钥，a拿15，b拿13</li><li>a计算公钥，3^15 mode p（17）&#x3D;6，发送给对方</li><li>b计算公钥，3^13 mode p（17）&#x3D;12，发送给对方</li><li>a共享密钥计算&#x3D;12^15 mod 17&#x3D;10</li><li>b共享密钥计算&#x3D;6^13 mod 17&#x3D;10</li></ul><h3 id="IKE协商-2"><a href="#IKE协商-2" class="headerlink" title="IKE协商"></a>IKE协商</h3><p>为什么要用IKE？为了将<strong>密钥通过自动协商</strong>产生（手动配浪费时间）</p><ul><li>通过地府赫尔曼算法进行密钥协商</li><li>dh-group中放的就是p，g</li></ul><h2 id="安全要素-2"><a href="#安全要素-2" class="headerlink" title="安全要素"></a>安全要素</h2><ul><li>机密性</li><li>完整性</li><li>身份验证</li><li>不可抵赖</li></ul><h2 id="加解密-2"><a href="#加解密-2" class="headerlink" title="加解密"></a>加解密</h2><h3 id="对称加密-2"><a href="#对称加密-2" class="headerlink" title="对称加密"></a>对称加密</h3><p>例子：des加密&#x2F;解密</p><p>密文加密钥（但是密钥要怎么传送给对方？）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316091706463.png" alt="image-20240316091706463"></p><h3 id="非对称加密-2"><a href="#非对称加密-2" class="headerlink" title="非对称加密"></a>非对称加密</h3><p>例子：RSA，分公钥和私钥</p><p>私钥加内容进行加密，只有一个公钥也可以解密出信息</p><p>公钥加密私钥解密，私钥加密公钥解密</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316092359455.png" alt="image-20240316092359455"></p><p>缺点：只能用公钥加密，而且速度太慢了</p><h3 id="混合加密-2"><a href="#混合加密-2" class="headerlink" title="混合加密"></a>混合加密</h3><p>des加rsa，将des的密钥进行rsa加密</p><h2 id="完整性校验-2"><a href="#完整性校验-2" class="headerlink" title="完整性校验"></a>完整性校验</h2><p>ah</p><p>关键元素：哈希值</p><h3 id="md5-2"><a href="#md5-2" class="headerlink" title="md5"></a>md5</h3><p>将收到的文件和哈希值进行校验</p><h3 id="HMAC-2"><a href="#HMAC-2" class="headerlink" title="HMAC"></a>HMAC</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316094929671.png" alt="image-20240316094929671"></p><p>收到信息时再加入一定的数据再计算哈希值</p><h2 id="数字签名-2"><a href="#数字签名-2" class="headerlink" title="数字签名"></a>数字签名</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240316095953073.png" alt="image-20240316095953073"></p><p>可以类比于赛博身份证</p><p>第三方用私钥给a的信息进行加密，然后a给b发信息带上第三方的密文，那么b就可以用第三方的公钥验证a到底是不是a</p><p>display ike sa</p><h2 id="L2TP-2"><a href="#L2TP-2" class="headerlink" title="L2TP"></a>L2TP</h2><p>二层VPN，真正使用的是ppp协议，ppp协议外添加l2tp协议再添加ip报头（类似于pppoe协议，只是l2tp变成了pppoe）</p><h2 id="ipsec配置-2"><a href="#ipsec配置-2" class="headerlink" title="ipsec配置"></a>ipsec配置</h2><h3 id="网络拓扑图-2"><a href="#网络拓扑图-2" class="headerlink" title="网络拓扑图"></a>网络拓扑图</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327174207628.png" alt="image-20240327174207628"></p><h3 id="配置过程-2"><a href="#配置过程-2" class="headerlink" title="配置过程"></a>配置过程</h3><p><strong>二、配置过程</strong></p><p><strong>在FW1上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、定义被保护的数据流。配置高级ACL 3000，允许10.1.1.0&#x2F;24网段访问10.1.2.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] acl <span class="number">3000</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_A-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议，缺省参数可不配置</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_A]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_A-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] ike proposal <span class="number">10</span></span><br><span class="line">[FW_A-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">authentication</span>-<span class="title function_">algorithm</span> <span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_A</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ike peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> ike-proposal <span class="number">10</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> remote-<span class="selector-tag">address</span> <span class="number">23.1</span>.<span class="number">1.2</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> pre-shared-key Test!<span class="number">1234</span></span><br><span class="line"><span class="selector-attr">[FW_A-ike-peer-b]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_A]</span> ipsec policy map1 <span class="number">10</span> isakmp</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> proposal tran1</span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">b</span></span><br><span class="line"><span class="selector-attr">[FW_A-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_A] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_A-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>在FW_B上配置IPSec策略，并在接口上应用此IPSec策略。</strong></p><p>a、配置高级ACL 3000，允许10.1.2.0&#x2F;24网段访问10.1.1.0&#x2F;24网段</p><figure class="highlight dns"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] acl <span class="number">3000</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] rule <span class="number">5</span> permit ip source <span class="number">10.1.2.0</span> <span class="number">0.0.0.255</span> destination <span class="number">10.1.1.0</span> <span class="number">0.0.0.255</span></span><br><span class="line">[FW_B-acl-adv-<span class="number">3000</span>] quit</span><br></pre></td></tr></table></figure><p>b、配置IPSec安全提议</p><figure class="highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">[FW_B]</span> ipsec proposal tran1</span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp authentication-algorithm sha2<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> esp encryption-algorithm aes<span class="number">-256</span></span><br><span class="line"><span class="string">[FW_B-ipsec-proposal-tran1]</span> quit</span><br></pre></td></tr></table></figure><p>c、配置IKE安全提议</p><figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] ike proposal <span class="number">10</span></span><br><span class="line">[FW_B-ike-proposal-<span class="number">10</span>] authentication-<span class="keyword">method</span> <span class="title function_">pre</span>-<span class="title function_">share</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">prf</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">encryption</span>-<span class="title function_">algorithm</span> <span class="title function_">aes</span>-256</span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">dh</span> <span class="title function_">group14</span></span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">integrity</span>-<span class="title function_">algorithm</span> <span class="title function_">hmac</span>-<span class="title function_">sha2</span>-256 </span><br><span class="line">[<span class="title function_">FW_B</span>-<span class="title function_">ike</span>-<span class="title function_">proposal</span>-10] <span class="title function_">quit</span></span><br></pre></td></tr></table></figure><p>d、配置IKE peer</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ike peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> ike-proposal <span class="number">10</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> remote-<span class="selector-tag">address</span> <span class="number">1.1</span>.<span class="number">3.1</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> pre-shared-key Test!<span class="number">1234</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ike-peer-a]</span> quit</span><br></pre></td></tr></table></figure><p>e、配置IPSec策略</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[FW_B]</span> ipsec policy map1 <span class="number">10</span> isakmp </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> security acl <span class="number">3000</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> proposal tran1 </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> ike-peer <span class="selector-tag">a</span> </span><br><span class="line"><span class="selector-attr">[FW_B-ipsec-policy-isakmp-map1-10]</span> quit</span><br></pre></td></tr></table></figure><p>f、在接口GE1&#x2F;0&#x2F;1上应用IPSec策略组map1</p><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[FW_B] <span class="keyword">interface</span> gigabitethernet <span class="number">1</span><span class="regexp">/0/</span><span class="number">1</span></span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] ipsec policy map1</span><br><span class="line">[FW_B-GigabitEthernet1<span class="regexp">/0/</span><span class="number">1</span>] quit</span><br></pre></td></tr></table></figure><p><strong>二、GRE over IPSEC</strong></p><p>1、修改ACL,重新定义ipsec 感兴趣流</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[FW1]acl number <span class="number">3000</span></span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]undo <span class="keyword">rule</span> <span class="number">5</span> </span><br><span class="line">  <span class="built_in">Warning</span>: The ACL <span class="keyword">is</span> referenced <span class="keyword">by</span> IPSec, <span class="keyword">if</span> the data flows <span class="keyword">to</span> be <span class="keyword">encrypted</span> are deleted, this may cause service interruption. Are you sure <span class="keyword">to</span> d ：y</span><br><span class="line">[FW2-acl-adv<span class="number">-3000</span>]<span class="keyword">rule</span>  <span class="number">5</span> permit gre </span><br></pre></td></tr></table></figure><h1 id="数据通信15"><a href="#数据通信15" class="headerlink" title="数据通信15"></a>数据通信15</h1><p>[TOC]</p><h2 id="SSL-VPN"><a href="#SSL-VPN" class="headerlink" title="SSL VPN"></a>SSL VPN</h2><h3 id="概述-8"><a href="#概述-8" class="headerlink" title="概述"></a>概述</h3><p>SSL VPN是采用<a href="https://info.support.huawei.com/info-finder/encyclopedia/zh/SSL.html">SSL</a>（Security Socket Layer）&#x2F;TLS（Transport Layer Security）协议来实现远程接入的一种轻量级<a href="https://info.support.huawei.com/info-finder/encyclopedia/zh/VPN.html">VPN</a>技术。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327092835589.png" alt="image-20240327092835589"></p><h3 id="特点-1"><a href="#特点-1" class="headerlink" title="特点"></a>特点</h3><ul><li>基于证书的认证</li><li>ssl协议内置于浏览器中</li><li>构建隧道后即可访问企业内网</li></ul><h3 id="工作流程-1"><a href="#工作流程-1" class="headerlink" title="工作流程"></a>工作流程</h3><ol><li>用户访问企业内网时先与SSL VPN服务器之间建立安全<strong>连接隧道</strong></li><li>用户访问SSL VPN服务器，<strong>服务器对用户身份进行认证</strong></li><li>接着SSL服务器将报文转发给特定的内部服务器（web ftp ）</li></ol><h3 id="与ipsec对比优点"><a href="#与ipsec对比优点" class="headerlink" title="与ipsec对比优点"></a>与ipsec对比优点</h3><ul><li><strong>轻量级</strong></li><li><strong>安全性</strong>不输于ipsec vpn</li><li>浏览器登录，便捷性（无需客户端）</li><li><strong>低成本</strong></li><li><strong>只能基于五元组数据流建立IPSec</strong>，无法明确区分出使用某终端接入IPSec的人是否为指定的授权用户，即<strong>管理员无法确知是谁在利用VPN</strong>访问内网资源</li><li>SSL VPN工作在传输层和应用层之间，<strong>不会改变IP报文头和TCP报文头</strong>，不会影响原有网络拓扑。如果网络中部署了防火墙，只需放行传统的HTTPS（443）端口。</li><li>更重要的，相对于IPSec网络层的控制，SSL VPN的所有访问控制都是基于应用层，其<strong>细分程度可以达到URL或文件级别</strong>，可以大大提高企业远程接入的安全级别。</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327093403440.png" alt="image-20240327093403440"></p><h3 id="访问SSL-VPN服务器的典型步骤"><a href="#访问SSL-VPN服务器的典型步骤" class="headerlink" title="访问SSL VPN服务器的典型步骤"></a>访问SSL VPN服务器的典型步骤</h3><ol><li>打开浏览器，输入https：&#x2F;&#x2F;SSL VPN服务器地址：端口或者https：&#x2F;&#x2F;域名</li><li>可能会显示网站证书有问题，我们选择“继续浏览该网站”</li><li>进入服务器web登录界面，输入用户名和密码，登录成功</li></ol><h3 id="SSL运行机制"><a href="#SSL运行机制" class="headerlink" title="SSL运行机制"></a>SSL运行机制</h3><h4 id="ssl特点"><a href="#ssl特点" class="headerlink" title="ssl特点"></a>ssl特点</h4><p>（1）所有要传输的数据信息都是加密传输，第三方无法解密<br>（2）具有校验机制，信息一旦被篡改，通信双方会立刻发现。<br>（3）配备身份证书，防止身份被冒充。</p><h4 id="ssl协议结构"><a href="#ssl协议结构" class="headerlink" title="ssl协议结构"></a>ssl协议结构</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327160846755.png" alt="image-20240327160846755"></p><ul><li>握手协议：身份认证、协商加密、交换加密密钥（服务器端将其<strong>公钥告诉客户端</strong>，然后客户端用服务器的<strong>公钥加密信息</strong>，服务器收到密文后，<strong>用自己的私钥解密</strong>。）</li><li>密码变化协议：通知对方将使用新的算法和密钥</li><li>警告协议：发现任何异常通知对方</li></ul><h4 id="ssl打补丁"><a href="#ssl打补丁" class="headerlink" title="ssl打补丁"></a>ssl打补丁</h4><p> （1）公钥如何不被篡改？</p><pre><code>        &lt;u&gt;将服务器公钥放入服务器证书中，由服务器将证书传给客户端&lt;/u&gt;</code></pre><p> （2）加解密计算量大，如何提升效率？</p><pre><code>        客户端与服务器采用公钥加密法协商出此“会话密钥”，而后续的数据报文都使用此**“会话密钥”**进行加密和解密（即对称加密法）</code></pre><h4 id="ssl四次握手"><a href="#ssl四次握手" class="headerlink" title="ssl四次握手"></a>ssl四次握手</h4><p> <img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240327162630041.png" alt="image-20240327162630041"></p><ol><li>client hello:握手第一步是客户端向服务端发送 Client Hello 消息，这个消息里包含了一个客户端生成的随机数 <strong>Random1</strong>、客户端支持的加密套件（Support Ciphers）和 SSL Version 等信息</li><li>server hello :server从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件，这个套件决定了后续加密和生成摘要时具体使用哪些算法，另外还会生成一份随机数 <strong>Random2</strong>。</li><li>certificate: 发送服务端的证书及其根证书</li><li>Server Key Exchange:服务端交换通信密钥，如图发送了服务端加密公钥和签名算法</li><li>Server Hello Done</li><li>Client Key Exchange: 交换客户端的加密密钥,一个随机数<strong>pre-master-key</strong>，稍后用于生成“会话密钥”</li><li>Application Data Protocol: http-over-tls 业务数据安全传输</li></ol><p><strong><u>为什么是三个随机数呢？</u></strong></p><p><strong>为了增强安全性</strong>，每个随机数都是伪随机，但是元素变三个随机性就加了很多</p><p><strong><u>server hello过程就是不安全网站显示的原因</u></strong></p><p>从第1步骤客户端（远程用户）发起https访问SSL VPN服务器起，SSL协议已开始运行，第2步骤的提示，恰恰可以与SSL握手协议的第②次通信相对应：<strong>此时服务器将自己的本地证书传给了客户端，客户端要对服务器的证书进行认证，客户端发现该证书不可靠</strong></p><h2 id="SSL配置"><a href="#SSL配置" class="headerlink" title="SSL配置"></a>SSL配置</h2><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" alt="img"></p><p><strong>配置管理ip</strong></p><p>使用默认用户名密码登录命令行</p><table><thead><tr><th>1</th><th>SG-6000#    show interface  #默认e0&#x2F;0所使用的的ip为自动获取</th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table><p><strong>配置ip</strong></p><table><thead><tr><th>1</th><th>SG-6000#  configure</th></tr></thead><tbody><tr><td>2</td><td>SG-6000(config)#    interface ethernet0&#x2F;0              2</td></tr><tr><td>3</td><td>SG-6000(config-if-eth0&#x2F;0)#    no ip add dhcp  #删除掉自动获取ip地址配置              3</td></tr><tr><td>4</td><td>SG-6000(config-if-eth0&#x2F;0)#    ip add 192.168.1.199 255.255.255.0               4</td></tr></tbody></table><p><strong>一</strong> <strong>、配置安全域</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg" alt="img"></p><p><strong>二、配置****SSLVPN</strong></p><p><strong>1<strong><strong>、添加</strong></strong>sslvpn</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg" alt="img"></p><p><strong>配置<strong><strong>sslvpen</strong></strong>认证域</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg" alt="img"></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg" alt="img"></p><p><strong>配置出接口和服务端口、</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg" alt="img"></p><p><strong>配置虚拟接口</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg" alt="img"></p><p><strong>配置<strong><strong>dhcp</strong></strong>分配，帮助<strong><strong>vpn</strong></strong>拨号进来用户分配<strong><strong>ip</strong></strong>地址</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg" alt="img"></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png" alt="img"></p><p><strong>配置客户端路由信息</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg" alt="img"></p><p><strong>高级配置</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg" alt="img"></p><p><strong>三、创建用户</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg" alt="img"></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg" alt="img"></p><p><strong>四、创建流量策略</strong></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg" alt="img"></p><p><img src="C:/Users/alex/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg" alt="img"></p><h2 id="几类VPN之间的对比"><a href="#几类VPN之间的对比" class="headerlink" title="几类VPN之间的对比"></a>几类VPN之间的对比</h2><h3 id="PPTP"><a href="#PPTP" class="headerlink" title="PPTP"></a>PPTP</h3><p><strong>点对点隧道协议</strong></p><h4 id="特点-2"><a href="#特点-2" class="headerlink" title="特点"></a>特点</h4><p>PPTP协议使用GRE（Generic Routing Encapsulation）协议来封装数据，通过这种封装方式可以在公共网络上建立一个安全的加密通道。由于PPTP协议较为简单，因此在实现和维护方面相对容易。</p><h4 id="应用场景-1"><a href="#应用场景-1" class="headerlink" title="应用场景"></a>应用场景</h4><p>PPTP协议适用于小型企业或个人用户，可以在家庭或小型企业网络中实现安全的远程访问。</p><h3 id="L2TP-3"><a href="#L2TP-3" class="headerlink" title="L2TP"></a>L2TP</h3><p><strong>L2TP是一种二层隧道协议</strong>，它可以将数据封装在L2TP协议中，然后通过公共网络进行传输。（pppoe）</p><h4 id="特点-3"><a href="#特点-3" class="headerlink" title="特点"></a>特点</h4><p>L2TP协议可以提供更好的安全性，因为<strong>它支持数据加密和身份验证功能</strong>。同时，L2TP协议还支持多隧道和负载均衡功能，可以更好地满足大规模网络的需求。</p><h4 id="应用场景-2"><a href="#应用场景-2" class="headerlink" title="应用场景"></a>应用场景</h4><p>L2TP协议适用于大型企业或服务提供商，可以在广域网或虚拟专用网络中实现安全的远程访问。</p><h3 id="IPSEC"><a href="#IPSEC" class="headerlink" title="IPSEC"></a>IPSEC</h3><p>IPSec是一种<strong>基于IP层的</strong>网络安全协议，它可以为IP数据包提供加密和认证功能</p><h4 id="特点-4"><a href="#特点-4" class="headerlink" title="特点"></a>特点</h4><p>IPSec协议可以提供端到端的安全性，因为它可以在数据传输过程中对数据进行加密和身份验证。同时，IPSec协议还支持多种加密算法和认证方式，可以更好地满足不同的安全需求。</p><h4 id="应用场景-3"><a href="#应用场景-3" class="headerlink" title="应用场景"></a>应用场景</h4><p>IPSec协议适用于需要在<strong>不同网络之间实现安全通信的场景</strong>，例如企业网、云服务和虚拟专用网络等。</p><h3 id="SSL"><a href="#SSL" class="headerlink" title="SSL"></a>SSL</h3><p>SSL&#x2F;TLS是一种<strong>基于传输层的</strong>网络安全协议，它可以为应用程序提供加密和身份验证功能。</p><h4 id="特点-5"><a href="#特点-5" class="headerlink" title="特点"></a>特点</h4><p>SSL&#x2F;TLS协议可以提供端到端的安全性，数据传输过程被加密，保证了数据的机密性和完整性。此外，SSL&#x2F;TLS协议还<strong>支持双向认证和公钥基础设施（PKI）技术</strong>，增强了通信的安全性。</p><h4 id="应用场景-4"><a href="#应用场景-4" class="headerlink" title="应用场景"></a>应用场景</h4><p>SSL&#x2F;TLS协议广泛应用于Web浏览器和服务器之间的通信、电子邮件、即时消息传输等场景。它可以在不安全的网络环境中为应用程序提供安全通信的能力。</p><h3 id="异同点"><a href="#异同点" class="headerlink" title="异同点"></a>异同点</h3><h4 id="安全性"><a href="#安全性" class="headerlink" title="安全性"></a>安全性</h4><p>IPSec VPN：<br>  IPSec协议提供了端到端的安全性，可以确保数据传输过程中的机密性和完整性。它支持多种加密算法和认证方式，提供了更高级别的安全性保障。在网络隔离性方面，IPSec VPN通常只能在相同网络环境中的设备之间建立安全的连接，难以实现不同网络环境之间的安全通信。</p><p>L2TP VPN：<br> L2TP协议可以提供数据加密和身份验证功能，具有一定的安全性。但是相对于IPSec VPN，其安全性较低。在网络隔离性方面，L2TP VPN可以在不同网络环境中的设备之间建立安全的连接，实现较好的网络隔离性。</p><p>SSL VPN：<br>  SSL&#x2F;TLS协议提供了端到端的安全性，可以确保数据传输过程中的机密性和完整性。它还支持双向认证和公钥基础设施（PKI）技术，增强了通信的安全性。在网络隔离性方面，SSL&#x2F;TLS VPN可以实现不同网络环境之间的安全通信，但相对于L2TP VPN，其隔离性可能较弱。</p><p>PPTP VPN：<br> 安全性相对较弱，因为它只提供基本的加密和身份验证功能。对网络隔离性的支持较弱，适用于家庭或小型企业网络环境。</p><p><strong>总而言之，PPTP、L2TP、IPSec和SSL&#x2F;TLS四种VPN技术在协议和技术特点方面存在差异。</strong></p><p><strong>PPTP和L2TP主要应用于远程接入VPN场景，而IPSec和SSL&#x2F;TLS则更适用于虚拟专用网络或云服务的安全通信场景。</strong></p><p><strong>此外，PPTP和L2TP适用于小型或大型企业网络环境，而IPSec和SSL&#x2F;TLS则广泛应用于各种规模的网络环境。</strong></p>]]></content>
    
    
    <summary type="html">ict培训数据通信</summary>
    
    
    
    
    <category term="数据通信" scheme="http://blog.wenmozhu.de5.net/tags/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/"/>
    
  </entry>
  
  <entry>
    <title>云计算</title>
    <link href="http://blog.wenmozhu.de5.net/2024/07/10/%E4%BA%91%E8%AE%A1%E7%AE%97/"/>
    <id>http://blog.wenmozhu.de5.net/2024/07/10/%E4%BA%91%E8%AE%A1%E7%AE%97/</id>
    <published>2024-07-10T07:43:55.000Z</published>
    <updated>2026-09-09T10:57:22.167Z</updated>
    
    <content type="html"><![CDATA[<h1 id="云计算"><a href="#云计算" class="headerlink" title="云计算"></a>云计算</h1><h2 id="云计算定义"><a href="#云计算定义" class="headerlink" title="云计算定义"></a>云计算定义</h2><p>不是技术，而是服务模式以及实现这种模式背后的技术（信息电场）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/58cd0f0a-67f5-49be-bc49-b23c68feae50.png" alt="image-20240518094918390"></p><p><strong>云计算是一种模型，它可以实现随时随地，便捷的，随需求应变地从可配置的计算资源共享此中获取所需的资源，资源能够快速供应并且释放，使得管理资源的工作量与服务商的交互减少到最小限度</strong></p><p><strong><u>是一种模型&#x2F;商业模式，像用水用电去使用底层的ict资源</u></strong></p><h2 id="云计算的价值"><a href="#云计算的价值" class="headerlink" title="云计算的价值"></a>云计算的价值</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/62805beb-8281-4746-83fd-f8eea79cd3b1.png" alt="image-20240518110711727"></p><ol><li>按需自助服务</li><li>广泛网络接入</li><li>资源池化</li><li>快速部署，弹性扩容</li><li>可计量服务</li></ol><h2 id="服务模式"><a href="#服务模式" class="headerlink" title="服务模式"></a>服务模式</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9ff10a1e-397e-4960-b71b-b1ded970c5e9.png" alt="image-20240518113340753"></p><p>三类：最高级就是saas，中间级别paas，最低级iaas</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/431cd0bf-2130-43dc-93ca-b01a9569672c.png" alt="image-20240518113752299"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d552ffbd-21bd-4604-87dd-252f30a8413a.png" alt="image-20240902092005793"></p><h2 id="部署模式"><a href="#部署模式" class="headerlink" title="部署模式"></a>部署模式</h2><ul><li>私有云：单一组织拥有（）<strong>存放重要数据</strong>，部署相对困难</li><li>公有云：运营商所拥有的（）服务类型多，部署简单</li><li>混合云：多种云构成的（）重要的放私有云，其他丢公有云上</li><li>行业云（社区云）：针对特定行业和人群定制的云（）–这个一般可以省略</li></ul><p>公有云、私有云和混合云这三种云服务模式，由于它们各自的特点和优势，通常会被不同的部门或机构采用。</p><p>以下是一些具体的例子：</p><p><strong>公有云</strong>：</p><ol><li><strong>互联网公司</strong>：这些公司通常需要快速扩展其服务，并且愿意利用第三方提供的可扩展性和成本效益。例如，各种规模的互联网初创公司和App开发商可能会选择使用公有云服务，以便快速部署和扩展其在线服务。</li><li>**中小企业(SMEs)**：对于资源有限的中小企业来说，公有云提供了一个无需大量前期投资即可获得必要IT资源的方案。它们可以按需购买计算资源，而不必自己维护数据中心。</li><li><strong>研究和教育机构</strong>：大学和研究机构可能会使用公有云进行数据存储和处理，特别是在需要大量计算资源进行科学研究时。</li></ol><p><strong>私有云</strong>：</p><ol><li><strong>大型企业</strong>：具有敏感数据的大型企业或那些对数据安全和隐私要求极高的金融机构，如银行、保险公司和律师事务所，更倾向于使用私有云。这是因为私有云提供了更高水平的定制、安全性和控制能力。</li><li><strong>政府部门</strong>：政府机关通常处理机密信息，因此他们更有可能建立私有云来确保数据的安全和符合监管要求。</li><li><strong>医疗保健行业</strong>：医院和医疗机构由于处理患者数据，通常需要符合严格的合规性标准，因此可能会选择私有云解决方案以保护敏感医疗记录。</li></ol><p><strong>混合云</strong>：</p><ol><li><strong>跨国公司</strong>：拥有多个业务单元和遍布全球的办事处的跨国公司可能会同时使用公有云和私有云，以便根据每个业务需求灵活地管理资源和服务。</li><li><strong>需要特殊数据处理的行业</strong>：比如媒体和娱乐行业，可能需要将核心数据和应用程序保留在私有云中，同时使用公有云来进行内容分发等。</li><li><strong>逐渐过渡的组织</strong>：一些组织可能正在从传统的IT基础设施转移到云服务，但出于安全、合规或其他原因并不准备完全放弃对基础设施的控制。对这些组织而言，混合云提供了一种逐步过渡的方法。</li></ol><p><strong>行业云：</strong></p><ul><li><strong>互联网行业</strong>：互联网公司需要快速扩展其服务以适应不断变化的市场需求，行业云可以提供灵活的资源来支持这种快速增长。</li><li><strong>金融行业</strong>：金融行业对数据安全和合规性要求极高，行业云可以为金融机构提供符合法规要求的定制服务。</li><li><strong>政务行业</strong>：政府机构处理大量敏感数据，需要高度的控制权和安全性，行业云能够满足这些需求并提供更好的数据管理和服务。</li><li><strong>制造业</strong>：制造企业可以利用行业云进行数据分析和优化生产流程，同时提高供应链的效率。</li><li><strong>医疗行业</strong>：医疗机构需要存储和共享大量的患者数据，行业云能够提供高效安全的数据处理能力，同时满足HIPAA等医疗法规的要求。</li><li><strong>教育行业</strong>：教育机构可以使用行业云来管理学生信息、课程内容和在线学习平台，提供更好的教育资源和服务。</li><li><strong>交通行业</strong>：交通行业可以利用行业云进行数据分析，优化交通流量和物流管理。</li><li><strong>农业行业</strong>：行业云可以帮助农业企业进行作物监测、天气预测和资源管理，提高农业生产效率。</li><li><strong>媒体行业</strong>：媒体公司需要存储和处理大量的视频和音频文件，行业云提供了高效的存储和快速访问这些大型媒体资产的能力。</li></ul><h2 id="服务器应用部署架构"><a href="#服务器应用部署架构" class="headerlink" title="服务器应用部署架构"></a>服务器应用部署架构</h2><p>C&#x2F;S架构和B&#x2F;S架构</p><h2 id="MTBF"><a href="#MTBF" class="headerlink" title="MTBF"></a>MTBF</h2><p>平均无故障工作时间</p><h2 id="硬盘类型"><a href="#硬盘类型" class="headerlink" title="硬盘类型"></a>硬盘类型</h2><ul><li>SATA–使用sata接口，超级能装</li><li>SAS–使用SAS接口，传超级快，容量小</li><li>NL-SAS–集合了sata和sas优点（速度sas》nl-sas》sata）</li><li>SSD</li></ul><h2 id="网卡"><a href="#网卡" class="headerlink" title="网卡"></a>网卡</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/1dc9ef6a-4083-4000-80f6-fe272b3f812b.png" alt="image-20240902095018637"></p><h2 id="BIOS"><a href="#BIOS" class="headerlink" title="BIOS"></a>BIOS</h2><p>开机引导系统，负责系统和硬件之间的联动</p><h2 id="tco"><a href="#tco" class="headerlink" title="tco"></a>tco</h2><p>TCO是<strong>总体拥有成本（Total Cost of Ownership）</strong>，就是7零8怪的钱全加起来</p><h2 id="cpu虚拟化"><a href="#cpu虚拟化" class="headerlink" title="cpu虚拟化"></a>cpu虚拟化</h2><p>一个cpu在同一个时间下只能给一个进程计算，但是我们cpu会有超线程技术，支持一个cpu处理多一个任务，电脑里面说的24核心32线程就是指有八颗芯片支持超线程技术</p><h2 id="“cpu时间管理大师”"><a href="#“cpu时间管理大师”" class="headerlink" title="“cpu时间管理大师”"></a>“cpu时间管理大师”</h2><p>我虽然算得少，但是我算的快啊</p><p><strong>分时复用技术</strong></p><h2 id="虚拟机"><a href="#虚拟机" class="headerlink" title="虚拟机"></a>虚拟机</h2><p>系统是应用在ring0之中的，app是应用在ring1和2中的，但是app里面会用到系统的敏感指令，于是就来骗我们的cpu，方法有三：半虚拟化、虚拟化、硬件辅助</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d2164cd5-aea0-4efa-a8d5-547fb19b1b18.png" alt="image-20240902104057508"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f3022769-7337-4d1c-bf43-dc3703db6194.png" alt="image-20240518160308446"></p><h2 id="虚拟化方法"><a href="#虚拟化方法" class="headerlink" title="虚拟化方法"></a>虚拟化方法</h2><p><strong>理论上一台虚拟机的cpu核数最大为线程数（但是一般就是核心数）</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9473afb6-3f20-4ef5-93ec-c0f9b0512e4a.png" alt="image-20240518161830717"></p><h2 id="重要概念"><a href="#重要概念" class="headerlink" title="重要概念"></a>重要概念</h2><ul><li>guest OS（虚拟操作系统）</li><li>Guest Machine（虚拟机virtual machine）</li><li>Hypervisor（vmm-virtual machine monitor，虚拟化软件层）</li><li>Host OS（物理操作系统）</li><li>Host Machine（物理机）</li></ul><h2 id="虚拟化的特点"><a href="#虚拟化的特点" class="headerlink" title="虚拟化的特点"></a>虚拟化的特点</h2><ol><li>分区（同一个物理主机可以同时运行多个虚拟机）</li><li>隔离（多个虚拟机之间不会相互影响）</li><li>封装（每个虚拟机就是个文件，方便搬移）</li><li>相对于硬件独立（虚拟机无需修改，即可在服务器上运行）</li></ol><h2 id="虚拟化分类"><a href="#虚拟化分类" class="headerlink" title="虚拟化分类"></a>虚拟化分类</h2><ol><li>裸金属型虚拟化（一型）</li></ol><p>裸金属广泛应用于企业应用之中</p><p>优点：性能较好</p><p>缺点：安装使用相对困难，有一定的学习门槛</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0b7c78cb-d514-4767-9030-59b2e8fafcf3.png" alt="image-20240518163754071"></p><ol start="2"><li>寄主型虚拟化（二型）</li></ol><p>寄主适用于个人pc，可以满足虚拟</p><p>应用和普通软件</p><p>优点：简单</p><p>缺点：性能损耗</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/07ad3936-0366-4767-b945-445ddc324cc8.png" alt="image-20240518163715518"></p><h2 id="vcpu的计算"><a href="#vcpu的计算" class="headerlink" title="vcpu的计算"></a>vcpu的计算</h2><p><strong>系统可用的vCPU总数(逻辑处理器) &#x3D; Socket数（CPU个数）x Core数（内核）x Thread数（超线程</strong>）</p><h2 id="影子页表（内存虚拟化）"><a href="#影子页表（内存虚拟化）" class="headerlink" title="影子页表（内存虚拟化）"></a>影子页表（内存虚拟化）</h2><p>内存的使用必须从0开始并且连续，否则不能使用、</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9cb19046-ba83-4dcb-bd1c-e6b9d61108a5.png" alt="image-20240902105731708"></p><p>为此虚拟软件层会维持一个影子页表，将实际的内存转换为连续的内存，方便虚拟机的存储</p><h2 id="I-x2F-O虚拟化"><a href="#I-x2F-O虚拟化" class="headerlink" title="I&#x2F;O虚拟化"></a>I&#x2F;O虚拟化</h2><ul><li>半虚拟</li><li>全虚拟</li><li>硬件辅助虚拟化</li></ul><h2 id="Xen架构（开源）"><a href="#Xen架构（开源）" class="headerlink" title="Xen架构（开源）"></a>Xen架构（开源）</h2><p>domin0特权虚拟机–不跑业务，只管理普通虚拟机，接收他们的信息和硬件沟通，有且只有一个（老板）</p><p>dominU普通虚拟机–跑业务，可以有多个（打工仔）</p><h2 id="KVM-Qemu架构（开源）"><a href="#KVM-Qemu架构（开源）" class="headerlink" title="KVM-Qemu架构（开源）"></a>KVM-Qemu架构（开源）</h2><ul><li>基于内核虚拟机</li><li>OS&#x3D;内核态+用户态</li><li>KVM是linux机器上的模块，有了kvm之后，机器就变成了一个vmm</li><li><strong>qemu</strong>，kvm只能对cpu和内存进行虚拟化，除此之外的网络、i&#x2F;o、存储虚拟化由qemu进行</li></ul><h2 id="闭源框架"><a href="#闭源框架" class="headerlink" title="闭源框架"></a>闭源框架</h2><ul><li>hyper-v</li><li>wmwarre esxi</li><li>huawei fusionphere</li></ul><h2 id="作业："><a href="#作业：" class="headerlink" title="作业："></a>作业：</h2><ol><li>企业为什么要使用虚拟化（虚拟化对比传统it的优点）</li></ol><p>企业使用虚拟化技术相较于传统IT架构有多方面的优势，具体分析如下：</p><ol><li><strong>资源整合</strong>：虚拟化允许企业在单个物理服务器上创建多个虚拟机（VM），每个VM都可以运行独立的操作系统和应用程序。这样可以更有效地利用硬件资源，提高整体的资源利用率。</li><li><strong>成本节约</strong>：通过虚拟化，企业可以减少对物理硬件的需求，因为可以在现有的硬件上运行更多的虚拟机。这降低了前期投资和长期的维护成本。</li><li><strong>自动配置和集中管理</strong>：虚拟化技术使得IT资源的管理更加自动化和集中化。管理员可以远程完成日常操作，无需逐个处理每个工位上的主机，提高了管理效率。</li><li><strong>灾备恢复</strong>：虚拟化提供了更加灵活和快速的灾难恢复解决方案。通过快照和复制功能，可以快速恢复数据和服务，减少潜在的业务中断时间。</li><li><strong>安全性提升</strong>：虚拟化环境通常提供更强的隔离和安全措施，可以有效防止病毒和恶意软件的传播，保护企业数据不受威胁。</li><li><strong>跨平台支持</strong>：虚拟化技术支持多种操作系统和应用程序在同一硬件上并行运行，这为跨平台应用提供了便利。</li><li><strong>可扩展性和灵活性</strong>：企业可以根据业务需求动态地添加或移除资源，而不需要物理上的调整。这使得企业能够快速响应市场变化。</li><li><strong>高效的资源利用</strong>：由于虚拟化技术可以动态调整资源分配，因此可以避免资源的浪费，确保硬件资源得到充分利用。</li><li><strong>支持创新和测试</strong>：虚拟化环境支持快速部署和拆除实验环境，有助于企业进行新技术的测试和创新。</li></ol><p>综上所述，虚拟化为企业带来了诸多好处，包括资源整合、成本节约、自动配置、灾备恢复、安全性提升、跨平台支持、可扩展性和灵活性、高效的资源利用、集中管理和动态分配以及支持创新和测试等方面。这些价值共同推动了企业在竞争激烈的市场环境中保持领先地位。</p><ol start="2"><li>在电脑中安装vmware 通过软件安装两个系统（专业版）</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0e8a9346-23c2-4067-943a-9062405da783.png" alt="image-20240518174733847"></p><p>安装centos成功</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/941aa1b7-6c0e-4677-acfd-0e929a62e7be.png" alt="image-20240518174833181">安装windows成功</p><h2 id="裸金属虚拟化"><a href="#裸金属虚拟化" class="headerlink" title="裸金属虚拟化"></a>裸金属虚拟化</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/87f62130-d939-4a2a-81e3-bcfa5a2f3e2e.png" alt="image-20240601141844641"></p><p>这个东西只是逻辑上的解决方案，里面的东西才是真的，比如说我们的FusionCompute</p><h3 id="虚拟化套件分类"><a href="#虚拟化套件分类" class="headerlink" title="虚拟化套件分类"></a>虚拟化套件分类</h3><ol><li>FusionCompute（8443）：必须有的功能部分，大脑 <strong>包含CNA（计算节点代理）和VNA（web界面）</strong></li></ol><p>FusionCompute是<strong>云操作系统软件</strong>，主要负责硬件资源的虚拟化，以及对虚拟资源、业务资源、用户资源的集中管理。<u>它采用虚拟计算、虚拟存储、虚拟网络等技术，完成计算资源、存储资源、网络资源的虚拟化</u>。同时通过统一的接口， 对这些虚拟资源进行集中调度和管理，从而降低业务的运行成本，保证系统的安全性和可靠性，协助运营商和企业构筑安全、绿色、节能的云数据中心能力。</p><ol start="2"><li>ebackup:保护数据</li></ol><p>eBackup是虚拟化备份软件，配合FusionCompute<strong>快照功能和CBT(Changed Block Tracking)</strong> 备份功能实现FusionSphere的虚拟机数据备份方案。</p><ol start="3"><li>UltraVR：保护业务</li></ol><p>UltraVR是<strong>容灾业务管理软件</strong>，利用底层<strong>SAN存储系统</strong>提供的异步沅程复制特性，提供虚拟机关键数据的数据保护和容灾恢复。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/5871d7b6-2496-4440-bfa5-4cf81700062e.png" alt="image-20240601142231647"></p><h3 id="FusionSphere的优势"><a href="#FusionSphere的优势" class="headerlink" title="FusionSphere的优势"></a>FusionSphere的优势</h3><p>华为FusionSphere虚拟化套件是业界领先的虚拟化解决方案，能够帮助客户带来如下的价值，从而大幅提升数据中心基础设施的效率。</p><p><strong>· 帮助客户提升数据中心基础设施的<u>资源利用率</u>。</strong>（利用率）<br>**· 帮助客户成倍<u>缩短业务上线周期。</u>**（time）<br><strong>· 帮助客户成倍降低数据中心<u>能耗</u>。</strong>（power）<br><strong>· 利用虚拟化基础设施的高可用和强恢复能力，实现业务<u>快速自动化故障恢复</u>，降低数据中心成本和增加系统应用的正常运行时间。</strong></p><p>FusionSphere虚拟化套件通过在服务器上部署虚拟化软件，使一台物理服务器可以承担多台服务器的工作。通过整合现有的工作负载并利用剩余的服务器以部署新的应用程序和解决方案，实现较高的整合率。</p><h3 id="VRM和CNA"><a href="#VRM和CNA" class="headerlink" title="VRM和CNA"></a>VRM和CNA</h3><p><em>VRM（虚拟资源管理）</em>：VRM是集群的管理者，<strong>管CNA</strong></p><p><strong>功能：</strong></p><p>· 管理集群内的块存储资源。<br><strong>· 管理集群内的网络资源(IP&#x2F;VLAN),为虚拟机分配IP地址。</strong><br>· 管理集群内虚拟机的生命周期以及<strong>虚拟机在计算节点上的分布和迁移。</strong><br>· 管理集群内资源的动态调整。<br>·通过对虚拟资源、用户数据的统一管理，对外提供弹性计算、存储、IP等服务。<br>·通过提供统一的操作维护管理接口，操作维护人员**<u>通过WebUl远程访问FusionCompute对整个系统进行操作维护</u>**，包含资源管理、资源监控、资源报表等。</p><p><em>CNA（计算节点代理）</em>：<strong>虚拟机放在CNA下面</strong>，CNA就管这些虚拟机</p><p><strong>功能：</strong></p><p>· 提供<strong>虚拟计算</strong>功能。</p><p>· <strong>管理</strong>计算节点上的<strong>虚拟机。</strong></p><p><strong>·管理</strong>计算节点上的计算、存储、网络<strong>资源</strong>。</p><p>VRM很好玩啊，你有admin的账号的话，可以看到我们虚拟机的磁盘信息，工作状态等，可以新建用户，改网站名称，贴图等等，懂不懂我们华为的含金量啊</p><h2 id="认识服务器"><a href="#认识服务器" class="headerlink" title="认识服务器"></a>认识服务器</h2><ol><li>电脑主机的加强版</li><li>性能怪兽</li><li>可靠性强99.99%（比电脑强100倍）</li><li>可拓展性（插一万根硬盘）</li><li>支持远程开关机（有一个维护口BMC，连接到这个口就会进入到IPMI、IBMC远程维护系统，其实就是一个web界面）</li><li>拥有虚拟控制台，可以进行远程配置</li></ol><h3 id="装系统"><a href="#装系统" class="headerlink" title="装系统"></a>装系统</h3><p>虚拟控制台直接选择光驱进行安装</p><p>但是我们的网速很慢，我们先远程连接和服务器在一起的主机，把包先丢给这个主机，然后再通过主机传数据包（用远程工具）</p><p>要选择启动方式，有硬盘、光驱、可插拔设备</p><h2 id="RAID-磁盘冗余阵列"><a href="#RAID-磁盘冗余阵列" class="headerlink" title="RAID 磁盘冗余阵列"></a>RAID 磁盘冗余阵列</h2><p><u><strong>需要购买raid卡（贵）或者使用软件进行raid（占用cpu）</strong></u></p><h3 id="RAID-0"><a href="#RAID-0" class="headerlink" title="RAID 0"></a>RAID 0</h3><p>把123456分为135 246两块盘，不能进行冗余，只能储存一份数据，性能好，空间利用率高，快</p><h3 id="RAID-1"><a href="#RAID-1" class="headerlink" title="RAID 1"></a>RAID 1</h3><p>两块盘<strong>进行冗余</strong>，把123456分为123456 123456两块盘</p><h3 id="RAID3"><a href="#RAID3" class="headerlink" title="RAID3"></a>RAID3</h3><p>出现校验码选项，<strong>全部存放在一个盘中</strong>，<u>最多坏一块盘</u></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/38f9df92-94a5-415e-bdaf-19f4aaa1c998.png" alt="image-20240902093925287"></p><h3 id="RAID-5"><a href="#RAID-5" class="headerlink" title="RAID 5"></a>RAID 5</h3><p>raid3升级版,<strong>校验码放在不同的盘上</strong>，<u>最多坏一块盘</u></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0d264b9f-7d9e-4ae8-96a5-6f77451427cd.png" alt="image-20240608105002618"></p><ul><li><p>每一行是一个组成部分，称作条带，空一个格子来储存奇偶校验数据</p></li><li><p>至少需要三个盘</p></li><li><p>涉及算法：奇偶校验算法（当每两个数据位上的数据相同时，校验数据为0，校验数据不同时校验数据为1 ）</p></li><li><p>利用率：</p></li></ul><p>$$<br>\frac{n-1}{n}<br>$$</p><h3 id="RAID-1-0"><a href="#RAID-1-0" class="headerlink" title="RAID 1 0"></a>RAID 1 0</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/dc3afd74-f9aa-47c6-9a97-7e284bb4ce84.png" alt="image-20240608112312653"></p><p>先做raid 1 4块变成2块</p><p>再做raid 0变成一块</p><p><strong>优点</strong></p><ul><li>更加的安全</li><li>性能接近于RAID 0</li></ul><p><strong>缺点</strong></p><ul><li>至少需要4块盘</li><li>空间利用率低</li></ul><h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><p>请根据RAID10推算为什么行业中不使用RAIDO1？ （复制的数据更多了，两边同时复制和一次复制的区别）<br>请根据RAID10推算RAID5的原理？</p><p>答：</p><ol><li><p>首先，从结构上来看，RAIDO1由于是先进行条带化处理，然后再做镜像，这意味着数据首先被分散存储到两个或多个磁盘上，然后这些已经条带化的磁盘组再被镜像。这种配置下<strong>，一旦条带化的任何一个磁盘出现问题</strong>，整个条带化的磁盘组的数据访问都会受到影响。相比之下，RAID10则是先将数据镜像，保证了数据的冗余备份，然后再对这些镜像的数据进行条带化处理，这样既保证了数据的安全性，也提高了读写性能。</p><p>其次，从性能角度考虑，RAIDO1在理论上虽然也能提供较高的数据读写速度，但由于其结构的局限性，一旦其中一个条带化的磁盘组出现故障，即使其他磁盘正常，整个系统的性能也会大大降低。<strong>而RAID10则没有这个问题，因为它的每一组镜像都独立于其他镜像组，任何一组的故障都不会影响到其他的磁盘组正常工作。</strong></p><p>再者，考虑到容错性和数据安全性，RAIDO1只能容忍单个磁盘的故障，并且一旦发生故障，恢复数据的过程比较复杂，风险较高。<strong>而RAID10配置可以容忍多达一半的硬盘数量同时发生故障</strong>（前提是故障硬盘分布在不同的镜像组中），数据恢复更为简单和安全。</p></li><li><p>RAID5的原理基于数据条带化（RAID0）和奇偶校验技术，旨在提供数据冗余与性能的平衡。具体如下：</p><p><strong>数据条带化</strong>：RAID5继承了RAID0的数据条带化技术，将数据分布在所有成员磁盘上。这种分布可以提高数据的读写速度，因为系统可以同时从多个磁盘读取数据或向多个磁盘写入数据。</p><p><strong>奇偶校验技术</strong>：<strong>与RAID0不同，RAID5增加了奇偶校验功能</strong>，用于提供数据恢复能力。在RAID5的配置中，数据和其对应的奇偶校验信息被分布在不同的磁盘上。如果阵列中的任何一个磁盘出现故障，可以利用剩余磁盘上的数据和奇偶校验信息来重建丢失的数据。</p><p><strong>分布式存储</strong>：RAID5的特点是它的奇偶校验信息不是存储在一个专门的磁盘上，而是分布式地存储在所有磁盘上。这样可以减少任何单一磁盘的过度磨损，并提高整体的数据读写效率。</p><p><strong>数据恢复原理</strong>：在数据恢复时，RAID5通过异或运算重新计算丢失的数据块。例如，<strong>如果有三块磁盘的RAID5配置，其中一块磁盘发生故障，系统会通过对其余两块磁盘上相应的数据块进行异或运算，以计算出故障磁盘上的数据。</strong></p></li></ol><p>就是raid 0 加了一块硬盘作为校验的角色</p><h3 id="raid-50"><a href="#raid-50" class="headerlink" title="raid 50"></a>raid 50</h3><p>性能上得到了提升，但是需要6块盘，利用率还是raid 5的</p><p><strong>先配置raid，再装系统</strong></p><h2 id="安装虚拟化平台"><a href="#安装虚拟化平台" class="headerlink" title="安装虚拟化平台"></a>安装虚拟化平台</h2><h3 id="安装CNA"><a href="#安装CNA" class="headerlink" title="安装CNA"></a>安装CNA</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d61ab7e1-f028-4d72-a209-186e721fa9e9.png" alt="image-20240616094531701"></p><p>红色的是管理网口，绿色的是业务网口</p><ol><li><p>登录服务器BMC（管理口）</p></li><li><p>配置服务器raid，建议使用raid1</p></li><li><p>将安装包烧录到我们的主机里面（光驱启动）</p></li><li><p>系统盘选择，密码，时区，主机名等基本配置</p></li><li><p>配置ip地址等网络参数</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/abe1dab4-a428-4930-a885-6a194f5bfd9d.png" alt="image-20240616105748769"></p><h3 id="安装虚拟机vrm"><a href="#安装虚拟机vrm" class="headerlink" title="安装虚拟机vrm"></a>安装虚拟机vrm</h3><ol><li>打开华为安装工具—fusiion compute 安装工具</li><li><strong>浮动ip</strong>：多个主备机ip不一致，管理起来非常麻烦，所以我们要统一一个ip方便管理员统一管理</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a1c2aa69-971f-46b6-a1e0-d0334c0f843d.png" alt="image-20240616111150270"></p><ol start="3"><li>选择主机：就是选择我们的CNA</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3fd4aa2b-5150-45f6-b241-bed7ce3ad74a.png" alt="image-20240616111312416"></p><p>4. </p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2c596a09-3c2d-4755-b444-97d7b2b18f06.png" alt="image-20240616113116571"></p><p>本地安装需要安装一个插件，安装非常的慢啊，那么我们先将文件上传到CNA里面再安装不就快很多了吗</p><h3 id="数据存储"><a href="#数据存储" class="headerlink" title="数据存储"></a>数据存储</h3><p>当前cna可以直接使用的存储空间</p><ul><li>服务器上插着的磁盘（要做raid）</li><li>存储设备：CNA可以使用的存储硬件，存储硬件进行格式化后（创建文化系统）还要绑定我们的cna</li></ul><p><strong>windows里面叫分区盘，c盘d盘e盘，新添加的磁盘要初始化建立文件系统才能使用</strong></p><h3 id="QOS策略"><a href="#QOS策略" class="headerlink" title="QOS策略"></a>QOS策略</h3><p>需要集群为了保障关键型虚拟机的业务不被非关键虚拟机抢占，可以通过资源的QOS（服务质量）进行控制</p><h3 id="份额"><a href="#份额" class="headerlink" title="份额"></a>份额</h3><p>当各虚拟机资源抢占时，通过份额等比例分配资源</p><h3 id="预留"><a href="#预留" class="headerlink" title="预留"></a>预留</h3><p>限制虚拟机资源的使用上限</p><h3 id="虚拟交换机（ovs）"><a href="#虚拟交换机（ovs）" class="headerlink" title="虚拟交换机（ovs）"></a>虚拟交换机（ovs）</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/451bd547-af2b-49cd-a7e4-983fe875b343.png" alt="image-20240616152902583"></p><p>真实上的交换机会配置端口的类型，但是虚拟交换机会在web界面配置端口组，类似于脚本</p><h3 id="分布式虚拟交换机"><a href="#分布式虚拟交换机" class="headerlink" title="分布式虚拟交换机"></a>分布式虚拟交换机</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/33c820ea-1446-45d4-ab13-bc2b0fb1140f.png" alt="image-20240616154153544"></p><p>分布式虚拟交换机：是一种逻辑概念，实际不存在，用于管理多个虚拟交换机</p><p>端口组：一组相同端口策略的端口集合，本质上是一个配置集合，包含了端口类型以及其他端口配置，创建虚拟机时，通过选择端口组，系统根据提前预设的端口组策略自动在虚拟交换机上创建一个相同配置的端口并且与虚拟机连接</p><h3 id="上行链路"><a href="#上行链路" class="headerlink" title="上行链路"></a>上行链路</h3><p>虚拟交换机到物理机网卡的一个概念</p><h3 id="精髓来咯"><a href="#精髓来咯" class="headerlink" title="精髓来咯"></a><strong>精髓来咯</strong></h3><p>两个问题</p><ol><li>两个虚拟机不通，排错</li></ol><p>​cna1内部两台vm1vm3不通，那就是ovs1发生故障：地址错了呗，端口组错了呗，acl呗，端口允许的vlan不是我端口组的vlan</p><p>​    cna1内部两台vm1vm2不通，那就是ovs1或者是ovs3发生故障：acl呗，网关设置出错，安全策略</p><ol start="2"><li>大范围虚拟机不通，排错思路：</li></ol><p>​sw物理机出错</p><h2 id="磁盘类型"><a href="#磁盘类型" class="headerlink" title="磁盘类型"></a>磁盘类型</h2><h3 id="精简盘"><a href="#精简盘" class="headerlink" title="精简盘"></a>精简盘</h3><p>不立即分配磁盘空间，上层虚拟机使用时，使用多数，分配多少空间，并即刻对所分配的空间进行“虚拟化文件系统的格式化”（置零）</p><h3 id="普通盘"><a href="#普通盘" class="headerlink" title="普通盘"></a>普通盘</h3><p>立即分配磁盘空间，并立刻对所分配空间进行虚拟化文件系统的格式化操作</p><h3 id="普通延迟置零"><a href="#普通延迟置零" class="headerlink" title="普通延迟置零"></a>普通延迟置零</h3><p>立即分配磁盘空间，但是不立即进行虚拟化文件系统的格式化，第一次向该磁盘写入数据时，在全盘进行虚拟化文件系统的格式化</p><h3 id="性能排行"><a href="#性能排行" class="headerlink" title="性能排行"></a>性能排行</h3><h4 id="写性能"><a href="#写性能" class="headerlink" title="写性能"></a>写性能</h4><p><strong>首次写入</strong>：普通》精简》延迟</p><p><strong>普通写入</strong>：普通&#x3D;延时》精简</p><h4 id="读性能"><a href="#读性能" class="headerlink" title="读性能"></a>读性能</h4><p>一样</p><p>但是精简盘由于不用初始化，创建虚拟机非常快</p><p>独立不能打快照</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4a67b0c2-72eb-4b8f-9820-0376ba2c9abd.png" alt="image-20240616164401337"></p><h2 id="桌面云"><a href="#桌面云" class="headerlink" title="桌面云"></a>桌面云</h2><p><strong>将系统桌面以服务的形式直接提供给用户使用</strong></p><p>优势：</p><ol><li>绿色节能办公、降低运维压力、快速部署、提高效率</li><li>节约成本</li><li>数据保护</li><li>移动办公</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2780fbc9-2fad-4f8c-a14f-3be675682af4.png" alt="image-20240902164022918"></p><h3 id="桌面组"><a href="#桌面组" class="headerlink" title="桌面组"></a>桌面组</h3><p><u>用来关联用户或者用户组和虚拟机及虚拟机组的关联关系</u></p><p>(1) 单用户：一个虚拟机关联给某一个用户，一个用户可以拥有多个虚拟机</p><p>（2）静态虚拟机：多个用户拥有同一个虚拟机，但是一个时间里只能有一个用户使用</p><p>（3）动态池：将一部分虚拟机放在一个池子中，用户登录时随机挑选一个虚拟机使用，不使用的时候其他用户也可以使用</p><p>（4）静态池:和动态池不同的是用户与虚拟机进行绑定，下次再使用该池时还是这个虚拟机  </p><h2 id="内存复用"><a href="#内存复用" class="headerlink" title="内存复用"></a>内存复用</h2><p>使得运行中的内存规格总和大于实际存在的物理内存</p><ol><li>内存共享：多个虚拟机共享相同的内存页</li><li>内存置换：将虚拟机长时间不使用的内存置换到内存交换空间（操作系统提前在磁盘中开辟的一段空间）去（通过LRU算法）</li><li>内存气泡：虚拟化系统通过借助已经安装在虚拟机中相关程序,来逻辑消耗虚拟机的内存,使得|虚拟机在逻辑上内存被自己程序消耗,就不再向底层申请资源,且该功能还可压缩内存给其他关键型业务虚拟机。</li></ol><h2 id="NUMA非一致性内存访问策略"><a href="#NUMA非一致性内存访问策略" class="headerlink" title="NUMA非一致性内存访问策略"></a>NUMA非一致性内存访问策略</h2><p>调整内存和cpu之间的关系，通过划分node（一个cpu和cpu所属的内存单位），来优化cpu对内存的访问效率。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/779c2faa-be68-4565-a1ee-8ce980dcdc22.png" alt="image-20240902145223785"></p><p>numa优先级大于内存复用</p><h2 id="集群资源控制"><a href="#集群资源控制" class="headerlink" title="集群资源控制"></a>集群资源控制</h2><ul><li><p>故障和响应策略</p></li><li><p>接入控制：HA（高可靠）主机、专用故障主机、集群允许故障</p></li><li><p>计算资源调度（DRS）：VRM检测主机上的压力，<strong>动态迁移</strong>各主机上的虚拟机的数量，<u>将高负载的主机上的虚拟机转移到低负载上</u></p></li><li><p>动态电源管理：将负载相对较低的主机上的虚拟机放到负载较高的主机上，并且将这个主机关机省电</p></li></ul><h2 id="规则组"><a href="#规则组" class="headerlink" title="规则组"></a>规则组</h2><ol><li>聚集虚拟机：我们团结一心，两台虚拟机被绑定在一起</li><li>互斥虚拟机：当两个虚拟机配置为互斥时，二者不能同时出现</li></ol><h2 id="硬盘配置模式"><a href="#硬盘配置模式" class="headerlink" title="硬盘配置模式"></a>硬盘配置模式</h2><ul><li>普通延迟置零：也是一次把磁盘交出，但是擦写按需</li><li>普通：要多少给多少,一次擦写完所有的数据，很慢</li><li>精简：承诺给多少，但是只给你一点，还要再继续加</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9d430ac2-e03a-4d90-9965-cdb0e99096bb.png" alt="image-20240902160744136"></p><h2 id="光驱挂载"><a href="#光驱挂载" class="headerlink" title="光驱挂载"></a>光驱挂载</h2><ol><li>本地方式</li><li>共享方式</li><li>文件方式</li></ol><h2 id="tools"><a href="#tools" class="headerlink" title="tools"></a>tools</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ce32df61-f723-4bb0-a606-cb2a18ec3daa.png" alt="image-20240902162334960"></p><h2 id="快照"><a href="#快照" class="headerlink" title="快照"></a>快照</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/df707984-59f0-4d56-a0b5-ae8994acd883.png" alt="image-20240902162839058"></p><ol><li>内存快照：保存磁盘和内存</li><li>普通快照:只保存磁盘</li><li>一致性快照:依赖tools下发命令，将内存中的数据强制保存到磁盘当中，恢复时将快照时刻的磁盘恢复</li></ol><h2 id="复制计算机"><a href="#复制计算机" class="headerlink" title="复制计算机"></a>复制计算机</h2><ul><li>完整复制：创建了一个全新的主机，二者完全独立</li><li>链接克隆：和复制的主机有脐带效应，复制体必须依赖原有主机</li></ul>]]></content>
    
    
    <summary type="html">ict培训云计算</summary>
    
    
    
    
    <category term="云计算" scheme="http://blog.wenmozhu.de5.net/tags/%E4%BA%91%E8%AE%A1%E7%AE%97/"/>
    
  </entry>
  
  <entry>
    <title>openeuler</title>
    <link href="http://blog.wenmozhu.de5.net/2024/07/10/openeuler/"/>
    <id>http://blog.wenmozhu.de5.net/2024/07/10/openeuler/</id>
    <published>2024-07-10T07:43:40.000Z</published>
    <updated>2026-09-09T10:57:22.165Z</updated>
    
    <content type="html"><![CDATA[<h1 id="openeuler1"><a href="#openeuler1" class="headerlink" title="openeuler1"></a>openeuler1</h1><p>安装配置不做记录，网上博客有</p><h2 id="常见命令"><a href="#常见命令" class="headerlink" title="常见命令"></a>常见命令</h2><h3 id="命令语法格式"><a href="#命令语法格式" class="headerlink" title="命令语法格式"></a>命令语法格式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cce35cda-c871-4747-99b7-3acfa2a11e14.png" alt="image-20240330172007823">&lt;这个内容不可以省&gt;</p><h3 id="命令分类"><a href="#命令分类" class="headerlink" title="命令分类"></a>命令分类</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cb239d66-8b8a-43bd-b7aa-fee55ad24bc0.png" alt="image-20240330172141445"></p><h3 id="passwd"><a href="#passwd" class="headerlink" title="passwd"></a>passwd</h3><p>修改用户密码命令</p><h3 id="last"><a href="#last" class="headerlink" title="last"></a>last</h3><p>查看登录到系统的用户</p><h3 id="exit"><a href="#exit" class="headerlink" title="exit"></a>exit</h3><p>退出命令</p><h3 id="reboot"><a href="#reboot" class="headerlink" title="reboot"></a>reboot</h3><p>重启命令</p><h3 id="poweroff"><a href="#poweroff" class="headerlink" title="poweroff"></a>poweroff</h3><p>关机命令</p><h3 id="pwd"><a href="#pwd" class="headerlink" title="pwd"></a>pwd</h3><p>print working dir</p><p>打印当前工作目录</p><h3 id="cd"><a href="#cd" class="headerlink" title="cd"></a>cd</h3><p>改变当前的工作目录</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e48728b2-b3b3-4a22-b08a-acc26ccb294f.png" alt="image-20240330172802462"></p><h3 id="ls"><a href="#ls" class="headerlink" title="ls"></a>ls</h3><p>列出当前目录下的文件</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fbf8bc14-05a7-429b-8175-28693673534b.png" alt="image-20240330172840797">&#x2F;&#x2F;-t是按照文件的修改时间先后列出，图片有误</p><h3 id="mkdir"><a href="#mkdir" class="headerlink" title="mkdir"></a>mkdir</h3><p>创建文件夹</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/675f4c4f-213a-4bf8-afce-57a1a1d91e2a.png" alt="image-20240330173025525"></p><p>-p选项是迭代创建目录</p><h3 id="touch"><a href="#touch" class="headerlink" title="touch"></a>touch</h3><ul><li>创建空文件</li><li>修改文件时间戳（<strong>access</strong> <strong>change</strong> <strong>modify</strong>）</li></ul><p><strong>modify是文件内容变换，change是文件属性变化，当Atime在Mtime和Ctime之前才会被修改</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/026689bd-b582-4223-8960-5b76d24f57d8.png" alt="image-20240330173312612"></p><h3 id="cp"><a href="#cp" class="headerlink" title="cp"></a>cp</h3><p>复制文件</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cb077db9-c6ee-4869-9915-6e19df072ad2.png" alt="image-20240330173345910"></p><h3 id="mv"><a href="#mv" class="headerlink" title="mv"></a>mv</h3><p>移动文件命令（当移动的目录不变时就是重命名操作）</p><h3 id="rm"><a href="#rm" class="headerlink" title="rm"></a>rm</h3><p>最刑的命令（rm -rf&#x2F;*）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9deefeb2-120f-4540-b91f-943a0b9d7de2.png" alt="image-20240330173733120"></p><h3 id="cat"><a href="#cat" class="headerlink" title="cat"></a>cat</h3><p>读取文件内容，将文件合并</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e0c66aa4-e7d6-48da-8bc6-a71c472b21e4.png" alt="image-20240330173840578"></p><h3 id="head和tail"><a href="#head和tail" class="headerlink" title="head和tail"></a>head和tail</h3><p>head显示文件前多少行内容，tail显示尾部多少行内容</p><p>选项-n</p><h2 id="常见快捷键"><a href="#常见快捷键" class="headerlink" title="常见快捷键"></a>常见快捷键</h2><h3 id="tab"><a href="#tab" class="headerlink" title="tab"></a>tab</h3><p>可以双击tab键进行命令补齐，快速输入命令或者参数</p><h3 id="history"><a href="#history" class="headerlink" title="history"></a>history</h3><p>查看历史命令，可以用history n执行代码</p><h3 id="上下键"><a href="#上下键" class="headerlink" title="上下键"></a>上下键</h3><p>快速翻阅历史命令</p><h3 id="home和end"><a href="#home和end" class="headerlink" title="home和end"></a>home和end</h3><p>将光标快速移动到行首和行尾</p><h3 id="clear与ctrl-l"><a href="#clear与ctrl-l" class="headerlink" title="clear与ctrl +l"></a>clear与ctrl +l</h3><p>清屏</p><h2 id="文件结构"><a href="#文件结构" class="headerlink" title="文件结构"></a>文件结构</h2><ul><li><strong>linux下所有都是文件</strong></li><li>树型结构，“&#x2F;”为根目录</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e78517be-4640-480a-8af4-2e36432e03e4.png" alt="image-20240330172613773"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2787be4d-fbe4-4fb6-b1ef-d80fcaa41106.png" alt="image-20240330172629494"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e990367a-4868-4230-892e-6701c9b92d1c.png" alt="image-20240330172639188"></p><h2 id="较为复杂命令"><a href="#较为复杂命令" class="headerlink" title="较为复杂命令"></a>较为复杂命令</h2><h3 id="more"><a href="#more" class="headerlink" title="more"></a>more</h3><p>按一页一页的显示文件内容，方便我们阅读，space控制下一篇，b上一篇，q退出</p><h3 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h3><ul><li>+n 从第n行开始显示</li><li>-n 定义屏幕大小为n行</li><li>+&#x2F;pattern 搜索字符串</li><li>-c 清屏</li></ul><h3 id="less"><a href="#less" class="headerlink" title="less"></a>less</h3><p>与more类似，但more会加载整个文件，less不会</p><h3 id="常见操作"><a href="#常见操作" class="headerlink" title="常见操作"></a>常见操作</h3><ul><li><p>&#x2F;字符串：向下搜索“字符串”的功能</p></li><li><p>？字符串：向上搜索‘’‘字符串’</p></li><li><p>q退出less</p></li><li><p>空格 滚动一页()</p></li><li><p>回车 滚动一行</p></li><li><p>[pagedown]： 向下翻动一页</p></li><li><p>[pageup]： 向上翻动一页</p></li></ul><h3 id="find"><a href="#find" class="headerlink" title="find"></a>find</h3><p>顾名思义就是找我们的文件</p><h4 id="语法-1"><a href="#语法-1" class="headerlink" title="语法"></a>语法</h4><ul><li>-name 按文件名查找文件</li><li>-perm 按照文件权限来查找文件 。</li><li>-user 按照文件属主来查找文件 。</li><li>-mtime -n +n 按照文件的更改时间来查找文件</li></ul><p>• 文件类型：<br>▫ d: 目录<br>▫ c: 字型装置文件<br>▫ b: 区块装置文件<br>▫ p: 具名贮列<br>▫ f: 一般文件<br>▫ l: 符号连</p><p>​</p><h3 id="locate"><a href="#locate" class="headerlink" title="locate"></a>locate</h3><p>快速查找文件系统中是否有指定的文件</p><p><strong>使用之前要进行安装</strong></p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo yum <span class="keyword">install</span> mlocate</span><br></pre></td></tr></table></figure><p> -e 将排除在寻找的范围之外。<br> -f 将特定的文件排除在外。<br> -r 使用正规运算式做查找条件。<br> -o 指定文件的名称。<br> -d 指定文件的路径</p><h3 id="which"><a href="#which" class="headerlink" title="which"></a>which</h3><p>which用于搜索命令是工作在哪个文件附录下，例如which ls</p><p>which 命令用于快速地确定外部命令的绝对路径。<br>• 查找范例：<br>▫ which ls 查找ls 命令的绝对路径<br>▫ which -a ls 如果多个目录中都有匹配的文件，则全部显示<br>▫ which cp mv rm 查找多个文件</p><h3 id="gzip"><a href="#gzip" class="headerlink" title="gzip"></a>gzip</h3><p>文件压缩与解压缩的命令</p><p> -d或–decompress或—-uncompress 解开压缩文件。<br> -f或–force 强行压缩文件，不理会文件名是否存在以及该文件是否为符号连接。<br> -l或–list 列出压缩文件的相关信息。<br> -r或–recursive 递归处理，将指定目录下的所有文件及子目录一并处理。<br> -v或–verbose 显示指令执行过程。</p><h3 id="tar"><a href="#tar" class="headerlink" title="tar"></a>tar</h3><p>将多个文件加装在同一个包中</p><h4 id="语法-2"><a href="#语法-2" class="headerlink" title="语法"></a>语法</h4><p>语法：tar [OPTION…] [FILE]<br> -c 建立新的压缩文件。<br> -x 从压缩的文件中提取文件。<br> -t 显示压缩文件的内容。<br> -z 支持gzip解压文件。<br> -j 支持bzip2解压文件。<br> -v 显示操作过程。</p><h4 id="常用用法："><a href="#常用用法：" class="headerlink" title="常用用法："></a>常用用法：</h4><p>▫ tar cf ball.tar dir1 把目录dir1 及其下所有内容打包<br>▫ tar tf ball.tar 列出包中的内容<br>▫ tar xf ball.tar 把包中的内容解到当前目录<br>▫ tar czf ball.tar.gz dir1 打包然后用gzip压缩<br>▫ tar cjf ball.tar.bz2 dir1 打包然后用bzip2压缩<br>▫ tar cJf ball.tar.xz dir1 打包然后用xz压缩<br>▫ tar xf ball.tar -C &#x2F;tmp 解到&#x2F;tmp 目录下（默认在当前目录）<br>▫ tar xvf ball.tar -v 显示过程</p><h3 id="ln"><a href="#ln" class="headerlink" title="ln"></a>ln</h3><ul><li>用于创建链接文件，(软链接)可以理解成win的桌面上的快捷方式</li><li>linux中有软链接和硬链接两种</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fc634d0a-0e80-4d3a-b254-05eb2555a38f.png" alt="image-20240422213136994"></p><p><strong>• ln的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目<br>录，用到相同的文件时，我们不需要在每一个需要的目录下都放一个必须相同的文件，<br>我们只要在某个固定的目录，放上该文件，然后在 其它的目录下用ln命令链接（link）<br>它就可以，不必重复的占用磁盘空间。</strong></p><h4 id="语法-3"><a href="#语法-3" class="headerlink" title="语法"></a>语法</h4><p><strong>默认创建的是硬链接</strong></p><p>语法：ln [ -f | -n] [ -s ] SourceFile [ TargetFile ]<br> -b 删除，覆盖以前建立的链接。<br> -d 允许超级用户制作目录的硬链接。<br> -f 强制执行。<br> -i 交互模式，文件存在则提示用户是否覆盖。<br> -n 把符号链接视为一般目录。<br> -s 软链接(符号链接)</p><h3 id="man"><a href="#man" class="headerlink" title="man"></a>man</h3><p>what can i say!</p><p>类似于帮助手册</p><h3 id="help"><a href="#help" class="headerlink" title="help"></a>help</h3><p>命令打一半参数不会填怎么办？</p><p>快使用无敌的–help</p><p>ls –help</p><p>完</p><h1 id="openuler2"><a href="#openuler2" class="headerlink" title="openuler2"></a>openuler2</h1><h2 id="常见文本编辑器"><a href="#常见文本编辑器" class="headerlink" title="常见文本编辑器"></a>常见文本编辑器</h2><p>Huawei Confidential5<br>Linux文本编辑器介绍<br>⚫ 文本编辑器是操作系统基础的功能软件之一。根据使用环境的不同，Linux的文本编<br>辑器有很多类型。<br>⚫ 常见的Linux文本编辑器有：<br> emacs<br> nano<br> gedit<br> kedit</p><h2 id="vim"><a href="#vim" class="headerlink" title="vim"></a>vim</h2><h3 id="关于vim你需要了解"><a href="#关于vim你需要了解" class="headerlink" title="关于vim你需要了解"></a>关于vim你需要了解</h3><p> Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特<br>别丰富，在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。<br>⚫ Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation，随着功能的不<br>断增加，正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。<br>⚫ 从vi派生出来的Vim具有多种模式：<br> 基本模式：普通模式、插入模式、可视模式、选择模式、命令行模式、Ex模式<br> 派生模式：操作符等待模式、插入普通模式、插入可视模式、插入选择模式、替换模式<br> 其他：Evim<br>⚫ openEuler 20.03 LTS系统安装后默认没有安装vim，需要手动安装vim</p><p>基本模式<br>▫ 普通模式：在普通模式中，用的编辑器命令，比如移动光标，删除文本等等。<br>这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反（大<br>多数编辑器默认模式为插入模式）。Vim强大的编辑能力来自于其普通模式命<br>令。普通模式命令往往需要一个操作符结尾。例如普通模式命令”dd”删除当前<br>行，但是第一个”d”的后面可以跟另外的移动命令来代替第二个”d”，比如用移<br>动到下一行的”j”键就可以删除当前行和下一行。另外还可以指定命令重复次数，<br>“2dd”（重复”dd”两次），和”dj”的效果是一样的。用户学习了各种各样的文本<br>间移动／跳转的命令和其他的普通模式的编辑命令，并且能够灵活组合使用的<br>话，能够比那些没有模式的编辑器更加高效的进行文本编辑。在普通模式中，<br>有很多方法可以进入插入模式。比较普通的方式是按”a”（append／追加）键<br>或者”i”（insert／插入）键。<br>▫ 插入模式：在这个模式中，大多数按键都会向文本缓冲区中插入文本。大多数<br>新用户希望文本编辑器编辑过程中一直保持这个模式。在插入模式中，可以按<br>ESC键回到普通模式。<br>▫ 可视模式：这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区<br>域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时，命<br>令会被执行到这块高亮的区域上。Vim的”文本对象”也能和移动命令一样用在这<br>个模式中。<br>▫ 选择模式：这个模式和无模式编辑器的行为比较相似（Windows标准文本控件<br>的方式）。这个模式中，可以用鼠标或者光标键高亮选择文本，不过输入任何<br>字符的话，Vim会用这个字符替换选择的高亮文本块，并且自动进入插入模式。</p><h3 id="vim打开文件进行编写"><a href="#vim打开文件进行编写" class="headerlink" title="vim打开文件进行编写"></a>vim打开文件进行编写</h3><p>常见参数：<br> -c ：打开文件前线执行指定的命令<br> -R ：以只读方式打开，但是可以强制保存<br> -M ：以只读方式打开，不可以强制保存<br> -r ：回复崩溃的会话<br> +<br>num ：从第num行开始</p><p><strong>如果文件不存在则创建</strong></p><h3 id="移动光标"><a href="#移动光标" class="headerlink" title="移动光标"></a>移动光标</h3><p> 上下左右键或k、j、h、l键上下左右移动光标<br> 0 移动到行首<br> g0 移到光标所在屏幕行行首<br> :n 移动到第n行。<br> gg: 到文件头部。<br> G: 到文件尾部</p><h3 id="数据操作"><a href="#数据操作" class="headerlink" title="数据操作"></a>数据操作</h3><p><strong>数据操作</strong><br> yy or Y: 复制整行文本。<br> y[n]w: 复制一(n)个词。<br> d[n]w: 删除（剪切）1(n)个单词<br> [n] dd: 删除（剪切）1(n)行</p><p><strong>复制</strong><br> yy or Y: 复制整行文本。<br> y[n]w: 复制一(n)个词。<br>⚫ <strong>粘贴</strong><br> 面向行的数据：<br>◼ p 放置数据在当前行的下面<br>◼ P 放置数据在当前行的上面<br> <strong>面向字符的数据</strong><br>◼ p 放置数据在光标的后面<br>◼ P 放置数据在光标前<br>⚫ <strong>删除</strong><br> d[n]w: 删除（剪切）1(n)个单词<br> [n] dd: 删除（剪切）1(n)行</p><h3 id="行号显示与取消"><a href="#行号显示与取消" class="headerlink" title="行号显示与取消"></a>行号显示与取消</h3><p><strong>显示行号</strong></p><p>set nu </p><p><strong>取消显示</strong></p><p>set nonu</p><h3 id="查找和替换"><a href="#查找和替换" class="headerlink" title="查找和替换"></a>查找和替换</h3><ul><li><p>查找</p><p>   &#x2F;word 向后搜索</p><p>  ？word 向前搜索</p></li><li><p>替换</p><p>:1,5s&#x2F;word1&#x2F;word2&#x2F;g </p><p>将文档中1-5行的word1替换为word2，不加g则只替换每行的第<br>一个word1。<br>：%s&#x2F;word1&#x2F;word2&#x2F;gi </p><p>将文档所有的word1替换为word2，不区分大小写。</p></li></ul><h3 id="设置搜索高亮"><a href="#设置搜索高亮" class="headerlink" title="设置搜索高亮"></a>设置搜索高亮</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6b7fe844-651e-4401-8f40-0ab5cfdea848.png" alt="image-20240422215342529"></p><h3 id="修改文件"><a href="#修改文件" class="headerlink" title="修改文件"></a>修改文件</h3><p>输入i进入插入模式进行修改文件</p><p>修改完成后点击esc退出修改模式</p><p>输入：wq保存并且退出</p><h3 id="撤销与重做"><a href="#撤销与重做" class="headerlink" title="撤销与重做"></a>撤销与重做</h3><p>u撤销</p><p>ctrl+r重做</p><h3 id="保存与退出"><a href="#保存与退出" class="headerlink" title="保存与退出"></a>保存与退出</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/84a18ea4-5a48-4be2-b54d-13b8a2d3d21c.png" alt="image-20240422215621336"></p><h2 id="文件文本操作"><a href="#文件文本操作" class="headerlink" title="文件文本操作"></a>文件文本操作</h2><h3 id="cat-1"><a href="#cat-1" class="headerlink" title="cat"></a>cat</h3><p>小猫老弟</p><p>cat 是一个文本文件查看和连接工具。cat有如下功能：<br> <strong>显示文件内容</strong>，cat filename<br> <strong>编辑一个文件</strong>，cat &gt; filename。<br> 将几个文件<strong>合并为一个文件</strong>，cat file1 file2 &gt; file3<br>⚫ cat常用选项有：<br> -n：从1开始对<u>所有行</u><strong>编号</strong>并显示在每行开头<br> -b：从1开始对<u>非空行</u><strong>编号</strong>并显示在每行开头<br> -s：当有多个空行在一起时只输出一个空行<br> -E：在每行结尾增加$（？）<br> –help：显示帮助信息</p><h1 id="openeuler3"><a href="#openeuler3" class="headerlink" title="openeuler3"></a>openeuler3</h1><h2 id="文件系统类型"><a href="#文件系统类型" class="headerlink" title="文件系统类型"></a>文件系统类型</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/7d3d0bb2-a3ba-42df-95f2-286083d36038.png" alt="image-20240421093549325"></p><p>openeuler默认使用ext4</p><h2 id="磁盘及接口"><a href="#磁盘及接口" class="headerlink" title="磁盘及接口"></a>磁盘及接口</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c586f171-6601-4fe2-9928-92c473ba872a.png" alt="image-20240421094202478"></p><p>lsblk显示磁盘信息</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3e11786c-824e-4980-9999-9fec9208726f.png" alt="image-20240421094652907"></p><h3 id="分盘操作"><a href="#分盘操作" class="headerlink" title="分盘操作"></a>分盘操作</h3><ol><li><p>lsblk查看磁盘信息</p></li><li><p>磁盘分区方案MBR（最小存储单元是扇区，大小512字节）</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20eeff4c-2df2-4ff5-9eac-cdd2d0ff96fa.png" alt="image-20240421095651715"></p><p>一个MBR只能存储4个分区盘，但是可以再指向一个新的MBR，逻辑分区加主分区为16个</p><h3 id="GPT"><a href="#GPT" class="headerlink" title="GPT"></a>GPT</h3><p>为了弥补MBR的磁盘空间不足（2tb），我们发明了GPT磁盘存储模式</p><h3 id="创建磁盘命令"><a href="#创建磁盘命令" class="headerlink" title="创建磁盘命令"></a>创建磁盘命令</h3><p>fdisk &#x2F;dev&#x2F;nvme0n1</p><p>输入n进行创建</p><p>输入p显示创建信息</p><p>partprobe&#x2F;&#x2F;刷新磁盘信息</p><p>挂载前要进行<strong>格式化</strong></p><p>格式化命令：mkfs -t ext4 &#x2F;dev&#x2F;nvm0n1p1</p><p>会生成一个UUID信息，每次格式化都会变化，用于挂载（挂载就是给磁盘这个房间加上一个门，属于映射关系）</p><p>临时挂载：mount &#x2F;dev&#x2F;nvm0np1p &#x2F;mnt</p><p>df -h查看挂载信息 </p><p>永久挂载：修改我们的&#x2F;etc&#x2F;fstab（乱改会把系统搞奔溃）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/37946a66-dbfb-455b-ac3f-bd3343b21444.png" alt="image-20240421104710545"></p><p>推荐使用我们的uuid进行挂载，就是为了不把系统搞崩</p><p>挂载选项，也是在etc里面改</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/68606bd9-1eec-4507-a05d-51c2d0d25c5a.png" alt="image-20240421105824702"></p><p>逻辑分区只能在拓展分区的范围中创建</p><h2 id="怎么在线拓展我们的磁盘"><a href="#怎么在线拓展我们的磁盘" class="headerlink" title="怎么在线拓展我们的磁盘"></a>怎么<strong>在线拓展</strong>我们的磁盘</h2><p>使用lvm创建逻辑卷</p><p>将不同的空间映射成一个物理卷，然后再将物理卷加到一个组里面，然后再分为逻辑卷</p><ol><li><p>lsblk</p></li><li><p>分区</p></li><li><p>转换成物理卷（pvcreate pvdisplay pvmove pvck pvchange ）</p></li><li><p>创建成卷组（vgcreate data &#x2F;dev&#x2F;sdb1&#x2F;nvmen0n1p1     vgs      vgdisplay &#x2F;dev&#x2F;data     vgreduce data &#x2F;dev&#x2F;sdb1  vgextend ）</p></li><li><p>管理逻辑卷（lvcvrate -n lv1 -L 5G &#x2F;dev&#x2F;data  如果使用小-l 100就是100个最小逻辑单元pe-size）</p></li><li><p>格式化</p></li><li><p>挂载</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/73751ccc-3987-446e-a3e4-f4e226ef71a0.png" alt="image-20240421115303178"></p><h2 id="系统管理"><a href="#系统管理" class="headerlink" title="系统管理"></a>系统管理</h2><p>systemctl status atd</p><p>at-t 202405141314单次进行程序的执行时间 </p><h3 id="周期性进行"><a href="#周期性进行" class="headerlink" title="周期性进行"></a>周期性进行</h3><p>cronb命令</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c057bb15-2863-4ec7-9f3c-1376e624216c.png" alt="image-20240421142254869"></p><p>例子：为了将某个程序在每天的0点执行一遍</p><p>*单个*号表示每1</p><p>*&#x2F;5表示每5</p><p>10-15表示10到15</p><p>10，15表示10号和15号</p><p>单个数字就表示时间</p><p>（5元组是吧）</p><p>可以使用网络上的计算器进行我们的计算</p><h2 id="网络管理"><a href="#网络管理" class="headerlink" title="网络管理"></a>网络管理</h2><p>ip address </p><ul><li><p>en-以太网口</p></li><li><p>en 表示Ethernet</p></li><li><p>wl 表示WLAN</p></li><li><p>ww 表示无线广域网WWAN</p></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/dfb2f39d-e0ff-4db7-8623-306a86b66c0f.png" alt="image-20240421151314195"></p><p>网卡配置文件etc&#x2F;sysconfig&#x2F;network-scripts&#x2F;</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/1b01062e-1caa-40c4-8b16-ce9e54261d0f.png" alt="image-20240421151800981"></p><p>网卡最小配置文件配置</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/5b785f62-6efb-49de-865c-662d7ba36ec5.png" alt="image-20240421151856590"></p><p>不是哥们谁记这个啊</p><p>能补全的命令就是好命令</p><p>nmcilli connection reload</p><p>awdawd&amp;&amp;awdawda，前面命令执行成功后，后面的命令才能执行</p><p>单核cpu同一时间片只能进行一个流程，cpu按时间片来进行，切换时保存进程的状态，放进上下文中</p><p>进程优先级越小越好</p><h2 id="看看cpu使用率"><a href="#看看cpu使用率" class="headerlink" title="看看cpu使用率"></a>看看cpu使用率</h2><p>df -h</p><p>lsblk</p><h2 id="swap空间"><a href="#swap空间" class="headerlink" title="swap空间"></a>swap空间</h2><p>为防止空间占满后进程卡死使用虚拟缓存防止卡死</p><p>划分swap空间</p><h1 id="openeuler4"><a href="#openeuler4" class="headerlink" title="openeuler4"></a>openeuler4</h1><p>运维工具ansible学习</p><h2 id="ansible常见模块与操作"><a href="#ansible常见模块与操作" class="headerlink" title="ansible常见模块与操作"></a>ansible常见模块与操作</h2><p>一次性命令</p><h2 id="剧本playbook-yaml"><a href="#剧本playbook-yaml" class="headerlink" title="剧本playbook-yaml"></a>剧本playbook-yaml</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">my</span> <span class="string">first</span> <span class="string">playbook</span></span><br><span class="line">  <span class="attr">host:</span> <span class="string">all</span></span><br><span class="line">  <span class="attr">task:</span> </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">ensure</span> <span class="string">user</span> <span class="string">exists</span></span><br><span class="line">    <span class="attr">user:</span></span><br><span class="line">     <span class="attr">name:</span> <span class="string">demo</span></span><br><span class="line">     <span class="attr">uid:</span> <span class="number">2000</span></span><br><span class="line">     <span class="attr">group:</span> <span class="string">wheel</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">install</span> <span class="string">httpd</span></span><br><span class="line">    <span class="attr">yum:</span></span><br><span class="line">     <span class="attr">name:</span> <span class="string">httpd</span></span><br><span class="line">     <span class="attr">state:</span> <span class="string">lastest</span></span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">config</span> <span class="string">repo</span> <span class="string">files</span></span><br><span class="line">    <span class="attr">host:</span> <span class="string">all</span></span><br><span class="line">    <span class="attr">task:</span>  </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">remove</span> <span class="string">repo</span> <span class="string">files</span></span><br><span class="line">      <span class="attr">file:</span> </span><br><span class="line">        <span class="attr">path:</span> <span class="string">adawdasdaw</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">absent</span> <span class="comment">#删除</span></span><br></pre></td></tr></table></figure><p>不会写找模板</p><h2 id="ansible定义变量"><a href="#ansible定义变量" class="headerlink" title="ansible定义变量"></a>ansible定义变量</h2><h3 id="在playbook中定义变量"><a href="#在playbook中定义变量" class="headerlink" title="在playbook中定义变量"></a>在playbook中定义变量</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">use</span> <span class="string">vars</span></span><br><span class="line">  <span class="attr">hosts:</span> <span class="string">web</span></span><br><span class="line">  <span class="attr">vars:</span> </span><br><span class="line">    <span class="attr">name:</span> <span class="string">bob</span></span><br><span class="line">  <span class="attr">tasks:</span> </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">ensure</span> <span class="string">user</span> <span class="string">creat</span></span><br><span class="line">    <span class="attr">user:</span> </span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;<span class="template-variable">&#123;&#123; name &#125;&#125;</span>&quot;</span></span><br><span class="line">      <span class="attr">state:</span> <span class="string">present</span></span><br></pre></td></tr></table></figure><h3 id="命令行中进行变量定义"><a href="#命令行中进行变量定义" class="headerlink" title="命令行中进行变量定义"></a>命令行中进行变量定义</h3><p>ansible-playbook -e name&#x3D;hary vars.yml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">manage</span> <span class="string">service</span></span><br><span class="line">  <span class="attr">hosts:</span> <span class="string">all</span></span><br><span class="line">  <span class="attr">vars_files:</span> </span><br><span class="line">    <span class="bullet">-</span> <span class="string">openeuler.yml</span></span><br><span class="line">    </span><br><span class="line">  <span class="attr">tasks:</span> </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">install</span> &#123;&#123; <span class="string">pkg_name</span> &#125;&#125;</span><br><span class="line">    <span class="attr">yum:</span> </span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;<span class="template-variable">&#123;&#123; pkg_name &#125;&#125;</span>&quot;</span></span><br><span class="line">      <span class="attr">state:</span> <span class="string">latest</span></span><br><span class="line">      </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">start</span> &#123;&#123;<span class="string">service_name</span> &#125;&#125;</span><br><span class="line">    <span class="attr">service:</span> </span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;<span class="template-variable">&#123;&#123; service_name &#125;&#125;</span>&quot;</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">started</span></span><br><span class="line">        <span class="attr">enabled:</span> <span class="literal">yes</span></span><br><span class="line">            </span><br><span class="line">           </span><br></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure><h2 id="ansible-fact-变量"><a href="#ansible-fact-变量" class="headerlink" title="ansible fact 变量"></a>ansible fact 变量</h2><h2 id="ansible魔法变量"><a href="#ansible魔法变量" class="headerlink" title="ansible魔法变量"></a>ansible魔法变量</h2><h2 id="还有循环？"><a href="#还有循环？" class="headerlink" title="还有循环？"></a>还有循环？</h2><h2 id="条件任务语法"><a href="#条件任务语法" class="headerlink" title="条件任务语法"></a>条件任务语法</h2><p>使用when语法</p><h2 id="jinja2模板-openeuler4"><a href="#jinja2模板-openeuler4" class="headerlink" title="jinja2模板# openeuler4"></a>jinja2模板# openeuler4</h2><p>运维工具ansible学习</p><h2 id="ansible常见模块与操作-1"><a href="#ansible常见模块与操作-1" class="headerlink" title="ansible常见模块与操作"></a>ansible常见模块与操作</h2><p>一次性命令</p><h2 id="剧本playbook-yaml-1"><a href="#剧本playbook-yaml-1" class="headerlink" title="剧本playbook-yaml"></a>剧本playbook-yaml</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">my</span> <span class="string">first</span> <span class="string">playbook</span></span><br><span class="line">  <span class="attr">host:</span> <span class="string">all</span></span><br><span class="line">  <span class="attr">task:</span> </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">ensure</span> <span class="string">user</span> <span class="string">exists</span></span><br><span class="line">    <span class="attr">user:</span></span><br><span class="line">     <span class="attr">name:</span> <span class="string">demo</span></span><br><span class="line">     <span class="attr">uid:</span> <span class="number">2000</span></span><br><span class="line">     <span class="attr">group:</span> <span class="string">wheel</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">install</span> <span class="string">httpd</span></span><br><span class="line">    <span class="attr">yum:</span></span><br><span class="line">     <span class="attr">name:</span> <span class="string">httpd</span></span><br><span class="line">     <span class="attr">state:</span> <span class="string">lastest</span></span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line">     </span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">config</span> <span class="string">repo</span> <span class="string">files</span></span><br><span class="line">    <span class="attr">host:</span> <span class="string">all</span></span><br><span class="line">    <span class="attr">task:</span>  </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">remove</span> <span class="string">repo</span> <span class="string">files</span></span><br><span class="line">      <span class="attr">file:</span> </span><br><span class="line">        <span class="attr">path:</span> <span class="string">adawdasdaw</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">absent</span> <span class="comment">#删除</span></span><br></pre></td></tr></table></figure><p>不会写找模板</p>]]></content>
    
    
    <summary type="html">ict培训linux</summary>
    
    
    
    
    <category term="linux" scheme="http://blog.wenmozhu.de5.net/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>计网实践作业</title>
    <link href="http://blog.wenmozhu.de5.net/2024/05/04/%E8%AE%A1%E7%BD%91%E5%AE%9E%E8%B7%B5%E4%BD%9C%E4%B8%9A/"/>
    <id>http://blog.wenmozhu.de5.net/2024/05/04/%E8%AE%A1%E7%BD%91%E5%AE%9E%E8%B7%B5%E4%BD%9C%E4%B8%9A/</id>
    <published>2024-05-04T09:43:35.000Z</published>
    <updated>2026-09-09T10:57:23.670Z</updated>
    
    <content type="html"><![CDATA[<h1 id="计网实践作业"><a href="#计网实践作业" class="headerlink" title="计网实践作业"></a>计网实践作业</h1><h2 id="实践二"><a href="#实践二" class="headerlink" title="实践二"></a>实践二</h2><p>【思考1】：CoaxialSplitter 在何种场景下会使用？是如何使用的？</p><p>同轴电缆信号分配器是专门设计用来将单一信号流分散至多个频道的设备，这种设备在闭路电视、卫星广播和其它通信系统中扮演着重要角色。这类分配器有能力把单一的输入信号复制成两份或更多份的输出信号，允许不止一个终端同时接收和使用同一信号。</p><p>该分配器由信号输入接口、信号输出接口、内部信号引导组件（例如基于特定型号如DS1233-10+的信号耦合器和分支器）、外围防护壳等构成。信号输入接口负责接入来自信号源的原始信号，而内部引导组件则负责对这个信号进行有效的分割处理，最后，处理后的信号被输送到各个信号输出接口。</p><p>【思考3】：</p><p> （3.1）IP 地址及子网掩码设置的特点是什么？</p><p>ip地址设置不重复，前24位相同，子网掩码设置相同，因为4台pc在同一个网络中</p><p> （3.2）Hub 和Repeater 工作特点是什么？</p><p><strong>Hub（集线器）</strong>：</p><p>  Hub的主要功能是将多个网络设备汇集到一个中心点，通过其拥有的多个端口，使不同的设备能够相互连接。然而，Hub在数据处理上有一个显著的特点：当接收到一个数据包时，它会不加选择地将这个数据包复制到所有与之相连的端口上，而不对其进行任何目标地址的过滤。</p><p><strong>Repeater（中继器）</strong>：</p><p>  Repeater的主要作用在于强化网络传输过程中衰减的信号。它工作在OSI参考模型的物理层，专注于物理信号的传输和再生。当信号在传输过程中由于距离、材质或其他因素而衰减时，Repeater能够捕捉到这些信号，按位进行信息的传递，并对衰减的信号进行放大和调整，从而确保信号的完整性和强度，以延长网络信号的传输距离。</p><p>思考4】：如果在步骤3的网络中，出现PC终端间ping测试不成功，可 能会是什么原因导致的？</p><p>pc的ip地址设置错误、子网掩码设置错误，集线器和中继器的端口可能被关闭（输入了shutdown命令）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430203247465.png" alt="image-20240430203247465"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430203736699.png" alt="image-20240430203736699"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430203825874.png" alt="image-20240430203825874"></p><p>RS-232是什么接口？外形如何？有何用处？</p><p><strong>RS-232是一种常用的串行通信接口标准</strong>，它的外形通常为<strong>DB-9或DB-25的连接器形式</strong>，主要用途是<strong>实现计算机与外部设备之间的数据传输</strong></p><p>每种接头都有公头和母头之分，其中带针状的接头是公头，而带孔状的接头是母头。9针串口的外观如下图所示。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430203655484.png" alt="image-20240430203655484"></p><h2 id="实践三"><a href="#实践三" class="headerlink" title="实践三"></a>实践三</h2><p>【思考1】：查阅并回答eNSP中进行“线缆”选择时，下面这些线缆的特点 和应用场景是什么。</p><p>Auto：自动线，自动选择接口连接设备<br>copper：双绞线，连接设备的以太网和千光以太网接口（Ethernet口和GE口）<br>serial：串行线，可以堆叠交换机使用，路由器连接路由器可以用Serial端口连接<br>POS：光纤，连接设备的POS口<br>E1：连接设备的E1口（2M接口），广泛使用的是脉冲编码调制（即PCM）编码进行数模转换<br>ATM：连接设备的G.SHDSL口<br>CTL：连接PC与设备之间的串口</p><p>【思考2】：查阅并回答交换机S3700和S5700的区别是什么？在具体应用场 景上会如何选择具体网络设备型号？</p><ol><li><strong>性能</strong>：S3700系列是百兆三层交换机，支持千兆上行链路，适用于中型网络的接入层和小型网络的汇聚层。而S5700系列则是全千兆三层交换机，拥有更高的转发能力和更多的功能特性，适合用于更大规模的网络环境。</li><li><strong>速率</strong>：S3700系列的端口速率最高可达百兆，而S5700系列则提供全线速的千兆端口，这意味着在数据传输速度上S5700更快。</li></ol><p>根据网络的规模大小、采购经费、安全性以及速率等要求进行设备的选择</p><p>【思考3】： </p><p>（3.1）观察并总结出现在整个网络的PC终端的IP地址设置有什么特点？所有PC终端的IP地址设置中，有设置“网关”吗？网关的设置对本次实践目 标【2】（即：实现网络内部PC终端间的连通性测试）有影响吗？为什么呢？ </p><p>ip设置的特点是前24位一致，说明4台pc同网段。pc配置时没有设置网关。没有影响，4台pc处于同一个网络下，不需要网关，只需要借助arp获取到地址后就能直接进行通信</p><p>（3.2）交换机转发数据的工作特点是什么？截图展示本次实践网络中的交换 机的转发表，如下图所示。思考并回答交换机的转发表是如何建立、完善和实时匹配通信网络的互连关系的。</p><p><strong>MAC地址学习</strong>：交换机能够通过检查进入帧的源MAC地址，并将该地址与帧进入的端口映射，存储在动态的MAC地址表中。这些表项会定期更新，超过一定生存期（通常300秒）的表项会被自动清除。</p><p>交换机能根据数据帧中的目的MAC地址来确定转发路径。它通过内部转发规则表查询出口路径，确保数据能够送达正确目的地。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430220149968.png" alt="image-20240430220149968"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240430220537534.png" alt="image-20240430220537534"></p><ol><li><p><strong>理解数据链路层的作用</strong>:</p><ul><li>学习数据链路层如何提供物理寻址（MAC地址）及如何在两个相邻网络节点之间可靠地传输数据帧。</li><li>掌握数据链路层如何检测并处理传输错误，例如通过帧校验序列（FCS）。</li></ul></li><li><p><strong>掌握网桥和交换机的基本工作原理</strong>:</p><ul><li>了解网桥和二层交换机如何使用MAC地址表进行数据帧的过滤和转发决策。</li><li>学习这些设备是如何隔离冲突域，从而减少网络上的拥塞和提高整体性能。</li></ul></li><li><p><strong>网络设计和拓扑结构</strong>:</p><ul><li>通过实践了解不同类型的网络拓扑（如星形、环形、总线形等）以及网桥和交换机在其中的作用。</li><li>学习如何根据实际需求设计合理的网络拓扑，使得资源分配最优化，同时保持网络的可扩展性和灵活性。</li></ul></li><li><p><strong>理解转发表的建立和维护</strong>:</p><ul><li>深入理解转发表的建立过程，包括源地址学习和老化机制。</li><li>掌握透明网桥与源路由网桥的区别，以及它们在维护和更新转发表方面的不同策略。</li></ul></li><li><p><strong>故障诊断与排除</strong>:</p><ul><li>学会使用各种网络监控和诊断工具，比如网络嗅探器和分析器，来监视网络流量并排查问题。</li><li>掌握解读MAC地址表和理解其对故障诊断的帮助。</li></ul></li></ol><h2 id="实践四"><a href="#实践四" class="headerlink" title="实践四"></a>实践四</h2><p> port link-type access<br> port default vlan 166</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504110229938.png" alt="image-20240504110229938"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504110727092.png" alt="image-20240504110727092"></p><p>【思考1】：【截图并观察】交换机LSW1和LSW2的转发表（如下)。 你认为说明了什么？ </p><p>4台pc都处于默认的vlan1下，属于同一个网段下且vlan相同则可以通信，sw1去下面两个mac地址从eth0&#x2F;0&#x2F;3接口发出</p><p>思考2：本款华为网络设备的命令模式有哪些？请列举部分说明。</p><p>用户视图:</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504112318501.png" alt="image-20240504112318501"></p><p>系统视图：用户视图下输入sys进入系统视图</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504112450767.png" alt="image-20240504112450767"></p><p>接口视图：系统视图下输入int 接口名称进入接口视图</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504112831165.png" alt="image-20240504112831165"></p><p>路由协议视图：系统视图下输入协议名称进入到协议视图中</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504113104630.png" alt="image-20240504113104630"></p><p>思考3：【截图并观察】本次实践网络中的交换机的转发表，对比“ 步骤 1”中交换机的转发表情况，说明发生变化的情况。</p><p>vlan条目从vlan 1变成了vlan166和vlan 167 这说明4台pc已经被分到了不同的vlan下，不同的vlan不能进行通信</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504113726729.png" alt="image-20240504113726729"></p><p>思考4： </p><p>（4.1）分别抓取上图中LSW1中“access”和“trunk”端口进（收）&#x2F;出（发） 的数据包情况，并说明两种端口收&#x2F;发数据的特点。 </p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504111447990.png" alt="image-20240504111447990"></p><p>发送数据时：access口对数据包进行vlan的包装并且打上了标签166，而从trunk口发出的时候，因为166vlan号是允许通过的，不做处理直接发出</p><p>收数据时过程：刚进入trunk口有vlan标识166，在允许的范围之中，可以进入，而access发现有标识，发送给pc的时候将标签剥离</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504115657534.png" alt="image-20240504115657534"></p><p>（4.2）若出现同网段同VLAN-id的PC终端间ping测试不成功，分析可能会是什么原因导致的？并自行尝试解决。</p><p>端口状态设置错误，比如说将access口设置成了trunk口</p><p>交换机端口不小心输入了shutdown导致端口堵塞</p><p>子网掩码设置错误</p><p>软件bug</p><p>【思考5】： （5.1）在本实践应用中，在任意PC中发送设定的广播包，观察广播包传输的区域和范围，与“VLAN逻辑组”的关系。 </p><p>发送的广播报文只有相同vlanid的pc之间可以收到，也就是说vlan逻辑组弥补了交换机无法分割广播域的问题，不同vlan之间就是逻辑上的不同的广播域</p><p>（5.2）如下图所示，端口类型“hybird”“dot1q-tunnel”有何种应用需求意义？</p><ul><li><strong>Hybrid 端口</strong>: 。Hybrid接口既可以连接普通终端的接入链路，又可以连接交换机间的干道链路，它允许多个VLAN帧通过，并且在出接口方向将某些VLAN帧的标签剥掉。</li><li><strong>Dot1q-tunnel 端口</strong>: 又称为QinQ端口，这种端口无论接收到的报文是否已经携带了VLAN标签，都会在外层叠加一个默认的VLAN标签。</li></ul><h2 id="实践五"><a href="#实践五" class="headerlink" title="实践五"></a>实践五</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504141316970.png" alt="image-20240504141316970"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504141441919.png" alt="image-20240504141441919"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504144427967.png" alt="image-20240504144427967"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504153138914.png" alt="image-20240504153138914"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504154213645.png" alt="image-20240504154213645"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504154150077.png" alt="image-20240504154150077"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504154157533.png" alt="image-20240504154157533"></p><p>【思考1】：【截图并说明】三层交换机5700&#x2F;路由器 的路由表，说明其直连路由情况。 </p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504144319318.png" alt="image-20240504144319318"></p><p>直连路由有配置的虚拟网关的网段50.66.1.0 50.66.2.0，还有本地测试环回口127.0.0.1</p><p>【思考2】：在上图实践内容中，路由器R1和R2的路由表中，其直连网段分别是什么？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504154842731.png" alt="image-20240504154842731"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504154901418.png" alt="image-20240504154901418"></p><p>对于路由器1直连路由有网段50.66.1.0 50.66.3.0还有本地测试环回口127.0.0.1</p><p>对于路由器2直连路由有网段50.66.2.0 50.66.3.0还有本地测试环回口127.0.0.1</p><p>思考3：在上图实践内容中，路由器R2上的静态路由该如何设置？若配置此指令 “[R1]ip route-static 0.0.0.0 0.0.0.0 3.3.3.2 ”，是什么含义？</p><p>r2上的静态路由应该配置为：ip route-static 50.66.1.0 255.255.255.0 50.66.3.1（意思是去50.60.1.0网段的数据包要交附给50.66.3.1）</p><p>“[R1]ip route-static 0.0.0.0 0.0.0.0 3.3.3.2 ”的是r1所有数据包都交付给3.3.3.2</p><p>思考4：图4.2中，说明路由器R1接口GE0&#x2F;0&#x2F;1与L3LSW的GE0&#x2F;0&#x2F;23端口该如何有效配置？路由如何设置，以实现各网段间的互联互通？结合逻辑拓扑和物理连接拓扑情况， 【截图并说明】三层交换机L3LSW&#x2F;路由器R1的路由表情况。</p><p>R1接口GE0&#x2F;0&#x2F;1配置地址为50.66.3.1，然后L3LSW的GE0&#x2F;0&#x2F;2端口设置新的vlan并且进行绑定，模式为access，配置ip为50.66.3.2</p><p>运行ospf协议进行路由共享，或者使用静态路由（失败了）</p><p>r1路由表中是两个网段的网关，出接口50.66.3.1地址以及本地环回接口</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504172834926.png" alt="image-20240504172834926"></p><p>交换机本地两个网关以及出接口50.66.3.2地址，本地环回口地址</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504171850905.png" alt="image-20240504171850905"></p><p>思考5】：为什么可以在网络中设置使用两个相同的VLAN-id（两个VLAN100和 VLAN101）</p><p>特殊场景需要：某些特殊的网络场景可能需要两个或多个端口共享相同的VLAN-id，以便实现特定的通信或数据流控制。</p><p>思考6：若出现不同网段间PC终端的ping测试不成功，分析可能会是什么原因导致 的？并自行尝试解决。</p><ol><li>路由问题：不同网段间的通信需要路由器或三层交换机来进行路由。如果路由器没有正确配置或者不存在，那么不同网段的设备将无法相互通信。</li><li>子网掩码不正确：如果PC终端的子网掩码设置错误，可能导致它们认为对方不在同一个网络中，从而无法进行直接通信。</li><li>网关配置错误：每台PC需要知道用于转发到其他网络的数据包的默认网关。如果默认网关配置错误，数据包将无法正确路由。</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504172741810.png" alt="image-20240504172741810"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240504174335663.png" alt="image-20240504174335663"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;计网实践作业&quot;&gt;&lt;a href=&quot;#计网实践作业&quot; class=&quot;headerlink&quot; title=&quot;计网实践作业&quot;&gt;&lt;/a&gt;计网实践作业&lt;/h1&gt;&lt;h2 id=&quot;实践二&quot;&gt;&lt;a href=&quot;#实践二&quot; class=&quot;headerlink&quot; title=&quot;实践二</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>第二次考核总结</title>
    <link href="http://blog.wenmozhu.de5.net/2024/04/13/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E8%80%83%E6%A0%B8%E6%80%BB%E7%BB%93/"/>
    <id>http://blog.wenmozhu.de5.net/2024/04/13/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E8%80%83%E6%A0%B8%E6%80%BB%E7%BB%93/</id>
    <published>2024-04-13T07:11:57.000Z</published>
    <updated>2026-09-09T10:57:23.669Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第二次考核总结"><a href="#第二次考核总结" class="headerlink" title="第二次考核总结"></a>第二次考核总结</h1><h2 id="1-应用层的服务"><a href="#1-应用层的服务" class="headerlink" title="1.应用层的服务"></a>1.应用层的服务</h2><p>服务包括FTP、POP3（邮件）、SMTP、DHCP、DNS、SNMP、Telent Http</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231117222144171.png" alt="image-20231117222144171"></p><p>is-is和ospf协议类似，都是网络层的协议吧</p><h2 id="3-ospf算法"><a href="#3-ospf算法" class="headerlink" title="3.ospf算法"></a>3.ospf算法</h2><p>ospf依赖于迪杰什特算法（spf算法）</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>引进两个集合S和U，初始时，S中只有起点s；U中是除s之外的顶点，并且U中顶点的路径是”起点s到该顶点的路径”。然后，从U中找出路径最短的顶点，并将其加入到S中；接着，更新U中的顶点和顶点对应的路径。 然后，再从U中找出路径最短的顶点，并将其加入到S中；接着，更新U中的顶点和顶点对应的路径。 … 重复该操作，直到遍历完所有顶点。</p><h3 id="操作步骤"><a href="#操作步骤" class="headerlink" title="操作步骤"></a>操作步骤</h3><ol><li>初始时，S只包含起点s；U包含除s外的其他顶点，且U中顶点的距离为”起点s到该顶点的距离”[例如，U中顶点v的距离为(s,v)的长度，然后s和v不相邻，则v的距离为∞]。</li><li>从U中选出”距离最短的顶点k”，并将顶点k加入到S中；同时，从U中移除顶点k。</li><li>更新U中各个顶点到起点s的距离。之所以更新U中顶点的距离，是由于上一步中确定了k是求出最短路径的顶点，从而可以利用k来更新其它顶点的距离；例如，(s,v)的距离可能大于(s,k)+(k,v)的距离。</li><li>重复步骤(2)和(3)，直到遍历完所有顶点。</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231117212858051.png" alt="image-20231117212858051"></p><p><strong>距离都是相对于第一个顶点说的</strong></p><ol><li><strong>以点D作为起点，A,B,G,F都是无穷的距离，然后C和E比较小的是c-3</strong></li><li><strong>接着取c作为顶点，A,G是无穷点，然后最小的是E-4</strong></li><li><strong>将E加入到顶点，无穷是A，最小的是F-6</strong></li><li><strong>取F最小的是G-12</strong></li><li><strong>取G点，最小的是b-13</strong></li><li><strong>取b点只剩下了a-22</strong></li></ol><p>此时d到每一个点的最短距离就算出来了</p><h2 id="7-7类LSA"><a href="#7-7类LSA" class="headerlink" title="7.7类LSA"></a>7.7类LSA</h2><p>一类：每路由器都会产生一条，描述自己的IP状况—本区域</p><p>二类：（DR产生）描述自己的IP状况（DR1，2类都可以产生）—本区域</p><p>三类：（ABR）将本区域的路由传输出去（1，2类转3类），可以从骨干到非骨干也可以从非骨干到骨干</p><p>四类：（ABR）描述ABR的位置信息，为第五类服务</p><p>五类：（ASBR）传递ospf的外部路由信息，做了路由引入到ospf的路由器就是ASBR</p><p>七类：（ASBR）适用于nssa的五类lsa</p><h2 id="6-acl分类"><a href="#6-acl分类" class="headerlink" title="6.acl分类"></a>6.acl分类</h2><p>基本acl：2000—2999</p><p>高级acl：3000—3999</p><p>二层acl：4000—4999</p><p><strong>用户自定义acl</strong>：5000-5999</p><p><strong>用户acl</strong>：6000—6999</p><p>数字型和命名型</p><h2 id="11-MSTP解决了RSTP和STP的什么问题"><a href="#11-MSTP解决了RSTP和STP的什么问题" class="headerlink" title="11.MSTP解决了RSTP和STP的什么问题"></a>11.MSTP解决了RSTP和STP的什么问题</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20231117211022375.png" alt="image-20231117211022375"></p><p>我还是觉得mstp解决了vlan间不能负载均衡的问题</p><p><strong>hedex里面的文段：为了弥补STP和RSTP的缺陷，IEEE于2002年发布的802.1S标准定义了MSTP。MSTP兼容STP和RSTP，既可以快速收敛，又提供了数据转发的多个冗余路径，在数据转发过程中实现VLAN数据的负载均衡。</strong></p><h2 id="12-路由备份和负载分担"><a href="#12-路由备份和负载分担" class="headerlink" title="12.路由备份和负载分担"></a>12.路由备份和负载分担</h2><p>路由备份：目的相同，下一跳不同，优先级不同，开销相同</p><p>负载分担：目的相同，下一跳不同，协议相同（优先级相同），开销相同（有一定的随机性）</p><h2 id="13-RIP的防环机制"><a href="#13-RIP的防环机制" class="headerlink" title="13.RIP的防环机制"></a>13.RIP的防环机制</h2><p>1-记数最大值（maximum hop count）：<strong>定义最大跳数</strong>（最大为15跳），当跳数为16跳时,目标为不可达</p><p>2- 水平分割（split horizon）：从<strong>一个接口学习到的路由不会再广播回</strong>该接口。<strong>cisco可以对每个接口关闭水平分割功能。</strong></p><p>3-路由毒化（route posion）：<strong>当拓扑变化时，路由器会将失效的路由标记为possibly down状态，并分配一个不可达的度量值。</strong>（主动发）</p><p>4-毒性逆转（poison reverse）：从<strong>一个接口学习的路由</strong>会发送回该接口，但是已经被毒化，跳数设置为16跳，不可达。（被动接收到一个信息再还回去，随便下个毒）</p><p>5-触发更新（trigger update）：一旦检测到路由崩溃，<strong>立即广播路由刷新</strong> 报文，而不等到下一刷新周期。</p><p>6- 抑制计时器（holddown timer）：防止路由表频繁翻动，增加了网络的稳定性。（？）</p><h2 id="14-ping包的后缀"><a href="#14-ping包的后缀" class="headerlink" title="14.ping包的后缀"></a>14.ping包的后缀</h2><p> <strong>-a</strong>：<strong>选择源IP地址，默认为输出接口。</strong></p><p>  <strong>-t</strong>：等待每一个回答的超时时间。单位毫秒，默认为2000毫秒。（一直ping）</p><p>  <strong>-tos</strong>：指定发送回显请求的TOS值，默认为0.</p><p>  ****-f****：在数据包中设置不分段标志（仅ipv4）</p><p>  ****-h*<em><strong>：指定发送到ECHO请求的TTL值，默认为255.（</strong>生存时间</em>*）</p><p>  <strong>-m</strong>：等待发送下一个包时间，以毫秒为单位，默认500毫秒。</p><p><strong>-s</strong>：指定要发送的<strong>数据字节数</strong>，默认为56字节。（报文长度）</p><p> ****-c****：指定要发送的ECHO请求数量，默认为5.（报文数）</p><h2 id="15-arp"><a href="#15-arp" class="headerlink" title="15.arp"></a>15.arp</h2><p><strong>ARP 属于数据链路层，理由按照 OSI 参考模型， 数据链路层 封装 IP 报文时，需要通过 ARP 获取链路层目的地址，添加到报文头部，这就不属于网络层的功能了</strong>。 结论：在 TCP&#x2F;IP 模式中 ARP 协议属于网络层，在 OSI 参考模型中 ARP 协议属于数据链路层。</p><h2 id="17-route-policy（路由策略）"><a href="#17-route-policy（路由策略）" class="headerlink" title="17.route-policy（路由策略）"></a>17.route-policy（路由策略）</h2><p><strong>一个route policy下从小到大匹配node，一旦匹配到那就不再匹配，所以是或的关系</strong></p><p>多个apply之间是与的关系</p><p><strong>相同的if-match之间是或的关系</strong>（多个route policy 如果都if-match了一个acl，假如说是acl2000，那么只有第一个route policy 能匹配上）</p><p>不同的if-match之间是与的关系（同一个route policy可以接n个acl规则）</p><p><strong>路由策略本质上控制出还是不出，属于是控制范畴</strong></p><h2 id="18-RSTP快速收敛"><a href="#18-RSTP快速收敛" class="headerlink" title="18.RSTP快速收敛"></a>18.RSTP快速收敛</h2><p><strong>快速收敛</strong></p><p><strong>Proposal&#x2F;Agreement机制</strong></p><p>pa是快速响应</p><p>当一个端口被选举成为指定端口之后，在STP中，该端口至少要等待一个Forward Delay（Learning）时间才会迁移到Forwarding状态。而在RSTP中，<strong>此端口会先进入Discarding状态，再通过Proposal&#x2F;Agreement机制快速进入Forward状态</strong>。这种机制必须在<strong>点到点</strong>    <strong>全双工链路</strong>上使用。</p><p><strong>根端口快速切换机制</strong></p><p>如果网络中一个<strong>根端口</strong>失效，那么网络中<strong>最优的Alternate端口将成为根端口</strong>，进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。</p><p><strong>边缘端口的引入</strong></p><p><strong>边缘端口不接收处理配置BPDU，不参与RSTP运算</strong>，可以由Disable直接转到Forwarding状态，且不经历时延，就像在端口上将STP禁用。</p><h3 id="rstp的三种状态"><a href="#rstp的三种状态" class="headerlink" title="rstp的三种状态"></a>rstp的三种状态</h3><ul><li>如果不转发用户流量也不学习MAC地址，那么端口状态就是Discarding状态。</li><li>如果不转发用户流量但是学习MAC地址，那么端口状态就是Learning状态。</li><li>如果既转发用户流量又学习MAC地址，那么端口状态就是Forwarding状态。</li></ul><p>相对于普通的stp没了listening、blocking和disabled状态</p><h2 id="19-ospf区域的优点"><a href="#19-ospf区域的优点" class="headerlink" title="19.ospf区域的优点"></a>19.ospf区域的优点</h2><ol><li>错误点：ospf不能了解区域外部的拓扑细节，它只能拿到路由信息，它具体怎么连（细节）是无法得知的</li><li>关键点：同一个区域的数据库必须一样，那么原来比如三个交换机的数据现在只有一个了！那么并不就是减小lsdb么</li><li>lsdb小了那lsa也小了啊</li><li>泛洪被限制在了区域里</li></ol><h2 id="4-4策略路由"><a href="#4-4策略路由" class="headerlink" title="4.4策略路由"></a>4.4策略路由</h2><ol><li>定义目的和终点</li><li>关联acl</li><li>选择走哪一条路</li><li>还是关联</li></ol><p>就是控制数据往哪里走，属于<strong>转发</strong>的范畴</p><h2 id="20-通配符掩码"><a href="#20-通配符掩码" class="headerlink" title="20.通配符掩码"></a>20.通配符掩码</h2><p>为1的位不变，其他的要改变，10.1.1.0   0.0.254.255说明第三位最后一个是一，在一的基础上加2，加4等等。</p><h2 id="判断题"><a href="#判断题" class="headerlink" title="判断题"></a>判断题</h2><p>1题arp主要是解决<strong>同一网络</strong>的地址映射问题</p><p>4题它指的是时间上的先后而不是序号的先后。。。</p><h2 id="4-3路由优先级"><a href="#4-3路由优先级" class="headerlink" title="4.3路由优先级"></a>4.3路由优先级</h2><p><strong>直连路由 0</strong></p><p><strong>ospf 10</strong></p><p><strong>静态路由 60</strong></p><p><strong>rip 100</strong></p><h2 id="5-1ospf和rip的区别"><a href="#5-1ospf和rip的区别" class="headerlink" title="5.1ospf和rip的区别"></a>5.1ospf和rip的区别</h2><p>【工作核心不同】RIP：<strong>数跳数；</strong>OSPF：<strong>计算链路的度量值</strong></p><p>【发送对象不同】osp<strong>f向区域里所有人发，rip和相邻</strong>的发</p><p>【特殊对象】ospf有dr和bdr的选举</p><p>【发送协议不同】<strong>rip用udp包，ospf用ip包</strong></p><p>（。。。v2不用加掩码，记错了，v1加掩码）</p><h2 id="OSPF的五个报文"><a href="#OSPF的五个报文" class="headerlink" title="OSPF的五个报文"></a>OSPF的五个报文</h2><ol><li><p>Hello报文：周期性发送，用于<strong>发现和维持OSPF邻居</strong>关系；</p></li><li><p>DD报文(DataBase Description Packet)：数据库描述报文，<strong>描述本地LSDB的摘要信息</strong>，用于两台路由器进行<strong>数据库同步；</strong></p></li><li><p><strong>LSR报文</strong>(Link State Request Packet)：链路状态请求报文，向对方<strong>请求</strong>所需要的<strong>LSA</strong>；</p></li><li><p><strong>LSU报文</strong>(Link State Update Packet)：链路状态更新报文，向对方<strong>发送</strong>其所需要的<strong>LSA</strong>或者泛洪自己更新的LSA；</p></li><li><p><strong>LSAck</strong>报文(Link State Acknowledgment Packet)：链路状态确认报文，用于<strong>对收到的LSA进行确认。</strong></p></li></ol><p>Hello报文和LSAck报文不需要确认。</p><h2 id="OSPF的七个邻居状态"><a href="#OSPF的七个邻居状态" class="headerlink" title="OSPF的七个邻居状态"></a>OSPF的七个邻居状态</h2><ol><li><p>Down    没有收到Hello包                                                </p></li><li><p><strong>Attempt （一般不存在）</strong>Attempt 在帧中继网络中才会出现，表示的是网络为测试、唤醒状态</p></li><li><p>Init         收到邻居发来的Hello包，但是收到Hello包中的邻居字段没有自己</p></li><li><p>2-Way    收到邻居发来的Hello包的邻居列表中有自己，建立邻居关系（双向奔赴）    </p></li><li><p>Exstart    发送DD报文（此处DD报文不包含LSA头部信息）</p></li><li><p>Exchange   通过交换DD报文，交换LSA头部信息</p></li></ol><p>​     具体的交互流程（？？？）</p><p>上述Exstart状态决定出主从关系后，即从设备此时收到了主设备发来的空的DD报文</p><p>从设备使用主的序列号发送DD报文来回应主（此时DD报文包含LSA头部信息）</p><p>主也通过DD报文发送自己的LSA头部信息，并将序列号加1</p><p>从又使用主的序列号回应主；一直循环，直到主与从的M位都不置位（或者说只要有一侧有未传递的LSA头，就会一直循环）  </p><ol start="7"><li>Loading     通过上述获得的LSA头部信息，来确定自己需要哪些LSA</li><li>Full          LSDB同步完成，建立邻接关系</li></ol><h2 id="NAT的种类、优缺点、适用场景"><a href="#NAT的种类、优缺点、适用场景" class="headerlink" title="NAT的种类、优缺点、适用场景"></a>NAT的种类、优缺点、适用场景</h2><table><thead><tr><th>种类</th><th>优点</th><th>缺点</th><th>适用场景</th></tr></thead><tbody><tr><td>静态NAT</td><td>配置简单</td><td>不节省公网IP地址</td><td>一般用于在内网中对外提供服务的服务器</td></tr><tr><td>动态NAT</td><td>每个公网ip不再固定绑定私网设备，动态映射</td><td>进行地址转换的公网地址太少，新的设备无法对外通信</td><td>有限公网ip做临时的网络地址转换</td></tr><tr><td>NAPT（增加端口）</td><td>多个内网使用一个公网ip，更安全</td><td><strong>通信仅限于TCP或UDP</strong>，端口号可能不足</td><td>大型网络、多个设备绑定一个公网ip</td></tr><tr><td>EASY IP</td><td>配置简单</td><td>太简单了，拓展性不够</td><td>使用于小型网络，如家庭网</td></tr></tbody></table>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;第二次考核总结&quot;&gt;&lt;a href=&quot;#第二次考核总结&quot; class=&quot;headerlink&quot; title=&quot;第二次考核总结&quot;&gt;&lt;/a&gt;第二次考核总结&lt;/h1&gt;&lt;h2 id=&quot;1-应用层的服务&quot;&gt;&lt;a href=&quot;#1-应用层的服务&quot; class=&quot;headerli</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>ict第一次考核总结</title>
    <link href="http://blog.wenmozhu.de5.net/2024/04/13/ict%E7%AC%AC%E4%B8%80%E6%AC%A1%E8%80%83%E6%A0%B8%E6%80%BB%E7%BB%93/"/>
    <id>http://blog.wenmozhu.de5.net/2024/04/13/ict%E7%AC%AC%E4%B8%80%E6%AC%A1%E8%80%83%E6%A0%B8%E6%80%BB%E7%BB%93/</id>
    <published>2024-04-13T06:25:14.000Z</published>
    <updated>2026-09-09T10:57:22.165Z</updated>
    
    <content type="html"><![CDATA[<h1 id="ict第一次考核总结"><a href="#ict第一次考核总结" class="headerlink" title="ict第一次考核总结"></a>ict第一次考核总结</h1><h2 id="实验"><a href="#实验" class="headerlink" title="实验"></a>实验</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f57e5a3b-e4b4-4d8d-948e-691b93068bba.png" alt="image-20231015232727394"></p><h3 id="MSTP配置"><a href="#MSTP配置" class="headerlink" title="MSTP配置"></a>MSTP配置</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e8a43483-7644-49de-82c6-020c9d8fd594.png" alt="image-20231015234903319"></p><p>主要问题：</p><ol><li><p>在所有交换机下都要将vlan和实例进行一个绑定</p></li><li><p>再者就是判断根桥，虽然题目可能不会告诉你，但是你要自己判断，本题vlan100走sw1&#x2F;sw2-sw3-sw5，vlan200走sw1&#x2F;sw2-sw4-sw5，差别在于vlan 100只走sw3，所以sw3就是实例10的根桥一样的，vlan 200的sw4就是实例20的根桥</p></li><li><p>链路聚合开销为所有链路开销和的平均数</p></li><li><p>stp region-configuration</p></li><li><p>region-name mstp（改名）</p></li><li><p>revision-level 1（版本）</p></li><li><p>instance 10 vlan 100（vlan 绑定实例）</p></li><li><p>instance 20 vlan 200</p></li><li><p>active regionconfiguration（激活配置）</p></li><li><p>stp instance priority</p></li></ol><h3 id="根桥，根端口，指定端口，替代端口选举原则"><a href="#根桥，根端口，指定端口，替代端口选举原则" class="headerlink" title="根桥，根端口，指定端口，替代端口选举原则"></a>根桥，根端口，指定端口，替代端口选举原则</h3><h4 id="1-根桥的选举（树根）"><a href="#1-根桥的选举（树根）" class="headerlink" title="1.根桥的选举（树根）"></a>1.根桥的选举（树根）</h4><p>判断各个交换机的BID，BID&#x3D;优先级+MAC地址（优先级默认等于32768 ，范围0-65535 ，步长是4096）</p><p><strong>优先级低的成为根，如果优先级相同比较MAC地址，最低的为根。</strong></p><h4 id="2-根端口的选举（距离树根最近的端口，除根桥外，每个交换机都要有一个根端口，且只有一个）"><a href="#2-根端口的选举（距离树根最近的端口，除根桥外，每个交换机都要有一个根端口，且只有一个）" class="headerlink" title="2.根端口的选举（距离树根最近的端口，除根桥外，每个交换机都要有一个根端口，且只有一个）"></a>2.根端口的选举（距离树根最近的端口，除根桥外，每个交换机都要有一个根端口，且只有一个）</h4><p>若第一个相同则比较下一个，若不同则直接得出结论</p><h5 id="比较根路径开销（从根桥到交换机）"><a href="#比较根路径开销（从根桥到交换机）" class="headerlink" title="比较根路径开销（从根桥到交换机）"></a>比较根路径开销（从根桥到交换机）</h5><p>根路径开销低的为根端口 <img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/1d8a79b3-ec08-40e4-b924-48ce21885239.png" alt="img"></p><p>GE端口开销是2万，E端口开销是20万</p><p><strong>从根桥出发到交换机的端口进去才是端口的根路径开销</strong></p><p>上图LSW1的GE0&#x2F;0&#x2F;4的根路径开销是2万；LSW1的GE0&#x2F;0&#x2F;1的根路径开销是4万</p><h5 id="比较上行设备BID"><a href="#比较上行设备BID" class="headerlink" title="比较上行设备BID"></a>比较上行设备BID</h5><p>BID&#x3D;优先级+MAC地址（优先级默认等于32768 ，范围0-65535 ，步长是4096）上行设备的优先级低的该端口成为根端口，如果上级设备优先级相同则比较上级设备的MAC地址，最低的该端口为根端口。</p><h5 id="比较上行设备PID"><a href="#比较上行设备PID" class="headerlink" title="比较上行设备PID"></a>比较上行设备PID</h5><p>PID&#x3D;端口优先级+端口标识（端口优先级默认等于128，端口优先级的范围0-255）端口标识是e0&#x2F;0&#x2F;1之类的号码（e0&#x2F;0&#x2F;1比e0&#x2F;0&#x2F;2的端口标识小），先比较端口优先级，低的入选，若端口优先级相同再比较端口标识，低的入选。</p><h4 id="指定端口的选举"><a href="#指定端口的选举" class="headerlink" title="*.指定端口的选举"></a><em><strong>*.指定端口的选举</strong></em></h4><p><em><strong>（每个主干链路上一定要选举一个指定端口，且只有一个，根端口不参与选举，根桥上的端口全为指定端口，）若第一个相同则比较下一个，若不同则直接得出结论*</strong></em></p><h5 id="比较根路径开销"><a href="#比较根路径开销" class="headerlink" title="比较根路径开销"></a>比较根路径开销</h5><h5 id="（从各自当前交换机的根端口到根桥）低的获选"><a href="#（从各自当前交换机的根端口到根桥）低的获选" class="headerlink" title="（从各自当前交换机的根端口到根桥）低的获选"></a>（从各自当前交换机的根端口到根桥）低的获选</h5><h5 id="比较各自本交换机的BID"><a href="#比较各自本交换机的BID" class="headerlink" title="比较各自本交换机的BID"></a>比较各自本交换机的BID</h5><h5 id="比较各自的本端口的PID"><a href="#比较各自的本端口的PID" class="headerlink" title="比较各自的本端口的PID"></a>比较各自的本端口的PID</h5><h4 id="备份端口"><a href="#备份端口" class="headerlink" title="*备份端口*"></a><em><strong>*备份端口*</strong></em></h4><p>既不是根端口也不是指定端口的端口</p><h4 id="端口的几种状态"><a href="#端口的几种状态" class="headerlink" title="端口的几种状态"></a>端口的几种状态</h4><ul><li>Discarding：端口既不转发用户流量也不学习MAC地址；（丢弃）</li><li>Learning：端口不转发用户流量但是学习MAC地址；</li><li>Forwarding：端口既转发用户流量又学习MAC地址。</li></ul><h3 id="DHCP配置"><a href="#DHCP配置" class="headerlink" title="DHCP配置"></a>DHCP配置</h3><p>当初就没用懂，导致实操寄了</p><h4 id="服务器"><a href="#服务器" class="headerlink" title="服务器"></a>服务器</h4><ol><li><p>打开dhcp</p></li><li><p>进入端口配置IP</p></li><li><p>通过静态路由或者动态路由使得服务器获得中继DHCP的ip地址（单条链路可以使用默认路由配置）</p></li><li><p>全局创建pool池</p></li><li><p>配置pool池</p></li><li><p>进入端口打开DHCP全局模式</p><p>栗子：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">dhcp enable</span><br><span class="line">配IP</span><br><span class="line">ip pool vlan100//pool池创建</span><br><span class="line"> gateway-<span class="built_in">list</span> <span class="number">192.168</span><span class="number">.100</span><span class="number">.254</span> //网关</span><br><span class="line"> network <span class="number">192.168</span><span class="number">.100</span><span class="number">.0</span> mask <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span> //地址段</span><br><span class="line"> excluded-ip-address <span class="number">192.168</span><span class="number">.100</span><span class="number">.99</span> //保留地址</span><br><span class="line"> lease day <span class="number">0</span> hour <span class="number">3</span> minute <span class="number">0</span> //设置租期</span><br><span class="line"> dns-<span class="built_in">list</span> <span class="number">114.114</span><span class="number">.114</span><span class="number">.114</span> //dns</span><br><span class="line"><span class="built_in">int</span> 端口</span><br><span class="line">DHCP select <span class="keyword">global</span></span><br></pre></td></tr></table></figure></li></ol><h4 id="中继"><a href="#中继" class="headerlink" title="中继"></a>中继</h4><ol><li>打开dhcp</li><li>进入端口配置ip</li><li>选择端口dhcp select relay</li><li>绑定服务器IPdhcp relay server-ip XXXX</li></ol><p>栗子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> 端口</span><br><span class="line">ip配置</span><br><span class="line">dhcp select relay</span><br><span class="line">dhcp relay server-ip XXXX</span><br></pre></td></tr></table></figure><h2 id="理论"><a href="#理论" class="headerlink" title="理论"></a>理论</h2><h3 id="私有地址"><a href="#私有地址" class="headerlink" title="私有地址"></a>私有地址</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d1c074d5-64bb-4a5e-93cf-b91c3f00a9f0.png" alt="image-20231019115628358"></p><p>A类：10.0.0.0到10.255.255.255是私有地址</p><p>B类：172.16.0.0到172.31.255.255是私有地址</p><p>C类：192.168.0.0到192.168.255.255是私有地址。</p><p><strong>注意看这里D是192.162.10.3不是192.168.10.3</strong></p><h3 id="广播地址"><a href="#广播地址" class="headerlink" title="广播地址"></a>广播地址</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20d03070-50c2-4162-ac27-9e2fca7a4665.png" alt="image-20231019120106587"></p><p>将255.255.255.240展开可得1111 1111 1111 1111 1111 1111 1111 0000</p><p>将132.119.100.200展开可得132.119.100.1100 1000，将最后得1000替换成1111，得到11001111&#x3D;207</p><h3 id="DHCP中继和DHCP服务器之间交互的报文为？"><a href="#DHCP中继和DHCP服务器之间交互的报文为？" class="headerlink" title="DHCP中继和DHCP服务器之间交互的报文为？"></a>DHCP中继和DHCP服务器之间交互的报文为？</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/add31c09-9545-4154-a6ab-63f9c67fff52.png" alt="image-20231019121228700"></p><p>抓个包发现使用的是unicast报文</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a11c0ff2-897d-4233-bf90-5e07efe99288.png" alt="image-20231019121442316"></p><p>1.单播（unicast）：网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话，那么用网络技术的术语来描述就是“单播”，此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用，网络上绝大部分的数据都是以单播的形式传输的，只是一般网络用户不知道而已。例如，你在收发电子邮件、浏览网页时，必须与邮件服务器、Web服务器建立连接<strong>，此时使用的就是单播数据传输方式。但是通常使用“点对点通信”（Point to Point）代替“单播”</strong>，因为“单播”一般与“多播”和“广播”相对应使用。</p><p>2.多播（multicast）：“<strong>多播”也可以称为“组播”</strong>，在网络技术的应用并不是很多，<strong>网上视频会议、网上视频点播特别适合采用多播方式</strong>。因为如果采用单播方式，逐个节点传输，有多少个目标节点，就会有多少次传送过程，这种方式显然效率极低，是不可取的；如果采用不区分目标、全部发送的广播方式，虽然一次可以传送完数据，但是显然达不到区分特定数据接收对象的目的。采用多播方式，既可以实现一次传送所有目标节点的数据，也可以达到只对特定对象传送数据的目的。 　　<strong>IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址，即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。</strong> </p><p>3.广播（broadcast）：“广播”在网络中的应用较多，<strong>如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的</strong>。但是同单播和多播相比，广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧，在会场上只能有一个人发言，想象一下如果所有的人同时都用麦克风发言，那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴，一般的交换机也没有这一功能，不过现在有的网络交换机（如全向的QS系列交换机）也有过滤广播风暴功能了，路由器本身就有隔离广播风暴的作用。 　　广播风暴不能完全杜绝，但是只能在同一子网内传播，就好像喇叭的声音只能在同一会场内传播一样，因此在由几百台甚至上千台电脑构成的大中型局域网中，一般进行子网划分，就像将一个大厅用墙壁隔离成许多小厅一样，以达到隔离广播风暴的目的。 　　在IP网络中，广播地址用IP地址“255.255.255.255”来表示，这个IP地址代表同一子网内所有的IP地址。</p><ol start="4"><li>任播：Anycast 是一种为一组端点提供多个路由路径的技术，<strong>每个端点都分配有相同的 IP 地址</strong>。 组中的每个设备在网络上通告相同的地址，路由协议用于选择最佳目的地。<strong>Anycast 主要可以用于扩展无状态服务，例如 DNS 或 HTTP，方法是将多个节点放在同一 IP 地址后面，并使用等价多路径 (ECMP) 路由来引导这些节点之间的流量。</strong> 任播与单播不同，单播中每个端点都有自己独立的 IP 地址。</li></ol><h3 id="osi七层模型及其功能"><a href="#osi七层模型及其功能" class="headerlink" title="osi七层模型及其功能"></a>osi七层模型及其功能</h3><p>物理层-数据链路层-网络层-传输层-会话层-表达层-应用层</p><h4 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h4><h5 id="物理层"><a href="#物理层" class="headerlink" title="物理层"></a>物理层</h5><p><strong>规定通信设备的机械的、电气的、功能的和过程的特性，用以建立、维护和拆除物理链路连接</strong>。具体地讲，机械 特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率 距离限制等;功能特性是指对各个信号先分配确切的信号含义，即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组 操作规程，是指在物理连接的建立、维护、交换信息是，DTE和DCE双放在各电路上的动作系列。在这一层，数据的单位称为比特(bit)。属于物理层定义的典型规范代表包括：EIA&#x2F;TIA RS-232、EIA&#x2F;TIA RS-449、V.35、RJ-45等。</p><h5 id="数据链路层"><a href="#数据链路层" class="headerlink" title="数据链路层"></a>数据链路层</h5><p>在物理层提供比特流服务的基础上<strong>，建立相邻结点之间的数据链路，通过差错控制提供数据帧(Frame)在信道上无差错的传输，并进行各电路上的动作系列</strong>。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括：物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层，数据的单位称为帧(frame)。数据链路层协议的代表包括：SDLC、HDLC、PPP、STP、帧中继等。</p><h5 id="网络层"><a href="#网络层" class="headerlink" title="网络层"></a>网络层</h5><p>在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路，也可能还要经过很多通信子网。<strong>网络层的任务就是选择合适的网间路由和交换结点， 确保数据及时传送</strong>。网络层将数据链路层提供的帧组成数据包，包中封装有网络层包头，其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。如 果你在谈论一个IP地址，那么你是在处理第3层的问题，这是“数据包”问题，而不是第2层的“帧”。IP是第3层问题的一部分，此外还有一些路由协议和地 址解析协议(ARP)。有关路由的一切事情都在这第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。在这一层，数据的单位称为数据包(packet)。网络层协议的代表包括：IP、IPX、RIP、OSPF等。</p><h5 id="传输层"><a href="#传输层" class="headerlink" title="传输层"></a>传输层</h5><p>第4层的数据单元也称作数据包(packets)。但是，当你谈论TCP等具体的协议时又有特殊的叫法，TCP的数据单元称为段 (segments)而UDP协议的数据单元称为“数据报(datagrams)”。这<strong>个层负责获取全部信息，因此，它必须跟踪数据单元碎片、乱序到达的 数据包和其它在传输过程中可能发生的危险</strong>。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中 传输层对上层屏蔽了通信传输系统的具体细节。传输层协议的代表包括：TCP、UDP、SPX等。</p><h5 id="会话层"><a href="#会话层" class="headerlink" title="会话层"></a>会话层</h5><p>这一层也可以称为会晤层或对话层，在会话层及以上的高层次中，数据传送的单位不再另外命名，而是统称为报文。<strong>会话层不参与具体的传输，它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。</strong><u>如服务器验证用户登录便是由会话层完成的</u></p><h5 id="表示层"><a href="#表示层" class="headerlink" title="表示层"></a>表示层</h5><p>它主要负责<strong>数据的格式化、编码、加密解密以及压缩解压缩</strong>等处理，以确<strong>保数据在不同系统之间的可靠传输和正确解析。</strong></p><h5 id="应用层"><a href="#应用层" class="headerlink" title="应用层"></a>应用层</h5><p><strong>应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括：Telnet、FTP、HTTP、SNMP等。</strong></p><h4 id="各层用到的协议"><a href="#各层用到的协议" class="headerlink" title="各层用到的协议"></a>各层用到的协议</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/67a3751e-c05a-4498-ab9a-47a1a3fb2388.webp" alt="img"></p><h3 id="交换机路由表学习"><a href="#交换机路由表学习" class="headerlink" title="交换机路由表学习"></a>交换机路由表学习</h3><p>交换机收到一个帧会记录相应的mac地址和接口，vlan id 应该是不会修改或者分配的</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/72717ba5-2a92-4516-8203-d930c17e7909.png" alt="image-20231019124501220"></p><h3 id="DHCP的工作模式和端口号"><a href="#DHCP的工作模式和端口号" class="headerlink" title="DHCP的工作模式和端口号"></a>DHCP的工作模式和端口号</h3><p><strong>工作模式是UDP，服务器端口号为67，客户端的端口号为68</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/72717ba5-2a92-4516-8203-d930c17e7909.png" alt="image-20231019124804462"></p><blockquote><p>[!NOTE]<br>这里的图片暂未迁移归档，请在本地 Typora 中查看。</p></blockquote><p>（false）</p><h3 id="IPv6"><a href="#IPv6" class="headerlink" title="IPv6"></a>IPv6</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/bafab335-e3f2-4b93-9ce2-715181d4741a.png" alt="image-20231019125228430"></p><p>不是点分而是冒号16进制</p><h3 id="telnet"><a href="#telnet" class="headerlink" title="telnet"></a>telnet</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/7efb2dc6-56da-44fa-8c4b-95cf9718c8d7.png" alt="image-20231019125316193"></p><p><strong>默认端口号是23号</strong></p><h3 id="IGP（内部网关协议）和EDP（外部网关协议）"><a href="#IGP（内部网关协议）和EDP（外部网关协议）" class="headerlink" title="IGP（内部网关协议）和EDP（外部网关协议）"></a>IGP（内部网关协议）和EDP（外部网关协议）</h3><p>IGP：RIP，OSPF，ISIS</p><p>EDP：BGP</p><h3 id="链路聚合"><a href="#链路聚合" class="headerlink" title="链路聚合"></a>链路聚合</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cfa5f729-03ed-4e0c-b0cf-9d4440cc84f8.png" alt="image-20231019131130197"></p><h4 id="模式"><a href="#模式" class="headerlink" title="模式"></a>模式</h4><p>手工分担，LACP（自动）</p><h4 id="优点"><a href="#优点" class="headerlink" title="优点"></a>优点</h4><p>实现增加链路的带宽，提高可靠性，实现负载分担</p><p>DHCP报文（主机—服务器）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d2f20402-93ad-43be-b6ae-26debb1c68be.png" alt="image-20231019132115252"></p><p>实验抓包发现真是这样</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/214f6d69-4c53-49ed-8229-735f356e5faa.png" alt="image-20231019132057721"></p><p>ip分配过程</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/79fd685d-bf6a-42af-b192-d78e7ffbd003.png" alt="image-20231019132301021"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;ict第一次考核总结&quot;&gt;&lt;a href=&quot;#ict第一次考核总结&quot; class=&quot;headerlink&quot; title=&quot;ict第一次考核总结&quot;&gt;&lt;/a&gt;ict第一次考核总结&lt;/h1&gt;&lt;h2 id=&quot;实验&quot;&gt;&lt;a href=&quot;#实验&quot; class=&quot;headerli</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>2024ict寒假任务</title>
    <link href="http://blog.wenmozhu.de5.net/2024/03/30/2024ict%E5%AF%92%E5%81%87%E4%BB%BB%E5%8A%A1/"/>
    <id>http://blog.wenmozhu.de5.net/2024/03/30/2024ict%E5%AF%92%E5%81%87%E4%BB%BB%E5%8A%A1/</id>
    <published>2024-03-30T08:38:37.000Z</published>
    <updated>2026-09-09T10:57:22.159Z</updated>
    
    <content type="html"><![CDATA[<h1 id="2024ict寒假任务"><a href="#2024ict寒假任务" class="headerlink" title="2024ict寒假任务"></a>2024ict寒假任务</h1><h2 id="ensp部分"><a href="#ensp部分" class="headerlink" title="ensp部分"></a>ensp部分</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224012013720.png" alt="image-20240224012013720"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//命令历史</span></span><br><span class="line">vlan batch <span class="number">10</span> <span class="number">20</span> <span class="number">30</span> <span class="number">40</span> <span class="number">71</span> <span class="number">61</span> <span class="number">72</span> <span class="number">62</span> <span class="number">100</span> <span class="number">200</span></span><br><span class="line">  <span class="comment">//链路聚合  </span></span><br><span class="line">  <span class="type">int</span> Eth-Trunk <span class="number">1</span></span><br><span class="line">  trunkport GigabitEthernet <span class="number">0</span>/<span class="number">0</span>/<span class="number">6</span></span><br><span class="line">  trunkport GigabitEthernet <span class="number">0</span>/<span class="number">0</span>/<span class="number">7</span></span><br><span class="line">    <span class="comment">//接入层设置链路类型</span></span><br><span class="line"><span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">    port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">40</span></span><br><span class="line">        <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">3</span></span><br><span class="line">    port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">40</span></span><br><span class="line">        <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">    port link-type access</span><br><span class="line"> port <span class="keyword">default</span> vlan <span class="number">40</span></span><br><span class="line">    <span class="comment">//汇聚层设置链路类型（注意vlan 20 和30可以互通）</span></span><br><span class="line">    <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">     port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">10</span></span><br><span class="line">        <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">     port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">20</span> <span class="number">30</span></span><br><span class="line">    <span class="comment">//聚合链路设置</span></span><br><span class="line">    </span><br><span class="line">interface Eth-Trunk1</span><br><span class="line"> port link-type trunk</span><br><span class="line"> port trunk allow-pass vlan <span class="number">10</span> <span class="number">20</span> <span class="number">30</span> <span class="number">40</span> <span class="number">200</span></span><br><span class="line"><span class="comment">//服务器的交换机链路状态</span></span><br><span class="line">    sw8:</span><br><span class="line">vlan batch <span class="number">17</span> <span class="number">77</span></span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">77</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">3</span></span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">17</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">100</span></span><br><span class="line"></span><br><span class="line">    sw7:</span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">3</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">  port link-type trunk</span><br><span class="line">  port trunk allow-pass vlan <span class="number">10</span> <span class="number">20</span> <span class="number">30</span> <span class="number">40</span> <span class="number">200</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  port link-type access</span><br><span class="line">  port <span class="keyword">default</span> vlan <span class="number">200</span></span><br><span class="line"><span class="comment">//stp配置</span></span><br><span class="line">  <span class="comment">//sw5</span></span><br><span class="line">  stp region-configuration</span><br><span class="line">  region-name monika</span><br><span class="line">  instance <span class="number">10</span> vlan <span class="number">10</span></span><br><span class="line">  instance <span class="number">20</span> vlan <span class="number">20</span> <span class="number">30</span></span><br><span class="line">  instance <span class="number">40</span> vlan <span class="number">40</span></span><br><span class="line">  instance <span class="number">1</span> vlan <span class="number">100</span></span><br><span class="line">  active region-configuration</span><br><span class="line"><span class="comment">//根桥设置,sw1-4和sw7不配置</span></span><br><span class="line">sw5：</span><br><span class="line">stp instance <span class="number">2</span> root secondary</span><br><span class="line">stp instance <span class="number">10</span> root primary</span><br><span class="line">stp instance <span class="number">20</span> root primary</span><br><span class="line">stp instance <span class="number">40</span> root secondary</span><br><span class="line">    sw6：</span><br><span class="line">      stp instance <span class="number">2</span> root pri</span><br><span class="line">stp instance <span class="number">10</span> root secondary</span><br><span class="line">stp instance <span class="number">20</span> root secondary</span><br><span class="line">stp instance <span class="number">40</span> root pri</span><br><span class="line">      <span class="comment">//虚拟接口设置</span></span><br><span class="line">  <span class="type">int</span> vlanif <span class="number">40</span></span><br><span class="line">  ip ad <span class="number">192.168</span><span class="number">.40</span><span class="number">.5</span> <span class="number">24</span></span><br><span class="line">  dis th</span><br><span class="line">  <span class="type">int</span> vlanif <span class="number">200</span></span><br><span class="line">  ip ad <span class="number">192.168</span><span class="number">.200</span><span class="number">.5</span> <span class="number">24</span></span><br><span class="line">  <span class="type">int</span> vlanif <span class="number">61</span></span><br><span class="line">  ip ad <span class="number">192.168</span><span class="number">.61</span><span class="number">.5</span> <span class="number">24</span></span><br><span class="line">  <span class="type">int</span> vlanif <span class="number">71</span></span><br><span class="line">  ip ad <span class="number">192.168</span><span class="number">.71</span><span class="number">.5</span> <span class="number">24</span></span><br><span class="line"><span class="comment">//路由器配置ip</span></span><br><span class="line">      ar7：</span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.71</span><span class="number">.7</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.72</span><span class="number">.7</span> <span class="number">24</span></span><br><span class="line">       <span class="type">int</span> g3/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.67</span><span class="number">.7</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.78</span><span class="number">.7</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g4/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.77</span><span class="number">.7</span> <span class="number">24</span></span><br><span class="line">      </span><br><span class="line">        ar6：</span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.62</span><span class="number">.6</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.61</span><span class="number">.6</span> <span class="number">24</span></span><br><span class="line">       <span class="type">int</span> g3/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.67</span><span class="number">.6</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">2</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.68</span><span class="number">.6</span> <span class="number">24</span></span><br><span class="line">      <span class="type">int</span> g4/<span class="number">0</span>/<span class="number">0</span></span><br><span class="line">      ip ad <span class="number">192.168</span><span class="number">.17</span><span class="number">.6</span> <span class="number">24</span></span><br><span class="line">      </span><br><span class="line">      <span class="comment">//配置vrrp</span></span><br><span class="line"> interface Vlanif10</span><br><span class="line"> vrrp vrid <span class="number">10</span> virtual-ip <span class="number">192.168</span><span class="number">.10</span><span class="number">.254</span></span><br><span class="line">      。。。。。</span><br><span class="line">      <span class="comment">//配置dhcp</span></span><br><span class="line">      <span class="comment">//服务器</span></span><br><span class="line">      ip pool vlan10</span><br><span class="line"> gateway-<span class="built_in">list</span> <span class="number">192.168</span><span class="number">.10</span><span class="number">.254</span> </span><br><span class="line"> network <span class="number">192.168</span><span class="number">.10</span><span class="number">.0</span> mask <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span> </span><br><span class="line"> excluded-ip-address <span class="number">192.168</span><span class="number">.10</span><span class="number">.5</span> <span class="number">192.168</span><span class="number">.10</span><span class="number">.6</span> </span><br><span class="line">      ip pool vlan40</span><br><span class="line"> gateway-<span class="built_in">list</span> <span class="number">192.168</span><span class="number">.40</span><span class="number">.254</span> </span><br><span class="line"> network <span class="number">192.168</span><span class="number">.40</span><span class="number">.0</span> mask <span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span> </span><br><span class="line"> excluded-ip-address <span class="number">192.168</span><span class="number">.40</span><span class="number">.5</span> <span class="number">192.168</span><span class="number">.40</span><span class="number">.6</span> </span><br><span class="line">      <span class="comment">//中继</span></span><br><span class="line">      dhcp en</span><br><span class="line"></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">10</span></span><br><span class="line">        dhcp select relay</span><br><span class="line">  dhcp relay server-ip <span class="number">192.168</span><span class="number">.200</span><span class="number">.55</span></span><br><span class="line"></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">20</span></span><br><span class="line">        dhcp select relay</span><br><span class="line">  dhcp relay server-ip <span class="number">192.168</span><span class="number">.200</span><span class="number">.55</span></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">30</span></span><br><span class="line">        dhcp select relay</span><br><span class="line">  dhcp relay server-ip <span class="number">192.168</span><span class="number">.200</span><span class="number">.55</span></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">40</span></span><br><span class="line">        dhcp select relay</span><br><span class="line">  dhcp relay server-ip <span class="number">192.168</span><span class="number">.200</span><span class="number">.55</span></span><br><span class="line"><span class="comment">//ospf配置</span></span><br><span class="line">      <span class="comment">//交换机5，6</span></span><br><span class="line">      ospf</span><br><span class="line">      ar <span class="number">0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.62</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.72</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">            ar <span class="number">10</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.10</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  ar <span class="number">20</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.20</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  ar <span class="number">30</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.30</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  ar <span class="number">40</span></span><br><span class="line">  network <span class="number">192.168</span><span class="number">.40</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line"><span class="comment">//路由器r7</span></span><br><span class="line">      ospf</span><br><span class="line">      ar <span class="number">0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.71</span><span class="number">.7</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.72</span><span class="number">.7</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">        network <span class="number">192.168</span><span class="number">.67</span><span class="number">.7</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.78</span><span class="number">.7</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.87</span><span class="number">.7</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line"><span class="comment">//路由器r6</span></span><br><span class="line">      ospf</span><br><span class="line">      ar <span class="number">0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.61</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.62</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">        network <span class="number">192.168</span><span class="number">.67</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.68</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.86</span><span class="number">.6</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      <span class="comment">//交换机8</span></span><br><span class="line">                      ospf</span><br><span class="line">      ar <span class="number">0</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.87</span><span class="number">.8</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.86</span><span class="number">.8</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      ar <span class="number">100</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.100</span><span class="number">.8</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      <span class="comment">//ar8</span></span><br><span class="line">      ospf</span><br><span class="line">      ar <span class="number">0</span></span><br><span class="line">       network <span class="number">192.168</span><span class="number">.78</span><span class="number">.8</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">      network <span class="number">192.168</span><span class="number">.68</span><span class="number">.8</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">   </span><br><span class="line">      ip route-<span class="type">static</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">0</span> <span class="number">114.114</span><span class="number">.114</span><span class="number">.9</span> preference <span class="number">120</span></span><br><span class="line">      ip route-<span class="type">static</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span> <span class="number">0</span> <span class="number">114.114</span><span class="number">.115</span><span class="number">.9</span></span><br><span class="line">      <span class="comment">//bfd配置</span></span><br><span class="line">      <span class="comment">//sw6</span></span><br><span class="line"> bfd tor8 bind peer-ip <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span> source-ip <span class="number">6.6</span><span class="number">.6</span><span class="number">.6</span></span><br><span class="line"> discriminator local <span class="number">66</span></span><br><span class="line"> discriminator remote <span class="number">68</span></span><br><span class="line"> min-tx-interval <span class="number">100</span></span><br><span class="line"> min-rx-interval <span class="number">100</span></span><br><span class="line"> commit</span><br><span class="line">      <span class="comment">//r8</span></span><br><span class="line">            bfd tosw5 bind peer-ip <span class="number">5.5</span><span class="number">.5</span><span class="number">.5</span> source-ip <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span></span><br><span class="line"> discriminator local <span class="number">58</span></span><br><span class="line"> discriminator remote <span class="number">55</span></span><br><span class="line"> min-tx-interval <span class="number">100</span></span><br><span class="line"> min-rx-interval <span class="number">100</span></span><br><span class="line"> commit</span><br><span class="line">      </span><br><span class="line"></span><br><span class="line">      <span class="comment">//vrrp联动bfd</span></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">10</span></span><br><span class="line">  vrrp vrid <span class="number">10</span> track bfd-session <span class="number">55</span> reduced <span class="number">30</span></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">20</span></span><br><span class="line">  vrrp vrid <span class="number">20</span> track bfd-session <span class="number">55</span> reduced <span class="number">30</span></span><br><span class="line">  <span class="type">int</span> vlan <span class="number">30</span></span><br><span class="line">  vrrp vrid <span class="number">30</span> track bfd-session <span class="number">55</span> reduced <span class="number">30</span></span><br><span class="line"><span class="comment">//三层安全，pc1不允许互通其他</span></span><br><span class="line">  acl <span class="number">2001</span></span><br><span class="line">  rule <span class="number">5</span> deny source <span class="number">192.168</span><span class="number">.10</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  traffic-filter outbound acl <span class="number">2001</span></span><br><span class="line"><span class="comment">//pc2和3不能访问pc4</span></span><br><span class="line">       acl <span class="number">2002</span></span><br><span class="line">  rule deny source <span class="number">192.168</span><span class="number">.20</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">       rule deny source <span class="number">192.168</span><span class="number">.30</span><span class="number">.0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.255</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  traffic-filter outbound acl <span class="number">2002</span></span><br><span class="line">      <span class="comment">//pc2-4不能访问外网</span></span><br><span class="line">      <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">      undo traffic-filter outbound acl <span class="number">2001</span></span><br><span class="line">  acl <span class="number">2001</span></span><br><span class="line">  rule <span class="number">10</span> deny source <span class="number">114.114</span><span class="number">.116</span><span class="number">.1</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span></span><br><span class="line">  <span class="type">int</span> g0/<span class="number">0</span>/<span class="number">1</span></span><br><span class="line">  traffic-filter outbound acl <span class="number">2001</span></span><br><span class="line"><span class="comment">//telnet配置</span></span><br><span class="line">      telnet server enable</span><br><span class="line">      user-interface vty <span class="number">0</span> <span class="number">4</span></span><br><span class="line">      authentication-mode aaa</span><br><span class="line">      user privilege level <span class="number">15</span></span><br><span class="line">      q</span><br><span class="line">      aaa</span><br><span class="line">        local-user monika password cipher <span class="number">357159</span></span><br><span class="line"> </span><br><span class="line"> local-user monika privilege level <span class="number">15</span></span><br><span class="line"> local-user monika service-type telnet</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>rule 5 permit source 192.168.10.0 0.0.0.255<br> rule 10 deny</p><p>vlan设计：</p><p>访客区规划到单独的vlan</p><p>营销和行政属于不同vlan</p><p>研发属于不同vlan</p><p>明确放行哪些vlan，不能all</p><p>配置管理vlan</p><p>二层消除环路：</p><p>使用mstp技术实现防环，域名为jian</p><p>根桥集中在汇聚层，vrrp的master和根桥一样</p><p>互连的两条使用e-thunk（图）</p><p>三层网络设计:</p><p>ip和vlan对应</p><p>大部分ip由dhcp服务器分配</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224002655473.png" alt="image-20240224002655473"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224002945881.png" alt="image-20240224002945881"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224003518089.png" alt="image-20240224003518089"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224011722302.png" alt="image-20240224011722302"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224011820990.png"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240224011855910.png" alt="image-20240224011855910"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240225124544740.png" alt="image-20240225124544740"></p><h2 id="Linux部分"><a href="#Linux部分" class="headerlink" title="Linux部分"></a>Linux部分</h2><h3 id="任务一：创建一个Linux用户"><a href="#任务一：创建一个Linux用户" class="headerlink" title="任务一：创建一个Linux用户"></a>任务一：创建一个Linux用户</h3><h4 id="1-新增用户"><a href="#1-新增用户" class="headerlink" title="1.新增用户"></a>1.新增用户</h4><h5 id="1-1-adduser"><a href="#1-1-adduser" class="headerlink" title="1.1 adduser"></a>1.1 adduser</h5><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">创建命令：sudo adduser monika</span><br><span class="line">删除命令：sudo deluser monika</span><br></pre></td></tr></table></figure><p><strong>结果截图</strong></p><p>*要求输入一堆信息</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f2317f02-fb59-4ecb-bc0e-7db65bdae5ca.png" alt="image-20240222213429728"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240222213811715.png" alt="image-20240222213811715"></p><h5 id="1-2-useradd"><a href="#1-2-useradd" class="headerlink" title="1.2 useradd"></a>1.2 useradd</h5><p>*不会创建主目录和指定shell版本</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">创建命令：sudo useradd yuri</span><br><span class="line">删除命令：sudo userdel yuri</span><br><span class="line">为用户指定登录密码：sudo passwd <span class="number">123456</span></span><br><span class="line"><span class="comment">//需要自己命令指定目录和shell</span></span><br><span class="line">为用户指定命令解释程序(通常为/bin/bash)：sudo usermod -s /bin/bash yuri</span><br><span class="line">为用户指定用户主目录：sudo useradd -d /home/yuri yuri -m</span><br></pre></td></tr></table></figure><p><strong>带参数的useradd命令</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">-d： 指定用户的主目录</span><br><span class="line"></span><br><span class="line">-m： 如果存在不再创建，但是此目录并不属于新创建用户；如果主目录不存在，则强制创建； -m和-d一块使用。</span><br><span class="line"></span><br><span class="line">-s： 指定用户登录时的shell版本</span><br><span class="line"></span><br><span class="line">-M： 不创建主目录</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>栗子：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/76807855-37ae-4a1a-8528-f854fbc877eb.png" alt="image-20240222164042914"></p><p><strong>结果截图</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240222213916686.png" alt="image-20240222213916686"></p><h5 id="2-删除用户"><a href="#2-删除用户" class="headerlink" title="2.删除用户"></a>2.删除用户</h5><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//deluser</span></span><br><span class="line">只删除用户：sudo deluser tt</span><br><span class="line">连同用户的主目录和邮箱一起删除：sudo deluser --remove-home tt</span><br><span class="line">连同用户拥有的所有文件删除：sudo deluser --remove-all-files tt</span><br><span class="line"><span class="comment">//userdel</span></span><br><span class="line">只删除用户：sudo userdel tt</span><br><span class="line">连同用户主目录一起删除：sudo derlser -r tt</span><br></pre></td></tr></table></figure><h3 id="任务二：爱心代码"><a href="#任务二：爱心代码" class="headerlink" title="任务二：爱心代码"></a>任务二：爱心代码</h3><p>请看vcr</p><h3 id="任务三：-安装Linux版本的HDFS分布式存储并设置伪分布式集群安装（单机运行）"><a href="#任务三：-安装Linux版本的HDFS分布式存储并设置伪分布式集群安装（单机运行）" class="headerlink" title="任务三： 安装Linux版本的HDFS分布式存储并设置伪分布式集群安装（单机运行）"></a>任务三： 安装Linux版本的HDFS分布式存储并设置伪分布式集群安装（单机运行）</h3><h4 id="cat一份文件"><a href="#cat一份文件" class="headerlink" title="cat一份文件"></a>cat一份文件</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240223104714710.png" alt="image-20240223104714710"></p><h4 id="查看Datanode的工作状态"><a href="#查看Datanode的工作状态" class="headerlink" title="查看Datanode的工作状态"></a>查看Datanode的工作状态</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20240223105018889.png" alt="image-20240223105018889"></p><p>modify是文件内容变换，change是文件属性变化，当Atime在Mtime和Ctime之前才会被修改</p><p>access</p><p>change</p><p>modify</p><h2 id="拷打环节"><a href="#拷打环节" class="headerlink" title="拷打环节"></a>拷打环节</h2><h3 id="vrrp（网络层，ip报文封装，112）"><a href="#vrrp（网络层，ip报文封装，112）" class="headerlink" title="vrrp（网络层，ip报文封装，112）"></a>vrrp（网络层，ip报文封装，112）</h3><ul><li><p>VRRP路由器（VRRP Router）：运行VRRP协议的设备，它可能属于一个或多个虚拟路由器。</p></li><li><p>虚拟路由器（Virtual Router）：又称VRRP备份组，由一个Master设备和多个Backup设备组成，被当作一个共享局域网内主机的缺省网关。</p></li><li><p>Master路由器（Virtual Router Master）：承担转发报文任务的VRRP设备。</p></li><li><p>Backup路由器（Virtual Router Backup）：一组没有担转发任务的VRRP设备，当Master设备出现故障时，它们将通过竞选成为新的Master设备。</p></li><li><p>VRID：虚拟路由器的标识。</p></li><li><p>虚拟IP地址(Virtual IP Address)：虚拟路由器的IP地址，一个虚拟路由器可以有一个或多个IP地址，由用户配置。</p></li><li><p>IP地址拥有者（IP Address Owner）：如果一个VRRP设备将虚拟路由器IP地址作为真实的接口地址，则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的，通常它将成为Master。</p></li><li><p>虚拟MAC地址（Virtual MAC Address）：虚拟路由器根据虚拟路由器ID生成的MAC地址。一个虚拟路由器拥有一个虚拟MAC地址，<strong>格式为：00-00-5E-00-01-{VRID}(VRRP for IPv4)；00-00-5E-00-02-{VRID}(VRRP for IPv6)。</strong>当虚拟路由器回应ARP请求时，使用虚拟MAC地址，而不是接口的真实MAC地址。</p></li></ul><h4 id="VRRP报文："><a href="#VRRP报文：" class="headerlink" title="VRRP报文："></a>VRRP报文：</h4><p>VRRP协议报文用来将Master设备的优先级和状态通告给同一备份组的所有Backup设备。</p><p>VRRP<strong>协议报文封装在IP报文</strong>中，发送到分配给VRRP的IP组播地址。在IP报文头中，源地址为发送报文接口的主IP地址（不是虚拟IP地址），<strong>目的地址是224.0.0.18，TTL是255，协议号是112。</strong></p><h4 id="VRRP状态机："><a href="#VRRP状态机：" class="headerlink" title="VRRP状态机："></a>VRRP状态机：</h4><p>VRRP协议中定义了三种状态机：初始状态（Initialize）、活动状态（Master）、备份状态（Backup）。其中，只有处于Master状态的设备才可以转发那些发送到虚拟IP地址的报文。</p><h4 id="VRRP的工作过程："><a href="#VRRP的工作过程：" class="headerlink" title="VRRP的工作过程："></a>VRRP的工作过程：</h4><p>VRRP备份组中的设备根据优先级选举出Master。Master设备通过发送<strong>免费ARP报文</strong>，将虚拟MAC地址通知给与它连接的设备或者主机，从而承担报文转发任务。</p><p>Master设备周期性向备份组内所有Backup设备<strong>发送VRRP通告报文，以公布其配置信息（优先级等）和工作状况。</strong><br>如果Master设备出现故障，VRRP备份组中的Backup设备将根据优先级重新选举新的Master。</p><p>VRRP<strong>备份组状态切换时</strong>，Master设备由一台设备切换为另外一台设备，新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的<strong>免费ARP报文</strong>，刷新与它连接的主机或设备中的MAC表项，从而把用户流量引到新的Master设备上来，整个过程对用户完全透明。</p><p>原Master设备故障恢复时，若该设备为IP地址拥有者（优先级为255），将直接切换至Master状态。若该设备优先级小于255，将首先切换至Backup状态，且其优先级恢复为故障前配置的优先级。</p><p>Backup设备的优先级高于Master设备时，由Backup设备的工作方式（抢占方式和非抢占方式）决定是否重新选举Master。</p><p><strong>抢占模式：在抢占模式下，如果Backup设备的优先级比当前Master设备的优先级高，则主动将自己切换成Master。</strong></p><p><strong>非抢占模式：在非抢占模式下，只要Master设备没有出现故障，Backup设备即使随后被配置了更高的优先级也不会成为Master设备。</strong></p><h3 id="traffic-filter"><a href="#traffic-filter" class="headerlink" title="traffic-filter"></a>traffic-filter</h3><h4 id="acl分类"><a href="#acl分类" class="headerlink" title="acl分类"></a>acl分类</h4><ul><li>基本acl，2000-2999</li><li>高级acl，3000-3999</li><li>二层acl，4000-4999</li><li>用户自定义acl，5000-5999</li><li>用户acl，6000-6999</li></ul><h4 id="traffic-policy对比！！！！"><a href="#traffic-policy对比！！！！" class="headerlink" title="traffic-policy对比！！！！"></a>traffic-policy对比！！！！</h4><ul><li>Traffic Policy：Traffic Policy主要用于对网络中的流量进行管理和控制。Traffic Policy可以设置如下参数：端口带宽、限速、限流、优先级、队列等。通过Traffic Policy，管理员可以按照自己的需求来规划和配置网络带宽资源，以保证业务的正常运行和网络的高效利用。</li><li>Traffic Filter：Traffic Filter主要用于对网络中的数据包进行过滤和拦截。Traffic Filter可以根据IP地址、源端口、目标端口、协议类型等参数对数据包进行匹配，并选择性地允许或者禁止其通过特定的端口或者路由器。Traffic Filter通常用于实现网络安全防护和数据隔离等功能。</li></ul><h4 id="traffic-policy怎么配置！！！"><a href="#traffic-policy怎么配置！！！" class="headerlink" title="traffic-policy怎么配置！！！"></a>traffic-policy怎么配置！！！</h4><h4 id="DHCP中继"><a href="#DHCP中继" class="headerlink" title="DHCP中继"></a>DHCP中继</h4><p> DHCP客户使用IP广播来寻找同一网段上的DHCP服务器。当服务器和客户段处在不同网段，即被路由器分割开来时，路由器是不会转发这样广播包的。因此可能需要在每个网段上设置一个DHCP服务器，虽然DHCP只消耗很小的一部分资源的，但多个 DHCP服务器，毕竟要带来管理上的不方便。DHCP中继的使用使得一个DHCP服务器同时为多个网段服务成为可能，配置DHCP中继的网络设备可以在不同网段上从DHCP总服务器获取IP地址分配给下面的各主机，路由器或者三层交换机都可以充当DHCP中继</p><h4 id="dhcp工作原理"><a href="#dhcp工作原理" class="headerlink" title="dhcp工作原理"></a>dhcp工作原理</h4><ol><li>dhcp discover发现dhcp服务器</li><li>dhcp offer告诉对方可以提供ip</li><li>dhcp request 请求ip</li><li>dhcp ack 给ip</li></ol><p>除此之外还有4种报文</p><p>dhcp nak 服务器拒绝分配ip</p><p>dhcp release 主机不要ip了，给服务器说一声</p><p>dhcp decline 主机说这个ip用不了</p><p>dhcp inform不怎么用</p><h3 id="bfd（应用层协议，封装在udp中，3785）"><a href="#bfd（应用层协议，封装在udp中，3785）" class="headerlink" title="bfd（应用层协议，封装在udp中，3785）"></a>bfd（应用层协议，封装在udp中，3785）</h3><p><strong>BFD在两台网络设备上建立会话，用来检测网络设备间的双向转发路径，为上层应用服务</strong>。会话建立后会周期性地快速发送BFD报文，如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障，通知被服务的上层应用进行相应的处理。<br><strong>BFD协议本身没有邻居发现机制，BFD邻居的创建依赖于上层的应用</strong>。根据BFD会话建立过程可以将其分为动态BFD和静态BFD。</p><p><strong>动态BFD</strong>：是通过上层应用(例如OSPF)的邻居发现机制，有上层应用将邻居信息发送到BFD模块，BFD则根据接收到的邻居信息创建会话并建立自己的邻居。<br><strong>静态BFD</strong>：是通过静态配置手动添加对端的邻居信息来创建会话，静态BFD配置完后，会定时发送BFD控制报文。只有对端接口也开启BFD的情况下并对本端的BFD报文做出正确应答后，双方建立邻居信息。</p><p><strong>Echo报文采用UDP封装，目的端口号为3785，目的IP地址为发送接口的地址，源IP地址由配置产生（配置的源IP地址要避免产生ICMP重定向）。</strong></p><h4 id="状态机"><a href="#状态机" class="headerlink" title="状态机"></a>状态机</h4><ul><li><p>BSM_AdminDown   </p></li><li><p>BSM_Down             </p></li><li><p>BSM_Init        </p></li><li><p>BSM_Up</p><p>会话状态变化通过<strong>BFD报文的State字段传递</strong>，系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。</p><p><strong>BFD状态机的建立和拆除都采用三次握手机制。</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a21baf54-62bf-49c7-aa6e-25c352dfef7f.png" alt="在这里插入图片描述"></p><ul><li>互发down报文，收到对方的down后，迁移到init状态</li><li>互发init报文，收到对方的init报文后就迁移到UP</li></ul></li></ul><h4 id="mstp（二层协议）"><a href="#mstp（二层协议）" class="headerlink" title="mstp（二层协议）"></a>mstp（二层协议）</h4>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;2024ict寒假任务&quot;&gt;&lt;a href=&quot;#2024ict寒假任务&quot; class=&quot;headerlink&quot; title=&quot;2024ict寒假任务&quot;&gt;&lt;/a&gt;2024ict寒假任务&lt;/h1&gt;&lt;h2 id=&quot;ensp部分&quot;&gt;&lt;a href=&quot;#ensp部分&quot; cla</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>计算机网络笔记</title>
    <link href="http://blog.wenmozhu.de5.net/2023/10/14/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0/"/>
    <id>http://blog.wenmozhu.de5.net/2023/10/14/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0/</id>
    <published>2023-10-14T10:54:36.000Z</published>
    <updated>2026-09-09T10:57:23.670Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第一节：概述"><a href="#第一节：概述" class="headerlink" title="第一节：概述"></a><strong>第一节：概述</strong></h1><h2 id="1-1-计算机网络在信息时代的作用"><a href="#1-1-计算机网络在信息时代的作用" class="headerlink" title="1.1 计算机网络在信息时代的作用"></a>1.1 计算机网络在信息时代的作用</h2><h3 id="1-1-1-定义"><a href="#1-1-1-定义" class="headerlink" title="1.1.1 定义"></a>1.1.1 定义</h3><p>Internet是全球最大的，最重要的计算机网络，是计算机网络的一部分</p><h3 id="1-1-2特点"><a href="#1-1-2特点" class="headerlink" title="1.1.2特点"></a>1.1.2特点</h3><p>1.连通性（connectivity）2.资源共享（sharing）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716125923545.png" alt="image-20230716125923545"></p><h2 id="1-2-互联网概述"><a href="#1-2-互联网概述" class="headerlink" title="1.2 互联网概述"></a>1.2 互联网概述</h2><h3 id="1-2-1-网络的网络"><a href="#1-2-1-网络的网络" class="headerlink" title="1.2.1 网络的网络"></a>1.2.1 网络的网络</h3><p>网络&#x3D;节点（node）+链路（link）</p><p>链路有点抽象</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716131517681.png" alt="image-20230716131517681"></p><p>多个网络——》路由器连接——》更大的网络——》网络的网络——》互连网</p><p>更多的互连网覆盖全球连接成互联网</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716131956839.png" alt="image-20230716131956839"></p><h3 id="1-2-2-互联网基础结构发展的三个阶段"><a href="#1-2-2-互联网基础结构发展的三个阶段" class="headerlink" title="1.2.2 互联网基础结构发展的三个阶段"></a>1.2.2 互联网基础结构发展的三个阶段</h3><p>第一阶段（1965–1990）：1983年作为互联网的诞生时间，TCP&#x2F;IP协议成为APPANET的标准协议</p><p>第二阶段（1985–1993）：三级结构：主干网，地区网，校园网或者企业网</p><p>第三阶段（1993–至今）： 多层isp结构：主干isp，地区isp，本地isp</p><p>isp就是卖卡的运营商:smile:&#x2F;&#x2F;</p><p>（isp ix：互联网交换点）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716132040781.png" alt="image-20230716132040781"></p><p>cp就是b站这种</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716133419473.png" alt="image-20230716133419473"></p><p>*一些历史</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716133634489.png" alt="image-20230716133634489"></p><h3 id="1-2-3-互联网的标准化工作"><a href="#1-2-3-互联网的标准化工作" class="headerlink" title="1.2.3 互联网的标准化工作"></a>1.2.3 互联网的标准化工作</h3><p>管理金字塔：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716133852203.png" alt="image-20230716133852203"></p><p>发表格式：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716133959590.png" alt="image-20230716133959590"></p><p>标准化过程：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716134141548.png" alt="image-20230716134141548"></p><h2 id="1-3-互联网的组成"><a href="#1-3-互联网的组成" class="headerlink" title="1.3 互联网的组成"></a>1.3 互联网的组成</h2><h3 id="1-3-1互联网的边缘部分"><a href="#1-3-1互联网的边缘部分" class="headerlink" title="1.3.1互联网的边缘部分"></a>1.3.1互联网的边缘部分</h3><p>工作方式分：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716180923056.png" alt="image-20230716180923056"></p><p>核心（服务</p><p>边缘:终端系统，例如你的手机，电脑，是网络的尽头,不负责转发</p><h4 id="计算机之间的通信："><a href="#计算机之间的通信：" class="headerlink" title="计算机之间的通信："></a>计算机之间的通信：</h4><p>主机a的某个进程与主机b的某个进程进行通信</p><h4 id="通信方式："><a href="#通信方式：" class="headerlink" title="通信方式："></a>通信方式：</h4><p>1.客户-服务器方式（c&#x2F;s方式）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716182252086.png" alt="image-20230716182252086"></p><p>客户主动，服务被动，通信是双向的</p><p>特点：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716182549951.png" alt="image-20230716182549951"></p><p>2.对等连接方式（p2p方式–cs升级版）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716193447000.png" alt="image-20230716193447000"></p><p>既能请求又能提供服务，平等对等通信</p><h3 id="1-3-2-互联网的核心部分"><a href="#1-3-2-互联网的核心部分" class="headerlink" title="1.3.2*互联网的核心部分"></a>1.3.2*互联网的核心部分</h3><ul><li><p>复杂部分</p></li><li><p>连接边缘的主机</p><p>路由器（router）–&gt;实现分组交换的关键构件</p></li></ul><h4 id="电路交换"><a href="#电路交换" class="headerlink" title="电路交换"></a>电路交换</h4><h5 id="三个阶段："><a href="#三个阶段：" class="headerlink" title="三个阶段："></a>三个阶段：</h5><ul><li>建立连接：占用通信资源</li><li>通话：一直占用通信资源</li><li>连接释放：归还通信资源</li></ul><p>！！！要一直占用才算电路交换</p><h5 id="优点："><a href="#优点：" class="headerlink" title="优点："></a>优点：</h5><ol><li>通信时延小。因为通信线路为通信双方用户专用，数据直达，因此通信时延非常小，当<strong>连续传输大量数据</strong>时，这一优点非常明显。</li><li><strong>有序传输</strong>。因为通信双方之间只有一条专用的通信线路，数据只在这一条线路上传输，因此不存在失序问题。</li></ol><h5 id="缺点："><a href="#缺点：" class="headerlink" title="缺点："></a>缺点：</h5><p>1.<strong>建立连接时间长</strong>。电路交换的平均连接建立时间对计算机通信来说太长。</p><p>2.线路独占，使用<strong>效率低</strong>。电路交换一旦建立连接，物理通路就被通信双方独占，即使通信线路空闲，也不能够供其他用户使用，因而信道利用率很低。 </p><p>3.<strong>灵活性差</strong>。只要连接所建立的物理通路中的任何一点出现了故障，就必须重新拨号建立新的连接，这对十分紧急和重要的通信是很不利的。</p><p>4.难以规格化。电路交换时，数据直达，不同类型、不同规格、不同速率的终端很难相互进行通信，也难以在通信中进行差错控制。</p><h4 id="分组交换："><a href="#分组交换：" class="headerlink" title="分组交换："></a>分组交换：</h4><h5 id="特点："><a href="#特点：" class="headerlink" title="特点："></a>特点：</h5><ul><li>采用储存转发技术</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716200204320.png" alt="image-20230716200204320"></p><h5 id="工作方式"><a href="#工作方式" class="headerlink" title="工作方式"></a>工作方式</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716201153174.png" alt="image-20230716201153174"></p><ul><li>数据段前面添加首部就构成了分组（packet）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716200136812.png" alt="image-20230716200136812"></p><p>这个部分的不同称呼）））</p><p>物理层数据包: 比特流 (bit stream)<br>链路层数据包:帧 (frame)<br>网络层数据包: IP 数据报或分组 (packet)<br>运输层数据包: TCP 报文段 (segment) 或<br>UDP 用户数据报 (datagram)<br>应用层数据包: 报文 (message)</p><p>*首部由不同的协议决定</p><ul><li><p>接收到后去掉首部并且还原</p></li><li><p>每个分组独立选择传输路径</p></li></ul><h5 id="优点"><a href="#优点" class="headerlink" title="优点"></a>优点</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716201920058.png" alt="image-20230716201920058"></p><p>高效、灵活、迅速、可靠</p><h5 id="缺点"><a href="#缺点" class="headerlink" title="缺点"></a>缺点</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716202046591.png" alt="image-20230716202046591"></p><p>排队、带宽不确定、开销大</p><p>10个字节利用率为百分之90</p><h4 id="报文交换："><a href="#报文交换：" class="headerlink" title="报文交换："></a>报文交换：</h4><h5 id="优点：-1"><a href="#优点：-1" class="headerlink" title="优点："></a>优点：</h5><ol><li><strong>无需建立连接</strong>。报文交换不需要为通信双方预先建立一条专用的通信线路，不存在建立连接的时延，用户可以随时发送报文。</li><li><strong>动态分配线路</strong>。当发送方把报文传送给节点交换机时，节点交换机先存储整个报文，然后选择一条合适的空闲线路，将报文发送出去。</li><li><strong>可靠性。</strong>如果某条传输路径发送故障，会重新选择另一条路径传输数据，因此提高了传输的可靠性。</li><li><strong>提高线路利用率</strong>。通信双方不是固定占用一条通信线路，而是在不同的时间分段部分占用物理线路，因而大大提高了通信线路的利用率。</li></ol><h5 id="缺点-1"><a href="#缺点-1" class="headerlink" title="缺点"></a>缺点</h5><ol><li>引起了转发<strong>时延</strong>。这是因为报文在节点交换机上要<em>经历存储转发的过程</em>。</li><li>需要较大的存储缓存空间。这是因为报文交换<strong>对报文的大小没有限制</strong>。</li><li>需要传输额外的信息量。这是因为报文<strong>需要携带目的地址、源地址等信息。</strong></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716202236271.png" alt="image-20230716202236271"></p><p>直观体现分组交换的便利快捷</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230716202442974.png" alt="image-20230716202442974"></p><h2 id="1-4计算机在我国的发展"><a href="#1-4计算机在我国的发展" class="headerlink" title="1.4计算机在我国的发展"></a>1.4计算机在我国的发展</h2><p>*一些历史</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230717101308796.png" alt="image-20230717101308796"></p><p>cn规模最大的五个计算机网络</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230717101458456.png" alt="image-20230717101458456"></p><h2 id="1-5-计算机网络的类别"><a href="#1-5-计算机网络的类别" class="headerlink" title="1.5 计算机网络的类别"></a>1.5 计算机网络的类别</h2><h3 id="1-5-1-计算机网络的定义"><a href="#1-5-1-计算机网络的定义" class="headerlink" title="1.5.1 计算机网络的定义"></a>1.5.1 计算机网络的定义</h3><p>未统一定义，有通俗定义（怎么连接？怎么管理？怎么共享？）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230717103507953.png" alt="image-20230717103507953"></p><h3 id="1-5-2-几种不同类别的计算机网络"><a href="#1-5-2-几种不同类别的计算机网络" class="headerlink" title="1.5.2 几种不同类别的计算机网络"></a>1.5.2 几种不同类别的计算机网络</h3><ul><li>按作用范围分</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230717103752857.png" alt="image-20230717103752857"></p><ul><li>按使用者分</li></ul><p>公用网（public）和专用网(private)</p><ul><li>接入网</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230717104426936.png" alt="image-20230717104426936"></p><h2 id="1-6-计算机网络的性能"><a href="#1-6-计算机网络的性能" class="headerlink" title="1.6*计算机网络的性能"></a>1.6*计算机网络的性能</h2><h3 id="1-6-1-计算机网络的性能指标"><a href="#1-6-1-计算机网络的性能指标" class="headerlink" title="1.6.1* 计算机网络的性能指标"></a>1.6.1* 计算机网络的性能指标</h3><h4 id="1-速率（香农）"><a href="#1-速率（香农）" class="headerlink" title="1.速率（香农）"></a>1.速率（香农）</h4><ul><li>比特是成为信息的基本单位</li><li>速率指的是数据的传送速率，称为数据率或者比特率</li><li>单位：bit&#x2F;s  kbit&#x2F;s  Mbit&#x2F;s  Gbit&#x2F;s（速率的换算为10的三次方，数据量的换算为2的10次方）</li><li>为理想状态额定功率</li></ul><h4 id="2-带宽（bandwidth）"><a href="#2-带宽（bandwidth）" class="headerlink" title="2.带宽（bandwidth）"></a>2.带宽（bandwidth）</h4><p>频域与时域（？）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725171202338.png" alt="image-20230725171202338"></p><p>下载速度用字节表示，带宽用比特表示</p><p>指网络系统的通信<strong>链路</strong>（与信道或者传输媒体同意）传输数据的能力，即表征单位时间内从网络中的某一点到另一点所能通过的”<strong>最高数据率</strong>“。单位是bit&#x2F;s</p><h4 id="3-吞吐量（略）"><a href="#3-吞吐量（略）" class="headerlink" title="3.吞吐量（略）"></a>3.吞吐量（略）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725172027073.png" alt="image-20230725172027073"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725172045324.png" alt="image-20230725172045324"></p><p>吞吐量降低会感觉到时延</p><h4 id="4-时延（delay）"><a href="#4-时延（delay）" class="headerlink" title="4.时延（delay）"></a>4.时延（delay）</h4><h5 id="1-发送时延（终端）"><a href="#1-发送时延（终端）" class="headerlink" title="1.发送时延（终端）"></a>1.发送时延（终端）</h5><p>*数据从电脑等发送到网络上，与数据量和带宽有关(带宽提高发送时延降低)</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725175506604.png" alt="image-20230725175506604"></p><p>公式：<br>$$<br>发送时延&#x3D;数据帧长度(bit)&#x2F;发送速率(bit&#x2F;s)<br>$$<br>发射时延与传输距离没有关系</p><h5 id="2-传播时延（线路）"><a href="#2-传播时延（线路）" class="headerlink" title="2.传播时延（线路）"></a>2.传播时延（线路）</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725175843073.png" alt="image-20230725175843073"></p><p>传播时延与传播距离有关，与发送速率无关，因为一般来说速率是固定的</p><h5 id="3-处理时延和排队时延（路由器）"><a href="#3-处理时延和排队时延（路由器）" class="headerlink" title="3.处理时延和排队时延（路由器）"></a>3.处理时延和排队时延（路由器）</h5><p>*排队时延和处理时延是息息相关的</p><p>*当排队时延无限大时，数据会爆，这是很糟糕的情况</p><p>*处理时延是主机或路由器处理分组花的时间</p><p>*排队时延是排队等待处理的时间花费</p><h5 id="4-时延带宽积"><a href="#4-时延带宽积" class="headerlink" title="4.时延带宽积"></a>4.时延带宽积</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725181859712.png" alt="image-20230725181859712"></p><p>带宽是线路的横截面积，时延是长度，单位是比特，表示数据栈排满能装多少数据 （发了，但对方还没接收到的数据量）</p><h5 id="总时延"><a href="#总时延" class="headerlink" title="总时延"></a>总时延</h5><p>总时延&#x3D;发送时延+传播时延+排队时延+处理时延</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725181042881.png" alt="image-20230725181042881"></p><h4 id="5-往返时间RTT（round-trip-time）"><a href="#5-往返时间RTT（round-trip-time）" class="headerlink" title="5.往返时间RTT（round-trip time）"></a>5.往返时间RTT（round-trip time）</h4><p>从发送完数据到确认接收完数据的时间</p><p>（传输时延+处理时延+返回时延）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725195443604.png" alt="image-20230725195443604"></p><p>相关公式：<br>$$<br>有效数据率&#x3D;数据长度&#x2F;(发送时间+RTT)&#x3D;数据长度&#x2F;总时延<br>$$</p><h4 id="6-利用率"><a href="#6-利用率" class="headerlink" title="6.利用率"></a>6.利用率</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725200730902.png" alt="image-20230725200730902"></p><p>利用率指的是有多少信道正在被利用</p><p>时延带宽积是指完全使用时有多少空位可以让数据等待</p><ul><li>利用率越大时延越大，不是越大越好，需要一定的容错（一般在30-50%，超过70%认为拥挤）</li></ul><h3 id="1-6-2计算机网络的非性能特征"><a href="#1-6-2计算机网络的非性能特征" class="headerlink" title="1.6.2计算机网络的非性能特征"></a>1.6.2计算机网络的非性能特征</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725202926390.png" alt="image-20230725202926390"></p><h2 id="1-7-计算机的体系结构"><a href="#1-7-计算机的体系结构" class="headerlink" title="1.7*计算机的体系结构"></a>1.7*计算机的体系结构</h2><h4 id="1-7-1计算机网络体系结构的形成"><a href="#1-7-1计算机网络体系结构的形成" class="headerlink" title="1.7.1计算机网络体系结构的形成"></a>1.7.1计算机网络体系结构的形成</h4><p>*因为差别多需要统一的结构便于沟通</p><p>*将大问题通过分层变成若干个小问题</p><p>1983年ISO 7498标准</p><p><strong>OSI</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725204046783.png" alt="image-20230725204046783"></p><h4 id="1-7-2协议与划分层次"><a href="#1-7-2协议与划分层次" class="headerlink" title="1.7.2协议与划分层次"></a>1.7.2协议与划分层次</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725204220292.png" alt="image-20230725204220292"></p><p>工作分层，设定规则</p><h5 id="协议（语法、语义、同步-x2F-时序）"><a href="#协议（语法、语义、同步-x2F-时序）" class="headerlink" title="协议（语法、语义、同步&#x2F;时序）"></a>协议（语法、语义、同步&#x2F;时序）</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725204325136.png" alt="image-20230725204325136"></p><p>协议分为文字描述和代码描述</p><h5 id="划分层次（理解不能）"><a href="#划分层次（理解不能）" class="headerlink" title="划分层次（理解不能）"></a>划分层次（理解不能）</h5><h6 id="分层要求"><a href="#分层要求" class="headerlink" title="分层要求"></a>分层要求</h6><ul><li>层次适度</li><li>功能确定</li><li>层次独立</li><li>层次关联</li><li>层次对等</li><li>层次协议</li><li>层次接口</li></ul><h6 id="层次功能"><a href="#层次功能" class="headerlink" title="层次功能"></a>层次功能</h6><ul><li>差错控制</li><li>流量控制</li><li>分段和重装</li><li>复用和分用</li><li>逻辑连接的建立和释放</li></ul><h4 id="1-7-3具有五层协议的体系结构"><a href="#1-7-3具有五层协议的体系结构" class="headerlink" title="1.7.3具有五层协议的体系结构"></a>1.7.3具有五层协议的体系结构</h4><p>osi<strong>不适合市场</strong>因此被淘汰了，取而代之的是由市场选择的<strong>事实上的国际标准</strong>（TCP&#x2F;IP），分为应用层、运输层、互联网层、网络接口层</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725210708216.png" alt="image-20230725210708216"></p><p>缺点</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725211115327.png" alt="image-20230725211115327"></p><p>实际教学为5层结构</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725211349577.png" alt="image-20230725211349577"></p><p>先大体过一下每个层次的功能</p><ul><li>应用层</li></ul><p>用户之间</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725211621386.png" alt="image-20230725211621386"></p><ul><li>运输层(TCP&#x2F;UDP)</li></ul><p>进程之间</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725211705488.png" alt="image-20230725211705488"></p><ul><li>网络层（IP）</li></ul><p>主机之间</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725211812661.png" alt="image-20230725211812661"></p><ul><li>数据链路层</li></ul><p>相邻节点之间</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725212835168.png" alt="image-20230725212835168"></p><ul><li><p>物理层</p><p>传比特<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725213023391.png" alt="image-20230725213023391"></p></li></ul><p>通信示例：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725213651601.png" alt="image-20230725213651601"></p><p>（路由器也有应用层这些，但实际应用不使用）</p><h4 id="1-7-4实体、协议、服务和服务访问点"><a href="#1-7-4实体、协议、服务和服务访问点" class="headerlink" title="1.7.4实体、协议、服务和服务访问点"></a>1.7.4实体、协议、服务和服务访问点</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725213905325.png" alt="image-20230725213905325"></p><p> *协议沟通同一层次的实体，对上层透明</p><p>*服务访问点用于相邻两层的实体进行交换信息，本质上是一个逻辑接口</p><p>*服务是垂直的</p><p>*<strong>上层以为他们直接靠协议进行通信，实际上是上层在使用下层的服务，下层对上层来说是透明的</strong></p><h4 id="1-7-5-TCP-x2F-IP的体系结构（实际）"><a href="#1-7-5-TCP-x2F-IP的体系结构（实际）" class="headerlink" title="1.7.5 TCP&#x2F;IP的体系结构（实际）"></a>1.7.5 TCP&#x2F;IP的体系结构（实际）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725215853688.png" alt="image-20230725215853688"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230725215920283.png" alt="image-20230725215920283">核心部分越简单越好</p><h4 id="体系结构对比"><a href="#体系结构对比" class="headerlink" title="体系结构对比"></a>体系结构对比</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802235901147.png" alt="image-20230802235901147"></p><h1 id="第二节：物理层"><a href="#第二节：物理层" class="headerlink" title="第二节：物理层"></a>第二节：物理层</h1><h2 id="2-1-物理层的基本概念"><a href="#2-1-物理层的基本概念" class="headerlink" title="2.1 物理层的基本概念"></a>2.1 物理层的基本概念</h2><ul><li>位置：网络体系结构的最底层（不是具体的传输媒体，也不是连接计算机的具体物理设备</li><li>功能：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726202057797.png" alt="image-20230726202057797"></li></ul><p>接收，编码，传输</p><ul><li><p>作用：屏蔽掉不同传输媒体和通信手段的差异（将同一句话说给不同的人）</p></li><li><p>主要任务：确定与传输媒体的接口有关的一些特性</p></li><li><p>物理层协议是DTE和DCE间的约定，具有以下特性：</p></li></ul><ol><li>机械特性（长什么样）</li><li>电气特性（用多少电平，电阻之类）</li><li>功能特性（每根线的作用）</li><li>过程特性（各种事件的出现顺序）</li></ol><h2 id="2-2-数据通信的基础知识"><a href="#2-2-数据通信的基础知识" class="headerlink" title="2.2 数据通信的基础知识"></a>2.2 数据通信的基础知识</h2><h3 id="基本术语"><a href="#基本术语" class="headerlink" title="基本术语:"></a>基本术语:</h3><ol><li>通信：在源点和终点之间传递消息或者信息（消息不等于信息）</li><li>消息：能被通信双方理解而且可以相互传递的文字、符号、数据、语音和图像等</li><li><strong>信息</strong>:消息中的有意义的部分，<strong>消息是信息的载体</strong>(关键)</li><li>数据：运送消息的实体，分为模拟数据和数字数据</li><li>信号：是消息的载体，通信系统中消息通过电信号传递，分为模拟信号和数字信号</li></ol><p>栗子:我发了一段乱码给小米，我们在通信，我发的是消息，但是小明看得懂每个字，但是连在一起就不会了，这段话对他没有意义，他也就没收到信息，乱码中有字母数字等为数据，在路线中通过电信号传递</p><p>画个示意图整理概念：</p><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726213808371.png" alt="image-20230726213808371"></strong></p><h3 id="常见编码方式"><a href="#常见编码方式" class="headerlink" title="常见编码方式"></a>常见编码方式</h3><ul><li><p>不归零制（不确定·比特数）</p></li><li><p>归零制（跳变后归零）</p></li><li><p>曼切斯特编码（由上升沿或者下降沿作为0或1）</p></li><li><p>差分曼切斯特编码（由下一个比特状态确定，下一个是0边缘跳变，否则不变）</p><p><strong>特点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726230337759.png" alt="image-20230726230337759"></p></li></ul><h3 id="基本带通调制方法"><a href="#基本带通调制方法" class="headerlink" title="基本带通调制方法"></a>基本带通调制方法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726230632971.png" alt="image-20230726230632971"></p><p>调幅：不同信号用不同幅度的波形替代（高低电平幅度不同）</p><p>调频：高低电平频率不同</p><p>调相：高低电平相位不同</p><h3 id="码元"><a href="#码元" class="headerlink" title="码元"></a>码元</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726231645991.png" alt="image-20230726231645991"></p><h3 id="2-2-1-数据通信系统的模型"><a href="#2-2-1-数据通信系统的模型" class="headerlink" title="2.2.1 数据通信系统的模型"></a>2.2.1 数据通信系统的模型</h3><p>  源系统(信源和发送器)</p><p>传输系统</p><p>目的系统(接收器和信宿)</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726211024317.png" alt="image-20230726211024317"></p><h3 id="2-2-2-有关信道的几个基本概念"><a href="#2-2-2-有关信道的几个基本概念" class="headerlink" title="2.2.2 有关信道的几个基本概念"></a>2.2.2 有关信道的几个基本概念</h3><ul><li>信道：信号传输的通道（单工、半双工、全双工通信）</li><li>基带信号（未调制，较多低频）</li><li>调制（基带调制和带通调制）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726211736738.png" alt="image-20230726211736738"></p><p>基带调制（编码coding）—改装自行车</p><p>带通调制—自行车放在大货车上、</p><h3 id="2-2-3-信道的极限容量"><a href="#2-2-3-信道的极限容量" class="headerlink" title="2.2.3 信道的极限容量"></a>2.2.3 信道的极限容量</h3><p>信道传输信号会失真</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726231845885.png" alt="image-20230726231845885"></p><p>失真原因：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726232158449.png" alt="image-20230726232158449"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726232222015.png" alt="image-20230726232222015"></p><p>信噪比：信号和噪声的比值</p><h4 id="信道的频率范围"><a href="#信道的频率范围" class="headerlink" title="信道的频率范围"></a>信道的频率范围</h4><h4 id="奈氏准则（理想情况）"><a href="#奈氏准则（理想情况）" class="headerlink" title="奈氏准则（理想情况）"></a>奈氏准则（理想情况）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726232653280.png" alt="image-20230726232653280"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726235024390.png" alt="image-20230726235024390"> </p><h4 id="信噪比"><a href="#信噪比" class="headerlink" title="信噪比"></a>信噪比</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726233449890.png" alt="image-20230726233449890"></p><p>s———signal</p><p>n———noise</p><h4 id="香农公式！！！！"><a href="#香农公式！！！！" class="headerlink" title="香农公式！！！！"></a>香农公式！！！！</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726233652065.png" alt="image-20230726233652065"></p><p>将信噪比考虑进去了，只要速率低于这个值就一定能找到传输方式减少差错</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230726234017828.png" alt="image-20230726234017828"></p><p><strong>奈氏是上限，香农是下限</strong> </p><p><strong>奈氏考虑码制，香农考虑信噪比</strong></p><h2 id="2-3-物理层下面的传输媒体"><a href="#2-3-物理层下面的传输媒体" class="headerlink" title="2.3 物理层下面的传输媒体"></a>2.3 物理层下面的传输媒体</h2><h3 id="2-3-1-导引型传输媒体"><a href="#2-3-1-导引型传输媒体" class="headerlink" title="2.3.1 导引型传输媒体"></a>2.3.1 导引型传输媒体</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727202119189.png" alt="image-20230727202119189"></p><p>*有线–网线等</p><h4 id="双绞线"><a href="#双绞线" class="headerlink" title="双绞线"></a>双绞线</h4><h5 id="特点"><a href="#特点" class="headerlink" title="特点"></a>特点</h5><p>twist起来可以减少信号辐射</p><p>A&#x2F;D信号都可以传输 </p><p>一般来说默认最高传输距离为100m</p><p>便宜</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727202737489.png" alt="image-20230727202737489"></p><h5 id="类别差别"><a href="#类别差别" class="headerlink" title="类别差别"></a>类别差别</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727202810661.png" alt="image-20230727202810661"><strong>屏蔽更安全</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727203032556.png" alt="image-20230727203032556"></p><p>F&#x2F;UTP最外层</p><p>U&#x2F;FTP里层</p><p>F&#x2F;FTP双层</p><h5 id="标准"><a href="#标准" class="headerlink" title="标准"></a>标准</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727203754882.png" alt="image-20230727203754882"></p><p>8类线，负责传输电磁波信号</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727203910384.png" alt="image-20230727203910384"></p><h4 id="同轴电缆"><a href="#同轴电缆" class="headerlink" title="同轴电缆"></a>同轴电缆</h4><h5 id="特点-1"><a href="#特点-1" class="headerlink" title="特点"></a>特点</h5><p>一层包一层</p><p>被双绞线和光纤薄纱</p><p>容易被偷</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727204822445.png" alt="image-20230727204822445"></p><h4 id="光缆"><a href="#光缆" class="headerlink" title="光缆"></a>光缆</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727205119550.png" alt="image-20230727205119550"></p><h5 id="特点-2"><a href="#特点-2" class="headerlink" title="特点"></a>特点</h5><p>发送端要有光源，不能有电源（发光二极管，半导体激光器等）</p><p>接收端要有光检测器还原出电脉冲</p><h5 id="传输方式"><a href="#传输方式" class="headerlink" title="传输方式"></a>传输方式</h5><p>利用物理相关知识设计使得光以某个入射角入射时，光线一直在线路中进行全反射传播</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727205628057.png" alt="image-20230727205628057"></p><h5 id="多模与单模"><a href="#多模与单模" class="headerlink" title="多模与单模"></a>多模与单模</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727205919922.png" alt="image-20230727205919922"></p><p>多模传的多但是距离短（损耗大）</p><p>单模传的少但是长</p><h5 id="使用类别"><a href="#使用类别" class="headerlink" title="使用类别"></a>使用类别</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727210131465.png" alt="image-20230727210131465"></p><h5 id="优缺点"><a href="#优缺点" class="headerlink" title="优缺点"></a>优缺点</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727210212003.png" alt="image-20230727210212003">太脆弱了需要很多保护层</p><h3 id="2-3-2-非导引型传输媒体"><a href="#2-3-2-非导引型传输媒体" class="headerlink" title="2.3.2 非导引型传输媒体"></a>2.3.2 非导引型传输媒体</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727202135018.png" alt="image-20230727202135018"></p><p>*无线–wifi</p><h4 id="无线电微波通信"><a href="#无线电微波通信" class="headerlink" title="无线电微波通信"></a>无线电微波通信</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727211708263.png" alt="image-20230727211708263"></p><p>通过微波接力扩大传输距离（地面和太空）</p><h4 id="同步卫星"><a href="#同步卫星" class="headerlink" title="同步卫星"></a>同步卫星</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727212445803.png" alt="image-20230727212445803"></p><h4 id="近地卫星"><a href="#近地卫星" class="headerlink" title="近地卫星"></a>近地卫星</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727212625219.png" alt="image-20230727212625219"></p><h3 id="2-4-信道复用技术"><a href="#2-4-信道复用技术" class="headerlink" title="2.4 信道复用技术"></a>2.4 信道复用技术</h3><h4 id="2-4-1-频分复用、时分复用和统计时分复用"><a href="#2-4-1-频分复用、时分复用和统计时分复用" class="headerlink" title="2.4.1 频分复用、时分复用和统计时分复用"></a>2.4.1 频分复用、时分复用和统计时分复用</h4><p>信道复用—–传输多个信号，提高信道利用率，降低成本</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727213639106.png" alt="image-20230727213639106"></p><h6 id="频分复用（电视同一时间有不同的频道可以观看）"><a href="#频分复用（电视同一时间有不同的频道可以观看）" class="headerlink" title="频分复用（电视同一时间有不同的频道可以观看）"></a>频分复用（电视同一时间有不同的频道可以观看）</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727213835807.png" alt="image-20230727213835807"></p><p>分到哪个就只能用哪个</p><h6 id="频分多址（同一个频道轮流有不同的电视节目）"><a href="#频分多址（同一个频道轮流有不同的电视节目）" class="headerlink" title="频分多址（同一个频道轮流有不同的电视节目）"></a>频分多址（同一个频道轮流有不同的电视节目）</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727214102303.png" alt="image-20230727214102303"></p><h6 id="时分复用"><a href="#时分复用" class="headerlink" title="时分复用"></a>时分复用</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727214404250-1690465445714-1.png" alt="image-20230727214404250"></p><p>一天按一个小时为单位（TDM帧），前20分钟给a用，然后给b用，最后给c用，循环24次</p><p><strong>缺点</strong></p><p>前20分钟不管你用不用，后面的人都得等待，效率低—— </p><h6 id="时分多址"><a href="#时分多址" class="headerlink" title="时分多址"></a>时分多址</h6><p>前20分钟不单单给a用，也可以给a的好朋友efg用</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727214859241.png" alt="image-20230727214859241"></p><h5 id="统计时分复用"><a href="#统计时分复用" class="headerlink" title="统计时分复用"></a>统计时分复用</h5><p>前面说了时分复用会让利用率降低，那么统计时分就是在此基础上添加新补丁的版本</p><p> 将原本的TDM帧升级为STDM帧，通过复用器将每个部分进行扫描，有数据则存入STDM中，当帧满时再发送</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727224015005.png" alt="image-20230727224015005"></p><h4 id="2-4-2-（光）波分复用"><a href="#2-4-2-（光）波分复用" class="headerlink" title="2.4.2 （光）波分复用"></a>2.4.2 （光）波分复用</h4><p>其实就是光波的频分复用，只不过这里的频率指的是光波的波长</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727224336036.png" alt="image-20230727224336036"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727224415679.png" alt="image-20230727224415679"></p><h4 id="2-4-3-码分复用（码分多址）"><a href="#2-4-3-码分复用（码分多址）" class="headerlink" title="2.4.3 码分复用（码分多址）"></a>2.4.3 码分复用（码分多址）</h4><p>前面的时分和波分复用都是固定了时间或者频率范围进行描述的，而码分复用就是要求时间及频率都相同的情况下如何进行码分复用，很简单，就是给不同的游客分发不同的牌证在同一辆车上跑，等下车时看牌分人</p><p><em><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727225132254.png" alt="image-20230727225132254"></em>*</p><h6 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727225745816.png" alt="image-20230727225745816"></p><p>将原来的0和1扩展内核变成一个m位的二进制数，例如1101代表1，那么它的反码0010就是表示0</p><p>为了便于计算，码片的0表示成-1，1就是1</p><p><strong>为了能复用传输的东西也扩大了m倍</strong></p><h6 id="如何区分不同码片？"><a href="#如何区分不同码片？" class="headerlink" title="如何区分不同码片？"></a>如何区分不同码片？</h6><p>类比数学上的向量内积</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727230407485.png" alt="image-20230727230407485"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727230416910.png" alt="image-20230727230416910"></p><h6 id="怎么从合并信号中分离出单一信号？"><a href="#怎么从合并信号中分离出单一信号？" class="headerlink" title="怎么从合并信号中分离出单一信号？"></a>怎么从合并信号中分离出单一信号？</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230727231251326.png" alt="image-20230727231251326"></p><p>首先确定两个码片的波形，然后将两个信号叠加起来（算数），最后将信号分离时需要哪一个信号就将合并的信号与其码片进行内积计算，得到的波形就是我们需要的原信号（这里1代表1，0代表-1）</p><h4 id="各种复用技术的使用条件"><a href="#各种复用技术的使用条件" class="headerlink" title="各种复用技术的使用条件"></a>各种复用技术的使用条件</h4><p>频分复用适用于传输的信号在不同的频带上</p><p>时分复用适用于在不同的时间上传输的信号</p><p>波分复用适用于光信号传播</p><p><strong>码分复用适用于干扰较强时</strong></p><h1 id="第三节-数据链路层概述"><a href="#第三节-数据链路层概述" class="headerlink" title="第三节 数据链路层概述"></a>第三节 数据链路层概述</h1><h2 id="3-1-1-关于数据链路层"><a href="#3-1-1-关于数据链路层" class="headerlink" title="3.1.1 关于数据链路层"></a>3.1.1 关于数据链路层</h2><h3 id="作用："><a href="#作用：" class="headerlink" title="作用："></a>作用：</h3><pre><code>    1.在比特流中找到一组数据的开始以及结束位置    2.解决多个设备接收比特流问题    3.**解决比特传输错误问题** </code></pre><h3 id="链路、数据链路、层、帧"><a href="#链路、数据链路、层、帧" class="headerlink" title="链路、数据链路、层、帧"></a>链路、数据链路、层、帧</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801160555027.png" alt="image-20230801160555027"></p><p>链路：物理且无源</p><p>数据链路&#x3D;链路+协议</p><p>层：将结点与结点之间通过链路传输帧</p><p>帧：分组交换的单位到了链路层被叫做帧 </p><h3 id="协议栈看数据链路层"><a href="#协议栈看数据链路层" class="headerlink" title="协议栈看数据链路层"></a>协议栈看数据链路层</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801160948245.png" alt="image-20230801160948245"></p><p>层对层，无视下层（透明），服务上层，看做直接传输帧通信</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801161140434.png" alt="image-20230801161140434"></p><h3 id="数据链路层的信道类型"><a href="#数据链路层的信道类型" class="headerlink" title="数据链路层的信道类型"></a>数据链路层的信道类型</h3><ol><li>点对点信道（骨干线路）</li></ol><ul><li><input checked="" disabled="" type="checkbox"> 使用协议？</li></ul><p>PPP</p><ol><li>广播通信（边缘线路）</li></ol><ul><li><input checked="" disabled="" type="checkbox"> 使用协议？</li></ul><p>CSMA&#x2F;CD</p><h2 id="3-1-2-三个基本问题"><a href="#3-1-2-三个基本问题" class="headerlink" title="3.1.2 三个基本问题"></a>3.1.2 三个基本问题</h2><h3 id="封装成帧"><a href="#封装成帧" class="headerlink" title="封装成帧"></a>封装成帧</h3><p><strong>比特流前加首部和尾部进行帧定界</strong></p><p><em>数据链路层往上只加首部</em></p><p>MTU（Maximum Transfer Unit）—帧的数据部分最长限制&#x2F;IP数据报长度（图片蓝色部分）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801162117153.png" alt="image-20230801162117153"></p><p>规定原因：（）</p><h4 id="成帧-FRAMING-方式"><a href="#成帧-FRAMING-方式" class="headerlink" title="成帧(FRAMING)方式"></a>成帧(FRAMING)方式</h4><ul><li><strong>字节计数法（无差错情况）</strong></li></ul><p>出错会导致一连串帧的错误</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801162707892.png" alt="image-20230801162707892"></p><ul><li><strong>带字节填充的定界符法</strong></li></ul><p>SOH（首部）与EOT（尾部）</p><p>数据部分若有与SOH或EOT相同的部分则会错误判断帧的边界</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801163037221.png" alt="image-20230801163037221">升级版：<strong>在有歧义的数据前面加上特殊字节或者字符</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801163526670.png" alt="image-20230801163526670"></p><ul><li><strong>带比特填充的定界符法</strong></li><li><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801164114484.png" alt="image-20230801164114484"></li><li><strong>物理层编码违例</strong></li><li><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801164129689.png" alt="image-20230801164129689"></li></ul><h3 id="透明传输"><a href="#透明传输" class="headerlink" title="透明传输"></a>透明传输</h3><p>翻译：发送不发生差错</p><p>利用前面的插入方式使得传输正确</p><h3 id="差错控制"><a href="#差错控制" class="headerlink" title="差错控制"></a>差错控制</h3><h4 id="误码率（BER）"><a href="#误码率（BER）" class="headerlink" title="误码率（BER）"></a>误码率（BER）</h4><p>错误的比特占传输比特的总数</p><h4 id="纠错码（改）"><a href="#纠错码（改）" class="headerlink" title="纠错码（改）"></a>纠错码（改）</h4><p>使用于错误发生比较频繁的线路（无线链路）</p><h4 id="检错码（丢）"><a href="#检错码（丢）" class="headerlink" title="检错码（丢）"></a>检错码（丢）</h4><p>用在高可靠、误码率较低的信道上，例如光纤线路（光纤线路）</p><h4 id="循环冗余检验CRC原理"><a href="#循环冗余检验CRC原理" class="headerlink" title="循环冗余检验CRC原理"></a>循环冗余检验CRC<strong>原理</strong></h4><ol><li><p>在原来的数据部分（k位）加上n位的冗余码（FCS）构成帧</p></li><li><p>整体有错丢弃反之接收</p></li><li><p>计算方式：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801165716585.png" alt="image-20230801165716585"></p></li><li><p>栗子：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801171636250.png" alt="image-20230801171636250"></p><pre><code> 这种应该是通过代码程序实现![image-20230801171652908](https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801171652908.png)</code></pre></li></ol><p>国际标准<strong>P</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230801172010613.png" alt="image-20230801172010613"></p><p><em><strong>FCS不一定由CRC得到</strong></em></p><p>CRC只能做到接收到的帧没有错误，但是顺序问题不能判断</p><h2 id="3-2-点对点协议PPP"><a href="#3-2-点对点协议PPP" class="headerlink" title="3.2 点对点协议PPP"></a>3.2 点对点协议PPP</h2><h3 id="3-2-1-PPP协议的特点"><a href="#3-2-1-PPP协议的特点" class="headerlink" title="3.2.1 PPP协议的特点"></a>3.2.1 PPP协议的特点</h3><h4 id="工作要求"><a href="#工作要求" class="headerlink" title="工作要求"></a>工作要求</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802112600769.png" alt="image-20230802112600769"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802112720563.png" alt="image-20230802112720563"></p><p><strong>PPP不同于广播在于它会进行地址协商</strong></p><h4 id="协议组成"><a href="#协议组成" class="headerlink" title="协议组成"></a>协议组成</h4><p>LCP与NCP</p><p>LCP(Link Control Protocol)：链路控制协议—-用于建立、配置和测试数据链路的链路控制协议，双方可以<strong>协商一些选项</strong>，<strong>最重要****的功能之一是</strong>身份验证**</p><p>NCP（Network Control Protocol）:里面包括了不同的协议，用于不同网络层的数据传输</p><h3 id="3-2-2-PPP协议的帧格式"><a href="#3-2-2-PPP协议的帧格式" class="headerlink" title="3.2.2 PPP协议的帧格式"></a>3.2.2 PPP协议的帧格式</h3><h4 id="帧格式"><a href="#帧格式" class="headerlink" title="帧格式"></a>帧格式</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802113938474.png" alt="image-20230802113938474"></p><h4 id="透明传输方式"><a href="#透明传输方式" class="headerlink" title="透明传输方式"></a>透明传输方式</h4><h5 id="异步传输—字节填充法"><a href="#异步传输—字节填充法" class="headerlink" title="异步传输—字节填充法"></a>异步传输—字节填充法</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802114528795.png" alt="image-20230802114528795"></p><p>IP数据报里面与首位尾部一样的字节(7E)前面填充一个特殊字节，例如7D，然后IP数据报中原来就有的7E改为别的特殊字节例如5E</p><h5 id="同步传输—零比特传输法"><a href="#同步传输—零比特传输法" class="headerlink" title="同步传输—零比特传输法"></a>同步传输—零比特传输法</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802114935943.png" alt="image-20230802114935943"></p><p>标志符是六个一，为了不让IP数据报中出现6个1，在传输数据时当出现连续的5个1时添加一个0（与后面数据无关），接收同理出现连续的五个1则删除接下来的那个比特</p><h4 id="同步异步区别"><a href="#同步异步区别" class="headerlink" title="同步异步区别"></a>同步异步区别</h4><p>*同步面向比特，单位帧，时钟统一，无间隔</p><p>*异步面向字节，单位字符，效率低，高速来南路开销大</p><h3 id="3-2-3-PPP协议的工作状态"><a href="#3-2-3-PPP协议的工作状态" class="headerlink" title="3.2.3 PPP协议的工作状态"></a>3.2.3 PPP协议的工作状态</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802115318053.png" alt="image-20230802115318053"><br>（还是挺清晰的)</p><h2 id="3-3广播通信的数据链路层"><a href="#3-3广播通信的数据链路层" class="headerlink" title="3.3广播通信的数据链路层"></a>3.3广播通信的数据链路层</h2><h3 id="3-3-1-局域网的数据链路层"><a href="#3-3-1-局域网的数据链路层" class="headerlink" title="3.3.1 局域网的数据链路层"></a>3.3.1 局域网的数据链路层</h3><h4 id="优点：-2"><a href="#优点：-2" class="headerlink" title="优点："></a>优点：</h4><p>具有广播功能便于拓展</p><h4 id="局域网拓扑结构"><a href="#局域网拓扑结构" class="headerlink" title="局域网拓扑结构"></a>局域网拓扑结构</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802220608850.png" alt="image-20230802220608850"></p><h5 id="优缺点-1"><a href="#优缺点-1" class="headerlink" title="优缺点"></a>优缺点</h5><p>总线：</p><p>（优点）结构简单布线容易、可靠性较高，易于扩充</p><p>（缺点）所有的数据都需经过总线传送，总线成为整个网络的瓶颈；出现故障诊断较为困难。另外，由于信道共享，连接的节点不宜过多，<strong>总线自身的故障</strong>可以导致系统的崩溃</p><p>星型：</p><p>优点：结构简单、容易实现、便于管理，通常以集线器（Hub）作为中央节点，便于网络维护和网络管理</p><p>缺点：中心结点是全网络的可靠瓶颈，<strong>中心结点出现故障</strong>会导致网络的瘫痪。</p><p>环形结构：</p><p>优点：结构简单，适合使用光纤，传输距离远，传输延迟确定。</p><p>缺点：环网中的每个结点均成为网络可靠性的瓶颈，<strong>任意结点出现故障都会造成网络瘫痪</strong>，另外故障诊断也较困难。最著名的环形结构网络是令牌环网（Token Ring）</p><p>树型结构：</p><p>优点：连结简单，维护方便，适用于汇集信息的应用要求。</p><p>缺点：资源共享能力较低，可靠性不高，任何一<strong>个工作站或链路的故障都会影响整个网络的运行</strong></p><p>网状结构：</p><p>优点：系统可靠性高，比较容易扩展，但是结构复杂，每一结点都与多点进行连结，因此必须采用<strong>路由算法</strong>和<strong>流量控制</strong>方法。<strong>目前广域网基本上采用网状结构。</strong></p><p>缺点： 1、<strong>拓扑结构复杂，其安装和配置都比较困难。</strong> 2、网络控制机制复杂，必须采用路由算法和流量控制机制</p><h4 id="媒体共享技术"><a href="#媒体共享技术" class="headerlink" title="媒体共享技术"></a>媒体共享技术</h4><p>静态划分通道：频分、时分、波分、码分</p><p>（通信量大且稳定，用户少且固定，代价高，不适合局域网）</p><p>动态媒体接入控制（多点接入）：随机接入（以太网）与受控接入（轮询polling）</p><p>*<strong>为解决数据发生冲突的情况，使用动态媒体接入控制</strong></p><h4 id="以太网的两个标准"><a href="#以太网的两个标准" class="headerlink" title="以太网的两个标准"></a>以太网的两个标准</h4><ol><li><p>IEEE 802.3（有LLC协议）</p></li><li><p>DIX Ethernet V2（商用，仅有MAC协议）</p></li></ol><h4 id="适配器"><a href="#适配器" class="headerlink" title="适配器"></a>适配器</h4><p>计算机通过适配器（网卡）来与互联网进行通信</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802234920407.png" alt="image-20230802234920407"></p><p>cpu找IP地址，网卡找硬件地址</p><p><strong>作用</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230802235303986.png" alt="image-20230802235303986"></p><h4 id="以太网的两个重要措施"><a href="#以太网的两个重要措施" class="headerlink" title="以太网的两个重要措施"></a>以太网的两个重要措施</h4><ol><li>采用较为灵活的<strong>无连接的工作方式</strong></li><li>发送使用曼切斯特编码，便于同步</li></ol><h3 id="3-3-2-CSMA-x2F-CD协议-半双工"><a href="#3-3-2-CSMA-x2F-CD协议-半双工" class="headerlink" title="3.3.2 CSMA&#x2F;CD协议(半双工)"></a>3.3.2 CSMA&#x2F;CD协议(半双工)</h3><h4 id="工作方式-1"><a href="#工作方式-1" class="headerlink" title="工作方式"></a>工作方式</h4><p>（先听后发，边听边发，冲突停止，延迟重发） </p><ul><li>多点接入–说明是总线型网络</li><li>载波监听–边发送边监听，发前和发中都要检测</li><li>碰撞检测–判断有没有发生碰撞：检测信道上电压的变化情况，电压摆动值超过一定值认为碰撞</li></ul><h4 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h4><ul><li>适配器立即停止发送</li><li>等待随机时间后再次发送</li></ul><h4 id="流程图"><a href="#流程图" class="headerlink" title="流程图"></a>流程图</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/R-C.5c28ebc76c618c86e0c3309ea79e095a" alt="CSMA/CD原理及流程图-布布扣-bubuko.com"></p><h4 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803002133229.png" alt="image-20230803002133229"></p><p>监听反应不过来，发生碰撞到终点的时间里不能判断，而此时还在发数据，数据会发生更大的错误</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803002420476.png" alt="image-20230803002420476"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803002639512.png" alt="image-20230803002639512"></p><p>确实是:laughing:</p><h4 id="二进制指数退避"><a href="#二进制指数退避" class="headerlink" title="二进制指数退避"></a>二进制指数退避</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803002804614.png" alt="image-20230803002804614"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803002813046.png" alt="image-20230803002813046"></p><ul><li><p>二进制的名字来源于2的k次方-1那里</p></li><li><p>r&#x3D;2*k-1</p></li><li><p>T&#x3D;r*2t（基本退避时间）</p></li><li><p>k&#x3D;Min[重传次数，10]</p></li><li><p>重传16次丢弃并且高层报告</p></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803003354398.png" alt="image-20230803003354398"></p><p>这个64字节有历史遗留:dancer:</p><p>  <em><strong>发生碰撞后线路上的其他用户可能不知道，这时发送站会人工发送信号到线路上通知所有用户发生碰撞</strong></em></p><h4 id="特性"><a href="#特性" class="headerlink" title="特性"></a>特性</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230803005808940.png" alt="image-20230803005808940"></p><h3 id="3-3-3-使用集线器的星型拓扑"><a href="#3-3-3-使用集线器的星型拓扑" class="headerlink" title="3.3.3 使用集线器的星型拓扑"></a>3.3.3 使用集线器的星型拓扑</h3><ul><li>传统传输媒体发展：粗同轴电缆–细同轴电缆–双绞线</li><li>双绞线对应星型拓扑，相对总线更好组网</li><li>可靠性依靠集线器（hub）</li></ul><p>*每个站到集线器的距离不超过100m</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804115517088.png" alt="image-20230804115517088"></p><p>F对应光纤</p><p><strong>特点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804115611779.png" alt="image-20230804115611779"></p><ul><li><p>逻辑上还是总线型</p></li><li><p>共享带宽</p></li><li><p>工作在物理层</p><p>​</p></li></ul><p></p><h3 id="3-3-4-以太网的信道利用率"><a href="#3-3-4-以太网的信道利用率" class="headerlink" title="3.3.4 以太网的信道利用率"></a>3.3.4 以太网的信道利用率</h3><ul><li>多个站可能会发生碰撞</li><li>碰撞后利用率低于100%</li></ul><p>计算公式：<br>$$<br>Smax&#x3D;T0&#x2F;T+t&#x3D;1&#x2F;(1+a)<br>a&#x3D;t&#x2F;T<br>其中t为争用期的一半，T为帧的发送时间<br>$$<br><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804120238964.png" alt="image-20230804120238964"></p><p>帧长路短就是好（S低于30%过载）</p><h3 id="3-3-5-以太网的MAC层"><a href="#3-3-5-以太网的MAC层" class="headerlink" title="3.3.5 以太网的MAC层"></a>3.3.5 以太网的MAC层</h3><p>*LLC层已经不用了</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804120639225.png" alt="image-20230804120639225"></p><p>就类似于你家的经纬度，固定了的</p><p>*一个接口一个网卡一个MAC地址</p><h4 id="结构"><a href="#结构" class="headerlink" title="结构"></a><strong>结构</strong></h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804121054951.png" alt="image-20230804121054951"></p><p>厂家就后三个字节自己定义不重复即可 </p><h4 id="分类"><a href="#分类" class="headerlink" title="分类"></a>分类</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804121255567.png" alt="image-20230804121255567"></p><p>发一个人，发一个组，发一个班</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804125654311.png" alt="image-20230804125654311"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804125712343.png" alt="image-20230804125712343"></p><ul><li>适配器收到一个MAC帧会先用硬件检查帧中的MAC地址</li><li>是发送给自己的则接收并处理</li><li>不是发给自己的就丢弃</li><li>以<strong>混杂方式</strong>工作的有帧就收</li></ul><h4 id="MAC的帧格式"><a href="#MAC的帧格式" class="headerlink" title="MAC的帧格式"></a>MAC的帧格式</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130016505.png" alt="image-20230804130016505"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130025433.png" alt="image-20230804130025433"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130203716.png" alt="image-20230804130203716"></p><h4 id="无效MAC帧"><a href="#无效MAC帧" class="headerlink" title="无效MAC帧"></a>无效MAC帧</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130249583.png" alt="image-20230804130249583"></p><p>无效丢弃，不重传</p><h2 id="3-4-扩展的以太网"><a href="#3-4-扩展的以太网" class="headerlink" title="3.4 扩展的以太网"></a>3.4 扩展的以太网</h2><p>*扩展仍然是一个网络</p><h3 id="3-4-1-在物理层扩展以太网"><a href="#3-4-1-在物理层扩展以太网" class="headerlink" title="3.4.1 在物理层扩展以太网"></a>3.4.1 在物理层扩展以太网</h3><h4 id="使用光纤扩展（距离）"><a href="#使用光纤扩展（距离）" class="headerlink" title="使用光纤扩展（距离）"></a>使用光纤扩展（距离）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130815062.png" alt="image-20230804130815062"></p><h4 id="使用集线器进行扩展（用户数量）"><a href="#使用集线器进行扩展（用户数量）" class="headerlink" title="使用集线器进行扩展（用户数量）"></a>使用集线器进行扩展（用户数量）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804130917492.png" alt="image-20230804130917492"></p><p>限制：双绞线最大距离，集线器接口数</p><p> 图示正好是一个冲突域，扩展越多冲突域越来越大</p><p><strong>优缺点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804131350009.png" alt="image-20230804131350009"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804131358658.png" alt="image-20230804131358658"></p><h3 id="3-4-2-在数据链路层扩展以太网"><a href="#3-4-2-在数据链路层扩展以太网" class="headerlink" title="3.4.2 在数据链路层扩展以太网"></a>3.4.2 在数据链路层扩展以太网</h3><p>早期网桥，现在交换机（多接口网桥）</p><h5 id="特点-3"><a href="#特点-3" class="headerlink" title="特点"></a>特点</h5><ul><li><p>两个都是全双工工作方式，解决了共享总线的问题</p></li><li><p>减少了碰撞域（具有并行性 ）</p></li><li><p>接口有存储器</p></li><li><p>即插即用，<strong>交换表通过自学习建立</strong></p></li><li><p>使用专用的交换结构芯片，比使用软件转发的网桥快的一</p></li><li><p>接口独享带宽，支持多类型多速率的接口</p></li></ul><h5 id="自学习"><a href="#自学习" class="headerlink" title="自学习"></a>自学习</h5><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804132613963.png" alt="image-20230804132613963"></strong></p><h5 id="与集线器相连"><a href="#与集线器相连" class="headerlink" title="与集线器相连"></a>与集线器相连</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804132928791.png" alt="image-20230804132928791"></p><p>更新困难，集线器没有交换表，默认广播</p><h5 id="两台交换机相连"><a href="#两台交换机相连" class="headerlink" title="两台交换机相连"></a>两台交换机相连</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804133029794.png" alt="image-20230804133029794"></p><h5 id="多台交换机相连"><a href="#多台交换机相连" class="headerlink" title="多台交换机相连"></a>多台交换机相连</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804133503240.png" alt="image-20230804133503240"></p><p>可能会形成回路，导致广播风暴</p><h5 id="生成树协议"><a href="#生成树协议" class="headerlink" title="生成树协议"></a>生成树协议</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804133842252.png" alt="image-20230804133842252"></p><p>从逻辑上把两条线变成一条线（前两张图）</p><h5 id="从总线到星型以太网"><a href="#从总线到星型以太网" class="headerlink" title="从总线到星型以太网"></a>从总线到星型以太网</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804134709381.png" alt="image-20230804134709381"></p><p>从CSMA&#x2F;CD协议到全双工</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804134751497.png" alt="image-20230804134751497"></p><h3 id="3-4-3-虚拟以太网"><a href="#3-4-3-虚拟以太网" class="headerlink" title="3.4.3 虚拟以太网"></a>3.4.3 虚拟以太网</h3><h5 id="以太网的问题"><a href="#以太网的问题" class="headerlink" title="以太网的问题"></a>以太网的问题</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804134815560.png" alt="image-20230804134815560"></p><h5 id="广播域"><a href="#广播域" class="headerlink" title="广播域"></a>广播域</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804135215265.png" alt="image-20230804135215265"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804135227396.png" alt="image-20230804135227396"></p><p>冲突域：相互发信息会冲突的区域</p><p>广播域：发送消息大家都能收到的区域</p><h5 id="安全问题、管理问题"><a href="#安全问题、管理问题" class="headerlink" title="安全问题、管理问题"></a>安全问题、管理问题</h5><p>在一个广播域不想让某些用户接收到消息</p><h5 id="解决方法：虚拟局域网VLAN（Virtual-LAN）"><a href="#解决方法：虚拟局域网VLAN（Virtual-LAN）" class="headerlink" title="解决方法：虚拟局域网VLAN（Virtual LAN）"></a>解决方法：虚拟局域网VLAN（Virtual LAN）</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804135545399.png" alt="image-20230804135545399"></p><p>只是局域网的一种服务，是一种协议，不是新型的局域网</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804135807660.png" alt="image-20230804135807660"></p><h5 id="优点-1"><a href="#优点-1" class="headerlink" title="优点"></a>优点</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140138213.png" alt="image-20230804140138213"></p><h5 id="划分标准"><a href="#划分标准" class="headerlink" title="划分标准"></a>划分标准</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140242934.png" alt="image-20230804140242934"></p><p>一般基于端口</p><h2 id="3-5-高速以太网（介绍）"><a href="#3-5-高速以太网（介绍）" class="headerlink" title="3.5 高速以太网（介绍）"></a>3.5 高速以太网（介绍）</h2><h3 id="3-5-1-100BASE-T-以太网"><a href="#3-5-1-100BASE-T-以太网" class="headerlink" title="3.5.1 100BASE-T 以太网"></a>3.5.1 100BASE-T 以太网</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140538329.png" alt="image-20230804140538329"></p><p><strong>特点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140711348.png" alt="image-20230804140711348"></p><h3 id="3-5-2-吉比特以太网"><a href="#3-5-2-吉比特以太网" class="headerlink" title="3.5.2 吉比特以太网"></a>3.5.2 吉比特以太网</h3><p><strong>特点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140737933.png" alt="image-20230804140737933"></p><h3 id="3-5-3-10吉比特以太网（10GE）和更快的以太网"><a href="#3-5-3-10吉比特以太网（10GE）和更快的以太网" class="headerlink" title="3.5.3 10吉比特以太网（10GE）和更快的以太网"></a>3.5.3 10吉比特以太网（10GE）和更快的以太网</h3><p><strong>特点</strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140817558.png" alt="image-20230804140817558"></p><h3 id="3-5-4-使用以太网进行宽带接入"><a href="#3-5-4-使用以太网进行宽带接入" class="headerlink" title="3.5.4 使用以太网进行宽带接入"></a>3.5.4 使用以太网进行宽带接入</h3><p><strong>特点</strong></p><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804140849208.png" alt="image-20230804140849208"></strong></p><h1 id="第一次考试纠错"><a href="#第一次考试纠错" class="headerlink" title="第一次考试纠错"></a>第一次考试纠错</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804191349420.png" alt="image-20230804191349420"></p><p>电路交换比其他两种方式实时性都要高，分组交换主要是 时延比报文小</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804191638121.png" alt="img"></p><p>局域网是分组广播式网络，不需要网络层的路由功能</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804191934268.png" alt="image-20230804191934268"></p><p>审题！！！这里说的是三层以下，即是1，2层，网桥交换机是数据链路层的，中继器和集线器是物理层的</p><p>三层的是三层交换机</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230804192126631.png" alt="image-20230804192126631"></p><p>A给B发送消息，<strong>B要回复A是否收到消息了</strong>（题目没说就忽视了）</p><h1 id="第四章-网络层"><a href="#第四章-网络层" class="headerlink" title="第四章 网络层"></a>第四章 网络层</h1><h2 id="网络层解决了什么问题"><a href="#网络层解决了什么问题" class="headerlink" title="网络层解决了什么问题"></a>网络层解决了什么问题</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230808141049355.png" alt="image-20230808141049355"></p><h2 id="4-1-网络层提供的两种服务"><a href="#4-1-网络层提供的两种服务" class="headerlink" title="4.1 网络层提供的两种服务"></a>4.1 网络层提供的两种服务</h2><p>观点一：网络负责可靠交付（虚电路———逻辑链接）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806211230128.png" alt="image-20230806211230128"></p><p>很容易发生数据的丢失</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806211535386.png" alt="image-20230806211535386"></p><p>观点二：网络提供数据报服务</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806211626416.png" alt="image-20230806211626416"></p><p><strong>由更高层负责可靠通信（运输层）</strong></p><p>问题是会产生失序问题，但是网络健壮性增强了</p><p><strong>虚电路和数据报服务的对比</strong></p><p> <img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806212312552.png" alt="image-20230806212312552"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806212321164.png" alt="image-20230806212321164"></p><h2 id="4-2-网际协议IP"><a href="#4-2-网际协议IP" class="headerlink" title="4.2 网际协议IP"></a>4.2 网际协议IP</h2><h3 id="4-2-1-虚拟互连网络"><a href="#4-2-1-虚拟互连网络" class="headerlink" title="4.2.1 虚拟互连网络"></a>4.2.1 虚拟互连网络</h3><h4 id="不同网络的差异"><a href="#不同网络的差异" class="headerlink" title="不同网络的差异"></a>不同网络的差异</h4><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806212752293.png" alt="image-20230806212752293"></strong></p><p>通过使用中间设备来互连不同的网络—路由器（网络层）</p><h4 id="各种中间设备"><a href="#各种中间设备" class="headerlink" title="各种中间设备"></a>各种中间设备</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806213117006-1691328677767-1.png" alt="image-20230806213117006"></p><p>中继器和集线器是物理层设备</p><h4 id="IP协议"><a href="#IP协议" class="headerlink" title="IP协议"></a>IP协议</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806213247881.png" alt="image-20230806213247881"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806213257734.png" alt="image-20230806213257734"></p><p>***IGMP？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806213403935.png" alt="image-20230806213403935"></p><p>数据实际上运输会由上往下封装再由下往上解码运输，但是</p><h3 id="4-2-2-IP数据报的格式"><a href="#4-2-2-IP数据报的格式" class="headerlink" title="4.2.2 IP数据报的格式"></a>4.2.2 IP数据报的格式</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806214222431.png" alt="image-20230806214222431"></p><p>IP数据报分为首部和数据两部分，其中首部分为固定部分20字节和可变部分</p><h4 id="版本"><a href="#版本" class="headerlink" title="版本"></a>版本</h4><p>前4个字节是协议版本，例如IPv4</p><h4 id="首部长度"><a href="#首部长度" class="headerlink" title="首部长度"></a>首部长度</h4><p>一比特代表4字节</p><p>为1111时首部长15*4&#x3D;60字节</p><h4 id="区分服务"><a href="#区分服务" class="headerlink" title="区分服务"></a>区分服务</h4><p>一般不用</p><h4 id="总长度"><a href="#总长度" class="headerlink" title="总长度"></a>总长度</h4><p>首部+数据的长度，一比特为一字节</p><p>最大为2的16次方-1字节，但是实际上传输不了这么多—MTU限制总长度，那么就要将数据分片传输</p><h4 id="标识位"><a href="#标识位" class="headerlink" title="标识位"></a>标识位</h4><p>为了将分片的数据能够准确无误的重组</p><p><strong>所有分片都有相同的标识</strong></p><h4 id="标志"><a href="#标志" class="headerlink" title="标志"></a>标志</h4><p>为了将分片的数据能够准确无误的重组</p><p><strong>标志位中有保留位，待开发</strong></p><p>MF位：more fragment（是否最后分片），1表示后面还有分片，反之没有</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806220909198.png" alt="image-20230806220909198"></p><p>DF位：don‘t fragment（是否允许分片），1表示没有分片，0表示分片</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806220920117.png" alt="image-20230806220920117"></p><h4 id="片偏移"><a href="#片偏移" class="headerlink" title="片偏移"></a>片偏移</h4><p>为了将分片的数据能够准确无误的重组</p><p><strong>判断给数据开🔪的地方在哪里</strong></p><p><strong><u>栗子</u>：</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806220507327.png" alt="image-20230806220507327"></p><p>每个MTU里面包括20字节的首部和1480字节的数据，增加了首部开销</p><p>问题：为什么不把分组平均</p><p>答：避免头重脚轻，浪费首部</p><h5 id="计算"><a href="#计算" class="headerlink" title="计算"></a>计算</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806221237407.png" alt="image-20230806221237407"></p><p>数据的尾巴除以8得到偏移量 </p><h4 id="生存时间"><a href="#生存时间" class="headerlink" title="生存时间"></a>生存时间</h4><p>路由器之间传递一次叫<strong>跳</strong></p><p>生存时间就是规定这个跳的次数</p><p>不同的操作系统这个TTL（生存时间）值不同</p><p><em><strong><u>目的是不让数据在网络上无休止的浪费资源</u></strong></em></p><h4 id="协议"><a href="#协议" class="headerlink" title="协议"></a>协议</h4><p>协议负责指出数据部分应该交给上层的哪个部分</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806222222105.png" alt="image-20230806222222105"></p><h4 id="首部校验和"><a href="#首部校验和" class="headerlink" title="首部校验和"></a>首部校验和</h4><p>只对首部的部分进行校验，首部变了校验和也发生变化，不用管数据部分，错了让运输层想办法</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806222448510.png" alt="image-20230806222448510"></p><h4 id="源地址，目的地址"><a href="#源地址，目的地址" class="headerlink" title="源地址，目的地址"></a>源地址，目的地址</h4><p>一个接口一个IP地址，32位的二进制地址</p><h4 id="可选字段"><a href="#可选字段" class="headerlink" title="可选字段"></a>可选字段</h4><p>不怎么用</p><h4 id="IP协议功能及报头字段总结"><a href="#IP协议功能及报头字段总结" class="headerlink" title="IP协议功能及报头字段总结"></a>IP协议功能及报头字段总结</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806223210166.png" alt="image-20230806223210166"></p><p>以上首部各部分功能</p><h2 id="4-2-3-IP地址"><a href="#4-2-3-IP地址" class="headerlink" title="4.2.3 IP地址"></a>4.2.3 IP地址</h2><p>IP是啥？你家的经纬度~</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806223603213.png" alt="image-20230806223603213"></p><p>32位还是少了</p><h5 id="IP地址采用2级结构"><a href="#IP地址采用2级结构" class="headerlink" title="IP地址采用2级结构"></a><strong>IP地址采用2级结构</strong></h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806224526292.png" alt="image-20230806224526292"></p><p>哪一个网络的哪一台主机？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806224635807.png" alt="image-20230806224635807"></p><h5 id="分级地址优点"><a href="#分级地址优点" class="headerlink" title="分级地址优点"></a>分级地址优点</h5><p>方便分配和数据转发</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806224902585.png" alt="image-20230806224902585"></p><h5 id="点分十进制"><a href="#点分十进制" class="headerlink" title="点分十进制"></a>点分十进制</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806225032707.png" alt="image-20230806225032707"></p><p>一个字节一个部分</p><h4 id="分类的IP地址（old）"><a href="#分类的IP地址（old）" class="headerlink" title="分类的IP地址（old）"></a>分类的IP地址（old）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806225250534.png" alt="image-20230806225250534"></p><p>类别判断：A类第一个比特是0，B类前两位是10，c类前三位是110；A类网络地址8位，B类16位，C类24位</p><h6 id="以A类地址为例"><a href="#以A类地址为例" class="headerlink" title="以A类地址为例"></a>以A类地址为例</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806225710816.png" alt="image-20230806225710816"></p><p>网络地址除了标识符以外，全1表示用于本地软件环回测试，全0代表本网络（？）</p><p>主机地址全1表示该网络的所有主机（广播），全0代表主机所在的网络地址（84.0.0.0）</p><h6 id="网络大小"><a href="#网络大小" class="headerlink" title="网络大小"></a><strong>网络大小</strong></h6><p>这个网络大小差别太大，可能会取上不足取下有余，分配不灵活</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806230132160.png" alt="image-20230806230132160"></p><h6 id="不可分配地址"><a href="#不可分配地址" class="headerlink" title="不可分配地址"></a><strong>不可分配地址</strong></h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806230218512.png" alt="image-20230806230218512"></p><h4 id="子网划分（subnetting）"><a href="#子网划分（subnetting）" class="headerlink" title="子网划分（subnetting）"></a>子网划分（subnetting）</h4><p>就是使得划分标准增加以便合理调整网络大小<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806230730738.png" alt="image-20230806230730738"></p><p>栗子：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806230913588.png" alt="image-20230806230913588"></p><p>这样就能按照用户需求diy网络大小了</p><h6 id="子网掩码（可变VLSM？）"><a href="#子网掩码（可变VLSM？）" class="headerlink" title="子网掩码（可变VLSM？）"></a>子网掩码（可变VLSM？）</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806231804265.png" alt="image-20230806231804265"></p><p>掩码用来计算网络地址</p><p>网络和子网位为1，主机位为0，再把掩码和IP地址AND一下后，仅保留网络地址（路由器要用）</p><h6 id="IP地址是否在同一个网络"><a href="#IP地址是否在同一个网络" class="headerlink" title="IP地址是否在同一个网络"></a>IP地址是否在同一个网络</h6><ul><li><p>子网掩码的位数相等</p></li><li><p>网络地址每一位都相同</p></li></ul><h6 id="优缺点-2"><a href="#优缺点-2" class="headerlink" title="优缺点"></a>优缺点</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806232354376.png" alt="image-20230806232354376"></p><p><strong>解决了网络过大的问题，没有解决网络太小的问题</strong></p><h4 id="无分类编制方法CIDR（new）"><a href="#无分类编制方法CIDR（new）" class="headerlink" title="无分类编制方法CIDR（new）"></a>无分类编制方法CIDR（new）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230806232545705.png" alt="image-20230806232545705"></p><p><strong>网络前缀可以变长度</strong></p><h5 id="CIDR用掩码表示网络前缀的长度"><a href="#CIDR用掩码表示网络前缀的长度" class="headerlink" title="CIDR用掩码表示网络前缀的长度"></a>CIDR用掩码表示网络前缀的长度</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/21ccd390-6f34-4d92-8c88-730e5d6ac4f8.png" alt="image-20230806232941019"></p><h5 id="三个特殊地址块"><a href="#三个特殊地址块" class="headerlink" title="三个特殊地址块"></a>三个特殊地址块</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/28d72a4a-2ad8-430c-b461-752fc35f5e32.png" alt="image-20230807000645119"></p><h5 id="特点-4"><a href="#特点-4" class="headerlink" title="特点"></a>特点</h5><ul><li><strong>构造超网</strong></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/931f6ef8-60be-4fd2-961f-18883d04af20.png" alt="image-20230807000813594"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/901e8bab-ed22-449a-8e77-f838a4064798.png" alt="image-20230807004212535"></p><p>分地址块就是把小数点往后面移动，构造超网就是左移（？ ）</p><ul><li><strong>减少路由条目</strong></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/40235bd9-b88e-4e03-9e53-37c2e10b53aa.png" alt="image-20230807004706061"></p><p>地址数量也没有增加</p><h3 id="IP地址的特点"><a href="#IP地址的特点" class="headerlink" title="IP地址的特点"></a>IP地址的特点</h3><ul><li>每个IP地址都由网络前缀和主机号两部分组成<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/56b220b0-7092-455b-b338-50995b532593.png" alt="image-20230807005239784"></li><li>IP地址是标志一台主机（或路由器）和一条链路的接口</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/489a7049-47b4-46fb-96a5-4c0b1b3837d8.png" alt="image-20230807005258395"></p><ul><li>转发器或交换机连起来的若干个局域网仍为一个网络<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/612c64af-66f2-40cd-90e3-59273b7c9591.png" alt="image-20230807005354436"></li><li>在IP地址中，所有分配到网络前缀的网络都是平等的</li></ul><h2 id="4-3-IP分组的转发"><a href="#4-3-IP分组的转发" class="headerlink" title="4.3 IP分组的转发"></a>4.3 IP分组的转发</h2><h3 id="路由器分组转发算法"><a href="#路由器分组转发算法" class="headerlink" title="路由器分组转发算法"></a>路由器分组转发算法</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/876a7fdd-4ec4-4aae-acb3-d23d78eccb72.png" alt="image-20230807111631247">255.255.255.255是广播地址但是发送这个的资源要求太大，一般情况下属于受限地址，只有直接地址可以转发</p><h3 id="4-3-1-基于终点的转发"><a href="#4-3-1-基于终点的转发" class="headerlink" title="4.3.1 基于终点的转发"></a>4.3.1 基于终点的转发</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/31681337-b941-4953-b876-3ffe771ab047.png" alt="image-20230807101322460"></p><h6 id="路由器转发表包含哪些信息？"><a href="#路由器转发表包含哪些信息？" class="headerlink" title="路由器转发表包含哪些信息？"></a><strong>路由器转发表包含哪些信息？</strong></h6><ul><li>终点地址</li><li>下一跳地址</li></ul><p>*都是目的网络地址，为节约路由表空间</p><h6 id="栗子"><a href="#栗子" class="headerlink" title="栗子"></a><strong>栗子</strong></h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8d961d53-c365-4793-98b9-15ae8028af0a.png" alt="image-20230807103230926"></p><h6 id="转发步骤"><a href="#转发步骤" class="headerlink" title="转发步骤"></a>转发步骤</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2452b4d5-3b43-46b4-8dee-094cfb9b6a37.png" alt="image-20230807103438419"></p><h6 id="问题：掩码从哪来？"><a href="#问题：掩码从哪来？" class="headerlink" title="问题：掩码从哪来？"></a>问题：掩码从哪来？</h6><p> IP首部不能更改，但是路由表还可以更改，在转发表地址加一个后缀即可，如128.0.0.12&#x2F;24</p><p>将目的地址和掩码AND后的网络号相同则转发，不同则跳过，比对下一条，全部不匹配则丢弃</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8383bb02-a7a0-484c-b212-c7c353cd8abb.png" alt="image-20230808141625182"></p><h3 id="4-3-2-最长前缀匹配"><a href="#4-3-2-最长前缀匹配" class="headerlink" title="4.3.2 最长前缀匹配"></a>4.3.2 最长前缀匹配</h3><p>查找转发表的过程就是逐行寻找前缀匹配</p><p>使用CIDR时，<strong>查找转发表时可能会得到不同的匹配结果</strong>，子网掩码越大越精确(网络地址最长)</p><p>一般出现这种情况，网络有包含关系，例如学校的哪一个班</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ec12549b-fc3c-41be-9141-9d8642cdc800.png" alt="image-20230807110520624"><strong>前缀最长的排更前面</strong></p><p><strong>特殊路由</strong></p><ul><li>主机路由a.b.c.d&#x2F;32—转发表最前面</li><li>默认路由0.0.0.0&#x2F;0—转发表最后面（兜底）</li></ul><h6 id="二叉线索查找"><a href="#二叉线索查找" class="headerlink" title="二叉线索查找"></a>二叉线索查找</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f7b5a98d-a652-407a-884f-a55a8a69eb53.png" alt="image-20230807141640178"></p><h3 id="4-3-3-IP地址与MAC地址"><a href="#4-3-3-IP地址与MAC地址" class="headerlink" title="4.3.3 IP地址与MAC地址"></a>4.3.3 IP地址与MAC地址</h3><p>网络层已经有了IP地址，那么MAC地址还有用吗？</p><p><strong>上层的工作要依靠下层的服务</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ff3e9278-a2e6-40cf-91bb-7e53afd803a5.png" alt="image-20230807141846232"></p><h5 id="对比"><a href="#对比" class="headerlink" title="对比"></a>对比</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/22d9d4c4-d8a7-4056-858a-fd04af326beb.png" alt="image-20230807142034635"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/29198bf0-6d30-4c42-ba91-412e854ccb3f.png" alt="image-20230808141221807"></p><p>那么怎么知道下一个路由器的MAC地址是多少呢？（由IP得到MAC地址–ARP协议）</p><h3 id="4-3-4-地址解析协议ARP"><a href="#4-3-4-地址解析协议ARP" class="headerlink" title="4.3.4 地址解析协议ARP"></a>4.3.4 地址解析协议ARP</h3><h4 id="过程"><a href="#过程" class="headerlink" title="过程"></a>过程</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a4ae296b-89af-41fb-991b-99c1b2dd7e53.png" alt="image-20230807142659965"></p><p>广播ARP请求</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8badb7a8-6715-4e79-b58d-0c1b606b6df4.png" alt="image-20230807142749072">单播ARP响应</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0c7d3252-dd76-4f5f-9ad6-eb276e1d2051.png" alt="image-20230807143004913"><strong>流程图</strong></p><h4 id="ARP高速缓存"><a href="#ARP高速缓存" class="headerlink" title="ARP高速缓存"></a>ARP高速缓存</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/1293e7c3-9fe7-468b-b0a6-47d2bb5ce43f.png" alt="image-20230807143045605"></p><p><strong>作用</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a7162f1a-adbc-4b9d-9437-b4ef5c63d71e.png" alt="image-20230807143137784"></p><p>减少广播通信，节约资源</p><p><u>2台主机在不同的局域网地址ARP时通过路由器来代传输，首先路由器当接收者回应ARP，然后又当发送者发送ARP请求，简称又当爹当妈</u></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/75f736a4-4fdd-44a7-8dfd-138cc50a2761.png" alt="image-20230807143744911"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/47b71b49-f4d4-4370-8818-964e362245b7.png" alt="image-20230807143753000"></p><h4 id="使用ARP的4种情况"><a href="#使用ARP的4种情况" class="headerlink" title="使用ARP的4种情况"></a>使用ARP的4种情况</h4><ul><li>同一局域网的不同主机</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/41185f81-49e5-4708-86e5-76cd7698d9ba.png" alt="image-20230807143953144"></p><ul><li>不同局域网的不同主机</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/63111460-0660-41b9-9235-85d18ae32e51.png" alt="image-20230807144030029"></p><ul><li>路由器和主机（近）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/acd9ab96-5790-415c-ba2b-d454ba994071.png" alt="image-20230807144218044"></p><ul><li>路由器和主机（远）</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/b2ca221a-37cc-4822-b258-ceaf5e4f965a.png" alt="image-20230807144251058"></p><h4 id="使用IP的原因"><a href="#使用IP的原因" class="headerlink" title="使用IP的原因"></a>使用IP的原因</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2b1aa4cd-137e-41a6-b113-f6e10a34285d.png" alt="image-20230807144456071"></p><h2 id="4-4-网络控制报文协议ICMP"><a href="#4-4-网络控制报文协议ICMP" class="headerlink" title="4.4 网络控制报文协议ICMP"></a>4.4 网络控制报文协议ICMP</h2><p><u>确保一定的准确性措施</u></p><h3 id="4-4-1-4-4-2-ICMP报文的格式和种类-ICMP的实际运用"><a href="#4-4-1-4-4-2-ICMP报文的格式和种类-ICMP的实际运用" class="headerlink" title="4.4.1|4.4.2 ICMP报文的格式和种类|ICMP的实际运用"></a>4.4.1|4.4.2 ICMP报文的格式和种类|ICMP的实际运用</h3><ul><li>允许主机或者路由器报告差错情况和提供有关异常情况的报告</li><li>由主机和路由器用于网络层的 通信</li><li>是网络层的协议</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6061079e-e563-4aa3-8dbe-c4a92f7490ba.png" alt="image-20230807151542329"></p><h4 id="报文种类"><a href="#报文种类" class="headerlink" title="报文种类"></a>报文种类</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/5f556cf4-a423-4e59-a379-41489955acc0.png" alt="image-20230807151607124"></p><p>某个问题的细节原因</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4687ec13-c964-49ce-b466-e5e8141ccf8a.png" alt="image-20230807151758185"></p><p>差错单向，<strong>询问双向</strong></p><h4 id="ICMP差错报文"><a href="#ICMP差错报文" class="headerlink" title="ICMP差错报文"></a>ICMP差错报文</h4><p>在数据丢失的时候产生报文</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ed47138f-4cf6-4cd9-b84b-7ed5c463f11b.png" alt="image-20230807152032143"></p><h4 id="Traceroute-x2F-Tracert（追踪路由）"><a href="#Traceroute-x2F-Tracert（追踪路由）" class="headerlink" title="Traceroute&#x2F;Tracert（追踪路由）"></a>Traceroute&#x2F;Tracert（追踪路由）</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/25fd911b-eb54-4364-826f-18882b2d74e3.png" alt="image-20230807152201649"></p><p><strong>方法</strong></p><p> <img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/69e6f00a-e828-4b63-89f7-16fd35a38451.png" alt="image-20230807152424539"></p><ul><li>源故意发错误信息</li><li>路由器丢弃</li><li>产生ICMP错误报文</li><li>回应，报文暴露路由器IP地址</li></ul><p>但是现在一些重要的路由器IP地址会收到保护无法使用Tracert</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/26c6d38f-c778-42bf-bf89-9f9836c5b7e7.png" alt="image-20230808141723742"></p><h4 id="不发ICMP的情况"><a href="#不发ICMP的情况" class="headerlink" title="不发ICMP的情况"></a>不发ICMP的情况</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/edb481fb-ec93-4af3-b30f-fc117a772d61.png" alt="image-20230807152745857"></p><ul><li>ICMP自己错误</li><li>第一个分片错了以后都不发（肯定错）</li><li>多播不发</li><li>特殊地址不发</li></ul><h4 id="ICMP询问报文"><a href="#ICMP询问报文" class="headerlink" title="ICMP询问报文"></a>ICMP询问报文</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3a247284-8eb2-4c1a-80e6-919e8d24a8d7.png" alt="image-20230807153029924"></p><h4 id="PING和ICMP"><a href="#PING和ICMP" class="headerlink" title="PING和ICMP"></a>PING和ICMP</h4><ul><li>用于测试两个主机之间的连通性</li><li>使用了ICMP的回送请求与会送回答报文</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/31db788e-d848-4db4-b883-c783d65942a3.png" alt="image-20230807153321359"></p><ul><li><strong>疯狂PING一个主机可以把它的资源占用完–DDoS</strong></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9c63f0cd-894d-4b51-88fe-30fb2c0361ca.png" alt="image-20230808141704500"></p><ul><li>可以通过返回的TTL<strong>值判断对方的操作系统</strong></li></ul><h2 id="4-5-IPv6"><a href="#4-5-IPv6" class="headerlink" title="4.5 IPv6"></a>4.5 IPv6</h2><h3 id="4-5-1-IPv6协议概述"><a href="#4-5-1-IPv6协议概述" class="headerlink" title="4.5.1 IPv6协议概述"></a>4.5.1 IPv6协议概述</h3><h4 id="出现原因："><a href="#出现原因：" class="headerlink" title="出现原因："></a>出现原因：</h4><ul><li><p>地址不足</p></li><li><p>分类不合理</p></li><li><p>NAT没有完美解决大小问题</p></li><li><p>安全问题</p></li><li><p>移动性支持弱</p></li></ul><h4 id="主要变化"><a href="#主要变化" class="headerlink" title="主要变化"></a>主要变化</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fb90cb78-4335-48d1-9fb4-edc0b86d7a3b.png" alt="image-20230807154601034"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6b5e59e2-70e9-4fc5-94cf-bdf4eabb351a.png" alt="image-20230807154703967"></p><p>看看得了，记不住</p><h4 id="IP数据报的一般形式"><a href="#IP数据报的一般形式" class="headerlink" title="IP数据报的一般形式"></a>IP数据报的一般形式</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e467af97-2c52-4177-b26e-0b5279f18754.png" alt="image-20230807154809377"></p><p>基本首部+有效载荷（扩展首部加数据部分）</p><h5 id="基本首部"><a href="#基本首部" class="headerlink" title="基本首部"></a>基本首部</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/53932ae6-45a0-4f3b-9a5c-78b86e2bc5fa.png" alt="image-20230807154925383"></p><h6 id="版本-1"><a href="#版本-1" class="headerlink" title="版本"></a>版本</h6><p>指明协议版本–4位（0110&#x3D;6）</p><h6 id="通信量类"><a href="#通信量类" class="headerlink" title="通信量类"></a>通信量类</h6><p>8位，区分不同类别IPv6数据报或者优先级</p><h6 id="流标号"><a href="#流标号" class="headerlink" title="流标号"></a>流标号</h6><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ba84c85c-06f0-4184-b6b1-5a582098c8fc.png" alt="image-20230807155217831">感觉有伏笔</p><h6 id="有效载荷长度"><a href="#有效载荷长度" class="headerlink" title="有效载荷长度"></a>有效载荷长度</h6><p>16位，指明有效载荷的字节数（除去基本首部）</p><h6 id="下一个首部"><a href="#下一个首部" class="headerlink" title="下一个首部"></a>下一个首部</h6><p>告知上层该数据之后要交给哪一个协议进行处理</p><h6 id="跳数限制"><a href="#跳数限制" class="headerlink" title="跳数限制"></a>跳数限制</h6><p>类似TTL</p><h5 id="IPv4和IPv6报文对比"><a href="#IPv4和IPv6报文对比" class="headerlink" title="IPv4和IPv6报文对比"></a>IPv4和IPv6报文对比</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ebfce0eb-10a1-4300-a032-a212d2d5e0c1.png" alt="image-20230807155730602"></p><h5 id="扩展首部"><a href="#扩展首部" class="headerlink" title="扩展首部"></a>扩展首部</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fae6aa13-ba29-4625-ac23-045a8a5763f9.png" alt="image-20230807155924524"></p><h3 id="4-5-2-IPv6的地址"><a href="#4-5-2-IPv6的地址" class="headerlink" title="4.5.2 IPv6的地址"></a>4.5.2 IPv6的地址</h3><ul><li>地址占128位</li><li>三种基本类型：单播、多播、任播–找最近的（广播变任播）</li></ul><h4 id="冒泡十六进制"><a href="#冒泡十六进制" class="headerlink" title="冒泡十六进制"></a>冒泡十六进制</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/20fce1bd-c92c-4bd1-acda-18f5da6f5092.png" alt="image-20230807160309236"></p><p>16个比特转为4位16进制数</p><p><strong>零压缩：一连串的0化简为两个冒号</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6c906fb4-bf57-4d49-b7bb-606d8dc288c9.png" alt="image-20230807160759262">这种情况只能简化较为长的一段0，只能压缩一次</p><h5 id="点分十进制后缀"><a href="#点分十进制后缀" class="headerlink" title="点分十进制后缀"></a>点分十进制后缀</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ac90ac30-00dc-430b-af69-2462354996ec.png" alt="image-20230807161315016"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ba9ab61b-90ae-479f-8d54-f228af96e9b3.png" alt="image-20230808141811108"></p><h5 id="前缀的表示方法"><a href="#前缀的表示方法" class="headerlink" title="前缀的表示方法"></a>前缀的表示方法</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0080ddfd-2f69-4cbc-8abc-bc75d8ac9616.png" alt="image-20230807161004686"></p><p>子网掩码没了</p><h5 id="分类（略）"><a href="#分类（略）" class="headerlink" title="分类（略）"></a>分类（略）</h5><h5 id="零压缩"><a href="#零压缩" class="headerlink" title="零压缩"></a>零压缩</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9c62e94b-edd6-4824-8bd6-b57a47729c00.png" alt="image-20230808141849205"></p><h5 id="地址分配"><a href="#地址分配" class="headerlink" title="地址分配"></a>地址分配</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d7b66bbb-825f-4ff4-b5ed-6c04ebda3743.png" alt="image-20230807161701344"></p><p>无地址自动配置就是网络前缀加上你的MAC地址</p><p>ND:邻居发现</p><p>RS：路由器请求报文</p><h3 id="4-5-3-从IPv4到IPv6"><a href="#4-5-3-从IPv4到IPv6" class="headerlink" title="4.5.3 从IPv4到IPv6"></a>4.5.3 从IPv4到IPv6</h3><p>太先进很难适应，现在还在过渡</p><ul><li><p>向后兼容：v6可以兼容v4</p></li><li><p>过渡策略：</p><h4 id="双协议栈"><a href="#双协议栈" class="headerlink" title="双协议栈"></a>双协议栈</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/65a45ddf-37f5-470f-807e-e5bf6b175dc6.png" alt="image-20230807162407784"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/992b2a4f-d104-4631-a252-dbf89fbf3bad.png" alt="image-20230808142050720"></p><h4 id="2-隧道技术"><a href="#2-隧道技术" class="headerlink" title="2.隧道技术"></a>2.隧道技术</h4></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f4b48476-a0e7-4cfc-89e9-cd8d408f9eeb.png" alt="image-20230807162520160"></p><p>给v6套了个皮变成v4了</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/24fcf657-cd56-492f-9487-4d1395613c72.png" alt="image-20230808142120111"></p><h3 id="4-5-4ICMPv6"><a href="#4-5-4ICMPv6" class="headerlink" title="4.5.4ICMPv6"></a>4.5.4ICMPv6</h3><p>升级版！ARP没了</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a670c94c-838e-4d62-911a-12dd412adcd2.png" alt="image-20230807165514244"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d120fca6-7433-4d27-a227-c121cf1e36ba.png" alt="image-20230807165554884"></p><p>ND：临站发现</p><p>MLD：多播听众交付</p><h2 id="4-6-路由选择协议"><a href="#4-6-路由选择协议" class="headerlink" title="4.6 路由选择协议"></a>4.6 路由选择协议</h2><p>路由器怎么智能选择线路进行数据传输？</p><h3 id="4-6-1-路由选择协议概述"><a href="#4-6-1-路由选择协议概述" class="headerlink" title="4.6.1 路由选择协议概述"></a>4.6.1 路由选择协议概述</h3><h4 id="策略分类"><a href="#策略分类" class="headerlink" title="策略分类"></a>策略分类</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fc89764e-f940-4760-875e-400487044412.png" alt="image-20230807170106633"></p><h4 id="问题-1"><a href="#问题-1" class="headerlink" title="问题"></a>问题</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ea3f4339-01a1-47bb-b338-5f12e2cd3781.png" alt="image-20230807170254095"></p><p><strong>采用层次路由</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4438505b-d9c7-469b-9992-89df60ca8b6e.png" alt="image-20230807170345001"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d38e7e06-ea9c-40d5-98df-f9b8808d43a5.png" alt="image-20230807171111130"></p><h4 id="自治系统"><a href="#自治系统" class="headerlink" title="自治系统"></a>自治系统</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/bbe21d8f-6c69-401c-8690-1f1e576d3da5.png" alt="image-20230807170431409"></p><p>每一个AS<strong>区域使用单一和一致的路由选择策略</strong></p><p>接下来就介绍这些AS内策略，称为内部网关路由协议（IGP）</p><p>》》》》OSPF，RIP，IS-IS，IGPR，EIGRP</p><p>不同AS之间靠<u>BGP协议</u></p><h3 id="4-6-2内部网关协议RIP"><a href="#4-6-2内部网关协议RIP" class="headerlink" title="4.6.2内部网关协议RIP"></a>4.6.2内部网关协议RIP</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3b87cd80-4a2e-499a-bd6d-845cd6cd9b86.png" alt="image-20230807171135311"></p><h4 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/bd1c06e6-88cd-4aca-88a1-657012864fb2.png" alt="image-20230807171208954"></p><ul><li>简单</li><li>基于经过路由器的数量</li><li>距离就是跳数</li><li><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/1e940daf-4d11-493c-a641-3a2066610696.png" alt="image-20230807171337327"></li></ul><p>16这个数字在RIP中意为不可达</p><h4 id="特点-5"><a href="#特点-5" class="headerlink" title="特点"></a>特点</h4><ul><li>仅和相邻路由器交换信息</li><li>交换路由表</li><li>按<strong>固定时间间隔</strong>交换信息</li></ul><h4 id="RIP路由表的建立"><a href="#RIP路由表的建立" class="headerlink" title="RIP路由表的建立"></a>RIP路由表的建立</h4><ul><li>每个路由器刚开始知道自己的邻居</li><li>接着再告诉自己的其他邻居</li><li>若干次后谁都知道有谁了</li><li>RIP路由表项：目的网络，距离，下一跳</li><li>！！下一跳不变的情况下无脑更新，下一跳不同比较跳数，更新选择跳数小的</li></ul><h4 id="RIP2"><a href="#RIP2" class="headerlink" title="RIP2"></a>RIP2</h4><p>待补充</p><h4 id="优缺点-3"><a href="#优缺点-3" class="headerlink" title="优缺点"></a>优缺点</h4><p>好消息传得快，坏消息传得慢</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c71c8dc0-6400-488d-bbdb-9cd776d965b7.png" alt="image-20230807173546461"></p><h3 id="4-6-3内部网关协议OSPF"><a href="#4-6-3内部网关协议OSPF" class="headerlink" title="4.6.3内部网关协议OSPF"></a>4.6.3内部网关协议OSPF</h3><p> 基于速度来判断</p><h4 id="特点-6"><a href="#特点-6" class="headerlink" title="特点"></a>特点</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4f665c50-8044-411e-a37c-dfcfa91811cd.png" alt="image-20230807174609321"></p><p>适用于大网络，使用层次结构的区域划分，加快了收敛速度,减少了网络流量（分主干区域和普通区域）</p><h4 id="度量值"><a href="#度量值" class="headerlink" title="度量值"></a>度量值</h4><p>费用，<strong>带宽</strong>，时延，距离</p><h4 id="区域边界路由器ABR"><a href="#区域边界路由器ABR" class="headerlink" title="区域边界路由器ABR"></a>区域边界路由器ABR</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/51cddaa4-637c-425e-a1c9-14504bb69177.png" alt="image-20230807175227842"></p><p>如图R7</p><h4 id="自治系统边界路由器ASBR"><a href="#自治系统边界路由器ASBR" class="headerlink" title="自治系统边界路由器ASBR"></a>自治系统边界路由器ASBR</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6eb5d494-9624-40a2-992e-01fda1b9664a.png" alt="image-20230807175330310"></p><p>如图R6</p><h4 id="5种分组类型"><a href="#5种分组类型" class="headerlink" title="5种分组类型"></a>5种分组类型</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2e9dc9b4-d043-47b7-adc8-c6f2db495b3c.png" alt="image-20230807175524218"></p><h4 id="OSPF分组"><a href="#OSPF分组" class="headerlink" title="OSPF分组"></a>OSPF分组</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2f6437df-2b2a-43f1-a5cc-36491b525599.png" alt="image-20230807175549576">好复杂。。。</p><h4 id="可靠的洪泛法"><a href="#可靠的洪泛法" class="headerlink" title="可靠的洪泛法"></a>可靠的洪泛法</h4><p>待补充</p><h3 id="4-6-4外部网关协议BGP"><a href="#4-6-4外部网关协议BGP" class="headerlink" title="4.6.4外部网关协议BGP"></a>4.6.4外部网关协议BGP</h3><h4 id="特点-7"><a href="#特点-7" class="headerlink" title="特点"></a>特点</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807175850277.png" alt="image-20230807175850277"></p><p>BGP发言人（ASBR）</p><p>*感觉就像外交官，主管外国</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807180238722.png" alt="image-20230807180238722"></p><p>内部不能通过BGP分享信息</p><h4 id="BGP路由信息"><a href="#BGP路由信息" class="headerlink" title="BGP路由信息"></a>BGP路由信息</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807180705853.png" alt="image-20230807180705853"></p><h4 id="BGP路由选择顺序"><a href="#BGP路由选择顺序" class="headerlink" title="BGP路由选择顺序"></a>BGP路由选择顺序</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807180740690.png" alt="image-20230807180740690"></p><ul><li>不能兜圈子</li><li>AS-PATH中，不允许出现相同的AS号</li></ul><h3 id="4-6-5路由器工作原理"><a href="#4-6-5路由器工作原理" class="headerlink" title="4.6.5路由器工作原理"></a>4.6.5路由器工作原理</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807181339505.png" alt="image-20230807181339505"></p><p>核心功能：控制层面（各种路由协议+转发表）+数据层面（传输IP数据报）</p><h4 id="数据层面"><a href="#数据层面" class="headerlink" title="数据层面"></a>数据层面</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807181613046.png" alt="image-20230807181613046"></p><h4 id="核心层面"><a href="#核心层面" class="headerlink" title="核心层面"></a>核心层面</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807181635738.png" alt="image-20230807181635738"></p><h4 id="结构-1"><a href="#结构-1" class="headerlink" title="结构"></a>结构</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807181842439.png" alt="image-20230807181842439"></p><p>有点像交换机</p><h4 id="路由种类优先级"><a href="#路由种类优先级" class="headerlink" title="路由种类优先级"></a>路由种类优先级</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182009045.png" alt="image-20230807182009045"></p><h4 id="IP报文转发过程"><a href="#IP报文转发过程" class="headerlink" title="IP报文转发过程"></a>IP报文转发过程</h4><ul><li>链路层解封，IP头部校验</li><li>获取报文目的IP地址</li><li>基于IP地址查转发表</li><li>查询失败，丢弃报文</li><li>查询成功–》获取转发出接口和下一跳IP，TTL减一，计算校验和，链路层封装发送</li></ul><h4 id="交换结构"><a href="#交换结构" class="headerlink" title="交换结构"></a>交换结构</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182454857.png" alt="image-20230807182454857"></p><h2 id="4-7-IP多播"><a href="#4-7-IP多播" class="headerlink" title="4.7 IP多播"></a>4.7 IP多播</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182649216.png" alt="image-20230807182649216"></p><p><strong>应用</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182725459.png" alt="image-20230807182725459"></p><p><strong>实现步骤</strong></p><ul><li>确定多播组成员</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182825052.png" alt="image-20230807182825052"></p><ul><li>多播路由</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807182936016.png" alt="image-20230807182936016"></p><p>转发多播数据的三种方法</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807183421026.png" alt="image-20230807183421026"></p><h2 id="4-8-VPN和NAT"><a href="#4-8-VPN和NAT" class="headerlink" title="4.8 VPN和NAT"></a>4.8 VPN和NAT</h2><h4 id="4-8-1-VPN"><a href="#4-8-1-VPN" class="headerlink" title="4.8.1 VPN"></a>4.8.1 VPN</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807183641376.png" alt="image-20230807183641376"></p><h4 id="4-8-2-NAT"><a href="#4-8-2-NAT" class="headerlink" title="4.8.2 NAT"></a>4.8.2 NAT</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807183802714.png" alt="image-20230807183802714"></p><h5 id="NAPT"><a href="#NAPT" class="headerlink" title="NAPT"></a>NAPT</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807183840227.png" alt="image-20230807183840227"></p><p>为了让公有网络进入私有网络能够分辨给哪个主机（一定程度上保护了私有网络）</p><h5 id="优缺点-4"><a href="#优缺点-4" class="headerlink" title="优缺点"></a>优缺点</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807184107243.png" alt="image-20230807184107243"></p><h2 id="4-9-MPLS-简化路由表"><a href="#4-9-MPLS-简化路由表" class="headerlink" title="4.9 MPLS(简化路由表)"></a>4.9 MPLS(简化路由表)</h2><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807184225019.png" alt="image-20230807184225019"></p><ul><li>打标签</li><li>在链路层硬件转发</li></ul><p><strong>格式</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807184601827.png" alt="image-20230807184601827"></p><h2 id="4-10-软件定义网络SDN"><a href="#4-10-软件定义网络SDN" class="headerlink" title="4.10 软件定义网络SDN"></a>4.10 软件定义网络SDN</h2><h3 id="优点-2"><a href="#优点-2" class="headerlink" title="优点"></a>优点</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807184656953-1691405218125-5.png" alt="image-20230807184656953"></p><p>在路由器的控制层面工作，将每一个路由器各自计算路由升级成统一管理，路由器就只有查表转发了，效率增加了</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807184919702.png" alt="image-20230807184919702"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230807185050656.png" alt="image-20230807185050656"></p><p>openflow–数据层面：流表（匹配加动作）</p><h1 id="第五章-运输层"><a href="#第五章-运输层" class="headerlink" title="第五章 运输层"></a>第五章 运输层</h1><h2 id="5-1-运输层解决的问题"><a href="#5-1-运输层解决的问题" class="headerlink" title="5.1 运输层解决的问题"></a>5.1 运输层解决的问题</h2><h3 id="5-1-1-进程之间的通信"><a href="#5-1-1-进程之间的通信" class="headerlink" title="5.1.1 进程之间的通信"></a>5.1.1 进程之间的通信</h3><ul><li><p>主机间的通信，本质上是两台主机的应用进程之间的通信</p></li><li><p>不同协议使用同一个运输协议叫做复用，从同一协议传输信息到不同进程叫做分用</p></li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812152945343.png" alt="image-20230812152945343"></p><h3 id="运输层提供的服务"><a href="#运输层提供的服务" class="headerlink" title="运输层提供的服务"></a>运输层提供的服务</h3><ul><li><strong>进程到进程的数据传输</strong></li><li><strong>差错检测</strong></li><li><strong>流量控制和拥塞控制</strong></li></ul><h3 id="5-1-2-运输层的两个重要协议"><a href="#5-1-2-运输层的两个重要协议" class="headerlink" title="5.1.2 运输层的两个重要协议"></a>5.1.2 运输层的两个重要协议</h3><h4 id="可靠信道与不可靠信道"><a href="#可靠信道与不可靠信道" class="headerlink" title="可靠信道与不可靠信道"></a>可靠信道与不可靠信道</h4><p>TCP面向连接的全双工可靠信道</p><p>UDP使用无连接的不可靠信道</p><h4 id="协议传输数据单元（TPDU）"><a href="#协议传输数据单元（TPDU）" class="headerlink" title="协议传输数据单元（TPDU）"></a>协议传输数据单元（TPDU）</h4><p>TCP—-TCP报文段</p><p>UDP–UDP报文段或用户数据报</p><h4 id="二者区别"><a href="#二者区别" class="headerlink" title="二者区别"></a>二者区别</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812153907764.png" alt="image-20230812153907764"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812153925210.png" alt="image-20230812153925210"></p><p>这张图很重要，他会问你哪些应用适用哪个协议 </p><h3 id="5-1-3-运输层的端口"><a href="#5-1-3-运输层的端口" class="headerlink" title="5.1.3 运输层的端口"></a>5.1.3 运输层的端口</h3><h4 id="复用和分用"><a href="#复用和分用" class="headerlink" title="复用和分用"></a>复用和分用</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812154208217.png" alt="image-20230812154208217"></p><h4 id="端口"><a href="#端口" class="headerlink" title="端口"></a>端口</h4><p>全称<strong>协议端口号</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812154251939.png" alt="image-20230812154251939"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812154330272.png" alt="image-20230812154330272"></p><p>IP是不能重复的，端口是独立的，是可以重复的</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812154428483.png" alt="image-20230812154428483"></p><p>管理部门：IANA</p><ul><li>通信需要知道对方的IP地址和端口（套接字socket&#x3D;（IP地址：端口号），如192.0.0.1：80）</li><li>UDP套接字——&lt;IP地址，端口号&gt;</li><li>TCP套接字——&lt;源IP地址，目的地址，源端口号，目的端口号&gt;</li></ul><h2 id="5-2-用户数据报协议UDP-（单工不连接）"><a href="#5-2-用户数据报协议UDP-（单工不连接）" class="headerlink" title="5.2 用户数据报协议UDP （单工不连接）"></a>5.2 用户数据报协议UDP （单工不连接）</h2><h3 id="5-2-1-UDP概述"><a href="#5-2-1-UDP概述" class="headerlink" title="5.2.1 UDP概述"></a>5.2.1 UDP概述</h3><p>在IP数据报上增加了复用，分用和差错检验</p><h4 id="特点-8"><a href="#特点-8" class="headerlink" title="特点"></a>特点</h4><ol><li><p><strong>无连接</strong></p></li><li><p><strong>尽最大努力交付</strong></p></li><li><p><strong>面向报文（不拆分）</strong></p></li><li><p><strong>没有拥塞控制</strong></p></li><li><p><strong>支持一对一，一对多，多对一，多对多</strong></p></li><li><p><strong>首部8字节，开销小</strong></p></li></ol><h4 id="适用应用"><a href="#适用应用" class="headerlink" title="适用应用"></a>适用应用</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812155300614.png" alt="image-20230812155300614"></p><h3 id="5-2-2-UDP的首部"><a href="#5-2-2-UDP的首部" class="headerlink" title="5.2.2 UDP的首部"></a>5.2.2 UDP的首部</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812155331566.png" alt="image-20230812155331566"></p><p><strong><u>计算检验和的时候临时将12字节的伪首部计算，计算完成后丢弃</u></strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812160908216.png" alt="image-20230812160908216"></p><h2 id="5-3-传输控制协议TCP概述（全双工面向连接）"><a href="#5-3-传输控制协议TCP概述（全双工面向连接）" class="headerlink" title="5.3 传输控制协议TCP概述（全双工面向连接）"></a>5.3 传输控制协议TCP概述（全双工面向连接）</h2><h3 id="5-3-1-TCP概述"><a href="#5-3-1-TCP概述" class="headerlink" title="5.3.1 TCP概述"></a>5.3.1 TCP概述</h3><ul><li>面向连接</li><li>提供可靠传输</li><li>支持一对一通信</li><li>全双工通信</li><li>面向字节流，不保留报文边界</li></ul><h3 id="各种面向连接"><a href="#各种面向连接" class="headerlink" title="各种面向连接"></a>各种面向连接</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812155819063.png" alt="image-20230812155819063"></p><h3 id="5-3-2-TCP的首部"><a href="#5-3-2-TCP的首部" class="headerlink" title="5.3.2 TCP的首部"></a>5.3.2 TCP的首部</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812155956746.png" alt="image-20230812155956746"></p><p>20**<u>字节固定首部</u>**</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span><span class="string">.</span> <span class="string">源端口和目的端口：各占</span> <span class="number">2</span> <span class="string">字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能通过端口实现。</span></span><br><span class="line"></span><br><span class="line"><span class="number">2</span><span class="string">.</span> <span class="string">序号：占</span> <span class="number">4</span> <span class="string">字节。TCP</span> <span class="string">连接中传送的数据流中的每一个字节都有一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。</span></span><br><span class="line"></span><br><span class="line"><span class="number">3</span><span class="string">.</span> <span class="string">确认号：占</span> <span class="number">4</span> <span class="string">字节，是期望收到对方的下一个报文段的数据的第一个字节的序号。</span></span><br><span class="line"></span><br><span class="line"><span class="string">若确认号</span> <span class="string">=</span> <span class="string">N，则表明：到序号</span> <span class="string">N</span> <span class="string">–</span> <span class="number">1</span> <span class="string">为止的所有数据都已正确收到。</span></span><br><span class="line"></span><br><span class="line"><span class="number">4</span><span class="string">.</span> <span class="string">数据偏移（即首部长度）：占</span> <span class="number">4</span> <span class="string">位，指出</span> <span class="string">TCP</span> <span class="string">报文段的数据起始处距离</span> <span class="string">TCP</span> <span class="string">报文段的起始处有多远。单位是</span> <span class="number">32</span> <span class="string">位字（以</span> <span class="number">4</span> <span class="string">字节为计算单位）</span></span><br><span class="line"></span><br><span class="line"><span class="number">5</span><span class="string">.</span> <span class="string">保留：占</span> <span class="number">6</span> <span class="string">位，保留为今后使用，但目前应置为</span> <span class="number">0</span><span class="string">。</span></span><br><span class="line"></span><br><span class="line"><span class="number">6</span><span class="string">.</span> <span class="string">紧急</span> <span class="string">URG：控制位。当</span> <span class="string">URG</span> <span class="string">=</span> <span class="number">1</span> <span class="string">时，表明紧急指针字段有效，告诉系统此报文段中有紧急数据，应尽快传送</span> <span class="string">(相当于高优先级的数据)。</span></span><br><span class="line"></span><br><span class="line"><span class="number">7</span><span class="string">.</span> <span class="string">确认</span> <span class="string">ACK：控制位。只有当</span> <span class="string">ACK</span> <span class="string">=1</span> <span class="string">时，确认号字段才有效。当</span> <span class="string">ACK</span> <span class="string">=0</span> <span class="string">时，确认号无效。</span></span><br><span class="line"></span><br><span class="line"><span class="number">8</span><span class="string">.</span> <span class="string">推送</span> <span class="string">PSH</span> <span class="string">(PuSH)</span> <span class="string">：控制位。接收</span> <span class="string">TCP</span> <span class="string">收到</span> <span class="string">PSH</span> <span class="string">=</span> <span class="number">1</span> <span class="string">的报文段后，就尽快（即“推送”向前）交付接收应用进程，而不再等到整个缓存都填满后再交付。</span></span><br><span class="line"></span><br><span class="line"><span class="number">9</span><span class="string">.</span> <span class="string">复位</span> <span class="string">RST</span> <span class="string">(ReSeT)</span> <span class="string">：控制位。当</span> <span class="string">RST=1</span> <span class="string">时，表明</span> <span class="string">TCP</span> <span class="string">连接中出现严重差错（如主机崩溃或其他原因），必须释放连接，然后再重新建立运输连接。</span></span><br><span class="line"></span><br><span class="line"><span class="number">10</span><span class="string">.</span> <span class="string">同步</span> <span class="string">SYN</span> <span class="string">(SYNchronization)</span> <span class="string">：控制位。同步</span> <span class="string">SYN</span> <span class="string">=</span> <span class="number">1</span> <span class="string">表示这是一个连接请求或连接接受报文。当</span> <span class="string">SYN</span> <span class="string">=</span> <span class="number">1</span><span class="string">，ACK</span> <span class="string">=</span> <span class="number">0</span> <span class="string">时，表明这是一个连接请求报文段。当</span> <span class="string">SYN</span> <span class="string">=</span> <span class="number">1</span><span class="string">，ACK</span> <span class="string">=</span> <span class="number">1</span> <span class="string">时，表明这是一个连接接受报文段。</span></span><br><span class="line"></span><br><span class="line"><span class="number">11</span><span class="string">.</span> <span class="string">终止</span> <span class="string">FIN</span> <span class="string">(FINish)</span> <span class="string">：控制位。用来释放一个连接。FIN=1</span> <span class="string">表明此报文段的发送端的数据已发送完毕，并要求释放运输连接。</span></span><br><span class="line"></span><br><span class="line"><span class="number">12</span><span class="string">.</span> <span class="string">窗口：占</span> <span class="number">2</span> <span class="string">字节。窗口值告诉对方：从本报文段首部中的确认号算起，接收方目前允许对方发送的数据量（以字节为单位）。</span></span><br><span class="line"></span><br><span class="line"><span class="string">窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化。</span></span><br><span class="line"></span><br><span class="line"><span class="number">13</span><span class="string">.</span> <span class="string">检验和：占</span> <span class="number">2</span> <span class="string">字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时，要在</span> <span class="string">TCP</span> <span class="string">报文段的前面加上</span> <span class="number">12</span> <span class="string">字节的伪首部。</span></span><br><span class="line"></span><br><span class="line"><span class="number">14</span><span class="string">.</span> <span class="string">紧急指针：占</span> <span class="number">2</span> <span class="string">字节。在</span> <span class="string">URG</span> <span class="string">=</span> <span class="number">1</span><span class="string">时，指出本报文段中的紧急数据的字节数（紧急数据结束后就是普通数据），指出了紧急数据的末尾在报文段中的位置。</span></span><br><span class="line"></span><br><span class="line"><span class="number">15</span><span class="string">.</span> <span class="string">选项：长度可变，最长可达</span> <span class="number">40</span> <span class="string">字节。</span></span><br><span class="line"></span><br><span class="line"><span class="number">16</span><span class="string">.</span> <span class="string">填充：使整个</span> <span class="string">TCP</span> <span class="string">首部长度是</span> <span class="number">4</span> <span class="string">字节的整数倍。</span></span><br></pre></td></tr></table></figure><h3 id="发送序号和确认序号的含义"><a href="#发送序号和确认序号的含义" class="headerlink" title="发送序号和确认序号的含义"></a>发送序号和确认序号的含义</h3><p>发送序号：数据载荷中第一个字节在字节的序号</p><p>确认号：期望收到的下一个字节的序号 </p><h3 id="最大报文段MSS"><a href="#最大报文段MSS" class="headerlink" title="最大报文段MSS"></a>最大报文段MSS</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812161113341.png" alt="image-20230812161113341"></p><ul><li>太小网络利用率低</li><li>太大分片的开销大</li></ul><h4 id=""><a href="#" class="headerlink" title=""></a></h4><h2 id="5-4-可靠传输的工作原理"><a href="#5-4-可靠传输的工作原理" class="headerlink" title="5.4 可靠传输的工作原理"></a>5.4 可靠传输的工作原理</h2><h3 id="5-4-1-停止等待协议"><a href="#5-4-1-停止等待协议" class="headerlink" title="5.4.1 停止等待协议"></a>5.4.1 停止等待协议</h3><ul><li>每发送完一个分组就停止发送，等待对方的确认</li><li>全双工工作方式下既是发送方又是接收方</li></ul><h4 id="无差错情况"><a href="#无差错情况" class="headerlink" title="无差错情况"></a>无差错情况</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812161740264.png" alt="image-20230812161740264"></p><h4 id="分组错误"><a href="#分组错误" class="headerlink" title="分组错误"></a>分组错误</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812161804355.png" alt="image-20230812161804355"></p><p>b接收到M1时检测出错误并且丢弃</p><h4 id="分组丢失"><a href="#分组丢失" class="headerlink" title="分组丢失"></a>分组丢失</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812161821756.png" alt="image-20230812161821756">M1在传输过程中就丢失了，b不知道也什么都不做</p><p><strong><u>解决方法</u></strong>–<strong>超时重传</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812162110026.png" alt="image-20230812162110026"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812162126132.png" alt="image-20230812162126132"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812162932293.png" alt="image-20230812162932293"></p><p>如果确认信息也丢失了？</p><ul><li>确认丢失</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812162408674.png" alt="image-20230812162408674"></p><p>丢弃第二次收到的分组，向a发送确认</p><ul><li>确认迟到</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812162946549.png" alt="image-20230812162946549"></p><p>双方都只认第一次</p><p>b丢弃第二次收到的M1，并且重新发送确认信息，a丢弃第二次确认</p><h4 id="特点-9"><a href="#特点-9" class="headerlink" title="特点"></a>特点</h4><ul><li>停止等待</li><li>暂存，为了重传</li><li>编号</li><li>超时重传</li></ul><h4 id="信道利用率"><a href="#信道利用率" class="headerlink" title="信道利用率"></a>信道利用率</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812163432742.png" alt="image-20230812163432742"></p><p><strong>解决方法</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812163451290.png" alt="image-20230812163451290"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812163519604.png" alt="image-20230812163519604"></p><h3 id="5-4-2-连续ARQ协议"><a href="#5-4-2-连续ARQ协议" class="headerlink" title="5.4.2 连续ARQ协议"></a>5.4.2 连续ARQ协议</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812163929140.png" alt="image-20230812163929140"></p><h4 id="原理-1"><a href="#原理-1" class="headerlink" title="原理"></a>原理</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812163959931.png" alt="image-20230812163959931"></p><h4 id="累计确认"><a href="#累计确认" class="headerlink" title="累计确认"></a>累计确认</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812164129206.png" alt="image-20230812164129206"></p><ul><li>优点：容易实现，确认丢失也不需要重传</li><li>缺点：不能向发 送方反应出接收方已经正确收到的</li></ul><h4 id="Go-back-N"><a href="#Go-back-N" class="headerlink" title="Go-back-N"></a>Go-back-N</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812172657080-1691832419155-1.png" alt="image-20230812172657080"></p><h4 id="与停止等待的对比"><a href="#与停止等待的对比" class="headerlink" title="与停止等待的对比"></a>与停止等待的对比</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812172743718.png" alt="image-20230812172743718"></p><h2 id="5-5-TCP可靠运输的实现"><a href="#5-5-TCP可靠运输的实现" class="headerlink" title="5.5 TCP可靠运输的实现"></a>5.5 TCP可靠运输的实现</h2><h3 id="5-5-1-以字节为单位的滑动窗口"><a href="#5-5-1-以字节为单位的滑动窗口" class="headerlink" title="5.5.1 以字节为单位的滑动窗口"></a>5.5.1 以字节为单位的滑动窗口</h3><ul><li>发送方和接收方各维持一个发送窗口和接收窗口</li><li>发送方根据接收方给出的窗口值构建出自己的发送窗口</li><li>发送窗口里面的序号表示允许发送的序号</li><li>窗口只能往序号大的方向移动和扩张</li></ul><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812173419545-1691832859974-3.png" alt="image-20230812173419545"></p><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812173740468.png" alt="image-20230812173740468"></strong></p><h4 id="窗口的滑动"><a href="#窗口的滑动" class="headerlink" title="窗口的滑动"></a>窗口的滑动</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812173845689.png" alt="image-20230812173845689"></p><p>确认号是还没有收到的数据，是期望接收到的数据的序号</p><p>发送方每收到一个接受确认，就将发送窗口向前滑动一个字节的位置  </p><h4 id="发送缓存"><a href="#发送缓存" class="headerlink" title="发送缓存"></a>发送缓存</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812175414815.png" alt="image-20230812175414815"></p><h4 id="接收缓存"><a href="#接收缓存" class="headerlink" title="接收缓存"></a>接收缓存</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812175613916.png" alt="image-20230812175613916"></p><h3 id="5-5-2-超时重传时间的选择"><a href="#5-5-2-超时重传时间的选择" class="headerlink" title="5.5.2 超时重传时间的选择"></a>5.5.2 超时重传时间的选择</h3><h4 id="加权平均往返时间RTTs"><a href="#加权平均往返时间RTTs" class="headerlink" title="加权平均往返时间RTTs"></a>加权平均往返时间RTTs</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812175755674.png" alt="image-20230812175755674"></p><h4 id="超时重传时间RTO"><a href="#超时重传时间RTO" class="headerlink" title="超时重传时间RTO"></a>超时重传时间RTO</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812175920696.png" alt="image-20230812175920696"></p><h4 id="RTT偏差的加权平均值"><a href="#RTT偏差的加权平均值" class="headerlink" title="RTT偏差的加权平均值"></a>RTT偏差的加权平均值</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180008096.png" alt="image-20230812180008096"></p><h4 id="Karn算法"><a href="#Karn算法" class="headerlink" title="Karn算法"></a>Karn算法</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180115248.png" alt="image-20230812180115248"></p><h5 id="修正版"><a href="#修正版" class="headerlink" title="修正版"></a>修正版</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180141017.png" alt="image-20230812180141017"></p><h3 id="5-5-3-选择确认SACK"><a href="#5-5-3-选择确认SACK" class="headerlink" title="5.5.3 选择确认SACK"></a>5.5.3 选择确认SACK</h3><p>一段数据中中间部分数据未传输，怎么只传输这些数据呢？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180317612.png" alt="image-20230812180317612"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180327548.png" alt="image-20230812180327548"></p><h2 id="5-6-TCP的流量控制"><a href="#5-6-TCP的流量控制" class="headerlink" title="5.6 TCP的流量控制"></a>5.6 TCP的流量控制</h2><h3 id="5-6-1-利用滑动窗口实现流量控制"><a href="#5-6-1-利用滑动窗口实现流量控制" class="headerlink" title="5.6.1 利用滑动窗口实现流量控制"></a>5.6.1 利用滑动窗口实现流量控制</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812180818607.png" alt="image-20230812180818607"></p><p>按接收方的接受能力来决定发送方的发送能力</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640.png" alt="图片"></p><h4 id="持续计时器"><a href="#持续计时器" class="headerlink" title="持续计时器"></a>持续计时器</h4><p>只要 TCP 连接的一方收到对方的零窗口通知，就启动该持续计时器。</p><p>若持续计时器设置的时间到期，就发送一个零窗口探测报文段（仅携带 1 字节的数据），对方在确认这个探测报文段时给出当前窗口值。</p><p>若窗口仍然是零，收到这个报文段的一方就重新设置持续计时器。</p><p>若窗口不是零，则死锁的僵局就可以打破了。</p><h3 id="5-6-2-TCP的传输效率"><a href="#5-6-2-TCP的传输效率" class="headerlink" title="5.6.2 TCP的传输效率"></a>5.6.2 TCP的传输效率</h3><ul><li>缓存中数据到达MSS长度就组装成一个TCP报文段发送出去</li><li>按发送方的应用进程要求发送</li><li>发送方的计时器时间到了将当前的缓存数据发送出去</li></ul><h4 id="糊涂窗口综合征"><a href="#糊涂窗口综合征" class="headerlink" title="糊涂窗口综合征"></a>糊涂窗口综合征</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812183202333.png" alt="image-20230812183202333"></p><h2 id="5-7-TCP的拥塞控制"><a href="#5-7-TCP的拥塞控制" class="headerlink" title="5.7 TCP的拥塞控制"></a>5.7 TCP的拥塞控制</h2><h3 id="5-7-1-拥塞控制的一般原理"><a href="#5-7-1-拥塞控制的一般原理" class="headerlink" title="5.7.1 拥塞控制的一般原理"></a>5.7.1 拥塞控制的一般原理</h3><p>拥塞原因：大量分组短时间进入网络，超过网络的处理能力</p><ol><li>节点缓存容量太小</li><li>链路容量不足</li><li>处理机处理速率太慢</li><li>拥塞本身会进一步加剧拥塞</li><li><strong>资源要求大于供给</strong></li></ol><h4 id="理论解决方法"><a href="#理论解决方法" class="headerlink" title="理论解决方法"></a>理论解决方法</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812183924857.png" alt="image-20230812183924857"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812183948388-1691836788840-7.png" alt="image-20230812183948388"></p><h3 id="5-7-2-TCP的拥塞控制方法"><a href="#5-7-2-TCP的拥塞控制方法" class="headerlink" title="5.7.2 TCP的拥塞控制方法"></a>5.7.2 TCP的拥塞控制方法</h3><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812184138229.png" alt="image-20230812184138229"></strong></p><p>出现拥塞将窗口减少，没有拥塞加大窗口</p><p><strong>拥塞发生依据</strong></p><p>超时重传计时器超时</p><p>收到三个重复的确认</p><h4 id="4种拥塞控制算法"><a href="#4种拥塞控制算法" class="headerlink" title="4种拥塞控制算法"></a>4种拥塞控制算法</h4><ol><li><p><strong>慢开始</strong></p></li><li><p><strong>拥塞避免</strong></p></li><li><p><strong>快重传</strong></p></li><li><p><strong>快恢复</strong></p></li></ol><p>ssthresh是标准，是阈值，cwnd是变量</p><h5 id="慢开始"><a href="#慢开始" class="headerlink" title="慢开始"></a>慢开始</h5><ul><li><p>慢开始就是指数增长（2的n次方）</p></li><li><p>cwnd和门限值的关系：</p><p>（1）当 cwnd &lt; ssthresh 时，使用慢开始算法。（指数）</p><p>（2）当 cwnd &gt; ssthresh 时，停止使用慢开始算法，改用拥塞避免算法。（线性）</p><p>（3）当 cwnd &#x3D; ssthresh 时，既可使用慢开始算法，也可使用拥塞避免算法。（线性）</p></li></ul><h5 id="拥塞避免"><a href="#拥塞避免" class="headerlink" title="拥塞避免"></a>拥塞避免</h5><p>这时候cwnd线性增加</p><p><strong>无论在慢开始阶段还是在拥塞避免阶段，只要发送方判断网络出现拥塞（重传定时器超时）：</strong></p><p><strong>（1）ssthresh &#x3D; max (cwnd&#x2F;2，2)</strong></p><p>**（2）cwnd &#x3D;1</p><p>*不能完全避免拥塞，只能减轻</p><h5 id="快重传"><a href="#快重传" class="headerlink" title="快重传"></a>快重传</h5><p>1.目的：让发送方尽早知道发生了个别报文段的丢失。</p><p>2.发送方只要连续收到三个重复的确认，就立即进行重传（即“快重传”），这样就不会出现超时。</p><p>3.使用快重传可以使整个网络的吞吐量提高约 20%。</p><p>4.快重传算法要求接收方立即发送确认，即使收到了失序的报文段，也要立即发出对已收到的报文段的重复确认。</p><h5 id="收到三个确认后会立即进行快恢复！！！（和拥塞避免有一点点差别）"><a href="#收到三个确认后会立即进行快恢复！！！（和拥塞避免有一点点差别）" class="headerlink" title="收到三个确认后会立即进行快恢复！！！（和拥塞避免有一点点差别）"></a><strong>收到三个确认后会立即进行快恢复</strong>！！！（和拥塞避免有一点点差别）</h5><p>1.慢开始门限 ssthresh &#x3D; 当前拥塞窗口 cwnd &#x2F; 2 ；</p><p>2.乘法减小 MD (Multiplicative Decrease) 拥塞窗口。（？）</p><p> <strong>新拥塞窗口 cwnd &#x3D; 慢开始门限 ssthresh</strong> </p><p>3.执行拥塞避免算法，使拥塞窗口缓慢地线性增大（加法增大 AI）。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691842192980-9.png" alt="图片"></p><h2 id="-1"><a href="#-1" class="headerlink" title=""></a><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640.png" alt="图片"></h2><h2 id="5-8-TCP的运输连接管理"><a href="#5-8-TCP的运输连接管理" class="headerlink" title="5.8 TCP的运输连接管理"></a>5.8 TCP的运输连接管理</h2><h3 id="5-8-1-TCP的连接建立"><a href="#5-8-1-TCP的连接建立" class="headerlink" title="5.8.1 TCP的连接建立"></a>5.8.1 TCP的连接建立</h3><p><strong>采用三报文握手：</strong>在客户和服务器之间交换三个 TCP 报文段，以防止已失效的连接请求报文段突然又传送到了服务器，因而产生TCP连接建立错误。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691842456653-12.png" alt="图片"></p><h3 id="5-8-2-TCP的连接释放"><a href="#5-8-2-TCP的连接释放" class="headerlink" title="5.8.2 TCP的连接释放"></a>5.8.2 TCP的连接释放</h3><p>数据传输结束后，通信的双方都可释放连接。</p><p>TCP 连接释放过程是<strong>四报文挥手</strong>。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691842471842-15.png" alt="图片">等待2MSL的时间的原因：</p><ol><li>保证发送的最后一个ACK报文段能够到达B</li><li>防止以失效的请求报文段出现在连接中（？）</li></ol><p><strong>保活计时器：</strong>防止在TCP连接中出现长时间空闲</p><h1 id="第六章-应用层"><a href="#第六章-应用层" class="headerlink" title="第六章 应用层"></a>第六章 应用层</h1><h2 id="6-1-域名系统DNS"><a href="#6-1-域名系统DNS" class="headerlink" title="6.1 域名系统DNS"></a>6.1 域名系统DNS</h2><h3 id="6-1-1域名系统概述"><a href="#6-1-1域名系统概述" class="headerlink" title="6.1.1域名系统概述"></a>6.1.1域名系统概述</h3><ol><li><p>域名系统 DNS用来把人们使用的机器名字（域名）转换为 IP 地址。</p></li><li><p>域名采用层次树状结构的命名方法</p></li><li><p>DNS 是一个联机分布式数据库系统，采用客户服务器方式。</p></li><li><p>域名到 IP 地址的解析是由若干个域名服务器程序共同完成。</p></li><li><p>域名服务器程序在专设的结点上运行，运行该程序的机器称为域名服务器</p></li></ol><h3 id="6-1-2-互联网的域名系统"><a href="#6-1-2-互联网的域名系统" class="headerlink" title="6.1.2 互联网的域名系统"></a>6.1.2 互联网的域名系统</h3><ol><li><p>命名方法：层次树状结构方法。</p></li><li><p>任何一个连接在互联网上的主机或路由器，都有一个唯一的层次结构的名字，即域名</p></li><li><p><strong>域 (domain)：</strong></p></li></ol><p>（1）名字空间中一个可被管理的划分。</p><p>（2）可以划分为子域，而子域还可继续划分为子域的子域，这样就形成了<strong>顶级域、二级域、三级域</strong>，等等。</p><ol start="4"><li><strong>域名结构：</strong>层次结构。由标号序列组成，各标号之间用点（.）隔开，各标号分别代表不同级别的域名</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691844012684-18.png" alt="图片"></p><h3 id="6-1-3-域名服务器"><a href="#6-1-3-域名服务器" class="headerlink" title="6.1.3 域名服务器"></a>6.1.3 域名服务器</h3><h4 id="区的不同划分"><a href="#区的不同划分" class="headerlink" title="区的不同划分"></a>区的不同划分</h4><p>区等于域，区小于域</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204224682.png" alt="image-20230812204224682"></p><h4 id="树状结构的域名服务器"><a href="#树状结构的域名服务器" class="headerlink" title="树状结构的域名服务器"></a>树状结构的域名服务器</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204259630.png" alt="image-20230812204259630"></p><h4 id="类型"><a href="#类型" class="headerlink" title="类型"></a>类型</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204320673.png" alt="image-20230812204320673"></p><h4 id="域名的解析过程"><a href="#域名的解析过程" class="headerlink" title="域名的解析过程"></a>域名的解析过程</h4><p>靠自己&#x2F;靠别人</p><h5 id="递归查询（靠别人）"><a href="#递归查询（靠别人）" class="headerlink" title="递归查询（靠别人）"></a>递归查询（靠别人）</h5><p>通常，主机向本地域名服务器查询时使用，若不知道，就以 DNS 客户的身份，向其他根域名服务器继续发出查询请求报文。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691844285446-21.png" alt="图片"></p><h5 id="迭代查询（靠自己）"><a href="#迭代查询（靠自己）" class="headerlink" title="迭代查询（靠自己）"></a>迭代查询（靠自己）</h5><p>本地域名服务器向根域名服务器查询时使用，要么给出所要查询的 IP 地址，要么告诉下一个要查询的域名服务器的 IP 地址，本地域名服务器继续后续查询</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691844309746-24.png" alt="图片"></p><h4 id="高速缓存域名服务器"><a href="#高速缓存域名服务器" class="headerlink" title="高速缓存域名服务器"></a>高速缓存域名服务器</h4><p>存放最近用过的名字以及从何处获得名字映射信息的记录。</p><p>作用：大大减轻根域名服务器的负荷，使 DNS 查询请求和回答报文的数量大为减少。</p><h2 id="6-2-文件传送协议FTP"><a href="#6-2-文件传送协议FTP" class="headerlink" title="6.2 文件传送协议FTP"></a>6.2 文件传送协议FTP</h2><p><strong>使用了TCP</strong></p><h3 id="6-2-1-FTP概述"><a href="#6-2-1-FTP概述" class="headerlink" title="6.2.1 FTP概述"></a>6.2.1 FTP概述</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204746175.png" alt="image-20230812204746175"></p><h4 id="特点-10"><a href="#特点-10" class="headerlink" title="特点"></a>特点</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204817385.png" alt="image-20230812204817385"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812204827665.png" alt="image-20230812204827665"></p><h4 id="主进程工作步骤"><a href="#主进程工作步骤" class="headerlink" title="主进程工作步骤"></a>主进程工作步骤</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812205039858.png" alt="image-20230812205039858"></p><h4 id="6-2-3-简单文件传送协议TFTP"><a href="#6-2-3-简单文件传送协议TFTP" class="headerlink" title="6.2.3 简单文件传送协议TFTP"></a>6.2.3 简单文件传送协议TFTP</h4><p><strong>概述</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812205255268.png" alt="image-20230812205255268"><strong>特点</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812205324981.png" alt="image-20230812205324981"></p><h2 id="6-3-远程终端协议TELNET"><a href="#6-3-远程终端协议TELNET" class="headerlink" title="6.3 远程终端协议TELNET"></a>6.3 远程终端协议TELNET</h2><p>使用TCP</p><p><strong>概述</strong></p><p><strong><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812205408164.png" alt="image-20230812205408164"></strong></p><p><strong>TELNET使用网络虚拟终端NVT格式</strong></p><h2 id="6-4-万维网www"><a href="#6-4-万维网www" class="headerlink" title="6.4 万维网www"></a>6.4 万维网www</h2><h3 id="6-4-1-万维网概述"><a href="#6-4-1-万维网概述" class="headerlink" title="6.4.1 万维网概述"></a>6.4.1 万维网概述</h3><ol><li><p>万维网 WWW (World Wide Web) 是一个大规模的、联机式的信息储藏所，并非某种特殊的计算机网络</p></li><li><p>访问方法：链接</p></li><li><p>提供分布式服务</p></li><li><p>万维网的工作方式：客户服务器方式</p></li></ol><h3 id="6-4-2-统一资源定位符URL"><a href="#6-4-2-统一资源定位符URL" class="headerlink" title="6.4.2 统一资源定位符URL"></a>6.4.2 统一资源定位符URL</h3><p><strong>URL 的格式：</strong>由以冒号（:）隔开的两大部分组成，对字符大写或小写没有要求</p><p>一般形式：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691845110901-27.png" alt="图片"></p><h3 id="6-4-3-超文本传送协议http"><a href="#6-4-3-超文本传送协议http" class="headerlink" title="6.4.3 超文本传送协议http"></a>6.4.3 超文本传送协议http</h3><p>HTTP 使用了面向连接的 TCP 作为运输层协议，保证了数据的可靠传输。</p><p>HTTP 协议本身是无连接的。</p><p><strong>代理服务器（万维网高速缓存）：</strong></p><p>它代表浏览器发出 HTTP 请求，使用高速缓存可减少访问互联网服务器的时延。</p><p><strong>类似于高速缓存域名服务器</strong></p><h3 id="6-4-4-万维网的文档"><a href="#6-4-4-万维网的文档" class="headerlink" title="6.4.4 万维网的文档"></a>6.4.4 万维网的文档</h3><p>在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。</p><p>页面制作的标准语言：HTML。</p><p><strong>注：HTML 不是应用层的协议，它只是万维网浏览器使用的一种语言。</strong></p><p><strong>想起了配置博客的痛苦时光</strong></p><h3 id="6-4-5-万维网的信息检索系统"><a href="#6-4-5-万维网的信息检索系统" class="headerlink" title="6.4.5 万维网的信息检索系统"></a>6.4.5 万维网的信息检索系统</h3><p>在万维网中用来进行搜索的程序叫做搜索引擎，分为全文检索搜索和分类目录搜索。</p><h3 id="6-4-6-博客和微博"><a href="#6-4-6-博客和微博" class="headerlink" title="6.4.6 博客和微博"></a>6.4.6 博客和微博</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812210104614.png" alt="image-20230812210104614"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812210133543.png" alt="image-20230812210133543"></p><h3 id="6-4-7-社交网络"><a href="#6-4-7-社交网络" class="headerlink" title="6.4.7 社交网络"></a>6.4.7 社交网络</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812210147387.png" alt="image-20230812210147387"></p><p>栗子：osu</p><h2 id="6-5-电子邮件"><a href="#6-5-电子邮件" class="headerlink" title="6.5 电子邮件"></a>6.5 电子邮件</h2><p>电子邮件 (e-mail)：指使用电子设备交换的邮件及其方法。</p><p><strong>优点：</strong>使用方便，传递迅速，费用低廉，可以传送多种类型的信息（包括：文字信息，声音和图像等）</p><p><strong>电子邮件系统的组成：</strong></p><ol><li><p>用户代理（用户与电子邮件系统的接口，又被称为电子邮件客户端软件）</p></li><li><p>邮件服务器（发送和接收邮件，同时还要向发信人报告邮件传送的情况，又被称为邮件传输代理，按照客户服务器方式工作）</p></li><li><p>邮件发送和读取协议（简单邮件发送协议 SMTP：用于在用户代理向邮件服务器或邮件服务器之间发送邮件。邮局协议 POP3：用于用户代理从邮件服务器读取邮件）</p></li></ol><p><strong>发送和接收电子邮件的步骤：</strong></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691845352215-30.png" alt="图片"></p><h2 id="6-6-动态主机配置协议DHCP"><a href="#6-6-动态主机配置协议DHCP" class="headerlink" title="6.6 动态主机配置协议DHCP"></a>6.6 动态主机配置协议DHCP</h2><h3 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h3><ol><li><p>动态主机配置协议 DHCP提供了即插即用连网的机制，允许一台计算机加入网络和获取 IP 地址，而不用手工配置。</p></li><li><p>DHCP 使用客户服务器方式，采用请求&#x2F;应答方式工作</p></li><li><p>DHCP 基于 UDP 工作，DHCP 服务器运行在 67 号端口， DHCP客户运行在 68 号端口。</p></li></ol><h3 id="DHCP中继代理"><a href="#DHCP中继代理" class="headerlink" title="DHCP中继代理"></a>DHCP中继代理</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691845812347-33.png" alt="图片"></p><p>DHCP 中继代理收到主机广播发送的发现报文后，就以单播方式向 DHCP 服务器转发此报文，并等待其回答，收到 DHCP 服务器回答的提供报文后，DHCP 中继代理再将其发回给主机。</p><ul><li>每个网络上不都需要DHCP服务器</li><li>每一个网络至少有一个DHCP中继代理，它配置了DHCP服务器的IP地址信息</li></ul><h3 id="DHCP协议的工作过程"><a href="#DHCP协议的工作过程" class="headerlink" title="DHCP协议的工作过程"></a>DHCP协议的工作过程</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/640-1691845964843-36.png" alt="图片"></p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">1</span>. DHCP 服务器被动打开 UDP 端口 <span class="number">67</span>，等待客户端发来的报文。</span><br><span class="line"></span><br><span class="line"><span class="attribute">2</span>. DHCP 客户从 UDP 端口 <span class="number">68</span> 发送 DHCP 发现报文 DHCPDISCOVER。</span><br><span class="line"></span><br><span class="line"><span class="attribute">3</span>. 凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文 DHCPOFFER，因此 DHCP 客户可能收到多个 DHCP 提供报文 。</span><br><span class="line"></span><br><span class="line"><span class="attribute">4</span>. DHCP 客户从几个 DHCP 服务器中选择其中的一个，并向所选择的 DHCP 服务器发送 DHCP 请求报文 DHCPREQUEST。</span><br><span class="line"></span><br><span class="line"><span class="attribute">5</span>. 被选择的 DHCP 服务器发送确认报文 DHCPACK，DHCP 客户可开始使用得到的临时 IP 地址了，进入已绑定状态。DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2，它们的超时时间分别是 <span class="number">0</span>.<span class="number">5</span>T 和 <span class="number">0</span>.<span class="number">875</span>T。当超时时间到时，就要请求更新租用期。</span><br><span class="line"></span><br><span class="line"><span class="attribute">6</span>. 租用期过了一半（T1 时间到），DHCP 发送请求报文 DHCPREQUEST，要求更新租用期。</span><br><span class="line"></span><br><span class="line"><span class="attribute">7</span>. DHCP 服务器若同意，则发回确认报文 DHCPACK。DHCP 客户得到了新的租用期，重新设置计时器。</span><br><span class="line"></span><br><span class="line"><span class="attribute">8</span>. DHCP 服务器若不同意，则发回否认报 DHCPNACK。这时 DHCP 客户必须立即停止使用原来的 IP 地址，而必须重新申请 IP 地址（回到步骤<span class="number">2</span>）。若 DHCP 服务器不响应步骤<span class="number">6</span>的请求报文 DHCPREQUEST，则在租用期过了 <span class="number">87</span>.<span class="number">5</span>% 时 (T2 时间到)，DHCP 客户必须重新发送请求报文 DHCPREQUEST（重复步骤<span class="number">6</span>），然后又继续后面的步骤。</span><br><span class="line"></span><br><span class="line"><span class="attribute">9</span>. DHCP 客户可随时提前终止服务器所提供的租用期，这时只需向 DHCP 服务器发送释放报文 DHCPRELEASE 即可。</span><br></pre></td></tr></table></figure><h2 id="6-7-简单网络管理协议SNMP"><a href="#6-7-简单网络管理协议SNMP" class="headerlink" title="6.7 简单网络管理协议SNMP"></a>6.7 简单网络管理协议SNMP</h2><h3 id="6-7-1-网络管理的基本概念"><a href="#6-7-1-网络管理的基本概念" class="headerlink" title="6.7.1 网络管理的基本概念"></a>6.7.1 网络管理的基本概念</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212126877.png" alt="image-20230812212126877"></p><h4 id="被管对象"><a href="#被管对象" class="headerlink" title="被管对象"></a>被管对象</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212213600.png" alt="image-20230812212213600"></p><h4 id="网络管理协议"><a href="#网络管理协议" class="headerlink" title="网络管理协议"></a>网络管理协议</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212251871.png" alt="image-20230812212251871"></p><h3 id="6-7-2-管理信息结构SMI"><a href="#6-7-2-管理信息结构SMI" class="headerlink" title="6.7.2 管理信息结构SMI"></a>6.7.2 管理信息结构SMI</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212323067.png" alt="image-20230812212323067"></p><p><strong>功能</strong></p><ol><li>被管对象命名</li><li>储存被管对象的数据类型有哪些</li><li>管理数据怎么编码</li></ol><h3 id="6-7-3-管理信息库MIB（略）"><a href="#6-7-3-管理信息库MIB（略）" class="headerlink" title="6.7.3 管理信息库MIB（略）"></a>6.7.3 管理信息库MIB（略）</h3><h3 id="6-7-4-SNMP的协议数据单元和报文"><a href="#6-7-4-SNMP的协议数据单元和报文" class="headerlink" title="6.7.4 SNMP的协议数据单元和报文"></a>6.7.4 SNMP的协议数据单元和报文</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212513276.png" alt="image-20230812212513276"><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212616304.png" alt="image-20230812212616304"></p><h4 id="陷阱"><a href="#陷阱" class="headerlink" title="陷阱"></a>陷阱</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212646703.png" alt="image-20230812212646703"></p><h4 id="报文格式"><a href="#报文格式" class="headerlink" title="报文格式"></a>报文格式</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212724355.png" alt="image-20230812212724355"></p><h2 id="6-8-应用进程跨越网络的通信"><a href="#6-8-应用进程跨越网络的通信" class="headerlink" title="6.8 应用进程跨越网络的通信"></a>6.8 应用进程跨越网络的通信</h2><h3 id="6-8-1-系统调用和应用编程接口"><a href="#6-8-1-系统调用和应用编程接口" class="headerlink" title="6.8.1 系统调用和应用编程接口"></a>6.8.1 系统调用和应用编程接口</h3><h4 id="系统调用"><a href="#系统调用" class="headerlink" title="系统调用"></a>系统调用</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812213014751.png" alt="image-20230812213014751"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812213004210.png" alt="image-20230812213004210"></p><h4 id="应用编程接口"><a href="#应用编程接口" class="headerlink" title="应用编程接口"></a>应用编程接口</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212915430.png" alt="image-20230812212915430"></p><h5 id="种类"><a href="#种类" class="headerlink" title="种类"></a>种类</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812212933833.png" alt="image-20230812212933833"></p><p><strong>应用进程通过套接字接入到网络</strong></p><h4 id="套接字作用"><a href="#套接字作用" class="headerlink" title="套接字作用"></a>套接字作用</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812213156041.png" alt="image-20230812213156041"></p><h2 id="6-9-P2P应用"><a href="#6-9-P2P应用" class="headerlink" title="6.9 P2P应用"></a>6.9 P2P应用</h2><h3 id="6-9-1-具有集中目录服务器的P2P工作方式（Napster）"><a href="#6-9-1-具有集中目录服务器的P2P工作方式（Napster）" class="headerlink" title="6.9.1 具有集中目录服务器的P2P工作方式（Napster）"></a>6.9.1 具有集中目录服务器的P2P工作方式（Napster）</h3><p>最早的P2P技术</p><h3 id="6-9-2-具有全分布方式结构的P2P文件共享程序（eMule）"><a href="#6-9-2-具有全分布方式结构的P2P文件共享程序（eMule）" class="headerlink" title="6.9.2 具有全分布方式结构的P2P文件共享程序（eMule）"></a>6.9.2 具有全分布方式结构的P2P文件共享程序（eMule）</h3><p>使用分散定位和分散传输技术</p><h3 id="6-9-3-P2P文件分发的分析（略）"><a href="#6-9-3-P2P文件分发的分析（略）" class="headerlink" title="6.9.3 P2P文件分发的分析（略）"></a>6.9.3 P2P文件分发的分析（略）</h3><h1 id="第三次作业改正"><a href="#第三次作业改正" class="headerlink" title="第三次作业改正"></a>第三次作业改正</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812215039154.png" alt="image-20230812215039154"></p><p>第一个报文丢失，b要求a重发这个报文段，而确认号就是b想要的报文段的序号</p><p>所以是100</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812215153679.png" alt="image-20230812215153679"></p><p>第一次1</p><p>第二次2</p><p>3–4</p><p>4–8</p><p>5–9</p><p>6–10</p><p>7–1（门限值变成4）</p><p>8–2</p><p>9–4</p><p>10–5</p><p>11–6</p><p>大小为6</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230812215358639.png" alt="image-20230812215358639"></p><p>贝多芬题</p><p><img src="/2023017--%E5%BC%A0%E5%81%A5--%E7%AC%AC%E4%B8%89%E6%AC%A1%E7%AC%94%E8%AE%B0.assets/image-20230812215432062.png" alt="image-20230812215432062"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;第一节：概述&quot;&gt;&lt;a href=&quot;#第一节：概述&quot; class=&quot;headerlink&quot; title=&quot;第一节：概述&quot;&gt;&lt;/a&gt;&lt;strong&gt;第一节：概述&lt;/strong&gt;&lt;/h1&gt;&lt;h2 id=&quot;1-1-计算机网络在信息时代的作用&quot;&gt;&lt;a href=&quot;#1-1</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>python learning</title>
    <link href="http://blog.wenmozhu.de5.net/2023/10/09/python%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/"/>
    <id>http://blog.wenmozhu.de5.net/2023/10/09/python%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/</id>
    <published>2023-10-09T08:35:02.000Z</published>
    <updated>2026-09-09T10:57:22.167Z</updated>
    
    <content type="html"><![CDATA[<p><strong>python学习之路</strong></p><h1 id="预备知识"><a href="#预备知识" class="headerlink" title="预备知识"></a>预备知识</h1><h2 id="编程思想"><a href="#编程思想" class="headerlink" title="编程思想"></a>编程思想</h2><p>python是一种面向对象**oop(Object Oriented Programming)**的[脚本语言]</p><p>对象包括数据和动作，把数据和方法组成为一个整体，然后对其进行系统的建模</p><p>*核心思想是<strong>理解功能逻辑</strong>！！！</p><h2 id="基本程序设计模式"><a href="#基本程序设计模式" class="headerlink" title="基本程序设计模式"></a>基本程序设计模式</h2><p>任何的程序IPO，它们分别代表如下：</p><ul><li>input输入</li><li>process处理</li><li>output输出</li></ul><p>基本程序设计步骤：</p><ul><li>确定IPO</li><li>编写程序</li><li>调试程序</li></ul><h2 id="解决复杂问题的有效方法"><a href="#解决复杂问题的有效方法" class="headerlink" title="解决复杂问题的有效方法"></a>解决复杂问题的有效方法</h2><h3 id="自顶向下"><a href="#自顶向下" class="headerlink" title="自顶向下"></a>自顶向下</h3><p>其实就是不断将大问题分解成小问题，进行模块化编写</p><p><strong>栗子</strong>：斐波那契数列（递归）</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">cache = &#123;&#125;</span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">fib</span>(<span class="params">number</span>):</span><br><span class="line">    <span class="keyword">if</span> number <span class="keyword">in</span> cache:</span><br><span class="line">        <span class="keyword">return</span> cache[number]</span><br><span class="line">    <span class="keyword">if</span> number == <span class="number">0</span> <span class="keyword">or</span> number == <span class="number">1</span>:</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        cache[number] = fib(number - <span class="number">1</span>) + fib(number - <span class="number">2</span>)</span><br><span class="line">    <span class="keyword">return</span> cache[number]</span><br><span class="line"> </span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    <span class="built_in">print</span>(fib(<span class="number">35</span>))</span><br></pre></td></tr></table></figure><p>cache：在Python中，”cache”这个词通常是指将数据或计算结果存储起来以便以后使用的过程，而不是指计算机硬件中的高速缓冲存储器（Cache）。</p><p>Python中的cache通常用于以下几个方面：</p><ol><li>存储函数或方法的结果，以便以后可以快速地重用这些结果，而不需要重新计算。例如，可以使用<code>functools.lru_cache()</code>装饰器来缓存函数的结果。</li><li>缓存数据库查询的结果，以便在需要时可以快速地获取这些结果，而不需要再次查询数据库。例如，可以使用SQLAlchemy的查询缓存功能。</li><li>缓存网页或API响应的结果，以便在需要时可以快速地获取这些结果，而不需要再次发出请求。例如，可以使用requests库的响应缓存功能。</li></ol><p>这些cache的实现通常是使用Python中的字典或其他数据结构来存储和检索数据。它们与计算机硬件中的高速缓冲存储器（Cache）不同，但是它们都使用了类似的概念，即<strong>将数据或计算结果存储起来以便以后使用，以提高性能和效率。</strong></p><p>（有点数组的味道，cache[number]中number相当于一个门牌，在这个里面存放了计算后的数据）</p><h3 id="自底向上-模块化集成"><a href="#自底向上-模块化集成" class="headerlink" title="自底向上-模块化集成"></a>自底向上-模块化集成</h3><p>栗子：0-1背包问题</p><p>问题:你现在想买⼀大堆算法书，有一个容量为 <strong>V</strong> 的背包，这个商店⼀共有 <strong>n</strong> 个商品。问题在于，你最多只能拿 <strong>W</strong> kg 的东西，其中 <strong>wi</strong> 和 <strong>vi</strong> 分别表示第 <strong>i</strong> 个商品的重量和价值。最终的目标就是在能拿的下的情况下，获得最大价值，求解哪些物品可以放进背包。</p><p>作为一个聪明的贼，你用 表示偷到商品的总价值，其中i表示一共多少个商品，w表示总重量，所以求解就是我们的子问题，那么你看到某一个商品i的时候，如何决定是不是要装进背包，有以下几点考虑：</p><ol><li>该物品的重量大于背包的总重量，不考虑，换下一个商品；</li><li>该商品的重量小于背包的总重量，那么我们尝试把它装进去，如果装不下就把其他东西换出来，看看装进去后的总价值是不是更高了，否则还是按照之前的装法；</li><li>极端情况，所有的物品都装不下或者背包的承重能力为0，那么总价值都是0；</li></ol><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 循环的⽅式，自底向上求解</span></span><br><span class="line">cache = &#123;&#125;</span><br><span class="line">items = <span class="built_in">range</span>(<span class="number">1</span>,<span class="number">9</span>)</span><br><span class="line">weights = [<span class="number">10</span>,<span class="number">1</span>,<span class="number">5</span>,<span class="number">9</span>,<span class="number">10</span>,<span class="number">7</span>,<span class="number">3</span>,<span class="number">12</span>,<span class="number">5</span>]</span><br><span class="line">values = [<span class="number">10</span>,<span class="number">20</span>,<span class="number">30</span>,<span class="number">15</span>,<span class="number">40</span>,<span class="number">6</span>,<span class="number">9</span>,<span class="number">12</span>,<span class="number">18</span>]</span><br><span class="line"><span class="comment"># 最⼤承重能⼒</span></span><br><span class="line">W = <span class="number">4</span></span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">knapsack</span>():</span><br><span class="line">    <span class="keyword">for</span> w <span class="keyword">in</span> <span class="built_in">range</span>(W+<span class="number">1</span>):</span><br><span class="line">        cache[get_key(<span class="number">0</span>,w)] = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> items:</span><br><span class="line">        cache[get_key(i,<span class="number">0</span>)] = <span class="number">0</span></span><br><span class="line">        <span class="keyword">for</span> w <span class="keyword">in</span> <span class="built_in">range</span>(W+<span class="number">1</span>):</span><br><span class="line">            <span class="keyword">if</span> w &gt;= weights[i]:</span><br><span class="line">                <span class="keyword">if</span> cache[get_key(i-<span class="number">1</span>,w-weights[i])] + values[i] &gt; cache[get_key(i-<span class="number">1</span>,w)]:</span><br><span class="line">                    cache[get_key(i,w)] = values[i] + cache[get_key(i-<span class="number">1</span>,w-weights[i])]</span><br><span class="line">                <span class="keyword">else</span>:</span><br><span class="line">                    cache[get_key(i,w)] = cache[get_key(i-<span class="number">1</span>,w)]</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                cache[get_key(i,w)] = cache[get_key(i-<span class="number">1</span>,w)]</span><br><span class="line">    <span class="keyword">return</span> cache[get_key(<span class="number">8</span>,W)]</span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_key</span>(<span class="params">i,w</span>):</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">str</span>(i)+<span class="string">&#x27;,&#x27;</span>+<span class="built_in">str</span>(w)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    <span class="comment"># 背包把所有东西都能装进去做假设开始</span></span><br><span class="line">    <span class="built_in">print</span>(knapsack())</span><br><span class="line">    <span class="number">29</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span></span><br></pre></td></tr></table></figure><p>&#x2F;&#x2F;看不懂啊现在，史密达</p><h2 id="标准库模块导入"><a href="#标准库模块导入" class="headerlink" title="标准库模块导入"></a>标准库模块导入</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">python_modules = [</span><br><span class="line">  <span class="string">&quot;os --- 多种操作系统接口&quot;</span>,</span><br><span class="line">  <span class="string">&quot;os.path --- 常用路径操作&quot;</span>,</span><br><span class="line">  <span class="string">&quot;re --- 正则表达式操作&quot;</span>,</span><br><span class="line">  <span class="string">&quot;datetime --- 基本日期和时间类型&quot;</span>,</span><br><span class="line">  <span class="string">&quot;heapq --- 堆队列算法&quot;</span>,</span><br><span class="line">  <span class="string">&quot;enum --- 对枚举的支持&quot;</span>,</span><br><span class="line">  <span class="string">&quot;math --- 数学函数&quot;</span>,</span><br><span class="line">  <span class="string">&quot;random --- 生成伪随机数&quot;</span>,</span><br><span class="line">  <span class="string">&quot;itertools --- 为高效循环而创建迭代器的函数&quot;</span>,</span><br><span class="line">  <span class="string">&quot;functools --- 高阶函数和可调用对象上的操作&quot;</span>,</span><br><span class="line">  <span class="string">&quot;shutil --- 高阶文件操作&quot;</span>,</span><br><span class="line">  <span class="string">&quot;sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块&quot;</span>,</span><br><span class="line">  <span class="string">&quot;csv --- CSV 文件读写&quot;</span>,</span><br><span class="line">  <span class="string">&quot;hashlib --- 安全哈希与消息摘要&quot;</span>,</span><br><span class="line">  <span class="string">&quot;hmac --- 基于密钥的消息验证&quot;</span>,</span><br><span class="line">  <span class="string">&quot;time --- 时间的访问和转换&quot;</span>,</span><br><span class="line">  <span class="string">&quot;argparse --- 命令行选项、参数和子命令解析器&quot;</span>,</span><br><span class="line">  <span class="string">&quot;logging --- Python 的日志记录工具&quot;</span>,</span><br><span class="line">  <span class="string">&quot;threading --- 基于线程的并行&quot;</span>,</span><br><span class="line">  <span class="string">&quot;multiprocessing --- 基于进程的并行&quot;</span>,</span><br><span class="line">  <span class="string">&quot;socket --- 底层网络接口&quot;</span>,</span><br><span class="line">  <span class="string">&quot;email --- 电子邮件与 MIME 处理包&quot;</span>,</span><br><span class="line">  <span class="string">&quot;json --- JSON 编码和解码器&quot;</span>,</span><br><span class="line">  <span class="string">&quot;urllib --- URL 处理模块&quot;</span>,</span><br><span class="line">  <span class="string">&quot;http --- HTTP 模块&quot;</span></span><br><span class="line">]</span><br></pre></td></tr></table></figure><h1 id="基础语法"><a href="#基础语法" class="headerlink" title="基础语法"></a>基础语法</h1><h2 id="缩进规则"><a href="#缩进规则" class="headerlink" title="缩进规则"></a>缩进规则</h2><p>缩进来表示块作用域的开始和结束（其他语言一般使用{}）</p><p>Python 对缩进有严格的要求，同一个源文件里，缩进必须保持一致，<strong>例如都是2个空格或者4个空格</strong>。Python 这么做的理由是使用缩进更简洁，同时不用考虑<code>&quot;&#123;&quot;</code>要放在哪一行，而且是用缩进足够Python解释器正确解析。但是使用缩进如果没有编辑器自动检测和格式化也会带来一些不必要的麻烦。</p><h3 id="正确案例"><a href="#正确案例" class="headerlink" title="正确案例"></a>正确案例</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">**<span class="comment"># 这是一个 Python 程序** </span></span><br><span class="line"><span class="keyword">if</span> i&lt;<span class="number">10</span>:    </span><br><span class="line">    <span class="keyword">if</span> i&lt;<span class="number">5</span>:    //<span class="number">2</span></span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;win more!&quot;</span>) //<span class="number">4</span>   </span><br><span class="line"><span class="keyword">else</span>:       //<span class="number">2</span></span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;win&quot;</span>)//<span class="number">4</span> </span><br><span class="line"><span class="keyword">else</span>:   </span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;loose&quot;</span>)//<span class="number">2</span></span><br></pre></td></tr></table></figure><h2 id="错误案例"><a href="#错误案例" class="headerlink" title="错误案例"></a>错误案例</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">i = <span class="number">0</span></span><br><span class="line">    c = <span class="number">5</span></span><br><span class="line">    <span class="built_in">max</span> = <span class="number">10</span></span><br><span class="line">    <span class="keyword">while</span> i &lt; <span class="built_in">max</span>:</span><br><span class="line">        d = <span class="built_in">max</span>-i-i//（应该全都是<span class="number">4</span>或者<span class="number">2</span>）</span><br><span class="line">      <span class="keyword">if</span> <span class="built_in">abs</span>(d) &lt; <span class="number">3</span>:（<span class="number">6</span>格）再往右边走两格</span><br><span class="line">        <span class="built_in">print</span>(i, <span class="built_in">max</span>-i)</span><br><span class="line">      <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line">        i += <span class="number">1</span></span><br></pre></td></tr></table></figure><h2 id="函数"><a href="#函数" class="headerlink" title="函数"></a>函数</h2><h3 id="函数定义"><a href="#函数定义" class="headerlink" title="函数定义"></a>函数定义</h3><p>def 函数名(参数列表)：    </p><p>函数体</p><p>例如</p><p>def hello():    </p><p>print(“hello”)</p><p>print(“world!”)</p><p>————————</p><p>以下代码定义了无任何操作的空函数nop()。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">nop</span>():</span><br><span class="line">    <span class="keyword">pass</span>//c中就有nop函数</span><br></pre></td></tr></table></figure><p>在Python代码中，pass语句通常可以用来作为占位符，表示什么操作都不执行。比如在项目起始阶段，如果还没想好函数具体实现时，可以先放置一个pass语句，让代码先成功运行起来。待项目框架搭建完毕后，在进行相应的具体实现。</p><h3 id="函数定义规则"><a href="#函数定义规则" class="headerlink" title="函数定义规则"></a>函数定义规则</h3><ul><li>函数代码块以def关键字开头，后接函数标识符名称和形参列表；</li><li>任何传入的参数和自变量必须放在圆括号内；</li><li>函数的第一行语句可以选择性地使用文档字符串（即函数说明）；？？</li><li>函数内容以冒号起始，并且严格统一缩进；</li><li>函数都有返回值，默认返回None。</li></ul><h3 id="内建函数"><a href="#内建函数" class="headerlink" title="内建函数"></a>内建函数</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/7cb36988-7829-41b1-8680-3246ae9f7859.png" alt="在这里插入图片描述"></p><p>除此之外的就是第三方函数，在Python语言中，还可以把函数名赋给一个变量，相当于给这个函数起了一个“别名”，如下代码所示。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">a = <span class="built_in">abs</span></span><br><span class="line"><span class="built_in">print</span>(a(-<span class="number">1</span>))</span><br></pre></td></tr></table></figure><h3 id="自定义函数"><a href="#自定义函数" class="headerlink" title="自定义函数"></a>自定义函数</h3><p>当内建函数不能满足要求时，开发者可以根据实际需要自定义函数。函数自定义完成后，开发者可以在其他代码处通过函数名调用。如下代码演示了自定义函数printme()的定义和调用过程。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 自定义函数</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">printme</span>(<span class="params"><span class="built_in">str</span></span>):</span><br><span class="line">    <span class="string">&quot;函数功能：打印传入的字符串&quot;</span></span><br><span class="line">    <span class="built_in">print</span>(<span class="built_in">str</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 调用自定义函数</span></span><br><span class="line">printme(<span class="string">&quot;调用用户自定义函数！&quot;</span>)</span><br><span class="line">printme(<span class="string">&quot;再次调用用户自定义函数！&quot;</span>)</span><br></pre></td></tr></table></figure><p>输出结果：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">调用用户自定义函数！</span><br><span class="line">再次调用用户自定义函数！</span><br></pre></td></tr></table></figure><p>上述代码中，自定义了一个函数printme()，并对其进行两次调用，测试相应功能。在实际开发中，涉及到大量的自定义函数。在自定义函数中，也可以调用内建函数或其他自定义函数。自定义函数和内建函数的定义方式是相同，只不过是自定义函数是有开发者定义的，而内建函数是由系统定义的。两者的调用方式都是一样的。</p><p>在Python语言中，内建函数可以直接使用，第三方函数需要使用import命令导入相应的库才能使用。对于自定义函数，其定义和调用可以在同一个文件中，也可分离成不同的文件。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> test <span class="keyword">import</span> hello</span><br><span class="line"></span><br><span class="line">hello()</span><br></pre></td></tr></table></figure><p>上述代码演示了函数的定义和调用不在一个文件的情形。首先，将hello()函数定义好并保存为test.py文件，然后使用Python语言的import指令“from test import hello”将该文件导入，可以调用hello()函数了。导入时需要注意test是文件名并且不含.py扩展名。</p><h2 id="类"><a href="#类" class="headerlink" title="类"></a>类</h2><ul><li><p>类 ：是对实体的抽象，是泛指，比如：动物、植物等。</p></li><li><p>对象：是类的一个实例，是特例，比如：猫、狗等。</p></li></ul><p>例如：动物可以对猫的特征和行为进行抽象，然后可以实例化为真实的动物实体。</p><p>在采用面向对象思想编程时，可依次采用以下步骤：</p><p>（1）分析哪些动作是由哪些实体发出的；<br>（2）定义这些实体，为其增加相应的属性和功能；<br>（3）让实体去执行相应的功能或动作。</p><h3 id="类和对象"><a href="#类和对象" class="headerlink" title="类和对象"></a>类和对象</h3><p>Python语言中，使用class关键字来创建类，其创建方式如下：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">ClassName</span>(<span class="title class_ inherited__">bases</span>):</span><br><span class="line">    <span class="comment"># class documentation string 类文档字符串，对类进行解释说明</span></span><br><span class="line">    class_suite</span><br></pre></td></tr></table></figure><p>class是<code>关键字</code>，bases是要继承的<code>父类</code>，默认继承<code>object</code>类。<br>class documentation string是类<code>文档字符串</code>，一般用于<code>类的注释说明</code>。class_suite是<code>类体</code>，主要包含<code>属性</code>和<code>方法</code>。</p><p>类、属性和方法的命名约定惯例如下：</p><ul><li><code>类名</code>表示实例的抽象，命名时<code>首字母大写</code>；</li><li><code>属性</code>使用名词作为名字，比如name、age、weight等；</li><li><code>方法</code>名一般指对属性的操作，其命名规则一般采用动词加属性名称形式，如updataName、updataAge、updataWeight等。 举例如下图：</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 类定义</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">People</span>:  <span class="comment"># 类名</span></span><br><span class="line">    name = <span class="string">&quot;张三&quot;</span>  <span class="comment"># 属性名</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">undate_name</span>(<span class="params">self, name</span>):<span class="comment"># 方法名</span></span><br><span class="line">        self.name = name  </span><br></pre></td></tr></table></figure><p><strong>在Python3.x中，如果没有显示指明要继承的父类，则默认继承<code>object</code>类。</strong></p><h3 id="对象的创建"><a href="#对象的创建" class="headerlink" title="对象的创建"></a>对象的创建</h3><p>类创建完之后，就应该创建该类的实例或对象了，该过程称之为实例化。当一个对象被创建后，就包含<strong>标识</strong>、<strong>属性</strong>和<strong>方法</strong>这三个方面的对象特性了。其中，对象标识用于区分不同的对象，属性和方法与类中的成员变量和成员函数相对应</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">people = People(<span class="string">&quot;李四&quot;</span>, <span class="number">20</span>, <span class="string">&quot;50kg&quot;</span>)  <span class="comment"># 实例化一个对象</span></span><br></pre></td></tr></table></figure><p>如例子所示，对象标识符为people，属性为括号中内容，方法为类中方法</p><h3 id="类的属性"><a href="#类的属性" class="headerlink" title="类的属性"></a>类的属性</h3><ol><li><p>Python语言中，属性分为类级别和实例级别两种。实例级别的属性值默认共享类级别的属性值。除非显式进行赋值操作</p></li><li><p>属性操作的三个原则：</p><p>（1）属性的获取是按照从下到上的顺序来查找属性；<br>（2）类和实例是两个完全独立的对象；<br>（3）属性设置是针对实例本身进行的。</p></li><li><p>属性和方法的分类：</p></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/219b743f-10fd-4d18-9c3c-f9903d81088e.png" alt="image-20231011002732011"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/bfe668b7-7a09-4ff8-b3a8-908eaddcd4d0.png" alt="image-20231011002753974"></p><p>栗子：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cd5cdf24-ff9f-4ad6-a841-48639b397ea5.png" alt="在这里插入图片描述"></p><h3 id="魔术方法"><a href="#魔术方法" class="headerlink" title="魔术方法"></a>魔术方法</h3><p>在Python语言中，所有以双下划线“<strong>”包起来的方法，都统称为“魔术方法”。 这些方法在实例化时会自动调用， 比如“_str</strong>()”、“<strong>init</strong>()”、“<strong>del</strong>()”等。 使用魔术方法可以构造出非常优美的代码，比如将复杂的逻辑封装成简单的API等。</p><p>栗子：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">People</span>():</span><br><span class="line">    name = <span class="string">&quot;人&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, n=<span class="string">&quot;非洲人&quot;</span></span>):</span><br><span class="line">        self.name = n</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;我是构造函数&quot;</span>, self.name)  <span class="comment"># 重写构造函数</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__del__</span>(<span class="params">self</span>):</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;我是析构函数&quot;</span>, self.name)  <span class="comment"># 重写析构函数</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">zhangsan = People()</span><br><span class="line">lisi = People(<span class="string">&quot;欧美人&quot;</span>)</span><br><span class="line">zhangsan.__del__()  <span class="comment"># 调用析构函数</span></span><br><span class="line"><span class="built_in">print</span>(zhangsan)</span><br><span class="line"><span class="keyword">del</span> zhangsan</span><br><span class="line"><span class="built_in">print</span>(zhangsan) <span class="comment">#出现错误，因为del后，对象就不存在了</span></span><br></pre></td></tr></table></figure><p>结果：</p><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">我是构造函数 非洲人    张三</span><br><span class="line">我是构造函数 欧美人    李四</span><br><span class="line">我是析构函数 非洲人    调用<span class="built_in">del</span>后<span class="built_in">print</span></span><br><span class="line">&lt;__main__.People object <span class="built_in">at</span> <span class="number">0</span>x000001EAF4D09358&gt;</span><br></pre></td></tr></table></figure><h3 id="类间关系"><a href="#类间关系" class="headerlink" title="类间关系"></a>类间关系</h3><ol><li>依赖关系</li><li>关联关系</li><li>继承关系！！！</li></ol><h2 id="条件表达式"><a href="#条件表达式" class="headerlink" title="条件表达式"></a>条件表达式</h2><h3 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h3><p>算术运算符：+、-、<em>、&#x2F;、&#x2F;&#x2F;、%、</em>*<br>关系运算符：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/7cbdf9dd-88a4-468a-ae45-f79f23aa915d.png" alt="在这里插入图片描述"></p><p>Python支持通过保留字not、and和or对判断条件进行逻辑组合：</p><ul><li>not，表示单个条件的“否”关系。如果“条件”的布尔属性为True，“not 条件”的布尔属性就为False；如果“条件”的布尔属性为False，“not 条件”的布尔属性就为True。</li><li>and，表示多个条件之间的“与”关系。当且仅当使用and连接的所有条件的布尔属性都为True时，逻辑表达式的布尔属性为True，否则为False。</li><li>or，表示多个条件之间的“或”关系。当且仅当使用or连接的所有条件的布尔属性都是False时，逻辑表达式的布尔属性为False，否则为True。</li></ul><h3 id="三元表达式"><a href="#三元表达式" class="headerlink" title="三元表达式"></a>三元表达式</h3><p>格式：条件判断为真时的结果| if 判断条件| else 条件为假时的结果<br>示例：<strong>x&#x3D;x-1 if x&gt;0 else x&#x3D;x+1</strong><br>等价于：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> x &gt; <span class="number">0</span>:</span><br><span class="line">    x = x - <span class="number">1</span></span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    x = x + <span class="number">1</span></span><br></pre></td></tr></table></figure><p>栗子</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">fun</span>(<span class="params">n</span>):</span><br><span class="line">    <span class="keyword">return</span> n <span class="keyword">if</span> n &lt; <span class="number">2</span> <span class="keyword">else</span> fun(n - <span class="number">1</span>) + fun(n - <span class="number">2</span>)</span><br></pre></td></tr></table></figure><h2 id="循环"><a href="#循环" class="headerlink" title="循环"></a>循环</h2><p>python中的for循环与c语言的有点不一样</p><h3 id="for循环"><a href="#for循环" class="headerlink" title="for循环"></a>for循环</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/e1f64824-f8e4-4daa-a0ee-962fc196d038.png" alt="在这里插入图片描述"></p><ul><li>目标可以是字符串、文件、range()函数或组合数据类型等；</li><li>循环变量用于保存本次循环中访问到的遍历结构中的元素；</li><li>for循环的循环次数取决于遍历的目标元素个数。</li></ul><p>示例1：遍历字符串中的每个字符</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">string = <span class="built_in">input</span>(<span class="string">&quot;请输入一个字符串：&quot;</span>)</span><br><span class="line"><span class="keyword">for</span> c <span class="keyword">in</span> string:</span><br><span class="line"><span class="built_in">print</span>(c)</span><br></pre></td></tr></table></figure><h3 id="PASS"><a href="#PASS" class="headerlink" title="PASS"></a>PASS</h3><p>pass的意思是过，pass掉就是淘汰掉的意思。</p><p>在python中，pass的意思是空语句，pass语句不做任何事情，只是为了保持程序结构的完整性。</p><h2 id="数据类型"><a href="#数据类型" class="headerlink" title="数据类型"></a><strong>数据类型</strong></h2><h3 id="数字类型"><a href="#数字类型" class="headerlink" title="数字类型"></a>数字类型</h3><ol><li>整型（int）</li><li>浮点型（float）</li><li>复数类型（complex）</li><li>布尔类型（bool）</li></ol><h3 id="复数"><a href="#复数" class="headerlink" title="*复数"></a>*复数</h3><ul><li>复数由“实部”和“虚部”两部分组成；</li><li>实数部分和虚数部分都是浮点型；</li><li>虚数部分后面必须有j或J</li></ul><p>Python中表示复数的两种方法：</p><ol><li>a+bj</li><li>complex(a,b)<br>其中a表示实部，b表示虚部<br>举例：</li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">a = <span class="number">2</span> + <span class="number">6</span>j</span><br><span class="line">print(type(a))</span><br><span class="line">b = <span class="type">complex</span>(<span class="number">2</span>, <span class="number">6</span>)</span><br><span class="line">print(type(b))</span><br><span class="line">print(id(a), id(b))</span><br></pre></td></tr></table></figure><p>结果：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;<span class="class"><span class="keyword">class</span> &#x27;<span class="title">complex</span>&#x27;&gt;</span></span><br><span class="line">&lt;<span class="class"><span class="keyword">class</span> &#x27;<span class="title">complex</span>&#x27;&gt;</span></span><br><span class="line"><span class="number">2718471372752</span> <span class="number">2718437554352</span></span><br></pre></td></tr></table></figure><p>获取复数的实部、虚部、共轭复数等</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">a = <span class="number">2</span> + <span class="number">6j</span></span><br><span class="line"><span class="built_in">print</span>(a.imag)  <span class="comment"># .imag可以获取复数的虚部</span></span><br><span class="line"><span class="built_in">print</span>(a.real)  <span class="comment"># .real可以获取复数的虚部</span></span><br><span class="line"><span class="built_in">print</span>(a.conjugate())  <span class="comment"># .conjugate()方法可以获取复数的共轭复数</span></span><br></pre></td></tr></table></figure><p>结果：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">6.0</span></span><br><span class="line"><span class="number">2.0</span></span><br><span class="line">(<span class="number">2</span>-<span class="number">6j</span>)</span><br></pre></td></tr></table></figure><h3 id="数值计算函数库"><a href="#数值计算函数库" class="headerlink" title="数值计算函数库"></a>数值计算函数库</h3><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/2869590f-42dc-4fe3-afcd-80490718c3f6.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c834e5d7-f806-4ad9-9514-4745e83f0837.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c8d94c56-b7bc-4322-bcc0-7a3af98a43af.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d5d9d30b-669c-4334-82f5-f8e64ec89bac.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f7144f28-635e-4b38-923f-d0b56fc4384c.png" alt="在这里插入图片描述"></p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> random</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(random.random())  <span class="comment"># random.random()作用是生成一个[0-1]范围内的随机数</span></span><br><span class="line"><span class="built_in">print</span>(random.randint(<span class="number">1</span>, <span class="number">2000</span>))  <span class="comment"># random.randint(a,b)作用是生成一个[a-b]范围内的随机整数</span></span><br></pre></td></tr></table></figure><h3 id="字符串类型"><a href="#字符串类型" class="headerlink" title="字符串类型"></a>字符串类型</h3><h4 id="三重引号"><a href="#三重引号" class="headerlink" title="三重引号"></a>三重引号</h4><p>三重引号可以是<code>三个单引号</code>，也可以是<code>三个双引号</code>。这种方式表示的字符串也叫做<code>块字符串</code>。</p><p>三重引号是以三个同一种类型的引号开始，并以三个相同引号结束的字符串表示方式。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/35c59eb7-30b1-47e2-ac52-3aca4f172cda.png" alt="在这里插入图片描述"></p><p>&#x2F;&#x2F;和C语言的&#x2F;*  *&#x2F;语句类似（字符串中出现了“\n”换行符，这是因为敲了回车）</p><h3 id="raw字符串"><a href="#raw字符串" class="headerlink" title="raw字符串"></a>raw字符串</h3><p>raw字符串的格式是r’…’。</p><p>在raw字符串中，所有的字符都是直接按照字面意思来解释，没有转义字符或者不能打印的字符。</p><p>栗子：<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/df8aafac-9617-484d-bbe9-95cf76bc4ae4.png" alt="在这里插入图片描述"></p><ul><li>第一种方式的语句打开一个文件时，字符“\n”会被当作回车键的转义字符，从而使文件打开失败。</li><li>第二种方式对反斜杠“\”进行转义，虽然正确，但是代码看起来会令人感到费解。</li><li>第三种就是pthon语言中的raw字符串。</li></ul><h3 id="字符串操作"><a href="#字符串操作" class="headerlink" title="字符串操作"></a>字符串操作</h3><h4 id="索引"><a href="#索引" class="headerlink" title="索引"></a>索引</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c781d4ed-cac4-4e3c-8913-3bcc5474f3bf.png" alt="在这里插入图片描述"></p><p>有反向索引，很方便</p><h4 id="切片"><a href="#切片" class="headerlink" title="切片"></a>切片</h4><p>使用Python语言的分片(slice)操作，来提取字符串中的子序列。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/3d34be90-02fb-499c-94bd-41afaceb5a24.png" alt="img"></p><p>s[start:end :dir]—start是提取的开头，而end是提取的末尾，dir既有控制方向和倍数的功能，例如s[1：6：2]表示从序号1开始到六按1+2n取元素直到6，为1 3 5 </p><h4 id="连接字符串"><a href="#连接字符串" class="headerlink" title="连接字符串"></a>连接字符串</h4><ol><li>操作符+的方法</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/c3bd279d-121b-46e8-a259-22a81028cef3.png" alt="在这里插入图片描述"></p><ol><li>Python语言使用符串格式化操作符(%)和join()方法这两种方式连接字符串。</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/eaea0bfe-4d57-4b56-971e-063dbee5f303.png" alt="在这里插入图片描述"></p><ol start="3"><li><strong>join()方法：</strong></li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6f05b64b-6ee4-4a75-88e7-bad309498ff4.png" alt="在这里插入图片描述"></p><h4 id="修改字符串"><a href="#修改字符串" class="headerlink" title="修改字符串"></a>修改字符串</h4><ol><li>加号完再切片</li><li>replace函数修改</li></ol><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/89e9d2ad-41c8-4963-bc34-d225b67875f3.png" alt="在这里插入图片描述"></p><h4 id="字符串格式化"><a href="#字符串格式化" class="headerlink" title="字符串格式化"></a>字符串格式化</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/5a2a140b-8f6b-47ef-9f3b-fffe9e4deeb5.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/79803c3b-b6ac-4a70-abb6-6c227468ce2c.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9b02b845-1df4-4304-b63a-040894ee8fc7.png" alt="在这里插入图片描述"></p><p>栗子：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">print</span>(<span class="string">&quot;%c,%c&quot;</span> % (<span class="number">65</span>, <span class="number">97</span>))</span><br><span class="line">s = <span class="string">&#x27;podjsd&#x27;</span></span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;%s&quot;</span> % (s))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;%r&#x27;</span>%<span class="number">42</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;%e&#x27;</span>%<span class="number">200.21</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;%g&#x27;</span>%<span class="number">200.21</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;%%&#x27;</span>%())</span><br></pre></td></tr></table></figure><h4 id="函数格式化"><a href="#函数格式化" class="headerlink" title="函数格式化"></a>函数格式化</h4><p>就是利用format（）方法对字符串进行格式化操作，format（）方法使用方法：</p><ul><li><p>不带编号，即“{}”；</p></li><li><p>带数字编号，可调换顺序，如“{0}”、“{1}”等；</p></li><li><p>带关键字，如“{name}”、“{age}”等。<br>例如：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">print</span>(<span class="string">&quot;a=&#123;&#125;,b=&#123;&#125;&quot;</span>.<span class="built_in">format</span>(<span class="number">2</span>, <span class="number">4</span>))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;a=&#123;0&#125;,b=&#123;1&#125;&quot;</span>.<span class="built_in">format</span>(<span class="number">2</span>, <span class="number">4</span>))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;a=&#123;1&#125;,b=&#123;0&#125;&quot;</span>.<span class="built_in">format</span>(<span class="number">2</span>, <span class="number">4</span>))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;a=&#123;num2&#125;,b=&#123;num3&#125;&quot;</span>.<span class="built_in">format</span>(num2=<span class="number">2</span>, num3=<span class="number">4</span>))</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;a=&#123;num3&#125;,b=&#123;num2&#125;&quot;</span>.<span class="built_in">format</span>(num2=<span class="number">2</span>, num3=<span class="number">4</span>))</span><br></pre></td></tr></table></figure></li></ul><h4 id="数字格式化"><a href="#数字格式化" class="headerlink" title="数字格式化"></a>数字格式化</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/260cd146-e668-4724-9205-cd0e0864070e.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/16c9e886-cbf2-44cd-aa06-9d44369d6e89.png" alt="在这里插入图片描述"></p><h4 id="字典格式化"><a href="#字典格式化" class="headerlink" title="字典格式化"></a>字典格式化</h4><p>在Python语言中，字典格式化是在左边的格式化字符串通过引用右边字典中的<strong>键</strong>来提取对应的值，实现格式化输出。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a4dfca4d-77ff-4d98-9e1c-a51bd98b9168.png" alt="在这里插入图片描述"></p><p>（“ ”中的就叫key，注意括号外的s别忘了：“%(name)s,%(age)s”）</p><h3 id="复合数据类型"><a href="#复合数据类型" class="headerlink" title="复合数据类型"></a>复合数据类型</h3><h4 id="List"><a href="#List" class="headerlink" title="List"></a>List</h4><h5 id="创建"><a href="#创建" class="headerlink" title="创建"></a>创建</h5><p>创建列表：<br><code>变量名 = [元素1,元素2,…,元素n]</code></p><p>list类型中区分元素的顺序，且允许包含重复的元素。</p><h5 id="索引-1"><a href="#索引-1" class="headerlink" title="索引"></a>索引</h5><p>分正向和反向索引</p><h5 id="切片-1"><a href="#切片-1" class="headerlink" title="切片"></a>切片</h5><p>切片操作可以截取列表变量中的部分元素，并返回一个子列表变量。</p><h5 id="加法和乘法"><a href="#加法和乘法" class="headerlink" title="加法和乘法"></a>加法和乘法</h5><ul><li>加法操作使用加号（+）完成，表示把加号两端的列表变量连接形成一个新列表；</li><li>乘法操作使用星号（*）完成，表示对当前列表对象进行复制并连接，并形成一个新列表。</li></ul><h5 id="修改和删除"><a href="#修改和删除" class="headerlink" title="修改和删除"></a>修改和删除</h5><ul><li>通过索引值对相应元素进行修改或删除。</li><li>删除整个列表或列表中的部分元素，使用<strong>del命令</strong>。删除整个列表后，不可再次引用。</li></ul><h5 id="追加插入和扩展"><a href="#追加插入和扩展" class="headerlink" title="追加插入和扩展"></a>追加插入和扩展</h5><ul><li>append：在当前列表对象尾部追加元素；</li><li>insert：在当前列表的指定索引位置插入元素；</li><li>extend：对当前列表元素进行批量增加</li></ul><h4 id="多维列表"><a href="#多维列表" class="headerlink" title="多维列表"></a>多维列表</h4><p>栗子：</p><p>创建三个列表类型的变量a、n和x。其中，变量a和n中元素都是基本类型，变量x中的元素都是列表类型。</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&gt;&gt;&gt; </span>a = [<span class="string">&#x27;a&#x27;</span>,<span class="number">1</span>] </span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>n = [<span class="string">&#x27;b&#x27;</span>,<span class="number">2</span>]</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x = [a,n]</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x</span><br><span class="line">[[<span class="string">&#x27;a&#x27;</span>,<span class="number">1</span>],[<span class="string">&#x27;b&#x27;</span>,<span class="number">2</span>]]</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x[<span class="number">0</span>] <span class="comment"># 显示第一个元素 </span></span><br><span class="line">[<span class="string">&#x27;a&#x27;</span>, <span class="number">1</span>] </span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x[<span class="number">0</span>][<span class="number">1</span>] <span class="comment"># 显示第一个元素中的第二个元素 </span></span><br><span class="line"><span class="number">1</span></span><br></pre></td></tr></table></figure><h4 id="迭代器"><a href="#迭代器" class="headerlink" title="迭代器"></a>迭代器</h4><p>不清楚：首先创建了一个列表类型变量lst，然后创建了该列表的迭代器对象lstiter，并且通过该迭代器对象的__next__()方法遍历列表中的元素。<br><code>__next__()</code>方法，返回下一个值。iter方法访问列表。</p><h4 id="列表解析"><a href="#列表解析" class="headerlink" title="列表解析"></a>列表解析</h4><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&gt;&gt;&gt;<span class="built_in">list</span>=[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>,<span class="number">10</span>] <span class="comment">#方法1：直接指定</span></span><br><span class="line"></span><br><span class="line">&gt;&gt;&gt;<span class="built_in">list</span>=[]<span class="comment">#方法2：先创建一个空列表，然后通过for循环实现</span></span><br><span class="line">   <span class="keyword">for</span> n <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>,<span class="number">11</span>):</span><br><span class="line">      <span class="built_in">list</span>.append(n);</span><br><span class="line"></span><br><span class="line">&gt;&gt;&gt;<span class="built_in">list</span>(<span class="built_in">range</span>(<span class="number">1</span>,<span class="number">11</span>)) <span class="comment">#方法3：列表解析</span></span><br><span class="line">[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>,<span class="number">10</span>] </span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>[x * x <span class="keyword">for</span> x <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, <span class="number">11</span>)] </span><br><span class="line">[<span class="number">1</span>, <span class="number">4</span>, <span class="number">9</span>, <span class="number">16</span>, <span class="number">25</span>, <span class="number">36</span>, <span class="number">49</span>, <span class="number">64</span>, <span class="number">81</span>, <span class="number">100</span>]</span><br><span class="line"><span class="comment"># 或者字母所进行的两层循环</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>[m + n <span class="keyword">for</span> m <span class="keyword">in</span> <span class="string">&#x27;ABC&#x27;</span> <span class="keyword">for</span> n <span class="keyword">in</span> <span class="string">&#x27;XYZ&#x27;</span>]</span><br><span class="line">[<span class="string">&#x27;AX&#x27;</span>, <span class="string">&#x27;AY&#x27;</span>, <span class="string">&#x27;AZ&#x27;</span>, <span class="string">&#x27;BX&#x27;</span>, <span class="string">&#x27;BY&#x27;</span>, <span class="string">&#x27;BZ&#x27;</span>, <span class="string">&#x27;CX&#x27;</span>, <span class="string">&#x27;CY&#x27;</span>, <span class="string">&#x27;CZ&#x27;</span>]</span><br></pre></td></tr></table></figure><h4 id="列表函数和方法"><a href="#列表函数和方法" class="headerlink" title="列表函数和方法"></a>列表函数和方法</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/7c9a62ad-bd77-4f79-9a5f-cf44e743277e.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/f346c1d1-2c95-4eda-8c4b-329ab28b8b26.png" alt="在这里插入图片描述"></p><h4 id="元组"><a href="#元组" class="headerlink" title="元组"></a>元组</h4><h5 id="创建-1"><a href="#创建-1" class="headerlink" title="创建"></a>创建</h5><p>创建元组：<br><code>变量名 = (元素1,元素2,…,元素n)</code></p><p><code>注意：</code><br>当元组中只包含<code>一个</code>元素时，需要在元素后面添加<code>逗号</code>，否则括号会被当作运算符使用。</p><h5 id="访问"><a href="#访问" class="headerlink" title="访问"></a>访问</h5><p>使用索引进行访问</p><h5 id="修改"><a href="#修改" class="headerlink" title="修改"></a>修改</h5><p>元组中的元素值是不允许修改的，可以对元组进行连接生成新的元组。</p><h5 id="删除"><a href="#删除" class="headerlink" title="删除"></a>删除</h5><p>元素值不允许删除的，但可使用del语句删除整个元组。<br>需要注意的是，删除后的元组对象不可再次引用。</p><h5 id="统计"><a href="#统计" class="headerlink" title="统计"></a>统计</h5><p>通过内置的count方法统计某个元素出现的次数。</p><h5 id="查找"><a href="#查找" class="headerlink" title="查找"></a>查找</h5><p>通过内置的index方法查找某个元素首次出现的索引位置。</p><h5 id="元组函数和方法"><a href="#元组函数和方法" class="headerlink" title="元组函数和方法"></a>元组函数和方法</h5><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/8d065e27-f1e0-4d4f-83d5-1540515e5631.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/838061b9-ddff-4849-87db-84b79869ef74.png" alt="在这里插入图片描述"></p><p>表中的count方法和index方法，实际是元组类型和列表类型所共有的方法，其使用方法和列表完全相同。</p><h5 id="元组优势"><a href="#元组优势" class="headerlink" title="元组优势"></a>元组优势</h5><ul><li>可以使函数返回多个值</li><li>可以使程序运行性能提升</li><li>一般来说，创建元组类型tuple的变量比列表类型list要快，而且占用更小的存储空间。</li><li>使用元组是线程安全的</li><li>元组类型变量的元素不可更改性，可保证多线程读写时的安全问题。</li></ul><h3 id="dict（字典）"><a href="#dict（字典）" class="headerlink" title="dict（字典）"></a>dict（字典）</h3><h4 id="创建-2"><a href="#创建-2" class="headerlink" title="创建"></a>创建</h4><p>创建字典对象：<br><code>变量名=(key1:value1, key2:value2,…, keyn:valuen)</code></p><ul><li>字典的元素是可变的，可以是列表、元组、字典等任意数据类型，但键(key)值必须使用不可变类型。</li><li>在同一个字典变量中，键(key) 值必须是唯一的。</li></ul><p>和元组区别就是有个key</p><h4 id="访问-1"><a href="#访问-1" class="headerlink" title="访问"></a>访问</h4><p>字典是无序的，没有索引，不能通过下标索引。通过对key值的索引进行访问。</p><h4 id="修改-1"><a href="#修改-1" class="headerlink" title="修改"></a>修改</h4><p>通过对key值的引用对value值的修改操作。</p><h4 id="字典的嵌套"><a href="#字典的嵌套" class="headerlink" title="字典的嵌套"></a>字典的嵌套</h4><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&gt;&gt;&gt;Va1 = &#123;a:&#123;b:<span class="number">1</span>,c:<span class="number">2</span>&#125;,d:&#123;e:<span class="number">3</span>,f:<span class="number">4</span>&#125;&#125; <span class="comment">#字典的value值是字典</span></span><br><span class="line">&gt;&gt;&gt;Va2 = &#123;a:[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>],b:[<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>]&#125;  <span class="comment">#字典的value值是序列</span></span><br><span class="line">&gt;&gt;&gt;n1=&#123;<span class="string">&#x27;surname&#x27;</span>:<span class="string">&#x27;wang&#x27;</span>,<span class="string">&#x27;name&#x27;</span>:<span class="string">&#x27;gang&#x27;</span>&#125;  </span><br><span class="line">&gt;&gt;&gt;n2=&#123;<span class="string">&#x27;surname&#x27;</span>:<span class="string">&#x27;zhang&#x27;</span>,<span class="string">&#x27;name&#x27;</span>:<span class="string">&#x27;san&#x27;</span>&#125;  </span><br><span class="line">&gt;&gt;&gt;n3=&#123;<span class="string">&#x27;surname&#x27;</span>:<span class="string">&#x27;liu&#x27;</span>,<span class="string">&#x27;name&#x27;</span>:<span class="string">&#x27;wen&#x27;</span>&#125;  </span><br><span class="line">&gt;&gt;&gt;n4=[n1,n2,n3]  <span class="comment">#序列的元素是字典</span></span><br></pre></td></tr></table></figure><p>n1、n2、n3是字典类型的变量，n4是列表类型变量，且n4中的元素即为n1、n2、n3。</p><h4 id="字典的遍历"><a href="#字典的遍历" class="headerlink" title="字典的遍历"></a>字典的遍历</h4><p>栗子：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">username=&#123;<span class="string">&#x27;full_name&#x27;</span>:<span class="string">&#x27;ZhangWei&#x27;</span>, <span class="string">&#x27;surname&#x27;</span>:<span class="string">&#x27;Zhang&#x27;</span>, <span class="string">&#x27;name&#x27;</span>:<span class="string">&#x27;Wei&#x27;</span>  &#125;  </span><br><span class="line"><span class="comment">#遍历所有的键-值对  </span></span><br><span class="line"><span class="keyword">for</span> k,v <span class="keyword">in</span> username.items():</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">&#x27;key:&#x27;</span>+k)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&#x27;value:&#x27;</span>+v+<span class="string">&#x27;\n&#x27;</span>)</span><br></pre></td></tr></table></figure><p>结果：</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#遍历所有键  </span></span><br><span class="line"><span class="keyword">for</span> k <span class="keyword">in</span> username.keys():</span><br><span class="line"><span class="built_in">print</span>(k)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;key:&#x27;</span>+k+<span class="string">&#x27;-value:&#x27;</span>+username[k])</span><br><span class="line"><span class="comment">#遍历所有的值</span></span><br><span class="line"><span class="keyword">for</span> v <span class="keyword">in</span> username.values():</span><br><span class="line"><span class="built_in">print</span>(v)</span><br></pre></td></tr></table></figure><h4 id="字典函数和方法"><a href="#字典函数和方法" class="headerlink" title="字典函数和方法"></a>字典函数和方法</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/a3c8453f-1f2a-4183-821c-fa97b7a6d298.png" alt="在这里插入图片描述"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/131318f4-4dad-42f9-9b39-c4b6e9db2f89.png" alt="在这里插入图片描述"></p><h3 id="集合（set）"><a href="#集合（set）" class="headerlink" title="集合（set）"></a>集合（set）</h3><h4 id="创建-3"><a href="#创建-3" class="headerlink" title="创建"></a>创建</h4><p>创建集合对象：<br><code>变量名 = &#123;元素1,元素2,…,元素n&#125;</code></p><h4 id="集合特性"><a href="#集合特性" class="headerlink" title="集合特性"></a>集合特性</h4><ul><li>无序性：元素之间没有确定的顺序。</li><li>互异性：不会出现重复的元素。</li><li>确定性：元素和集合只有属于或不属于的关系。</li></ul><h4 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h4><p>创建空集合用set()；<br>{}创建一个空字典。</p><h4 id="运算"><a href="#运算" class="headerlink" title="运算"></a>运算</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/4419ffa1-9596-4f29-af6b-487674a7fbc1.png" alt="在这里插入图片描述"></p><h4 id="基本操作"><a href="#基本操作" class="headerlink" title="基本操作"></a>基本操作</h4><p><strong>1. 更改</strong></p><ul><li>add（）：添加一个元素</li><li>update（）：同时添加多个元素</li></ul><p><strong>2. 删除</strong></p><ul><li>discard() 和 remove() 方法删除集合中特定的元素</li><li>若删除的对象不存在，remove（）方法会引起错误，discard（）方法不会</li></ul><h4 id="不可变集合"><a href="#不可变集合" class="headerlink" title="不可变集合"></a>不可变集合</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/9697e400-78f7-444c-ad43-d63ba6888af8.png" alt="在这里插入图片描述"></p><h4 id="集合函数和方法"><a href="#集合函数和方法" class="headerlink" title="集合函数和方法"></a>集合函数和方法</h4><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d353a291-0b5c-4020-b18a-214621c25060.png" alt="在这里插入图片描述"></p><h1 id="进阶语法"><a href="#进阶语法" class="headerlink" title="进阶语法"></a>进阶语法</h1><h2 id="列表推导式"><a href="#列表推导式" class="headerlink" title="列表推导式"></a>列表推导式</h2><h3 id="语法结构"><a href="#语法结构" class="headerlink" title="语法结构"></a>语法结构</h3><p>[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]</p><p>列表推导式中存在两个名词，一个是 <strong>列表</strong>，另一个是 <strong>推导式</strong> ，列表我们很清楚，就是 Python 的一种数据类型，<br>而推导式只是一个普通的语法定义词，有的教程里，会将其叫做 <strong>解析式</strong>，二者是一样的概念。</p><p>列表推导式会返回一个列表，因此它适用于所有需要列表的场景。</p><h3 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h3><p>优化c类中冗长的c语言for循环</p><p><strong>普通</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">my_list = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>]</span><br><span class="line">new_list = []</span><br><span class="line"><span class="keyword">for</span> i in my_list:</span><br><span class="line">    new_list.append(i*<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">print(new_list)</span><br></pre></td></tr></table></figure><p><strong>优化</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nn_list = [i*<span class="number">2</span> <span class="keyword">for</span> i in my_list]</span><br><span class="line">print(nn_list)</span><br></pre></td></tr></table></figure><p><u>列表推导式语法构成 <code>nn_list = [i*2 for i in my_list]</code> ，<code>for</code> 关键字后面就是一个普通的循环，前面的表达式 <code>i*2</code> 其中的 <code>i</code> 就是 <code>for</code> 循环中的变量，也就是说表达式可以用后面 <code>for</code> 循环迭代产生的变量</u></p><h4 id="优化两层for循环"><a href="#优化两层for循环" class="headerlink" title="优化两层for循环"></a>优化两层for循环</h4><p>栗子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nn_list = [(x,y) <span class="keyword">for</span> x in range(<span class="number">3</span>) <span class="keyword">for</span> y in range(<span class="number">3</span>) ]</span><br><span class="line">print(nn_list)</span><br></pre></td></tr></table></figure><p><strong>当循环次数非常大的时候列表推导式速度会更快</strong></p><h4 id="列表推导式的嵌套"><a href="#列表推导式的嵌套" class="headerlink" title="列表推导式的嵌套"></a>列表推导式的嵌套</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">my_var = [y*<span class="number">4</span> <span class="keyword">for</span> y in [x*<span class="number">2</span> <span class="keyword">for</span> x in range(<span class="number">3</span>)]]</span><br><span class="line">print(my_var)</span><br></pre></td></tr></table></figure><h4 id="转换数据"><a href="#转换数据" class="headerlink" title="转换数据"></a>转换数据</h4><p>可以将可迭代对象（一般是列表）中的数据，批量进行转换操作</p><h4 id="过滤数据"><a href="#过滤数据" class="headerlink" title="过滤数据"></a>过滤数据</h4><p>if判断条件来对数据进行过滤</p><h3 id="字典推导式"><a href="#字典推导式" class="headerlink" title="字典推导式"></a>字典推导式</h3><h4 id="语法格式"><a href="#语法格式" class="headerlink" title="语法格式"></a>语法格式</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;键:值 <span class="keyword">for</span> 迭代变量 in 可迭代对象 [<span class="keyword">if</span> 条件表达式]&#125;</span><br></pre></td></tr></table></figure><p>栗子</p><figure class="highlight maxima"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">my_dict = &#123;<span class="built_in">key</span>: value <span class="keyword">for</span> <span class="built_in">key</span> <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">3</span>) <span class="keyword">for</span> value <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">2</span>)&#125;</span><br><span class="line"><span class="built_in">print</span>(my_dict)</span><br></pre></td></tr></table></figure><p>结果</p><p>{0: 1, 1: 1, 2: 1}</p><h4 id="元组推导式"><a href="#元组推导式" class="headerlink" title="元组推导式"></a>元组推导式</h4><p>使用元组推导式生成的结果并不是一个元组，而是一个生成器对象，需要特别注意下，这种写法在有的地方会把它叫做生成器语法，不叫做元组推导式。</p><h4 id="集合推导式"><a href="#集合推导式" class="headerlink" title="集合推导式"></a>集合推导式</h4><p>因为集合是无序且不重复的，所以会自动去掉重复的元素，并且每次运行显示的顺序不一样，使用的时候很容易晕掉。</p>]]></content>
    
    
    <summary type="html">python learning for AI</summary>
    
    
    
    
    <category term="note" scheme="http://blog.wenmozhu.de5.net/tags/note/"/>
    
  </entry>
  
  <entry>
    <title>从0开始学习c语言</title>
    <link href="http://blog.wenmozhu.de5.net/2023/09/26/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6%E4%B9%A0c%E8%AF%AD%E8%A8%80/"/>
    <id>http://blog.wenmozhu.de5.net/2023/09/26/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6%E4%B9%A0c%E8%AF%AD%E8%A8%80/</id>
    <published>2023-09-26T11:52:08.000Z</published>
    <updated>2026-09-09T10:57:22.770Z</updated>
    
    <content type="html"><![CDATA[<blockquote><meta name="referrer" content="no-referrer"/><h1 id="从零开始学习c语言"><a href="#从零开始学习c语言" class="headerlink" title="从零开始学习c语言"></a><em><strong>从零开始学习c语言</strong></em></h1><h1 id="常用快捷键："><a href="#常用快捷键：" class="headerlink" title="常用快捷键："></a>常用快捷键：</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/fcb27d24-9e30-4008-80fc-50b8be148dee.png" alt="image-20221117014701069"></p><p>除html与php外其他多少和c语言沾边</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/cfed4642-5ebc-40b5-93ce-56c50f6adac2.png" alt="image-20221117021453185"></p><p>一些概念：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/14c993fc-04ed-4252-bcb7-a3a39de544ef.png" alt="image-20221117021840466"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/0a18b52e-5c15-4bbc-ac14-d90192ed0eb4.png" alt="image-20221117021912231"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6f085456-3d3f-476a-888e-dab202cc085a.png" alt="image-20221117024217615"></p><h1 id="容量转换"><a href="#容量转换" class="headerlink" title="容量转换"></a>容量转换</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/d3838677-1de1-445b-90ad-6e592aacd016.png" alt="image-20230104162014072"></p><h1 id="浮点数的储存形式"><a href="#浮点数的储存形式" class="headerlink" title="浮点数的储存形式"></a>浮点数的储存形式</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104175053588.png" alt="image-20230104175053588"></p><h1 id="二进制：1-10进转2进（小数有精度要求）"><a href="#二进制：1-10进转2进（小数有精度要求）" class="headerlink" title="二进制：1.  10进转2进（小数有精度要求）"></a>二进制：1.  10进转2进（小数有精度要求）</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20221115222016901.png" alt="image-20221115222016901"></p><p>整数自下而上，小数自下而上</p><p><strong>自己做了个二进制</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//jsut a sudden spark for fun.(for int number)</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span>  i=<span class="number">10000</span>;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line"> <span class="type">char</span> option;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;Please choose the option you want:\n&#x27;B&#x27;for decimal to binary\n&#x27;D&#x27;for binary to decimal\n&quot;</span>);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%c&quot;</span>,&amp;option);</span><br><span class="line"> <span class="keyword">if</span>(option==<span class="string">&#x27;B&#x27;</span>)&#123;</span><br><span class="line"> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span> n;</span><br><span class="line"> <span class="type">long</span> <span class="type">int</span> j=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;Please input an integer\n&quot;</span>);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%lld&quot;</span>,&amp;n);</span><br><span class="line"> <span class="type">int</span> number[i];</span><br><span class="line"> <span class="keyword">while</span>(n!=<span class="number">0</span>)&#123;</span><br><span class="line"></span><br><span class="line">     number[j]=n%<span class="number">2</span>;</span><br><span class="line">     n/=<span class="number">2</span>;</span><br><span class="line">      j++;</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line"> <span class="type">long</span> <span class="type">int</span> x=j<span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">for</span>(x;x&gt;=<span class="number">0</span>;x--)</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,number[x]);</span><br><span class="line">&#125;</span><br><span class="line"> <span class="keyword">if</span>(option==<span class="string">&#x27;D&#x27;</span>)&#123;</span><br><span class="line">     <span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span> m=<span class="number">0</span>;</span><br><span class="line">     <span class="type">int</span> b=<span class="number">10</span>;</span><br><span class="line">     <span class="type">int</span> number[i];</span><br><span class="line">     <span class="type">int</span> z=<span class="number">0</span>;</span><br><span class="line">     <span class="built_in">printf</span>(<span class="string">&quot;Please input a binary number\n&quot;</span>);</span><br><span class="line">     <span class="built_in">scanf</span>(<span class="string">&quot;%llu&quot;</span>,&amp;m);</span><br><span class="line">     <span class="keyword">while</span>(m!=<span class="number">0</span>)&#123;</span><br><span class="line">     number[z]=m%b;</span><br><span class="line">     m/=b;</span><br><span class="line">     z++;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">     &#125;</span><br><span class="line">     <span class="type">long</span> <span class="type">long</span> sum=<span class="number">0</span>;</span><br><span class="line">     <span class="type">int</span> y=<span class="number">0</span>;</span><br><span class="line">     <span class="keyword">for</span>(y;y&lt;z;y++)&#123;</span><br><span class="line">         sum+=number[y]*<span class="built_in">pow</span>(<span class="number">2</span>,y);</span><br><span class="line">     &#125;</span><br><span class="line">     <span class="built_in">printf</span>(<span class="string">&quot;%lld&quot;</span>,sum);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>数据太大了hold不住了·怎么办？</p><p>（关于我睡了一觉突然灵光一现了，我们十进制转二进制用数组储存超20位的数据，那么我们二进制转十进制</p><p>不就可以用数组读入一个超20位的数据吗？）</p><p><strong>升级版（待改进）</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span>  i=<span class="number">10000</span>;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line"> <span class="type">char</span> option;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;Please choose the option you want:\n&#x27;B&#x27;for decimal to binary\n&#x27;D&#x27;for binary to decimal\n&quot;</span>);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%c&quot;</span>,&amp;option);</span><br><span class="line"> <span class="keyword">if</span>(option==<span class="string">&#x27;B&#x27;</span>)&#123;</span><br><span class="line"> <span class="type">long</span> <span class="type">long</span> <span class="type">int</span> n;</span><br><span class="line"> <span class="type">long</span> <span class="type">int</span> j=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;Please input an integer\n&quot;</span>);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%lld&quot;</span>,&amp;n);</span><br><span class="line"> <span class="type">int</span> number[i];</span><br><span class="line"> <span class="keyword">while</span>(n!=<span class="number">0</span>)&#123;</span><br><span class="line"></span><br><span class="line">     number[j]=n%<span class="number">2</span>;</span><br><span class="line">     n/=<span class="number">2</span>;</span><br><span class="line">      j++;</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line"> <span class="type">long</span> <span class="type">int</span> x=j<span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">for</span>(x;x&gt;=<span class="number">0</span>;x--)</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,number[x]);</span><br><span class="line">&#125;</span><br><span class="line"> <span class="keyword">if</span>(option==<span class="string">&#x27;D&#x27;</span>)&#123;</span><br><span class="line">     <span class="type">int</span> number[i];</span><br><span class="line">     <span class="type">int</span> z=<span class="number">0</span>;</span><br><span class="line">     <span class="type">int</span> ret=<span class="number">1</span>;</span><br><span class="line">     <span class="built_in">printf</span>(<span class="string">&quot;Please input a binary number,then input a letter to stop\n&quot;</span>);</span><br><span class="line">    <span class="keyword">do</span>&#123;</span><br><span class="line">      ret=<span class="built_in">scanf</span>(<span class="string">&quot;%1d&quot;</span>,&amp;number[z]);</span><br><span class="line">      ++z;</span><br><span class="line">      &#125;<span class="keyword">while</span>(ret==<span class="number">1</span>);</span><br><span class="line">     <span class="type">long</span> <span class="type">long</span> sum=<span class="number">0</span>;</span><br><span class="line">     <span class="type">int</span> y=z<span class="number">-2</span>;</span><br><span class="line">     <span class="type">int</span> j=<span class="number">0</span>;</span><br><span class="line">     <span class="keyword">for</span>(y,j;y&gt;=<span class="number">0</span>,j&lt;z<span class="number">-1</span>;y--,j++)&#123;</span><br><span class="line">         sum+=number[y]*<span class="built_in">pow</span>(<span class="number">2</span>,j);</span><br><span class="line">     &#125;</span><br><span class="line">     <span class="built_in">printf</span>(<span class="string">&quot;%lld&quot;</span>,sum);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img//image-20221118232030474.png" alt="image-20221118232030474"></p><p><strong>这是学长和老师给出的解释（）明天试试</strong></p><p>[^已用字符串数组解决，代码放在answer了]: </p><p>用补码。</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img//image-20221116005548142.png" alt="image-20221116005548142"></p><h1 id="补码怎么求？"><a href="#补码怎么求？" class="headerlink" title="补码怎么求？"></a>补码怎么求？</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img//image-20221117003141327.png" alt="image-20221117003141327"></p><p>八进制</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img//image-20221117004034441.png" alt="image-20221117004034441"></p><p>十六进制</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img//image-20221117004527624.png" alt="image-20221117004527624"></p><p>比武大会的一个不错的题目：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> N 65  <span class="comment">//增加一个字符用来放标识符，便于判断。</span></span></span><br><span class="line"><span class="type">long</span> <span class="type">long</span> <span class="title function_">myPow</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> x)</span>;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">char</span> str[N]=&#123;<span class="number">0</span>&#125;,i=<span class="number">0</span>;    <span class="comment">//str初始化为空字符,下标计数i不会超过N，所以用char类型就可以，用int当然也可以。</span></span><br><span class="line"><span class="type">long</span> <span class="type">long</span> sum=<span class="number">0</span>;  <span class="comment">//这里为什么不能用int？</span></span><br><span class="line"><span class="keyword">while</span>((str[i++]=getchar())!=<span class="string">&#x27;\n&#x27;</span>) <span class="comment">//先不考虑用户在中途输入非法字符的情况，如果需要考虑的话就需要增加判断条件</span></span><br><span class="line">   <span class="keyword">if</span>(i==N)  <span class="keyword">break</span>;<span class="comment">//做边界判断</span></span><br><span class="line">str[i<span class="number">-1</span>] = <span class="string">&#x27;\n&#x27;</span>;   <span class="comment">//  str[i-1]读到的是&#x27;\n&#x27;，或者i为N的时候，str[i-1]也超出64个字符，这时也强行赋值为&#x27;\n&#x27;，逻辑就一致。等学了字符串之后，我们会强行赋值为&#x27;\0&#x27;</span></span><br><span class="line"><span class="keyword">if</span>(str[<span class="number">0</span>]==<span class="string">&#x27;0&#x27;</span>)  <span class="comment">//这时str[0]是最高位为符号位</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;str[j]!=<span class="string">&#x27;\n&#x27;</span>;j++)</span><br><span class="line">    &#123;</span><br><span class="line">       <span class="keyword">if</span>(str[j]==<span class="string">&#x27;1&#x27;</span>)</span><br><span class="line">         <span class="keyword">if</span>((i<span class="number">-2</span>)-j&gt;=<span class="number">0</span>) <span class="comment">//这个判断不要也没问题，要了是为了更好读。</span></span><br><span class="line">            sum+=myPow(<span class="number">2</span>,(i<span class="number">-2</span>)-j);<span class="comment">//有效元素的下标是i-2,因为str[i-1]==&#x27;\n&#x27;</span></span><br><span class="line">    &#125;<span class="comment">//这个大括号不能省略，否则后面那个else会匹配到这个if，我在讲选择结构时详细说明了原因。</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(str[<span class="number">0</span>]==<span class="string">&#x27;1&#x27;</span>)  <span class="comment">//这时str[0]也就是符号位为1为负数的补码</span></span><br><span class="line">&#123;</span><br><span class="line">     <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">1</span>;str[j]!=<span class="string">&#x27;\n&#x27;</span>;j++)  <span class="comment">//这时str[0]上的1是符号位，从次高位开始不为1的数据为真实数据，因为负数的补码前面再多的1都不影响结果</span></span><br><span class="line">        &#123;</span><br><span class="line">           <span class="keyword">if</span>(str[j]==<span class="string">&#x27;0&#x27;</span>)   <span class="comment">//补码是怎么来的？是符号位为1，其他位为对应的正数原码取反再+1得到的;补码的本质是从0减下来的，0-1得到的是-1的补码、0-2得到的是-2的补码；</span></span><br><span class="line">             <span class="keyword">if</span>((i<span class="number">-2</span>)-j&gt;=<span class="number">0</span>) <span class="comment">//这判断可以不要，不影响逻辑和结果</span></span><br><span class="line">                sum+=myPow(<span class="number">2</span>,(i<span class="number">-2</span>)-j);</span><br><span class="line">        &#125;</span><br><span class="line">     sum= -(sum+<span class="number">1</span>);  <span class="comment">//因为是原码取反后再加1得到的，这里也需要加1再取相反数。注意按位取反和取相反数是不同的计算。</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span>    <span class="comment">//如果字符数组得到的第一个元素就是换行符或者是0或1之外的字符，说明用户没有输入过数字或者第一个字符就输入了非法的字符</span></span><br><span class="line">  &#123;</span><br><span class="line">       <span class="built_in">printf</span>(<span class="string">&quot;No number\n&quot;</span>);<span class="comment">//用户的输入不是有效输入</span></span><br><span class="line">       <span class="built_in">exit</span>(<span class="number">0</span>);  <span class="comment">//程序退出</span></span><br><span class="line">  &#125;</span><br><span class="line">   <span class="built_in">printf</span>(<span class="string">&quot;decimal=%lld\n&quot;</span>,sum);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">long</span> <span class="type">long</span> <span class="title function_">myPow</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> x)</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="type">long</span> <span class="type">long</span> powNum=<span class="number">1</span>;<span class="comment">//powNum会参与乘积的计算，先赋初值为1；如果这个变量需要做累加计算的话，就要先赋值为0.</span></span><br><span class="line">  <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=x;i++)  <span class="comment">//如果形参接收的x为0，这个循环不执行，返回的powNum是1</span></span><br><span class="line">     powNum *= a;</span><br><span class="line">  <span class="keyword">return</span> powNum;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="gets-gets-s-fgets之间的区别。"><a href="#gets-gets-s-fgets之间的区别。" class="headerlink" title="gets,gets_s,fgets之间的区别。"></a><strong>gets,gets_s,fgets之间的区别。</strong></h1><h2 id="换行符的处理："><a href="#换行符的处理：" class="headerlink" title="换行符的处理："></a>换行符的处理：</h2><ol><li>gets会将最后的’\n’改成’\0’,gets_s会把最后的’\n’直接丢弃，fgets直接读取’\n’</li><li>gets_s会将未读取的数据直接清空（为了读取数据不出幺蛾子),而fgets会保留未读取的部分，gets如果数据越界了会将不属于他的数据给覆盖，有很大的安全隐患。</li><li>fgets的使用：char *fgets(char *<strong>restrict</strong> _Buf, int _MaxCount, FILE *<strong>restrict</strong> _File)</li></ol><p>粒子：</p><p>a&#x3D;20;</p><p>char[a];</p><p>fgets(a,20,stdin);（stdin从用户那里读入数据，如果这里是文件名的话那么从文件读取数据）</p><p><strong>补充：</strong></p><p>stdin与stdout：stdin是标准输入流，是标准输出流，类似于scanf与printf。（升级版plus）</p><h1 id="逗号表达式"><a href="#逗号表达式" class="headerlink" title="逗号表达式"></a>逗号表达式</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104175624280.png" alt="image-20230104175624280"></p><h1 id="普通运算"><a href="#普通运算" class="headerlink" title="普通运算"></a>普通运算</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104181322654.png" alt="image-20230104181322654"></p><p>运算符优先级：</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104182033272.png" alt="image-20230104182033272"></p><p>如何求复杂表达式的值？</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104182619562.png" alt="image-20230104182619562"></p><h1 id="位运算"><a href="#位运算" class="headerlink" title="位运算:"></a>位运算:</h1><p>相关运算符</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104184148208.png" alt="image-20230104184148208"></p><p>1.（可以升级之前的一些操作，比如说判断奇偶数，按位与会更快一点）</p><p>只要有0就是0</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104184629199-1672829191018-1.png" alt="image-20230104184629199"></p><p>2.只要有一就是一<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104185352538.png" alt="image-20230104185352538"></p><p>3.正常性取向（）</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230104185833513.png" alt="image-20230104185833513"></p><p>4.按位左移与按位右移在没有溢出的条件下分别对应乘了2的n次方</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230105100211093.png" alt="image-20230105100211093"></p><p>（绷不住了，寒假白兰到还有17天）</p><h1 id="结构体"><a href="#结构体" class="headerlink" title="结构体"></a>结构体</h1><p>（1）结构体内存分配原则：</p><ul><li>原则一：结构体中元素按照定义顺序存放到内存中，但并不是紧密排列。从结构体存储的首地址开始 ，每一个元素存入内存中时，它都会认为内存是以自己的宽度来划分空间的，因此元素存放的位置一定会在自己大小的整数倍上开始。</li><li>原则二： 在原则一的基础上，检查计算出的存储单元是否为所有元素中最宽的元素长度的整数倍。若是，则结束；否则，将其补齐为它的整数倍。</li></ul><p>（2）定义位域时，各个成员的类型最好保持一致，比如都用char，或都用int，不要混合使用，这样才能达到节省内存空间的目的。</p><h1 id="sscanf与sprintf语法"><a href="#sscanf与sprintf语法" class="headerlink" title="sscanf与sprintf语法"></a>sscanf与sprintf语法</h1><h2 id="scsanf"><a href="#scsanf" class="headerlink" title="scsanf():"></a>scsanf():</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//昨天练习题目的参考答案：</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">   <span class="type">double</span> sum=<span class="number">0</span>,num1,num2;</span><br><span class="line">   <span class="type">char</span> a[]=<span class="string">&quot;123.45 456.78&quot;</span>;</span><br><span class="line">   <span class="type">char</span> b[<span class="number">30</span>]=&#123;<span class="number">0</span>&#125;;</span><br><span class="line">   &#123;<span class="built_in">sscanf</span>(a,<span class="string">&quot;%lf%lf&quot;</span>,&amp;num1,&amp;num2);&#125;</span><br><span class="line">   sum=num1+num2;</span><br><span class="line">   <span class="built_in">sprintf</span>(b,<span class="string">&quot;sum=%f&quot;</span>,sum);</span><br><span class="line">   <span class="built_in">puts</span>(b);</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="描述"><a href="#描述" class="headerlink" title="描述"></a>描述</h3><p>C 库函数 <strong>int sscanf(const char *str, const char *format, …)</strong> 从字符串读取格式化输入。</p><h3 id="声明"><a href="#声明" class="headerlink" title="声明"></a>声明</h3><p>下面是 sscanf() 函数的声明。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">sscanf</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *str, <span class="type">const</span> <span class="type">char</span> *format, ...)</span></span><br></pre></td></tr></table></figure><h3 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h3><p>下面的实例演示了 sscanf() 函数的用法。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">   <span class="type">int</span> day, year;</span><br><span class="line">   <span class="type">char</span> weekday[<span class="number">20</span>], month[<span class="number">20</span>], dtm[<span class="number">100</span>];</span><br><span class="line"></span><br><span class="line">   <span class="built_in">strcpy</span>( dtm, <span class="string">&quot;Saturday March 25 1989&quot;</span> );</span><br><span class="line">   <span class="built_in">sscanf</span>( dtm, <span class="string">&quot;%s %s %d  %d&quot;</span>, weekday, month, &amp;day, &amp;year );</span><br><span class="line"></span><br><span class="line">   <span class="built_in">printf</span>(<span class="string">&quot;%s %d, %d = %s\n&quot;</span>, month, day, year, weekday );</span><br><span class="line"></span><br><span class="line">   <span class="keyword">return</span>(<span class="number">0</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="高级用法"><a href="#高级用法" class="headerlink" title="高级用法"></a>高级用法</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">char</span> str[<span class="number">32</span>] = <span class="string">&quot;&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="built_in">sscanf</span>(<span class="string">&quot;123456abcdedf&quot;</span>, <span class="string">&quot;%31[0-9]&quot;</span>, str);</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;str=%s/n&quot;</span>, str);</span><br></pre></td></tr></table></figure><p>输出结果：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">str=<span class="number">123456</span></span><br></pre></td></tr></table></figure><p>上面的格式中，[0-9]表示这是一个仅包含0-9这几个字符的字符串，前面使用数字31修饰词表示这个字符串缓冲区的最大长度</p><h2 id="sprintf"><a href="#sprintf" class="headerlink" title="sprintf():"></a>sprintf():</h2><h3 id="描述-1"><a href="#描述-1" class="headerlink" title="描述"></a>描述</h3><p>C 库函数 <strong>int sprintf(char *str, const char *format, …)</strong> 发送格式化输出到 <strong>str</strong> 所指向的字符串。</p><h3 id="声明-1"><a href="#声明-1" class="headerlink" title="声明"></a>声明</h3><p>下面是 sprintf() 函数的声明。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">sprintf</span><span class="params">(<span class="type">char</span> *str, <span class="type">const</span> <span class="type">char</span> *format, ...)</span></span><br></pre></td></tr></table></figure><h3 id="实例-1"><a href="#实例-1" class="headerlink" title="实例"></a>实例</h3><p>下面的实例演示了 sprintf() 函数的用法。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line"> &#123;</span><br><span class="line">   <span class="type">char</span> str[<span class="number">80</span>];</span><br><span class="line"></span><br><span class="line">   <span class="built_in">sprintf</span>(str, <span class="string">&quot;Pi 的值 = %f&quot;</span>, M_PI);</span><br><span class="line">   <span class="built_in">puts</span>(str);</span><br><span class="line"></span><br><span class="line">   <span class="keyword">return</span>(<span class="number">0</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="指针"><a href="#指针" class="headerlink" title="指针"></a>指针</h1><h2 id="1-定义（略）"><a href="#1-定义（略）" class="headerlink" title="1.定义（略）"></a>1.定义（略）</h2><h2 id="2-指针的算数意义"><a href="#2-指针的算数意义" class="headerlink" title="2.指针的算数意义"></a>2.指针的算数意义</h2><ul><li>指针的每一次递增，它其实会指向下一个元素的存储单元。</li><li>指针的每一次递减，它都会指向前一个元素的存储单元。</li><li>指针在递增和递减时跳跃的字节数取决于指针所指向变量数据类型长度，比如 int 就是 4 个字节。</li></ul><h2 id="3-指针数组"><a href="#3-指针数组" class="headerlink" title="3.指针数组"></a>3.指针数组</h2><p>用一个指向字符的指针数组来存储一个字符串列表，如下：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> MAX = <span class="number">4</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span> <span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">   <span class="type">const</span> <span class="type">char</span> *names[] = &#123;</span><br><span class="line">                   <span class="string">&quot;Zara Ali&quot;</span>,</span><br><span class="line">                   <span class="string">&quot;Hina Ali&quot;</span>,</span><br><span class="line">                   <span class="string">&quot;Nuha Ali&quot;</span>,</span><br><span class="line">                   <span class="string">&quot;Sara Ali&quot;</span>,</span><br><span class="line">   &#125;;</span><br><span class="line">   <span class="type">int</span> i = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">   <span class="keyword">for</span> ( i = <span class="number">0</span>; i &lt; MAX; i++)</span><br><span class="line">   &#123;</span><br><span class="line">      <span class="built_in">printf</span>(<span class="string">&quot;Value of names[%d] = %s\n&quot;</span>, i, names[i] );</span><br><span class="line">    <span class="comment">//names[i]前面不需要加*，因为c中字符串指针输出全部只需要开头的指针，</span></span><br><span class="line">    <span class="comment">//即数组名str，加了*只会取出第一个元素</span></span><br><span class="line">   &#125;</span><br><span class="line">   <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>当上面的代码被编译和执行时，它会产生下列结果：</p><figure class="highlight abnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Value of names[<span class="number">0</span>] <span class="operator">=</span> Zara Ali</span><br><span class="line">Value of names[<span class="number">1</span>] <span class="operator">=</span> Hina Ali</span><br><span class="line">Value of names[<span class="number">2</span>] <span class="operator">=</span> Nuha Ali</span><br><span class="line">Value of names[<span class="number">3</span>] <span class="operator">=</span> Sara Ali</span><br></pre></td></tr></table></figure><h2 id="4-指向指针的指针"><a href="#4-指向指针的指针" class="headerlink" title="4.指向指针的指针"></a>4.指向指针的指针</h2><p>（二维数组中有所体现）</p><h2 id="5-从函数返回指针"><a href="#5-从函数返回指针" class="headerlink" title="5.从函数返回指针"></a>5.从函数返回指针</h2><p>static int  r[10];&#x2F;&#x2F;函数里的变量如果想返回地址需要加上static</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20230201230854265-1675264144663-1.png" alt="image-20230201230854265"></p><h2 id="6-函数指针"><a href="#6-函数指针" class="headerlink" title="6.函数指针"></a>6.函数指针</h2><p>函数指针是指向函数的指针变量。</p><p>通常我们说的指针变量是指向一个整型、字符型或数组等变量，而函数指针是指向函数。</p><p>函数指针可以像一般函数一样，用于调用函数、传递参数。</p><h4 id="函数指针变量的声明："><a href="#函数指针变量的声明：" class="headerlink" title="函数指针变量的声明："></a>函数指针变量的声明：</h4><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="title function_">int</span> <span class="params">(*fun_ptr)</span><span class="params">(<span class="type">int</span>,<span class="type">int</span>)</span>; <span class="comment">// 声明一个指向同样参数、返回值的函数指针类型</span></span><br></pre></td></tr></table></figure><h4 id="回调函数"><a href="#回调函数" class="headerlink" title="回调函数"></a>回调函数</h4><p>‘’函数指针作为某个函数的参数’‘</p><p>函数指针变量可以作为某个函数的参数来使用的，回调函数就是一个通过函数指针调用的函数。</p><p>简单讲：回调函数是由别人的函数执行时调用你实现的函数。</p><blockquote><p>以下是来自知乎作者常溪玲的解说：</p><p>你到一个商店买东西，刚好你要的东西没有货，于是你在店员那里留下了你的电话，过了几天店里有货了，店员就打了你的电话，然后你接到电话后就到店里去取了货。在这个例子里，你的电话号码就叫回调函数，你把电话留给店员就叫登记回调函数，店里后来有货了叫做触发了回调关联的事件，店员给你打电话叫做调用回调函数，你到店里去取货叫做响应回调事件。</p></blockquote></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;meta name=&quot;referrer&quot; content=&quot;no-referrer&quot;/&gt;

&lt;h1 id=&quot;从零开始学习c语言&quot;&gt;&lt;a href=&quot;#从零开始学习c语言&quot; class=&quot;headerlink&quot; title=&quot;从零开始学习c语言&quot;&gt;&lt;/a</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>answer</title>
    <link href="http://blog.wenmozhu.de5.net/2022/10/29/answer/"/>
    <id>http://blog.wenmozhu.de5.net/2022/10/29/answer/</id>
    <published>2022-10-29T00:42:02.000Z</published>
    <updated>2026-09-09T10:57:22.161Z</updated>
    
    <content type="html"><![CDATA[<meta name="referrer" content="no-referrer"/><h1 id="错题1"><a href="#错题1" class="headerlink" title="错题1*"></a><em>错题1</em>*<img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/87ccee4d-994d-43d0-a598-2895f9aafd56.png"></h1><p>假设b已经是a的因子之和，那么只要证明b的因子之和也等于a即可，如此简化了计算</p><h1 id="无题（太逆天了）"><a href="#无题（太逆天了）" class="headerlink" title="无题（太逆天了）"></a><u><em><strong>无题</strong></em></u>（太逆天了）</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/faede76c-3c25-4162-b5bb-59e099383edb.png"></p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/aae30729-fd5c-4bcc-87b8-67ec38e5a015.png"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//我的理解，虽然一开始没写出来呜呜呜（从E到A）</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    <span class="type">int</span> i=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (x = <span class="number">4</span>;x&lt;=<span class="number">10000</span>; x+=<span class="number">4</span>)</span><br><span class="line">    &#123;   <span class="type">int</span> a=x;</span><br><span class="line">        <span class="keyword">while</span> (x % <span class="number">4</span> == <span class="number">0</span> &amp;&amp; i &lt;= <span class="number">5</span>)</span><br><span class="line">        &#123;</span><br><span class="line">        </span><br><span class="line">            x = <span class="number">1.25</span> * x + <span class="number">1</span>;</span><br><span class="line">            i++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> ((x - <span class="number">1</span>) % <span class="number">20</span> == <span class="number">0</span> &amp;&amp; i == <span class="number">6</span> )</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Total number of fish catched=%d\n&quot;</span>, x);</span><br><span class="line">           </span><br><span class="line">        &#125;<span class="keyword">else</span></span><br><span class="line">        x=a;</span><br><span class="line">        i =<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>&#96;</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//这是直接从A到E的方法（自己写的！！！！！）</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x=<span class="number">626</span>;</span><br><span class="line">    <span class="type">int</span> i=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> n=x<span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span> (n;n&lt;=<span class="number">3200</span>; n+=<span class="number">5</span>)</span><br><span class="line">    &#123;  </span><br><span class="line">        <span class="keyword">while</span> ((x<span class="number">-1</span>) % <span class="number">5</span> == <span class="number">0</span> &amp;&amp; i &lt;= <span class="number">5</span>)</span><br><span class="line">        &#123;</span><br><span class="line">        </span><br><span class="line">            x =  (x - <span class="number">1</span>)*<span class="number">0.8</span>;</span><br><span class="line">            i++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> ( i == <span class="number">6</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;Total number of fish catched=%d\n&quot;</span>, n<span class="number">-4</span>);</span><br><span class="line">           </span><br><span class="line">        &#125;<span class="keyword">else</span></span><br><span class="line">        x=n+<span class="number">1</span>;</span><br><span class="line">        i =<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/6c077a02-3313-4aed-89bf-21f28dfbb1f8.png"></p><p>​        <em><strong><u>注意有些时候也得用上宏常量</u></strong></em></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">//参考答案（我和他是同一个思路，但是我忽略了金融是很“精准”的，一般情况下不可以用double这样的近似数，不然数据最后出来会有偏差，所以我们要用到宏常量）</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span>  RATE  0.01875</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span>  MONTHS 12</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span>  CAPITAL 1000</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span>  YEARS 5</span></span><br><span class="line">main()</span><br><span class="line">&#123;       </span><br><span class="line">    <span class="type">int</span>  i;</span><br><span class="line">    <span class="type">double</span> deposit = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; YEARS; i++)</span><br><span class="line">    &#123;       </span><br><span class="line">        deposit = (deposit + CAPITAL) / (<span class="number">1</span> + RATE * MONTHS);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;He must save %.2f at the first year.\n&quot;</span>, deposit);</span><br><span class="line">&#125;       </span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>你好漂亮</p><p>yalima怎么这么难搞（scanf有返回值，每成功读取到一个数加1，没读到为0，形式为a&#x3D;scanf(“”);</p><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20221030_221648.pngimage-20221104213220993.png" alt="image-20221104213220993"></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x1=<span class="number">0</span>,x2=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> re=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (re!=<span class="number">2</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Input x1, x2:\n&quot;</span>);</span><br><span class="line">        re=<span class="built_in">scanf</span>(<span class="string">&quot;%d,%d&quot;</span>,&amp;x1,&amp;x2);</span><br><span class="line">        <span class="keyword">if</span>(re!=<span class="number">2</span>)&#123;</span><br><span class="line">        <span class="keyword">while</span>(getchar()!=<span class="string">&#x27;\n&#x27;</span>);</span><br><span class="line">        <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        <span class="keyword">if</span>(x1*x2&lt;<span class="number">0</span>)&#123;</span><br><span class="line">         <span class="built_in">printf</span>(<span class="string">&quot;x1=%d,x2=%d\n&quot;</span>, x1, x2);</span><br><span class="line">         re=<span class="number">2</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span></span><br><span class="line">        re=<span class="number">0</span>; </span><br><span class="line">         </span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这题要分闰年和每月的天数</p><p>问题是每年的天数还不一样，还得做一个</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>,Sum=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%4d-%2d-%2d&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    <span class="type">int</span> MAX[<span class="number">12</span>]=&#123;<span class="number">31</span>,<span class="number">28</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>,<span class="number">30</span>,<span class="number">31</span>&#125;;</span><br><span class="line">    <span class="comment">//利用数组记录每月月数</span></span><br><span class="line">    <span class="comment">//闰年改二月的日期</span></span><br><span class="line">    <span class="keyword">if</span>(a%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;a%<span class="number">100</span>!=<span class="number">0</span>&amp;&amp;a%<span class="number">400</span>==<span class="number">0</span>)</span><br><span class="line">    MAX[<span class="number">1</span>]=<span class="number">29</span>;</span><br><span class="line">    <span class="comment">//计算？月距离一月一号过了多少天</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;b;i++)&#123;</span><br><span class="line">        sum+=MAX[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">1990</span>;j&lt;a;j++)&#123;</span><br><span class="line">        <span class="keyword">if</span>(a%<span class="number">4</span>==<span class="number">0</span>&amp;&amp;a%<span class="number">100</span>!=<span class="number">0</span>&amp;&amp;a%<span class="number">400</span>==<span class="number">0</span>)</span><br><span class="line">            Sum+=<span class="number">366</span>;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            Sum+=<span class="number">365</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> ret=(sum+Sum+c)%<span class="number">5</span>;</span><br><span class="line">    <span class="keyword">if</span>(b&lt;<span class="number">0</span>||b&gt;<span class="number">12</span>||c&lt;<span class="number">0</span>||c&gt;MAX[b<span class="number">-1</span>])&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Invalid input.&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(ret==<span class="number">0</span>||ret==<span class="number">4</span>)</span><br><span class="line">         <span class="built_in">printf</span>(<span class="string">&quot;He is having a rest.&quot;</span>);</span><br><span class="line">         <span class="keyword">else</span></span><br><span class="line">         <span class="built_in">printf</span>(<span class="string">&quot;He is working.&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="rand-的使用方法"><a href="#rand-的使用方法" class="headerlink" title="rand()的使用方法"></a><em><strong>rand()的使用方法</strong></em></h1><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/image-20221106211446271.png" alt="image-20221106211446271" style="zoom: 80%;" /><p>简单点：rand()%(b-a+1)+a表示【a，b】区间</p><p>一般使用：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;time.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">    <span class="type">int</span> a=<span class="number">98</span>;</span><br><span class="line">    <span class="type">int</span> b=<span class="number">678</span>;</span><br><span class="line">    <span class="type">int</span> number;</span><br><span class="line">    srand(time(<span class="number">0</span>));</span><br><span class="line">    number=rand()%(b-a+<span class="number">1</span>)+a;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,number);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>assert用法：</p><p>类似于if语句，但它快一点，不影响效率。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//先打个头文件</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;assert.h&gt;</span></span></span><br><span class="line">assert(.....);<span class="comment">//这里有分号，而且它加不了大括号。</span></span><br><span class="line">.......</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>1533703751407</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">编程验证哥德巴赫猜想：任意一个充分大的偶数，可以用两个素数之和表示。如：</span><br><span class="line">4 = 2 + 2    6 = 3 + 3。</span><br><span class="line">**输入格式要求：&quot;%d&quot; 提示信息：&quot;Input a number:\n&quot; 输入奇数时报错： &quot;Input error!\n&quot;</span><br><span class="line">**输出格式要求：输入偶数时显示&quot;%d=%d+%d\n&quot;</span><br><span class="line">程序的运行的输入输出样例1：</span><br><span class="line">屏幕先显示提示信息：</span><br><span class="line">Input a number:</span><br><span class="line">然后用户键盘输入：</span><br><span class="line">9</span><br><span class="line">最后屏幕输出：</span><br><span class="line">Input error!         </span><br><span class="line">程序的运行的输入输出样例2：</span><br><span class="line">屏幕先显示提示信息：</span><br><span class="line">Input a number:</span><br><span class="line">然后用户键盘输入：</span><br><span class="line">100</span><br><span class="line">最后屏幕输出：</span><br><span class="line">100=3+97</span><br></pre></td></tr></table></figure><p>日哦，for里面的自增变量打错了，搞起我循环没出来。。。。。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">isprime</span><span class="params">(<span class="type">int</span> a)</span>&#123;</span><br><span class="line">    <span class="type">int</span> isprime=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> i=<span class="number">2</span>;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">2</span>;i&lt;<span class="built_in">sqrt</span>(a);i++)&#123;</span><br><span class="line">        <span class="keyword">if</span>(a%i==<span class="number">0</span>)</span><br><span class="line">        isprime=<span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> isprime;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">int</span> i=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> j=<span class="number">1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Input a number:\n&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    <span class="keyword">if</span>(n%<span class="number">2</span>!=<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Input error!&quot;</span>);</span><br><span class="line">        <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;=n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span>(isprime(i)&amp;&amp;isprime(j)&amp;&amp;(i+j)==n)&#123;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;%d=%d+%d&quot;</span>,n,i,j);</span><br><span class="line">                    <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="有意思的一题"><a href="#有意思的一题" class="headerlink" title="有意思的一题"></a>有意思的一题</h1><p><strong>魔术师利用一副牌中的13张黑桃，预先将它们排好后迭在一起，牌面朝下。对观众说：我不看牌，只数数就可以猜到每张牌是什么，我大声数数，你们听，不信？你们就看。魔术师将最上面的那张牌数为1，把它翻过来正好是黑桃A，将黑桃A放在桌子上，然后按顺序从上到下数手上的余牌，第二次数1、2，将第一张牌放在这迭牌的下面，将第二张牌翻过来，正好是黑桃2，也将它放在桌子上，第三次数1、2、3，将前面两张依次放在这迭牌的下面，再翻第三张牌正好是黑桃3。这样依次进行将13张牌全翻出来，准确无误。问魔术师手中的牌原始顺序是怎样安排的？</strong>（有点意思，不难但是没思路会很痛苦）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//我的解法</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span> </span></span><br><span class="line"><span class="type">int</span> number[<span class="number">13</span>];</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">  </span><br><span class="line">    <span class="type">int</span> i=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> ret=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">int</span> count=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(n=<span class="number">1</span>;n&lt;=<span class="number">13</span>;n++)&#123;</span><br><span class="line">        <span class="keyword">for</span>(i;i&lt;<span class="number">13</span>;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span>(number[i]==<span class="number">0</span>)&#123;</span><br><span class="line">                count++;</span><br><span class="line">                ret=<span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span>(count==n)&#123;</span><br><span class="line">                number[i]=n;</span><br><span class="line">                ret=<span class="number">1</span>;</span><br><span class="line">                count=<span class="number">0</span>;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            </span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(ret==<span class="number">0</span>)&#123;</span><br><span class="line">            n--;</span><br><span class="line">            i=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;<span class="number">13</span>;j++)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%3d&quot;</span>,number[j]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>一个大哥写的代码，我现在还看不明白。（代码武林里面的位运算，还不会，得学）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"> <span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">void</span> <span class="title function_">printBinary</span><span class="params">(<span class="type">int</span> num)</span>;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">        <span class="type">int</span> num;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;num);</span><br><span class="line">        printBinary(num);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">void</span> <span class="title function_">printBinary</span><span class="params">(<span class="type">int</span> num)</span></span><br><span class="line">&#123;    </span><br><span class="line">    <span class="type">int</span> cnt=(<span class="keyword">sizeof</span>(num)&lt;&lt;<span class="number">3</span>)<span class="number">-1</span>;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=cnt;i&gt;=<span class="number">0</span>;i--)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> temp=num&gt;&gt;i;</span><br><span class="line">        <span class="type">int</span> b=temp&amp;<span class="number">1</span>;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,b);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="数组如何定义？"><a href="#数组如何定义？" class="headerlink" title="数组如何定义？"></a>数组如何定义？</h1><p><strong>) 定义数组时给所有元素赋初值</strong>，这叫“完全初始化”。例如：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> a[<span class="number">5</span>] = &#123;<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>&#125;;</span><br></pre></td></tr></table></figure><p><strong>2) 可以只给一部分元素赋值</strong>，这叫“不完全初始化”。例如：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> a[<span class="number">5</span>] = &#123;<span class="number">1</span>, <span class="number">2</span>&#125;;</span><br></pre></td></tr></table></figure><p>需要注意的是，“不完全初始化”和“完全不初始化”不一样。如果“完全不初始化”，即只定义“int a[5]；”而不初始化，那么各个元素的值就不是0了，所有元素都是垃圾值。（有些编译器会自动给你变成0）</p><p>你也不能写成“int a[5]&#x3D;{}；”。如果大括号中什么都不写，那就是极其严重的语法错误。大括号中最少要写一个数。比如“int  a[5]&#x3D;{0}；”，这时就是给数组“清零”（我的vs要放在主函数前面），此时数组中每个元素都是零。此外，如果定义的数组的长度比花括号中所提供的初值的个数少，也是语法错误，如“a[2]&#x3D;{1，2，3，4，5}；（会占据其他数据的位置）</p><p><strong>3) 如果定义数组时就给数组中所有元素赋初值，那么就可以不指定数组的长度，因为此时元素的个数已经确定了。</strong>编程时我们经常都会使用这种写法，因为方便，既不会出问题，也不用自己计算有几个元素，系统会自动分配空间。例如：</p><p>（很多的时候你怎么办嘛）</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> a[<span class="number">5</span>] = &#123;<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>&#125;;</span><br></pre></td></tr></table></figure><p>可以写成：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">int</span> a[] = &#123;<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>&#125;;</span><br></pre></td></tr></table></figure><p>第二种写法的花括号中有 5 个数，所以系统会自动定义数组 a 的长度为 5。但是要注意，只有在定义数组时就初始化才可以这样写。如果定义数组时不初始化，那么省略数组长度就是语法错误。比如：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int <span class="selector-tag">a</span><span class="selector-attr">[]</span>;</span><br></pre></td></tr></table></figure><p>那么编译时就会提示错误，编译器会提示你没有指定数组的长度。</p><p>**4.**输入数字时必须用 for 循环进行输入。而输入字符串时无须用循环，直接用 scanf 就可以了。(确实真的爽)</p><p><a href="//jsut%20a%20sudden%20spark%20for%20fun.(for%20int%20number)%0A#include%20%3Cstdio.h%3E%0A#include%20%3Cmath.h%3E%0Aint%20%20i=10000;%0Aint%20main()%7B%0A%20%20%20%20char%20option;%0A%20%20%20%20printf(%22Please%20choose%20the%20option%20you%20want:%5Cn'B'for%20decimal%20to%20binary(10-%3E2)%5Cn'D'for%20binary%20to%20decimal(2-%3E10)%5Cn%22"></a></p><p>理解了一点字符数组和字符串数组再改进的二进制转换器</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//jsut a sudden spark for fun.(for int number)</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"><span class="type">int</span>  i=<span class="number">10000</span>;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">    <span class="type">char</span> option;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Please choose the option you want:\n&#x27;B&#x27;for decimal to binary(10-&gt;2)\n&#x27;D&#x27;for binary to decimal(2-&gt;10)\n&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%c&quot;</span>,&amp;option);</span><br><span class="line">    <span class="keyword">if</span>(option==<span class="string">&#x27;B&#x27;</span>)&#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> <span class="type">int</span> n;</span><br><span class="line">    <span class="type">long</span> <span class="type">int</span> j=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Please input an integer\n&quot;</span>);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lld&quot;</span>,&amp;n);</span><br><span class="line">    <span class="type">int</span> number[i];</span><br><span class="line">    <span class="keyword">while</span>(n!=<span class="number">0</span>)&#123;</span><br><span class="line">       </span><br><span class="line">        number[j]=n%<span class="number">2</span>;</span><br><span class="line">        n/=<span class="number">2</span>;</span><br><span class="line">         j++;</span><br><span class="line">        </span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">long</span> <span class="type">int</span> x=j<span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span>(x;x&gt;=<span class="number">0</span>;x--)</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,number[x]);</span><br><span class="line"> &#125;<span class="comment">//算输入了多少位二进制数（以后求位数有新选择了）</span></span><br><span class="line">    <span class="type">char</span>  number[<span class="number">32</span>];</span><br><span class="line">    <span class="type">int</span> <span class="title function_">len</span><span class="params">(<span class="type">char</span> number [])</span></span><br><span class="line">    &#123;</span><br><span class="line">    <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(number[len])</span><br><span class="line">        len++;</span><br><span class="line">    <span class="keyword">return</span> len;    </span><br><span class="line">    &#125; </span><br><span class="line">    <span class="keyword">if</span>(option==<span class="string">&#x27;D&#x27;</span>)&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="type">int</span> count=<span class="number">0</span>;</span><br><span class="line">    <span class="type">long</span> sum;</span><br><span class="line">     <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,&amp;number);</span><br><span class="line">     count=len(number);</span><br><span class="line">     <span class="keyword">for</span>(i=count<span class="number">-1</span>,j=<span class="number">0</span>;i&gt;=<span class="number">0</span> ;i--,j++)</span><br><span class="line">     &#123;</span><br><span class="line">     sum+=(number[i]<span class="number">-48</span>)*<span class="built_in">pow</span>(<span class="number">2</span>,j);   </span><br><span class="line">     &#125;</span><br><span class="line">     <span class="built_in">printf</span>(<span class="string">&quot;%ld&quot;</span>,sum);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="字符类数组的自我理解："><a href="#字符类数组的自我理解：" class="headerlink" title="字符类数组的自我理解："></a><strong>字符类数组的自我理解：</strong></h1><p><strong>1.</strong>      char[20]可以理解成char[20] [1]这个东西</p><ol start="2"><li>然后字符串可以看成char[a] [b]，一共有a个子块，每个子块的位数为b，例如</li></ol><p>   ”广域网“，”经纬度“，”互换了“。。。。。</p><p>   3.如果a&#x3D;1；那么我们可以写成char[20]这种的字符串数组（是不是和第一点很像？其实他们就差了个%c与%s</p><p>   4.这种数组好像可以做函数参数，感觉挺方便的wwww，有空学习一下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">鲁智深吃馒头</span><br><span class="line">据说，鲁智深一天中午匆匆来到开封府大相国寺，想蹭顿饭吃，当时大相国寺有99个和尚，只做了99个馒头，智清长老不愿得罪鲁智深，便把他安排在一个特定位置，之后对所有人说，从我开始报数（围成一圈），第5个人可以吃到馒头（并退下），按照这个公平的方法，所有和尚都吃到了馒头，唯独鲁智深没有吃上。请问他在哪个位置？</span><br><span class="line">要求编程计算该位置并输出。</span><br><span class="line">输入格式:无</span><br><span class="line">输出格式：</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span>&#123;</span><br><span class="line">    <span class="type">int</span> i=<span class="number">0</span>,j=<span class="number">0</span>,k=<span class="number">0</span>;</span><br><span class="line">  <span class="type">int</span> a[<span class="number">100</span>]=&#123;&#125;;</span><br><span class="line">  <span class="keyword">for</span>(i,k;k&lt;<span class="number">100</span>;i++)&#123;</span><br><span class="line">    <span class="keyword">if</span>(a[i]==<span class="number">0</span>)</span><br><span class="line">        j++;</span><br><span class="line">    <span class="keyword">if</span>((j%<span class="number">5</span>==<span class="number">0</span>)&amp;&amp;a[i]==<span class="number">0</span>)&#123;</span><br><span class="line">       a[i]=<span class="number">1</span>;</span><br><span class="line">       k++;</span><br><span class="line">    &#125;</span><br><span class="line">   <span class="keyword">if</span>(i==<span class="number">100</span>)  </span><br><span class="line">    i=<span class="number">-1</span>;</span><br><span class="line">   <span class="keyword">if</span>(k==<span class="number">99</span>)</span><br><span class="line">   <span class="keyword">break</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">for</span>(<span class="type">int</span> m=<span class="number">0</span>;m&lt;<span class="number">100</span>;m++)&#123;</span><br><span class="line">    <span class="keyword">if</span>(a[m]==<span class="number">0</span>)</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,m+<span class="number">1</span>);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（感觉不是特别难，但我就是弄了很久）</p><h1 id="指针困惑"><a href="#指针困惑" class="headerlink" title="指针困惑"></a>指针困惑</h1><p><img src="https://gitee.com/Charles-Webber/blog-image1/raw/master/img/ba5abc3d-696e-4ff8-836b-0a5e2c6b440c.png" alt="-bdcd8f8e098f9b1[10]"></p><p>困惑一：(int (*)[3])a其实就是将a这个4×3的二维数组转成了3×4的，名字变成了b</p><p>困惑二：为什么只有三列却出现了[3]呢？其实a[1]+1表示a[1] [1],那么这个三是可以参与计算的，化简得(b[2]-2)[3]&#x3D;b[2]-2+3&#x3D;b[2] [1],最后再加加得到10</p>]]></content>
    
    
    <summary type="html">a freshman&#39;s practice</summary>
    
    
    
    
    <category term="answer" scheme="http://blog.wenmozhu.de5.net/tags/answer/"/>
    
  </entry>
  
</feed>
