一.网络层概述
每台路由器的数据平面的主要功能时从其输入链路向其输出链路转发数据报,控制平面的主要功能是协调这些本地的每路由转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。
网络层不运行运输层和应用层协议。
转发是数据平面实现的唯一功能。
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地操作,路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。
- 转发表:
路由器通过检查到达报文的首部,与转发表中的表项进行匹配,决定将该报文转发到路由器哪一个输出接口上。
二.路由器工作原理
1.输入端口处理和基于目的地转发
最简单的情况,对于全球的将所有IP地址,转发表中都有对应的表项,但是全球有40亿个可能的地址,这种方法在整体上是不可行的。
第二种是路由器使用分组目的地址前缀进行匹配,并且使用最长前缀匹配原则。
2.交换
- 经内存交换:
当输入端口接收到报文时,先将该报文存储到内存中,在内存中取出目的地址,然后发送到目的端口。这种方法,如果内存带宽为每秒可写进内存或从内存中读出对多B个分组,则总的转发吞吐量必然小于B/2,也要注意到不能同时转发两个分组,即使它们有不同的目的端口,因为经过共享系统总线一次仅能执行一个内存读/写。 - 经总线交换
在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预,如果多个分组同时到达路由器,每个位于不同的输出端口,出了一个分组之外,其他的分组都要进行等待,因为一根总线只能通过一个分组。 - 经互联网交换
纵横是网络能够并行转发多个分组(位于不同输入端口,不同输出端口)。
3. 何处出现排队
- 输入排队
简单来说,位于同一个输入链路上的分组,必须等待前一个分组被交换后,后面的分组才能进行交换。
线路前缀阻塞:假定有输入端口1,2,输出端口1,2,在输入端口1中,有一个报文要交换到输出端口1,在输入端口2中,第一个分组要到输出端口1中,第二个分组要到输出端口2中去,那么输入端口2中的第一个报文就要进行等待,而且输入端口2中的第二个分组(去往输出端口2)也要等待,这就是线路前缀等待。 - 输出排队
假定有输入端口1,2,3,都要从输出端口1中出去,而在交换机中的交换速率大于输出端口的发送速率,在第一个单位时间,输入端口三个报文到达输出端口1,在第二个单位时间内,一个分组被输出端口1发送出去了,那就还有两个分组在输出端口等待,而同时,输出端口1,2,3接收到的新的分组,又到了输出端口1中,并且进行等待,这样经过了n个单位时间后,输出端口的内存被耗尽,当没有足够的内存来缓存一个分组时,就必须做出决定:要么丢弃到达的新分组(弃尾),要么删除一个或多个已排队的分组来为新来的分组腾出空间。已经提出和分析出了许多分组丢弃与标记策略,这些策略统称为主动排队管理。这样的后果是:输出端口的分组调度在这些排队分组中选择一个分组来传输
4.分组调度
分组调度研究的问题是:在输出端口上,排队的分组如何经输出链路输出的问题。
- 先进先出(FIFO,FCFO)
不考虑由于丢弃策略丢弃的分组,按照到达输出端口的顺序进行传输(先到的先接受服务)。 - 优先权排队
在优先权排队规则下,到达输出端口的分组被分类放到输出队列中的优先权类,按照高优先权队列优先的方式进行传输(在同一优先权类中按照FIFO方式传输)。
也就是说,假定有四个分组,1,2,3,4,其中1和3属于高优先权,而2和4属于低优先权,1分组先到达输出端口,发现输出端口为空,则立即进行传输,其后,2和3到达,3进入高优先权分类,而2进入低优先权分类,在1完成传输之后,3优先于2进行传输,在2传输的同时,4分组到达,它属于低优先权,进入低优先权分类中,排到2之后,在3分组传输完成后,依次传输2和4分组。在非抢占式优先权排队规则下,一旦分组开始传输,就不能被打断,也就是说,低优先权分组正在进行传输,这时候就算高优先权分组到达,也要等待这个分组传输完成后才能进行传输。 - 循环加权公平排队
在循环加权排队规则下,依旧进行优先权分类,比如说:分组1,2,3属于一个优先级,而4,5,6属于另一个优先级,分组1先到达,然后立即开始传输,之后,2,3,4,5,6分别到达,并且进行了分类:一个分类中是2和3,另一个分组是4,5和6,在1分组传输完成后,传输4,然后传输2,5,3,6。
另一种加权公平排队是:每一个优先权根据分组排队数量进行加权,为了使每一个分类加权相同,则优先传输加权比较高的分类中的一个或者多个分组,等加权相同后,再根据优先级,进行循环加权排队传输。
三.网际协议:IPV4,寻址,IPV6及其他
1.PV4数据报格式
- 版本号:这里的版本号标识了是IPV4还是IPV6,版本的不同,如何解释后面的内容也不同
- 首部长度:数据报文首部长度
- 服务类型:区别除了不同类型的数据报,如:要求尽快到达,要求没有差错到达等
- 总长度:IP数据报文的总长度
- 标识,标志位,片偏移:与IP数据报文的分片有关,我们马上讨论
- 生存时间:每经过一个路由器,该值就要减一,当为0的时候,必须停止转发
- 协议:标记了该数据报文应该交给运输层哪个协议
- 首部校验和:只对首部提供了校验
- 源IP地址,目的IP地址
2.IPV4数据报分片:
现在我们来考虑这样一个问题:如果你是一个路由器,当你收到一个数据报,要发送出去的时候,发现输出链路上MTU比这个报文要小,那么你该怎么办?
解决方法就是将这个较大的数据报分片,每片都包含IP数据报头部,并且将分片标识设置为1(最后一片除外),然后为了让目的主机知道分片的次序,还要设置片偏移。
3.IPV4编址:
IPV4地址由32位比特组成,使用点分十进制法即地址中每个字节都是用十进制形式书写,各字节之间使用句号分开。IPV4地址由两部分组成:网络段和主机段,并且根据这些对IPV4地址进行了分类:
A类(0):网络号占8位:2427个网络,每个里面含有224个IP
B类(10):网络号占16位:16214个网络,每个里面含有216个IP
C类(110):网络号占24位:8
D类:多播
E类:保留
那么我们来继续考虑一个问题,如果说我只是一个小公司,给我分配了一段地址,比如说分配到了A类,A类中有很多IP,我肯定用不完,那么就会造成地址的浪费,那么怎么办?这时候就提出来了子网掩码:比如像220.23.100/23,就是说,在这个IP地址中,前23位是我的网络地址,后面的才是我的主机地址,这就很好的利用了IP地址。
地址聚合,路由聚合,路由摘要:比如说,一台路由器下连接了一些子网,如:220.23.16.0/23,220.23.18.18/23,那么该路由器就向外界通告:向我发送以220.23.160./20开始的任何东西,那么当数据报到达一个路由器上的时候,开始前缀匹配网络地址,并且使用最长前缀匹配原则。
225.225.225.225广播地址。
4.获取一块地址:
全球权威的因特网名字和编号分配机构:ICANN
- 向ISP获取地址:
这时候,ISP从自己的网段中,分配一小块地址给其使用 - 动态主机配置协议:
某组织一旦获取了一块地址,那么就要给员工每人一个地址,那么这个工作由谁来完成?动态主机配置协议(DHCP)常被称为即插即用协议或零配置协议,DHCP服务器将会给每一个员工分配一个临时的IP地址,也可以配置DHCP,使某台主机每次与网络连接时都使用同一个IP地址。
那么当一个主机链接到网络,它如何获取地址?- DHCP服务器发现:使用DHCP发现报文,目的地址为255.255.255.255
- DHCP服务器提供:DHCP服务器接收到DHCP发现报文后,分配一个地址,包含租用期等信息,使用DHCP提供报文响应,也是使用广播地址255.255.255.255发送
- DHCP请求:当主机从一个或多个服务器中选择一个,并且向选中的服务器提供用DHCP请求报文进行响应
- DHCP ACK:服务器使用DHCP ACK报文对DHCP请求报文进行响应
5.网络地址转换
网络地址转换器NAT(Network Address Translator)位于使用专用地址的Intranet和使用公用地址的Internet之间。从Intranet传出的数据包由NAT将它们的专用地址转换为公用地址。从Internet传入的数据包由NAT将它们的公用地址转换为专用地址。这样在内网中计算机使用未注册的专用IP地址,而在与外部网络通信时使用注册的公用IP地址,大大降低了连接成本。同时NAT也起到将内部网络隐藏起来,保护内部网络的作用,因为对外部用户来说只有使用公用IP地址的NAT是可见的。
6.IPV6
IPV6数据报格式:
-
版本号:毫无疑问,是6
-
流量等级(流量类型):与IPv4中的TOS字段类似
-
流标签:可以为一条流中的某些数据包给出优先权
-
有效载荷长度:跟在定长4.字节后的字节数量
-
下一个首部:指示该数据报应该交给哪个运输层协议处理
-
跳先知:TTL
-
源和目的地址
-
IPv4和IPv6的不同:
- 扩大的地址容量:
IPv6将地址长度从32字节扩大到了128字节 - 简化高效的40字节首部
- 流标签
- IPv6不允许在中间路由器上进行分片与重新组装
- 首部校验和:IPv6去除了首部校验和
- 选项:选线字段不再是IP首部的一部分了
通用转发
- 扩大的地址容量:
通用转发意味着,除了其最终目的地外,当路由器确定数据报的输出接口时,还会考虑与数据报相关的其他因素。通用转发延续了基于目的转发的"匹配+动作"模式, 但不受限于通过源分组的IP地址匹配目的IP地址进行转发, 而是通过富足首部字段值集合和计数器集合对动作集合进行匹配.例如:软件定义网络SDN采用的是通用转发,例如,除了目标IP地址外,转发决策还可以基于数据报的TCP/UDP源或目标端口号。