如有错误, 欢迎指出~
- 第一章 计算机网络和因特网 课后复习题
- 第二章 应用层 课后复习题
- 第三章 运输层 课后复习题
- 第四章 网络层:数据平面 课后复习题
- 第五章 网络层:控制平面 课后复习题
- 第六章 链路层和局域网 课后复习题
第四章: 网络层:数据平面
4.1节
R1. 我们回顾在本书中使用的某些术语.
- 前面讲过运输层的分组名字是报文段, 数据链路层的分组名字是帧. 网络层的分组名字是什么? 前面讲过路由器和链路层交换机都被称为分组交换机. 路由器与链路层交换机间的根本区别是什么?
- 答: 网络层的分组名字是数据报.
路由器和链路层交换机的根本区别是它们服务于不同的网络层协议. 链路层交换机基于链路层帧中的字段值做出转发决定, 服务于第二层链路层; 路由器基于网络层数据报中的首部字段值做出转发决定, 服务于第三层网络层.
R2. 我们注意到网络层功能可被大体分成数据平面功能和控制平面功能. 数据平面的主要功能是什么? 控制平面的主要功能呢?
- 数据平面的主要功能是转发, 也就是说当路由器接受到网络层数据报后, 控制平面负责根据路由转发表把数据报从输入链路转发到合适的输出链路.
控制平面的主要功能是填充路由表, 也就是决定一个数据报应该转发到哪里.
R3. 我们对网络层执行的转发功能和路由选择功能进行区别. 路由选择和转发的主要区别是什么?
- 转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由本地动作. 转发发生的时间很短, 通常用硬件实现.
- 路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程. 发生的时间较长, 通常为几秒, 因此用软件实现.
R4. 路由器中转发表的主要作用是什么?
- 路由表的作用是确定分组下一步应该发送到哪里? 路由器会根据分组首部的一个或几个字段作为索引, 并在转发表中根据索引找到对应的输出链路接口.
R5. 我们说过网络层的服务模型"定义发送主机和接收主机之间的端到端分组的传送特性".
- 因特网的网络层的服务模型是什么? 就主机到主机数据报的传递而论, 因特网的服务模型能够保证什么?
- 答: 因特网的网络层提供了单一的服务, 称为尽力而为服务. 就主机到主机数据报的传递而论, 因特网的服务模型什么也保证不了, 传送的分组既不能保证以它们发送的顺序被接收, 也不能保证它们最终交付; 既不能保证端到端时延, 也不能保证有最小的带宽.
4.2节
R6. 在4.2节中, 我们看到路由器通常由输入端口, 输出端口, 交换结构和路由选择处理器组成.
- 其中哪些是用硬件实现的, 哪些是用软件实现的? 为什么? 转到网络层的数据平面和控制平面的概念, 哪些是用硬件实现的, 哪些是用软件实现的? 为什么?
- 答: 输入端口, 输出端口, 交换结构是用硬件实现的. 路由选择处理器是用软件实现的.
转到网络层的数据平面和控制平面的概念, 数据平面是用硬件实现的, 控制平面是用软件实现的. 原因是在数据平面处理两个数据报之间的时间非常短, 软件无法在这么短的时间内完成转发. 控制平面则不同于数据平面的, 它的主要功能是维护转发表, 逻辑比数据平面复杂多了, 而且它不需要短时间处理大量时间, 只需要及时更新就行了, 因此用软件实现.
R7. 讨论为什么在高速路由器的每个输入端口都存储转发表的影子副本.
- 首先一个路由器是有很多个输入端口的, 转发行为的第一步是在转发表中查找输出接口. 如果每个输入端口都并发地调用路由选择器查找输出接口必然会产生时延. 所以要在高速路由器的每个输入端口都存储转发表的影子副本, 使转发决策能在每个输入端口本地做出, 避免了集中式处理的瓶颈.
R8. 基于目的地转发意味着什么? 这与通用转发有什么不同.
- (假定你已经阅读4.4节, 两种方法中哪种是软件定义网络所采用的? )
- 答: 软件定义网络SDN采用的是通用转发. 基于目的地转发意味着: 如果是根据目的地的IP地址转发的话, 路由转发表中可能需要有40多亿项. 当然可以通过匹配IP地址的最长前缀对所有IP地址进行分组. 但是这样的路由器功能太单一, 不具有普遍性.
- 通用转发延续了基于目的转发的"匹配+动作"模式, 但不受限于通过源分组的IP地址匹配目的IP地址进行转发, 而是通过富足首部字段值集合和计数器集合对动作集合进行匹配. 要知道正因为有了通用转发这样对"匹配+动作"模式的高度抽象, 才使得网络层变得丰富多彩.
R9.假设一个到达分组匹配了路由器转发表中的两个或更多表项. 采用传统的基于目的地转发, 路由器用什么原则来确定这条规则可以用于确定输出端口, 使得到达的分组能交换到输出端口.
- 路由器使用最长前缀匹配规则, 即在该表中寻找最长的匹配项, 并向与最长前缀匹配相关联的链路接口转发分组.
R10. 在4.2节中讨论了三种交换结构. 列出并简要讨论每一种交换结构. 哪一种(如果有的话)能够跨越交换结构并行发送多个分组?
- 经内存交换. 分组从输入端口处被复制到处理器内存中. 处理器从其首部中提取目的地址, 在转发表中找出适当的输出端口, 并把该分组复制到该输出端口的缓存中.
- 经总线交换. 分组从输入端口经过总线发送到所有输出端口, 只有与该分组匹配的输出端口会把分组留下来.
- 经互联网络交换. 交换机由2N条总线组成互联网络, 连接N个输入口和N个输出口. 通过控制网络中的交点使分组到达对应的输出端口. 这种纵横式网络能够并行发送多个分组.
R11. 描述在输入端口会出现分组丢失的原因. 描述在输入端口如何消除分组丢失(不使用无限大缓存区).
- 分组到达输入端口后需要经过交换结构传送到输出端口. 如果有两个分组要同时传送到某个输出端口, 那么在交换结构传输排在前面的分组时, 排在后面的分组必须等待. 这就形成了输入端口队列, 若输入端口分组到达的速率大于交换结构的处理速率, 队列就会越来越长, 最后导致分组丢失.
- 由于只要输入链路上的分组到达速率达到其容量的58%, 输入队列将无限增大导致大量丢包, 要消除分组丢失需要控制分组的到达速率.
R12. 描述在输出端口会出现分组丢失的原因. 通过提高交换结构速率, 能够防止这种丢失吗?
- 分组从输入端口经过交换结构到达输出端口, 输出端口将分组推出到输出链路上, 假如交换结构(纵横交换结构)同时将3个分组传输到输出端口上, 而输出端口一次只能发送一个分组, 那么将会有2个分组在输出端口排队. 如果不断有大于1个的分组同时从交换结构传输到输出端口, 输出端口的排队将会变长, 当输出端口缓存耗尽后会出现分组丢失.
- 正是因为交换结构传输分组到输出端口的速率快于输出端口的传输速率导致输出端口出现排队, 所以提高交换结构速率不能防止这种丢失.
R13. 什么是HOL阻塞? 它出现在输入端口还是输出端口?
- HOL(Head-Of-the-Line)全称为输入排队交换机中的线路前部阻塞.
- 从图中可以看到输入端口1, 3的两个深色分组会经过交换结构到达输出端口1.
- 假定该交换结构决定先传输输入端口1的分组, 那么输入端口3的分组必须等待.
- 同时可以看到输入端口3神色分组后面的浅色分组的输出端口并不是1而是2, 考虑这是一个纵横式交换结构, 输入端口3的深色分组和浅色分组本来是可以并行传输的, 现在由于深色分组被阻塞, 浅色分组也必须排队等待, 这就是HOL阻塞, 出现在输入端口.
R14. 在4.2节我们学习了FIFO, 优先权, 循环(RR)和加权公平排队(WFQ)分组调度规则. 这些排队规则中, 哪个规则确保所有分组是以到达的次序离开的?
- FIFO分组调度规则, 全称为(First-In-First-Out)先进先出链路调度规则.
R15. 举例说明为什么网络操作员要让一类分组的优先权超过另一类分组的.
- 例如现在输出队列中同时存在实时语音分组和SMTP邮件分组和文件传输分组等. 网络管理员让实时语音分组的优先权超过SMTP分组的, 因为网络时延对实时语音通话的影响远大于SMTP的影响. 语音分组经历较长时延后语音服务就没法进行了, 而SMTP传输慢点, 邮件服务器最终还是能获得该邮件分组, 能容忍较大的时延.
R16. RR和WFQ分组调度之间的基本差异是什么? 存在RR和WFQ将表现得完全相同的场合吗? (提示: 考虑WFQ权重)
- RR和WFQ都是通过循环调度器在各个分组类中进行循环传输, 它们的基本差异在于RR对于每个类会公平地只发送一个分组, 发送完立即转移到下一个类, 除非只剩下一个类有分组. 而WFQ则会给每个类分配权重, 相当于变相地给每个类的分组分配优先权, WFQ会按照权重对一个类进行传输后再转移到下一个类, 对于权重高的类循环调度器可能会在该类中传输好几个分组再转移到下一个类, 而不是每个分组传输一个.
R17. 假定主机A向主机B发送封装在一个IP数据报中的TCP报文段. 当主机B接受到该数据报时, 主机B中的网络层怎样知道它应当将该报文段(即数据报的有效载荷)交给TCP而不是UDP或某个其他东西呢?
- 主机B中的网络层通过查看数据报首部字段中的协议字段得知应该把数据部分交给哪个特定的运输层协议. 比如值为6表明交给TCP, 值为17表明交给UDP.
- 协议字段的作用相当于运输层报文段首部中的目的端口号, 指示将数据交给哪个套接字. 链路层的链路层帧同样也有特殊字段用于将链路层和网络层绑定在一起.
R18. 在IP首部中, 哪个字段能用来确保一个分组的转发不超过N台路由器.
- 寿命字段(Time-To-Live, TTL), 每当一台路由器处理该数据报时该值减1, 当减到0时丢弃该数据报.
R19. 前面讲过因特网检验和被用于运输层报文段以及网络层数据报.
- 现在考虑一个运输层报文段封装在一个IP数据报中.在报文段首部和数据报首部中的检验和要遍及IP数据报中的任何共同字节进行计算吗?
- 答: 不需要. 首先搞清楚报文段检验和与数据报检验和之间的差别. - 数据报检验和只是对IP数据报的首部计算了检验和, 而报文段首部中的检验和是对整个报文段(包括承载的应用层数据部分)都进行计算的.
- 其次, TCP/UDP和IP不一定属于同一个协议栈, TCP能够运行在别的网络协议上, IP数据报也能携带除了TCP/IP以外的其他数据.
R20. 什么时候一个大数据报分割成多个较小的数据报? 较小的数据报在什么地方装配成一个较大的数据报?
- 网络层的数据报需要往下经过链路层封装成链路层帧才能放上链路开始传输. 然而一个链路层帧的载荷大小根据链路层协议的不同而不同, 数据报的大小不能超过一个链路层帧的最大传送单元(Maximum Transmission Unit, MTU). 所以当链路层遇到大于自身MTU的数据报时需要把数据报分割成多个较小的数据报. 这项工作将放到端系统中进行, 因为如果在路由器中进行的话会大大降低路由器的性能.
- 较小的数据报在目的端系统的网络层进行装配.
R21. 路由器有IP地址吗? 如果有, 多少个?
- 路由器有IP地址, 这里的有IP地址并不是说有一个IP地址标志一台路由器. 而是说路由器的一个输入或输出端口对应着一个IP地址.
- 所以一个路由器拥有的IP地址数是不确定的, 假如一个路由器有一个输入端和两个输出端, 那么对应地就有三个IP地址, 分别对应三个端口.
R22. IP地址223.1.3.27的32比特二进制等价形式是什么?
- 11011111 00000001 00000011 000
R23. 考察使用DHCP的主机, 获取它的IP地址, 网络掩码, 默认路由器及其本地DNS服务器的IP地址. 列出这些值.
- DHCP(Dynamic Host Configuration), 动态主机配置协议.
- DHCP协议用于让一台主机在子网中获得它的IP地址. 过程如下:
- 首先主机向255.255.255.255 IP广播地址发送一个DHCP发现报文, 这个发现报文会在整个子网传播.
- 子网内的DHCP服务器收到DHCP发现报文后会向广播地址发送一个DHCP提供报文, 向需要IP的主机提供IP地址(以下图为例): 223.1.2.4, 网络掩码: 223.1.2.0/24, 默认路由器: 223.1.2.5 以及本地DNS服务器的IP地址.
- 主机可能会收到不只一个DHCP提供报文, 选择其中一个后向服务器发送DHCP请求.
- 被选中的DHCP服务器响应DHCP ACK报文.
R24. 假设在一个源主机和一个目的主机之间有3台路由器.
- 不考虑分片, 一个从源主机发送给目的主机的IP数据报将通过多少个接口? 为了将数据报从源移动到目的地需要检索多少个转发表?
- 答: 通过一个路由器需要通过2个接口, 端到端之间一共有3台路由器, 所以数据报一共要通过6个接口.
- 经过3个路由器, 需要检索3个转发表.
R25. 假设某应用每20ms生成一个40字节的数据块, 每块封装在一个TCP报文段中, TCP报文段再封装在一个IP数据报中. 每个数据报的开销有多大? 应用数据所占的百分比是多少?
- 这题考察的是TCP报文段首部字段和数据报首部字段的大小.
- TCP报文段首部是20字节.
- 数据报报文段首部是20字节.
- 所以每个数据报的开销为80字节, 应用数据所占的百分比是50%.
R26. 假定你买了一个无线路由器并将其与电缆调制解调器相连.
- 同时假定ISP动态地为你连接的设备(即你的无线路由器)分配一个IP地址. 还假定你家有5台PC, 均使用802.11(WIFI)以无线方式与该无线路由器相连. 怎样为这5台PC分配IP地址? 该无线路由器使用NAT吗? 为什么?
- 答: 这5台PC的IP地址会通过请求DHCP服务器获得.
- 该无线路由器会使用NAT, 原因是: 家庭网络可能会随时加入许多台联网设备, 而最简单常用的管理这些设备IP地址的方法就是NAT.
R27. "路由聚合"一词意味着什么? 路由器执行路由聚合为什么是有用的?
- 路由聚合意味着一个子网只通过接入IP地址的部分前缀和外部因特网相连, 外界并不关心子网内还存在着多个组织, 这种使用单个网络前缀通告多个网络的能力通常称为路由聚合.
- 对于路由器而言, 假设一台组织外的路由器要转发一个数据报, 该数据报的目的地址在组织内部, 那么该组织外的路由器转发到组织内的一台路由器时, 只需要考虑地址的前x比特即可. 这个做法相当大地减少了在这些路由器中转发表的长度. (使转发表不用记录每个具体目的IP地址, 只需要记录一个类似223.1.1.0/24一样的带前缀的地址即可)
R28. "即插即用"或"零配置"协议意味着什么?
- "即插即用"和"零配置"描述的是DHCP协议.
- 这一协议意味着DHCP协议让每个需要接入因特网的端设备都能方便地获得IP地址. 具体过程可以往上查看第R23题. 其中广播地址和子网是DHCP运作不可缺乏的元素.
R29. 什么是专用网络地址? 具有专用网络地址的数据报会出现在大型公共因特网中吗? 解释理由.
- 专用地址这一概念产生在NAT(网络地址转换)场景中.
- NAT的模型是一台具有单一IP地址的路由器处于因特网与子网之间, 子网内的端系统重新获得一个类似IP地址的网络地址. 这个网络地址对于一个端系统来说就是专用网络地址.
- 专用网络地址的数据报不会出现在大型公共因特网中, 因为大型因特网边缘分布了无数个NAT, 每个NAT构成的子网中的专用网络地址是可以重复的, 具有专用网络地址的数据报中填写的IP地址只有在专属的NAT中可以识别, 所以不可能出现在公网.
- 具有专用网络地址的数据报在进入公共因特网之前被运行NAT的路由器改造过了.
R30. 比较并对照IPv4和IPv6首部字段. 它们有相同的字段吗?
- 有相同的字段. IPv6在IPv4的基础上改进了, 舍弃了被证明为低效的功能, 添加具远见性的流标签等字段, 并保留了基本功能.
R31. 有人说当IPv6以隧道形式通过IPv4路由器时, IPv6将IPv4隧道作为链路层协议. 你同意这种说法吗? 为什么?
- 我不同意这种说法, IPv4的原理是用一个IPv4数据报把IPv6数据报封装起来, IPv6数据报相当于封装后数据报的有效载荷. 这个隧道应该属于网络层协议.
4.4节
R32. 通用转发和基于目的转发有何不同.
- 参考R8
R33. 我们在4.1节遇到的基于目的地转发与在4.4节遇到的OpenFlow流表之间有什么差异?
- 基于目的地转发明确地通过目的地匹配, 具体动作是转发到响应的输出端口上.
- OpenFlow流表的匹配项可以是分组首部字段中的一个或几个, 动作可以是转发, 拦截, 丢弃等. OpenFlow流表是对匹配转发更高层次的抽象.
R34. 路由器或交换机的"匹配加动作"意味着什么?
- 在基于目的地转发的分组交换机场合中, 要匹配什么并采取什么动作? 在SDN的场合中, 举出3个能够被匹配的字段和3个能被采取的动作.
- 答: 参考R33. (补充: 被匹配的字段可以属于链路层, 网络层, 运输层, 如目的MAC, VLAN优先权等)
R35. 在IP数据报中举出能够在OpenFlow1.0通用转发中"匹配"的3个首部字段. 不能在OpenFlow中"匹配"的3个IP数据报首部字段是什么?
- 能匹配: IP目的, VLAN优先权, 目的MAC
- 不能匹配: TTL字段(数据报过时), 数据报长度, 差错检验.
扩展阅读: