重读《自顶向下》---关于计算机网络的一些新认识(下)

重读《自顶向下》---关于计算机网络的一些新认识(下)

前言

  这篇是 “《重读自顶向下》—关于计算机网络的一些新认识” 的下篇,主要是网络层和数据链路层相关内容。表现形式以问题或者重点条目的方式罗列。
在这里插入图片描述


四、网络层

在这里插入图片描述


1、对于一个packet来说,其在网络层的表现有两个重点:
(1)、packet在路由器内部的转发(forwarding)
(2)、packet在路由器之间的传递(routing)


2、对于通用的网络层来说,其可以提供的服务有很多,最基础的服务当然是host to host的数据传递,除了这个,网络层还可以提供可靠的、有序的、吞吐量和速率保证的、安全的数据传输功能。 但是对于Internet来说,网络层只提供了尽最大可能交付packet.

3、除了运输层之外,网络层也可以提供面向连接和面向无连接的服务。其中前者一般叫做虚电路服务(Cirtual-Circuit Networks) ,后者叫做数据报服务。(Datagram networks)

4、对于运输层的的“连接”来说,它涉及的只有连接的两端(end-to-end),只有这两端会保存一些协商的参数,如初始序列号、窗口大小等等。而对于在网络层的连接-虚电路服务来说,它涉及的是整个传输path,整个path上的每个switch和router都需要保存相关的状态信息。

5、路由器的组成:对于普通的路由器来说,其内部主要有输入端口(input port)、交换光结构(switch fabric)、 处理器(routing processor)还有输出端口(output port) 组成。
在这里插入图片描述

6、从协议角度来说:ip层主要包括三个部分:
(1) IP协议。

  • addressing conventions
  • datagram format
  • packet handling conventions

(2) 路由协议

  • path selection
  • RPI, OSPF, BGP

(3) 网络管理协议

  • ICMP等


7、 从网络层上来看,一个过长的数据包的分片(ip 分片)和重组一般发生在end-host中,中间经过的路由器可能会进行分片(因为中间可能会经过一段帧比较小的数据链路层),但不会进行重组。即ip数据包的重组只发生在end-host上。需要注意一点的是,这并不是因为路由器没有这个功能,而是ip协议在设计的时候为了简化传输路径中路由器的复杂性。


8、对于网络攻击来说,它一般可以发生在网络结构的很多层次(应用层、传输层、网络层…)。 对于很多Dos攻击手段,从本质上来看,都是钻了“协议”的空子(协议本来应该在这个阶段发送一个这样的msg, 你却故意不发,或者发送一个错误的,那你让人家协议的另一方如何是好?)。比如说传输层的SYS 泛洪攻击,网络层的Jolt2 攻击等等。

9、对于基本上是因特网网络协议栈核心的ip协议来说,对其的变更应该算是一个漫长的过程(应用层的协议的change 相对来说是容易得多)。 ipv4向ipv6迁移是一个比较漫长的过程,毕其功于一役,一下全部变更完是不可能的。目前采用的是ipv4和ipv6 共存的这样一种状态。 其互通主要采用ducl-stack 或者tunneling的方式。

10、路由算法按照算法的输入是否需要获取整个网络拓扑图可以分为全局的路由算法(LS)和去中心化的(分布式)的路由算法(DV); 按照路由表是否可以动态改变可以分为静态路由算法(通常是管理员手动配置)和动态路由算法;按照是否对load敏感,分为负载敏感的算法和负载不敏感的路由算法(RIP,OSPF,BGP)

11、从表现上说,ls算法需要节点把其相邻的link cost 发往网络中的其他所有节点。而 dv算法需要把其整个的距离向量(到整个网络所有节点的cost)发往其邻居节点。 这两种算法每次其维护的状态发生改变时就需要按照上述的规则进行数据发送。

12、由于规模(Scale)和网间自治性(Administrative autonomy)的原因,Internet是分成多个AS的(autonomous systems),就像子网的层次划分一样。每个AS内部可以使用自己的路由协议(intra-AS routing algorithm),AS之间使用网间路由协议(inter-AS routing protocol).从某种程度上说,ls和dv算是intra-AS routing protocol.

13、rip协议从某种程度上来说算是一种基于DV向量算法的路由协议。在RIP协议中链路的cost采用的是路由之间的跳数。

14、RIP协议虽然其作用是在intra-AS 中寻找路由,看起来像是一个网络层协议。但是一般在具体的实现中它更像是一个应用层协议,因为其使用了传输层的UDP来传输数据。如下图所示:
在这里插入图片描述
那到底该如何理解RIP协议的层次性呢?

我觉得可以这样理解,一般来说,RIP协议本身是工作在应用层的,其目的是为了构造路由器中的路由转发表。 构造了路由转发表之后的路由转发功能使用的就是网络层的事情了。
那是不是可以说,对于使用了RIP协议的路由器来说,其内部还是有网络层之上的软件层次的? 推测应该是。


15、OSPF从某种程度上来说是一种基于迪杰特斯拉的链路状态层协议。相对于RIP来说,其使用的范围更广,适用的网络更大些。

16、关于BGP,我了解到的只有:“它是个网际路由协议,用来路由一个AS到另一个AS的最优路径(这里的AS之间的区别一般是ip 前缀的不同)”

17、对于广播算法来说,有两个重要的问题需要解决:
(1) 防止网络有环情况下的重复flooding
(2) 尽量使得传送的packet不发生过多的duplicate(也就是让packet尽量在目的端的路由器侧才开始复制),如下图所示。
在这里插入图片描述

一般来说,主要有以下几种方案:

  • 采用序列号机制(broadcast sequence number)。 即一个路由器在接收到消息时根据这个序列号判断是否已经接受过此条消息。如果是,则丢弃,否则进行转发。
  • 采用逆向路径转发(reverse path forwarding)机制。当一个广播分组到达一个路由器的时候,该路由器对他进行检查,看它到来的线路是否是通常用来给广播源发送分组的线路(即原来确定的最短路径)。 如果是,则有可能此分组是沿着最佳线路被转发过来,路由器将该分组转发到除到来的那条线路之外的所有其他线路。 否则,此分组被当作一个可能的重复分组被丢弃。
  • 采用生成树机制。 这个比较好理解,就是把整个网络剪成一个树,然后广播的时候按照这棵树进行广播。

    18、关于多播,一个重要的问题是如何确定一个group 以及如何在路由器之间转发group packet。对于前者简单地说,这需要一个group 的identification 和 相关路由器的帮助。对于后者这需要选择一个路由路径传递group packet 。 这其中涉及到group host 和路由器之间交换信息的IGMP协议和路由器和路由器之间传递多播packet的路由算法。 具体的细节就不赘述了,因为我也不会。╮(╯▽╰)╭


五、数据链路层

在这里插入图片描述

1、链路状态层提供的服务有:

  • 封装成帧
  • 链路连接
  • 可靠传输
  • 流控制
  • 错误检测 (error detection)
  • 错误校正(error correction)
  • 全双工或者半双工服务

上述提到的服务并不是所有的链路状态层都可以提供。 不同的链路协议可能提供的服务不同。


2、链路层提供的服务有些和传输层类似,比如说错误检测、流控制、可靠传输等等。

3、链路状态层的implement 主要是软硬件结合的结果。它主要存在于网卡之中,网卡承担了绝大部分的硬件功能和少部分的软件功能,host里的cpu承担了绝大部分的软件功能。


4、计算机网络中用到的一些错误检测和纠错技术:
(1)、Parity checks (奇偶校验检查)
(2)、Checksum
(3)、CRC


5、为何运输层和ip层提供了checksum检测机制,而数据链路层提供的是crc数据校验机制?
  因为对于运输层和IP层来说,其大都运行在软件层面上,需要提供一个快速的、简单的校验算法。而数据链路层的crc可以使用硬件机制提供一个较为复杂,但是检测能力较为强大的机制算法。


6、多点接入协议(multiple access protocols)要解决的问题是如何协调各个node结点在共享的通道channel中可以不冲突的进行数据传送。一般来说,主要有三种方案:
(1)、采用通道分区协议(channel partitioning protocols): 主要包括频分复用、时分复用和码分复用
(2)、采用随机接入协议(Random Access Protocols): 主要有CSMA/CD等
(3)、轮流协议(Taking-Turns Protocols):主要有轮询协议(polling protocol)和令牌传递协议(token-passing protocol)


7、 CSMA/CD 的主要内容包括载波监听 、碰撞检测。其核心思路是每个node一直在监听是否channel是空闲的,如果channel是空闲则可以进行数据发送。如果在发送过程中检测到了碰撞(因为传输有延时,所以开始发送的时候可能没检测到有人在发送,但是在发送过程中检测到了),就停止发送,并随机延时一段时间后,继续检测。


8、轮流协议从某种程度上来说和通道分区中的时分复用有点像,都是每个node轮流占据一段通道时间。不过不同的是,前者在有些node无数据发送的时候则会跳过,而后者则还需要为其保留发送时间片。


9、轮流协议中的轮询协议是一个中心化的协议,有一个中心master结点来协调哪个node来发送数据; 而令牌传递协议是一个去中心化的协议,有一个令牌到谁手里,就由谁发送数据。

10、严谨的说,局域网(LAN)应该不进行是ethernet。但是由于ethernet已经非常流行,所以ethernet基本上已经可以算作是事实上的局域网了。

11、ethernet 提供的不是面向连接的可靠服务,一般来说,接收端可以保证能接收到帧数据,但是不保证帧数据一定是无误的(可能没通过crc校验)。这个时候接收端只是简单的丢弃这个帧。所以在数据链路层上来说,发送端是感受不到接收是否已经正确接收到了帧数据。这种情况下,可靠传输的功能只能靠上层(网络层)来实现了。

12、 ethernet的拓扑图从原先的bus topologies 到后来的hub-based star topologies 再演变成现在的switch-based star topolies,。 到目前为止,switch-based的星型拓扑已经成为绝大多数的ethernet拓扑方案。对于这种方案来说,尤其是每个host都连接一个switch接口的网络来说,原先的那种为了解决multiple-access 的冲突问题的CSMA/CD一些 变得不是太必要了。

13、对于链路层的switch来说,它的存在对于一个局域网的node来说可以当做是透明的。也就是说,对于一个ethernet的node来说,它把一个要发送的帧发送到链路上,然后无论是否由switch将帧转发到目的地,它是不用管的,它感知不到switch的存在。

14、对于switch来说,它的作用主要是过滤和转发。过滤和转发的规则是根据内部的一个转发表(switch table)。 和路由表不同的是这个switch table 不是根据路由算法来生成的,而是根据“自学习”的方式习来的。

15、对于switch来说,它的使用有以下几大好处:
(1)、隔绝了冲突域(但是没有隔绝广播域)
(2)、允许不同种类的链路连接到同一个switch中
(3)、即插即用,方便管理,同时一定程度上提高了安全性

16、对于网络接入、设备连接来说,有的时候既可以选择交换机也可以选择路由器。而现在有一种趋势是把路由器和交换机(二层的)整在一块用,比如说三层交换机,它既有交换机的快速也有路由器的路由功能。其实宿舍里的路由器上的lan口其实是一个相当于一个交换机的口。

详见【2】

17、许多协议都需要有透明传输的功能,即data部分如果包含结尾或者开头的标志位怎么办?

一般来说,需要这种情况有两种解决方式:第一是设计一种特殊的开头或者结尾的标志,使得data域中不能包含这种标志位(比如说要传输的data都是asicc字符,那么开头和结尾可以取不可见字符);第二种方式就是字节填充(Byte Stuffing),即在需要传输的开头和结尾标志位的前面加上一个特殊的填充字符。如下图所示。
在这里插入图片描述

六、一个完整webPage请求流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


参考

【1】、《自顶向下》
【2】、路由器和三层交换机之间到底有什么区别?

猜你喜欢

转载自blog.csdn.net/plm199513100/article/details/121053825