网络层概述
在发送方,网络层取得运输层的报文段并 将其封装为一个数据报,然后向相邻路由器发送数据报。
在接收方,网络层接收来自相邻路由器中的数据报,提取出运输层报文段,并将其交给运输层。
每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报。控制平面的主要作用是协调这些本地的每路由器的转发动作。
网络层有两个十分重要的功能
1.转发
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短,通常为几纳秒,因此通常用硬件来实现。转发是在数据平面进行的
2.路由选择
路由选择是指确定分组从源到目的地所采取的端到端的路径的过程。路由选择发生时间的尺度长,通常为几秒,因此通常用软件来实现。
每台路由器都有一个关键元素:转发表。路由器利用网络层分组的首部字段值进行索引,找到其对应的出口,利用这种方法来转发分组。
在传统的方法中,转发表的内容是由路由选择算法决定的:一台路由器中的路由选择算法与另一台路由器的路由选择算法之间相互通信,计算出转发表的值。
而在SDN方法中, 转发表的内容是通过远程控制器定义的.
路由选择是在控制平面进行的
路由器的工作原理
路由器的四个结构
1.输入端口
输入端口有三个功能区,最左侧的功能区维护物理层的功能,中间的功能区维护数据链路层的功能.最右侧的功能区进行查找功能,即找到合适的输出端口
2.交换结构
交换结构将输入端口连接到输出端口.是一个网络中的网络
3.输出端口
输出端口和输入端口类似,也包括三个功能区
4.路由选择处理器
是控制平面的组件,在传统路由器中,它执行路由选择协议,为该路由器计算转发表。在SDN中,负责与远端控制器通信,并为路由器安装远端控制器传来的转发表项
基于目的地的转发
转发规则为:转发表中存有ip目的地址前缀与该前缀对应的匹配。输入端口的第三个功能区会根据最长前缀匹配原则,找到最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。
这是一种“匹配加动作”的抽象。这种抽象出现在许多网络设备中。
交换
交换是在交换结构中实现的,将分组从一个输入端口交换到一个输出端口。
交换有许多实现方式
经内存交换
当分组到达输入端口时,该端口会通过中断方式向路由处理器发送信号,于是,该分组从输入端口被复制到处理器内存中。路由处理器从首部中提取目的地址,在转发表中找到合适的输出端口,并复制到输出端口的缓存中。
经总线交换
输入端口经由一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。输入端口为分组加上一个标签,标签指向特定的输出端口。每个输出端口都可以接收到这个分组,但只有与该标签相匹配的端口才可以保存这个分组。
经互联网络交换
使用一个更复杂的互联网络,将每个端口互联
排队
在输入端口和输出端口都有可能形成分组队列。随着队列的增长,路由器的缓存空间会被耗尽。此时到达的分组会出现丢包现象。
输入端口排队
线路前部阻塞:在一个输入端口的队列中排队的分组A被位于队列前部的分组B所阻塞,即使分组A的输出端口是空闲的。
输出端口排队
输出端口在一个单位时间内仅能传输一个分组,而其余到达的分组只能排队等待。当没有足够的缓存来缓存入分组时,就要采用抛弃策略。
分组调度
先入先出策略
按照分组到达输出链路队列的次序来选择分组在链路上的传输
优先权排队
分组被分为不同的优先权类,每个类被放入不同的队列。优先传输优先权类级别高的队列中的分组。
循环排队
不再划分优先级,但仍分为不同的类。在这些类中循环逐个取出分组进行传输
加权公平排队
依旧是循环排队,但是不同的是,每个队列被指定了不同的权重,轮到这个队列时,传输对应权重的分组。
IP协议
数据报格式
1.版本号
指定该数据报是IPv4还是IPv6
2.首部长度
IPv4数据报中包含了一些可变数量的选项,所以需要指定首部的长度。
3.服务类型
区分不同类型的IP数据报(比如将实时数据报与非实时数据报区分开)
4.数据报长度
5.标识、标志、片偏移
与IP分片有关
6.寿命
确保数据报不会永远在网络中循环
7.协议
指定了该数据报应交给哪个运输层协议
8.首部检验和
检查比特错误
9.源和目的IP地址
10.数据
IPv4数据报分片
由于并不是所有链路层协议都能承载相同长度的网络层分组,在发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。那么如何将一个过大的IP分组挤进链路层帧的有效载荷字段呢?解决该问题的方法是将IP数据报中的数据分片成两个或更多个较小的IP数据报。片在到达目的地的运输层之前需要重新组装。这个工作被放在了端系统中而不是路由器中。
标识号用来指定每一个数据报。发送主机通常将它发送的每个初始数据报加1。当路由器对初始数据报分片时,生成的每一个片都具有与之对应的初始数据报相同的标识号。数据报的最后一个片的标志位被设置为1,其余数据报片的标志位被设置为0,用来使目的主机明白它已经收到了最后一个片。使用偏移字段指定该片在初始IP数据报的哪个位置。
IPv4编址
一台主机通常有一条链路连到网络。当主机中的IP想发送一个数据报时,就在该链路上发送。主机与物理链路之间的边界被称为接口
而路由器会有许多条链路与之连接,因此路由器有多个接口。IP要求每台主机和路由器拥有自己的IP地址,因此,从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。
每个IP地址的长度为32个比特。地址的每个字节(每8个比特位)用它的十进制来书写,并且各个字节之间以句点隔开
子网
某一区域的网络,IP地址的格式被子网决定。
比如,在223.1.1.0/24子网中,其中的/24被称为子网掩码,指示32比特的最左侧24比特定义了子网地址。因此该子网中的主机或路由器的接口必须具有形如223.1.1.xxx的IP地址。同理,任何想要连接入这个子网的主机都要求其地址具有223.1.1.xxx的格式。
子网并不拘泥于多台主机到一个路由器接口的以太网段的格式
分开主机和路由器 的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫做一个子网。
IP地址分配策略:无类别域间路由选择(CIDR)
当使用子网寻址的时候,32比特的IP地址被划分为2部分,比如,a.b.c.d/x,其中x指示了地址的第一部分的比特数。x最高比特构成了IP地址的网络部分,被称为该地址的网络前缀。一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。这种情况下,该组织内部设备的IP地址将共享共同的前缀。也就是说,当该组织外部的一台路由器转发一个该组织内部的数据报时,仅需考虑该地址前面x个比特。这大大减少了转发表的长度
IP广播地址:255.255.255.255
会交付给该网络的所有主机
IP地址的获取
某个组织为了获取一个子网的IP地址,可能会与他的ISP联系。该ISP可能会从已分给他的更大地址块中提供地址。而ISP的地址是由一家更大的全球性权威机构提供的。
动态主机配置协议(DHCP)
DHCP允许主机自动获取一个IP地址。DHCP可以被配置,使得某给定主机每次与网络连接时得到一个相同的IP地址,或者是每次都被分配到一个临时的IP地址。DHCP又被称为即插即用协议或者是零配置协议
DHCP是一个客户-服务器协议。客户是每个新到达的主机,每个子网都具有一台DHCP服务器或者是DHCP服务器的中继代理。
DHCP协议的四步骤
1.DHCP服务器发现
为了发现一台DHCP服务器从而与之进行交互,一台新到达的主机会通过发送DHCP发现报文来完成这一目的。客户在UDP分组中向端口号67发送该分组。该UDP分组被封装在一个IP数据报中,而该数据报的目的IP地址是 广播地址255.255.255.255,源IP地址是本主机地址0.0.0.0
2.DHCP服务器提供
DHCP服务器收到发现报文后,会用DHCP提供报文进行响应,仍然使用IP广播地址255.255.255.255。报文内容包含发现报文的事务id,向客户推荐的IP地址,网络掩码以及IP地址租用期。客户可能会收到多个提供报文,客户可以根据距离等因素择优选取。
3.DHCP请求
客户使用DHCP请求报文响应DHCP服务器的提供报文,回显配置参数
4.DHCP ACK
服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
DHCP也有缺陷性,当移动节点在子网之间来回移动时,就不能维持与远程应用之间的TCP连接。
网络地址转换(NAT)
某个家庭网络可能使用10.0.0.0/24的子网,而这其实是一个叫做10.0.0.0/8的地址空间,全球数十万个家庭网络里可能有许多家庭网络都使用了这个地址空间,因此,当一个分组转发到家庭网络之外进入更大的全球因特网时显然不能使用这些地址作为源或目的地址,因为有数十万块网络使用该地址。因此需要一个NAT使能路由器,将该地址转换为该家庭网络真正的,唯一的IP地址。任何传向这个家庭网络的报文的目的IP地址都使用这个真正的IP地址,而任何传出这个家庭网络的报文的源IP地址也都使用这个真正的IP地址。
那么,如果目的IP地址相同,路由器如何得知报文段的目的是家庭网络内部的哪个主机呢?其实,NAT路由器内部有一张NAT转化表,表项中包含了端口号及其IP地址。比如,当10.0.0.1的主机向一台web服务器发送报文时,指定源端口为3345,目的端口为80,经过路由器时,路由器会将源端口进行改变,变为未经使用的某一端口,比如5001,这样,NAT转换表中就多了一条表项:5001------3345,10.0.0.1
当该web服务器的响应报文到达该家庭网络时,发现目的端口为5001,会通过该表进行索引,索引到正确的目的主机。
NAT的缺陷:NAT使用了端口号进行主机寻址,而端口号是用来进行进程寻址的。并且路由器是第三层(网络层)的设备,按理说不应干预运输层的字段。
IPv6与IPv4的区别
· IPv6的地址容量得到扩大,从32比特扩展到128比特
· IPv6不再允许中间路由器进行分片和组装,这种操作只能在源和目的进行
· IPv6移除了首部检验和,检验操作理应在运输层和链路层进行完毕。
IPv4到IPv6的迁移
建隧道:两个IPv6节点,想要传输数据,但中间的路由器可能是IPv4的,此时可以将IPv6放入IPv4报文中