网络层
网络层基本上就是围绕着路由器展开的,因此我们很有必要学习路由器的工作原理
首先,路由器由三个部分组成
- 输入端口
- 交换结构
- 输出端口
我们一个一个来分析
输入端口
输入端口需要完成的任务: 接收分组,确定分组应该转发到哪个输出端口
那输入端口是如何来确定应该转发到哪个输出端口的呢?
显然,应该是根据路由器转发表来查找,但是我们需要注意一点,转发表是由路由选择处理器来设置的,因此如果我们要查找输出端口,需要由路由选择处理器来处理,为了避免集中式处理,路由选择处理器会将转发表拷贝到输入端口上,这样就能避免集中式处理了
注意:查找输出端口是ns级别的
一旦查找到输出端口,该分组就会被交付给交换结构,由交换结构来将该分组送到对应的输出端口上
交换结构
交换结构需要完成的任务: 将分组送到对应的输出端口
有三种交换结构
-
经内存交换,也就是交换结构有一个中心处理器CPU,在输入端口拷贝该分组,然后从分组抽取头部得到目的地址,然后在转发表中查找对应的输出端口号,将该分组复制到输出端口号的缓存里
可以看到,这种方法效率不高,而且还抢了输入端口的活,如果该内存带宽为R,则该交换结构的吞吐率不到R/2,而且一次只能有一个分组经过交换结构传输
-
经总线交换,算是上面的一个改进,即输出端口和输入端口约定好一个标签值,然后输入端口在分组的头部加上对应的输出端口的标签值,然后总线直接将分组传到每个输出端口上,只要标签对的上,就接收,否则就丢弃
这个比前面的也只是优化了一点,而且同样是一次只能传输一个分组,因为只有一条总线
-
经互联网络交换,我们使用2N条总线来连接N个输入端口和N个输出端口,比如说纵横式交换机
如图所示:
可以看到该交换结构的优点,如果A的输出端口为Y,则该交换结构就闭合A的总线于Y的总线的交点,这时如果B的输出端口为Z,同样的闭合B的总线和Z的总线的交点,这样就能实现多个分组传输到不同的输出端点,但是如果是多个分组传到相同的输出端点,则需要排队
输出端口
输出端口需要实现的功能: 将输出端口上的分组发送到输出链路上
排队问题
我们需要考虑何时会出现排队
假如我们交换结构的处理速度是输出结构处理速度的N倍,则最坏的情况下,交换结构也能完成任务(也就是每一个输出端口都有分组要发送)
然而我们要关系的是输出端口,如果你N的输入端口的分组都发到同一个输出端口上,那就麻烦了,一个输出端口在交换结构处理一个分组的时间中要处理N个分组,那在输出端口上肯定会出现大量的丢包
由输出端口排队就会出现另一个问题,输出端口应该优先处理那个分组,这就需要一个分组调度程序,在后面会学到
因此有一种更明智的方法就是在输出端口满之前丢弃该分组并向发送方发出一个拥塞信号
我们回到之前的问题,我们是假设交换结构的处理速度是输入端口处理速度的N倍,如果现在交换结构的处理速度不能达到输入端口的N倍,在输入端口也会出现排队,而且该排队有一个很严重的现象,线路前部拥塞
简单的说,假如A分组是在输入端口1上它的输出端口是X,它前面有一个分组B也是在输入端口1上但是它的输出端口是Y,现在有另外一个C分组在输入端口2上,它的输出端口也是Y,它们交换结构就要在B和C之间选一个来传输到输出端口Y,假如选了C,那么我B分组就得等待,假如现在A分组的输出端口根本就没有其他分组跟它一样,那么A分组本来是可以传输的,却被它前面的B分组给挡住了,这就是线路前部拥塞
如果输入分组的到达速率为其输入端口容量的58%时,这时就会无止境的丢包
参考:
《计算机网络自顶向下方法》