计算机网络知识总结
================

## 网络概述

> OSI参考模型的七层层次结构，各个层次的功能分别是什么？

尤其关注`会话层`和`表示层`的功能。

> 分组交换的两种方式。

+ `数据报`与`虚电路`。
+ 其中`虚电路`是`电路交换`与`数据报`方式的结合。

> `虚电路`方式的特点？

## 物理层

> 波特率与比特率之间的区别与联系？

> 奈奎斯特定理与香农定理的公式表述，两者的侧重点？

需要注意信噪比的分贝表示法的公式。也不要忘了奈奎斯特定理前面有一个2的系数。

## 物理链路层

> 介质访问控制的三种方式？

信道划分；随机访问；轮询访问。

> 随机访问的几种协议？它们之间的区别与联系？

`ALOHA`协议，时隙`ALOHA`协议；`CSMA`，包括`1坚持`，`p坚持`，`不坚持`，这三种形式各自的特点；`CSMA/CD`，`CSMA/CA`。

其中`ALOHA`协议没有对发送做任何限制，因此信道可能存在大量的冲突，时隙`ALOHA`协议是对该情况的一种改进，但是仍然有许多冲突。因此`ALOHA`协议需要采用确认与停止等待机制来保证数据传输的正确性。可以看到，`ALOHA`协议对信道的利用率比较差。

`CSMA`是对`ALOHA`的一种改进策略，每个网络结点在发送数据之前会对信道的状态进行监听，只有在信道空闲时才发送，因此采用`CSMA`协议时，相对`ALOHA`而言信道上的冲突少了很多。yet`CSMA`仍然不能避免冲突，根据监听方式的不同，可以分为`1坚持`，`p坚持`和`不坚持`三种方式，各自的特点要清楚，比如`不坚持`方式是在信道忙时放弃侦听，等待一段随机时间后再侦听，而`p坚持`则是在信道忙时，等待下一个时隙再侦听。

`CSMA/CD`和`CSMA/CA`感觉都比较熟悉，但是需要明确无线信道是不可以使用`CSMA/CD`协议的，这是因为，一方面成本不允许，另一方面是由无线信道的特点决定的，即具有`隐蔽站`和`暴露站`问题，因此无线信道实际是允许多对主机同时通信的。

由于不存在`边发边听`，`CSMA/CA`应该尽量减少信道的冲突，防止信道资源的浪费。因此，`CSMA/CA`协议是在主机发送信息前使用`截断二进制指数退避`算法，以减少冲突的概率；此外，还采用`预约信道`的方式，发送方告知其他站点自己传输数据需要的时间，来进一步减少冲突。由于信道质量比较差，`CSMA/CA`需要通过确认和重传机制来保证可靠传输。

> 令牌环网的工作原理？

令牌环网的工作方式也需要清楚，其中的数据帧是沿着环路一个接一个传递的，直到数据帧返回了源站点，源站点通过检查返回的数据帧来判断传输过程是否有错。令牌的传输也是沿着环路逐个传输的。

> 高速以太网大多同时支持半双工与全双工方式，除了10G比特以太网只有全双工方式。

> 以太网关于最短帧长的相关计算。

> 可靠传输机制的三种实现方法，它们的内在联系？

停止等待协议，后退N帧协议(GBN, Go Back N)，选择重传协议(SR, Selective Repeat)。它们实际上都是滑动窗口协议，区别仅在于窗口的大小，其中停止等待协议的发送与接收窗口都是1；`GBN`的发送窗口大于1，接收窗口为1；`SR`的发送窗口与接收窗口都大于1，并且发送窗口等于接收窗口。需要注意的是，`GBN`未必优于停止等待协议，这是因为`GBN`可能需要对前面已经正确传输的帧进行重传。

对于`GBN`和`SR`，这里有一个冲突的问题，即如果发送窗口与接收窗口之和大于对帧的编号数目，接收方将不能识别当前接收到的帧是新的一帧，还是之前数据帧的重传帧。这个问题可以自己举个例子理解一下。

这里还涉及一个对发送窗口大小进行选择的问题，使得当采用`GBN`时，理想情况下信道利用率最高。

> 两个广域网协议以及它们的区别？

PPP协议和HDLC协议（高级数据链路控制）。

PPP协议相对简单，只提供链路层基本的组帧，透明传输和差错校验功能，不提供序号和确认机制；而HDLC协议则是可靠传输协议，使用了编号和确认机制。

此外，PPP协议是面向字节的，而HDLC协议是面向比特的，因此PPP协议的透明传输默认是通过字节填充来实现，而HDLC则是通过比特填充来实现。

与传统以太网不同的是，PPP协议支持全双工链路。它的两端可以运行两个不同的网络层的协议。

> 冲突域与广播域

集线器不能隔离冲突域；网桥和交换机可以隔离冲突域了，但是不可以隔离广播域；只有路由器才可以隔离广播域。

## 网际层

> 通过校园网上网全过程分析

网际层的协议众多，这里通过一个实例，将各个实例的功能统一说明。

当一台主机连接到校园网后，首先要做的是请求DHCP服务器为自己分配一个IP地址。DHCP是应用层的协议，由于此时主机还没有IP地址，不可能使用TCP这样需要建立连接的传输层协议，因此DHCP是基于UDP的。

为了请求IP地址

+ 主机广播`DHCP发现`消息。
+ DHCP服务器收到后，向网络中广播`DHCP提供`消息，其中包含主机的IP配置信息。这里使用广播也是相同的原因。
+ 主机收到`DHCP提供`消息后，如果接受配置，则广播`DHCP请求`消息，请求该IP地址。
+ DHCP服务器广播`DHCP确认`消息，将IP地址分配给主机。

这里始终使用`广播`，是因为此时主机和服务器之间都没有标志自己身份的IP地址，因此不可能通过单播来进行交互。

获得了IP地址后，主机就可以网上冲浪了。此时打开了一个网页，发出了对某一个页面的请求信息。IP层将上层的报文段封装成`IP数据报`，此时需要确定应该将该数据报发送给网络内哪一个主机。因此，需要采用`地址解析协议`(ARP)来将目的IP地址转化为硬件地址，具体过程如下：

+ 首先在主机的ARP缓存中查找目的IP地址，失败了则进行以下步骤；
+ 在网络中广播ARP请求分组，请求目的IP地址的硬件地址。
+ 如果目的主机在本网络中，收到了ARP请求分组后，目的主机会向当前主机回送`ARP响应分组`（注意这里不是广播了），给出自己的硬件地址，主机收到后将地址加入到ARP缓存当中。
+ 如果目的主机不在本网络中，则本网络的路由器回送ARP响应分组，给出自己的硬件地址。

这之后，主机就可以通过链路层协议将数据帧传送给目的主机或者路由器了。本实例中，目的主机在其他网络中，因此事传送给路由器。

路由器收到主机发来的IP数据报，由于本网络采用NAT技术，IP数据报的原地址是内网IP，因此路由器需要将该内网IP转化为自己的公网IP，这里就涉及到对IP数据报原地址的修改。

此后的工作就是上面工作的重复和循环了。

> ICMP的相关知识

ICMP是网络层协议，它的报文是作为IP数据报的内容发送的。它有两种报文，即差错报告报文和ICMP询问报文。

分组网间探测(ping)是使用ICMP询问报文，它工作在应用层，却直接使用了网际层协议，而没有经过传输层。发送方发送ICMP回送请求报文，目的方收到后发送ICMP回答报文，借此来测试两个网络节点之间的连接性。

tracert使用ICMP差错报告报文，它是依次发送`TTL = 1, 2, 3, ...`的报文，该报文到达第`1, 2, 3, ...`个路由器后就会因为超时，而回送ICMP时间超过的差错报告报文，借此来获知报文在各个路由器之间的传递路径。而最后一个到达目的主机的报文，则是通过一个错误的端口号，使得目的主机回送ICMP终点不可达报文的。tracert工作在网络层。

> 关于三个路由选择协议

RIP协议是基于距离向量的，它是一个应用层协议，传输层采用UDP协议。

OSPF是一个`链路状态路由算法`，它是基于一个网络层协议，他不使用TCP或是UDP，而是直接使用IP数据报传输。

BGP则是基于路径向量的，因为它要传输的内容是到某个路由器的完整路径。BGP是一个应用层协议，传输层采用TCP。

> IPv4和IPv6

需要明确IPv4中头部各个字段的意义，尤其是和分片有关的内容。

IPv6相对于IPv4最大的改变，自然是在于IP地址的长度增加到了16个字节，是IPv4的平方。因为地址太长了，它的书写方式和IPv4有一些不同，比如可以采用双冒号缩写来省略连续的0字段。IPv6简化了分组头部，包括放弃使用首部检验，并且由于首部长度固定，因此自然也就不需要首部长度字段。

需要注意的是，IPv6只允许在源节点分片，在路由器是不可以分片的。

> IGMP协议相关

组播地址的首部，然后是组播地址与MAC地址的转换，只有低23位可以映射到MAC地址。

IGMP的工作方式是让连接在本地局域网的组播路由器知道本局域网是否有主机参加或者退出了某个组播组，对于参加组播组的主机数量是不知道的。组播路由选择时构造以源主机为根节点的组播转发树，由于是树形结构，因此不会出现分组循环传输的现象。

## 传输层

传输层感觉比较简单啊，主要要弄清楚TCP拥塞控制的那四个算法的工作流程是怎么样的。还有一个方面就是TCP三报文握手和四报文挥手的必要性，以及这个过程中首部的控制字段的值，即ACK，SYN，以及seq信息。

## 应用层

> DNS

DNS主要是三个要点，即`域名的层次结构`，`域名服务器的层次结构`以及`域名解析的过程`。权限域名服务器也是一个要点。

域名的解析过程主要有`递归查询`和`迭代查询`两种，在实际中使用的是两者的结合。

DNS由于传输的信息量比较少，使用TCP会导致信道的利用率低，因此是采用UDP传输的。使用53号端口。

> FTP

FTP的要点在于控制连接和数据连接。其中控制连接使用21号端口，数据连接使用20号端口，由于采用两个并行的TCP，所以说FTP的控制信号时带外传送的。然后像文件传输这么重要的事情，肯定需要使用TCP。

需要辨析FTP和网络文件系统NFS的异同，如果要修改一个文件的话，FTP必须将此文件传输至本地主机，修改完成后再发回给服务器；而如果使用NFS的话，则只需要复制大文件中的一个小片段，而不用整个复制大文件。

> 电子邮件

电子邮件有三个主要协议，即SMTP，POP3，IMAP。其中SMTP是push的协议，而后面两个是pull的协议。三个协议都是使用TCP的。

首先需要清楚电子邮件的格式，分为信封和内容两个部分，其中内容是由用户填写的，分为首部和主体两部分。首部就是发邮件需要写的发件人，收件人，主体这种，信封是客户端通过首部自己提取的。

SMTP的传输过程需要明确，包括HELO MAIL RCPT DATA QUIT五个命令，这里需要关注发送收件人(RCPT)的作用。

SMTP默认只能传输ASCII码，因此需要使用MIME(多用途网际邮件扩充)使得电子邮件可以传输其他国家的文字，以及多媒体信息，它主要是定义了非ASCII码的传送规则，并没有对SMTP进行改动。

POP3现在有两种工作方式了，即下载并保留以及下载并删除。现代的电子邮件系统已经广泛采用HTTP协议，作为用户和邮件服务器端的数据传送方式。在服务器与服务器之间，仍然是采用SMTP协议。

> 万维网

万维网的重点主要在于HTTP协议，包括HTTP/1.0，HTTP/1.1两者的改动，即非持久连接和持久连接，以及在持久连接模式下的非流水线方式与流水线方式。

HTTP协议具有多个特点，比如是面向报文的，面向事务的，是无连接的，无状态的。获得跟踪用户的信息，HTTP需要借助Cookie。

HTTP协议剧两类报文——请求报文和响应报文，两者的区别主要是在于开始行。请求报文的开始行（又称为首部行），含有方法，URL，版本三个字段，比如`GET http://tsinghua.edu.cn/index.jsp HTTP/1.1`这样；而响应报文的开始行（也称为状态行），含有版本，状态码，以及解释状态码的简单短语，比如`HTTP/1.1 202 Accepted`以及`HTTP/1.1 404 Not Found`这样。

