<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Lonelee]]></title><description><![CDATA[For fun]]></description><link>https://lonelee-kirsi.github.io</link><generator>RSS for Node</generator><lastBuildDate>Mon, 15 Jan 2018 08:45:25 GMT</lastBuildDate><atom:link href="https://lonelee-kirsi.github.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[计算机网络课程]]></title><description><![CDATA[<div id="toc" class="toc">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#__">计算机网络和因特网</a>
<ul class="sectlevel2">
<li><a href="#___2">各种工</a></li>
<li><a href="#___3">网络交换方式</a></li>
<li><a href="#___4">协议</a></li>
</ul>
</li>
<li><a href="#___8">应用层</a>
<ul class="sectlevel2">
<li><a href="#_rtt">RTT</a></li>
<li><a href="#_http_get">HTTP 条件 GET</a></li>
<li><a href="#_smtp_http">SMTP 与 HTTP 比较</a></li>
<li><a href="#_http">HTTP 工作流程</a></li>
<li><a href="#_dns">DNS 工作流程</a></li>
<li><a href="#_http_dns_ip">HTTP、DNS、IP 综合工作</a></li>
</ul>
</li>
<li><a href="#___13">传输层</a>
<ul class="sectlevel2">
<li><a href="#___14">复用与分解</a></li>
<li><a href="#_udp_tcp">UDP、TCP 的复用及分解</a></li>
<li><a href="#_tcp_2">TCP 首部字段</a></li>
<li><a href="#_tcp_3">TCP 三次握手、四次挥手</a></li>
<li><a href="#_tcp_4">TCP 的流量控制、拥塞控制</a></li>
</ul>
</li>
<li><a href="#___15">网络层</a>
<ul class="sectlevel2">
<li><a href="#___16">转发表的使用</a></li>
<li><a href="#_ip">IP</a></li>
<li><a href="#_icmp">ICMP</a></li>
<li><a href="#___23">链路状态路由选择算法、距离向量路由选择算法</a></li>
<li><a href="#_rip">RIP</a></li>
<li><a href="#_ospf">OSPF</a></li>
</ul>
</li>
<li><a href="#___29">链路层</a>
<ul class="sectlevel2">
<li><a href="#_arp">ARP</a></li>
</ul>
</li>
</ul>
</div>
<div class="sect1">
<h2 id="__">计算机网络和因特网</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="___2">各种工</h3>
<div class="ulist">
<ul>
<li>
<p>单工：单信道，单向传输</p>
</li>
<li>
<p>半双工：单信道，异时双向传输</p>
</li>
<li>
<p>双工：双信道，同时双向传输</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="___3">网络交换方式</h3>
<div class="ulist">
<ul>
<li>
<p>电路交换</p>
</li>
<li>
<p>分组交换</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>排队时延：在队列中，当分组在链路上等待传输时经受的时延。</p>
</div>
</div>
<div class="sect2">
<h3 id="___4">协议</h3>
<div class="sect3">
<h4 id="___5">概念</h4>
<div class="paragraph">
<p>定义两个或多个通信实体间交换的报文格式和次序，以及报文发送和/或接收一条报文或其他事件所采取的动作。</p>
</div>
</div>
<div class="sect3">
<h4 id="___6">分层</h4>
<div class="paragraph">
<p>原因：简单、容易学习、便于讨论。模块化的设计便于讨论，也简化了维护和升级，具体表现在某层次的服务对系统的其他层次透明，且某个层次改变后，只需改变与其相邻层次的接口。</p>
</div>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">层名</th>
<th class="tableblock halign-left valign-top">数据名</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">物理层</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">比特流</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">链路层</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">帧</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">网络层</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">数据报</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">传输层</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">报文段</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">应用层</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">报文</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect3">
<h4 id="___7">常用协议及其端口</h4>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">协议</th>
<th class="tableblock halign-left valign-top">端口</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">FTP</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">21</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">SMTP</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">25</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">DNS</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">53</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">HTTP</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">80</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="___8">应用层</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_rtt">RTT</h3>
<div class="paragraph">
<p>一个短分组从客户到服务器再返回客户的时间。包括分组传播时延、分组在中间路由器和交换机上的排队时延及分组处理时延。</p>
</div>
</div>
<div class="sect2">
<h3 id="_http_get">HTTP 条件 GET</h3>
<div class="sect3">
<h4 id="___9">作用</h4>
<div class="paragraph">
<p>解决缓存陈旧</p>
</div>
</div>
<div class="sect3">
<h4 id="___10">过程</h4>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>代理缓存器代替浏览器，向 Web 服务器请求某对象，Web 服务器向代理缓存器返回包含该对象的响应报文，其中包含Last-Modified</p>
</li>
<li>
<p>缓存器将该对象转发给浏览器，并在本地存储该对象和最后修改日期</p>
</li>
<li>
<p>一定日期后，另一用户请求同对象，因为服务器上的该对象可能已修改而缓存仍陈旧，因此对服务器发起条件 GET（包含 If-Modified-Since，值等于 Last-Modified）</p>
</li>
<li>
<p>如果没有修改，服务器发回304状态码，缓存器直接将缓存发回浏览器；若已修改，则再次缓存</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_smtp_http">SMTP 与 HTTP 比较</h3>
<div class="sect3">
<h4 id="___11">相同</h4>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>都用于从一台主机向另一主机传送文件</p>
</li>
<li>
<p>进行文件传送时，持续的 HTTP 和 SMTP 都使用持续连接</p>
</li>
</ol>
</div>
</div>
<div class="sect3">
<h4 id="___12">不同</h4>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>HTTP 主要是拉协议，SMTP 基本上是推协议</p>
</li>
<li>
<p>SMTP 的报文使用 7 比特 ASCII 码格式，HTTP 没有该限制</p>
</li>
<li>
<p>处理超文本文档时，HTTP 把每个对象封装到自身的响应报文中，SMTP 把所有报文对象封装到一个报文中</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_http">HTTP 工作流程</h3>

</div>
<div class="sect2">
<h3 id="_dns">DNS 工作流程</h3>

</div>
<div class="sect2">
<h3 id="_http_dns_ip">HTTP、DNS、IP 综合工作</h3>

</div>
</div>
</div>
<div class="sect1">
<h2 id="___13">传输层</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="___14">复用与分解</h3>
<div class="paragraph">
<p>在源主机从不同套接字中收集数据块，并为每个数据块封装上首部信息从而生成报文段，然后将报文段传递到网络层。这称为多路复用。</p>
</div>
<div class="paragraph">
<p>将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。</p>
</div>
</div>
<div class="sect2">
<h3 id="_udp_tcp">UDP、TCP 的复用及分解</h3>
<div class="sect3">
<h4 id="_udp">UDP</h4>
<div class="paragraph">
<p>复用：源主机运输层创建运输层报文段，其中包括应用数据、源端口号、目的端口号和其他两个值，然后将其传递到网络层，网络层将其封装入 IP 数据报，尽力而为地交付给目的主机</p>
</div>
<div class="paragraph">
<p>分解：目的主机根据报文段中的目的端口号将其交付到相应套接字的进程，套接字由二元组（目的 IP 地址，目的端口号）标识，因此即使两个报文段的源 IP 地址和源端口号不同，也会交付给同一套接字</p>
</div>
</div>
<div class="sect3">
<h4 id="_tcp">TCP</h4>
<div class="paragraph">
<p>复用：同 UDP</p>
</div>
<div class="paragraph">
<p>分解：目的主机根据报文段中的目的端口号将其交付到相应套接字的进程，套接字由四元组（源 IP 地址，源端口号，目的 IP 地址，目的端口号）标识，因此两个报文段的源 IP 地址和源端口号不同，就会交付给不同套接字</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_tcp_2">TCP 首部字段</h3>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>源端口号和目的端口号</p>
</li>
<li>
<p>序号</p>
</li>
<li>
<p>确认号</p>
</li>
<li>
<p>首部长度、标志、接收窗口</p>
</li>
<li>
<p>因特网检验和、紧急数据指针</p>
</li>
<li>
<p>选项</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="_tcp_3">TCP 三次握手、四次挥手</h3>

</div>
<div class="sect2">
<h3 id="_tcp_4">TCP 的流量控制、拥塞控制</h3>
<div class="ulist">
<ul>
<li>
<p>流量控制：首部定义了窗口大小，接收方明确通过首部窗口字段发送接收窗口大小，从而限制发送方发送窗口的最大值，而发送方保证发送窗口大小不超过对方发送的接收窗口的大小</p>
</li>
<li>
<p>拥塞控制：第一、使用拥塞窗口cwnd控制发送窗口大小，发送窗口上限值=MIN（rwnd，cwnd）；第二、分组超时则认为拥塞，反之收到确认则认为网络未拥塞；第三、拥塞则少发（cwnd减小），未拥塞则多发（cwnd增大）；第四、网络未知的情况下，cwnd从最小开始，收到确认后cwnd逐渐增大；第五、为提高效率，开始增加速度快，到了一定阶段后增速变慢</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="___15">网络层</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="___16">转发表的使用</h3>

</div>
<div class="sect2">
<h3 id="_ip">IP</h3>
<div class="sect3">
<h4 id="___17">首部</h4>
<div class="ulist">
<ul>
<li>
<p>版本</p>
</li>
<li>
<p>首部长度</p>
</li>
<li>
<p>服务类型</p>
</li>
<li>
<p>数据报长度</p>
</li>
<li>
<p>标识、标志、片偏移</p>
</li>
<li>
<p>寿命</p>
</li>
<li>
<p>协议</p>
</li>
<li>
<p>首部检验和</p>
</li>
<li>
<p>源和目的 IP 地址</p>
</li>
<li>
<p>选项</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>标准大小为20字节。</p>
</div>
</div>
<div class="sect3">
<h4 id="___18">分类</h4>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.667%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">类别</th>
<th class="tableblock halign-left valign-top">网络号位数</th>
<th class="tableblock halign-left valign-top">主机号位数</th>
<th class="tableblock halign-left valign-top">网络个数</th>
<th class="tableblock halign-left valign-top">主机个数</th>
<th class="tableblock halign-left valign-top">地址范围</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">A 类</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">24</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>7</sup>-2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>24</sup>-2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.0.0.0——126.255.255.255</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">B 类</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">16</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>14</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>16</sup>-2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">128.0.0.0——191.255.255.255</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">C 类</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">32</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>21</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2<sup>8</sup>-2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">192.0.0.0——223.255.255.255</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">D 类</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">224.0.0.0——239.255.255.255</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect3">
<h4 id="__ip">特殊 IP</h4>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">名称</th>
<th class="tableblock halign-left valign-top">地址</th>
<th class="tableblock halign-left valign-top">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">广播地址</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">主机号全1</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">网络地址</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">主机号全0</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">内网地址（私有地址）</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">10.0.0.0——10.255.255.255，172.16.0.0——172.31.255.255，192.168.0.0——192.168.255.255</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">内部网络使用的地址，不能用于公网</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">链路本地地址</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">169.254.0.0——169.254.255.255</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">无 IP 地址时操作系统临时分配的 IP 地址</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">本地环回地址</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">127.0.0.0——127.255.255.255</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">本地链路广播地址</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">255.255.255.255</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
</div>
<div class="sect3">
<h4 id="___19">分片</h4>
<div class="sect4">
<h5 id="___20">原因</h5>
<div class="paragraph">
<p>IP 数据报需封装在链路层帧中以从一个路由器传输到下一个路由器，而链路层协议的 MTU 限制了其大小。因此只能通过分片封装在不同的链路层帧中，使其小于链路层协议的 MTU。</p>
</div>
</div>
<div class="sect4">
<h5 id="___21">实现</h5>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>将 IP 数据报中的数据分片成两个或更多个较小的 IP 数据报，用单独的链路层帧将其封装，
再向数据链路上发送这些帧</p>
</li>
<li>
<p>当一台目的主机从相同源收到一系列数据报时，根据数据报首部中的标识号是否相同，判断哪些数据报是一个大数据报的片。又根据标志是否为0，来确定是否对原始数据报已接收完毕。最后根据偏移字段来重新按序组装片为原始数据报</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_ip_2">IP 地址计算</h4>

</div>
</div>
<div class="sect2">
<h3 id="_icmp">ICMP</h3>
<div class="sect3">
<h4 id="___22">作用</h4>
<div class="paragraph">
<p>用于主机和路由器间彼此沟通网络层的消息。最典型用途是差错报告，除此之外还有：</p>
</div>
<div class="ulist">
<ul>
<li>
<p>目标地址不可达</p>
</li>
<li>
<p>网络拥塞</p>
</li>
<li>
<p>TTL 到期</p>
</li>
<li>
<p>IP 分组检验和失败</p>
</li>
<li>
<p>&#8230;&#8203;</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_ping">ping</h4>
<div class="paragraph">
<p>ping 发送一个 ICMP 类型8编码0的报文到指定主机。看到回显请求后，目的主机发回一个类型0编码0的 ICMP 回显回答。用于确认是否能与目的主机连通。</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="___23">链路状态路由选择算法、距离向量路由选择算法</h3>
<div class="sect3">
<h4 id="___24">链路状态路由选择算法</h4>
<div class="paragraph">
<p>这是一种全局式路由选择算法</p>
</div>
</div>
<div class="sect3">
<h4 id="___25">距离向量路由选择算法</h4>

</div>
<div class="sect3">
<h4 id="___26">比较</h4>
<div class="sect4">
<h5 id="___27">相同</h5>
<div class="paragraph">
<p>都采用互补的方法来解决路由选择计算问题。</p>
</div>
</div>
<div class="sect4">
<h5 id="___28">区别</h5>
<div class="ulist">
<ul>
<li>
<p>LS 算法：每个结点与所有其他结点交谈，提供其直接相连链路的费用</p>
</li>
<li>
<p>DV 算法：每个结点与直接相连邻居交谈，提供自己到其他所有结点的最低费用估计</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_rip">RIP</h3>
<div class="paragraph">
<p>RIP 使用距离向量路由算法，用 UDP 传输（端口 520），以固定时间间隔（30s）交换路由信息。RIP 将距离定义为跳数，每经过一个路由器跳数加1，最大值为15（16则表示不可到达）。使用毒性逆转（向某条路由对应的出接口通告该路由为无穷大路由）等方法缓解环路影响。</p>
</div>
<div class="sect3">
<h4 id="_rip_1_0_rip_2_0">RIP 1.0、RIP 2.0 的比较</h4>
<div class="paragraph">
<p>RIP 1.0 通过广播通告路由信息，不支持验证和 CIDR。</p>
</div>
<div class="paragraph">
<p>RIP 2.0 通过组播通告路由信息，支持验证和 CIDR。</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_ospf">OSPF</h3>

</div>
</div>
</div>
<div class="sect1">
<h2 id="___29">链路层</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_arp">ARP</h3>

</div>
</div>
</div>]]></description><link>https://lonelee-kirsi.github.io/2019/01/31/Computer-Network-Course.html</link><guid isPermaLink="true">https://lonelee-kirsi.github.io/2019/01/31/Computer-Network-Course.html</guid><category><![CDATA[draft]]></category><dc:creator><![CDATA[Lonelee]]></dc:creator><pubDate>Thu, 31 Jan 2019 00:00:00 GMT</pubDate></item></channel></rss>