网络层的IP分组由路由器转发,而每一个路由器有很多接口,那么从哪一个接口转发便需要转发表。
一、网络层基本功能
二、SDN基本概念
2.1 路由器
数据平面:转发的过程。一个分组如何从一个端口到达另一个端口。
控制平面:路由选择的过程。
2.1.1 数据平面
2.1.2控制平面
(1)传统方法
数据平面和控制平面都要在一个路由器中,数据平面负责转发,控制平面负责计算转发表(执行路由器算法并进行路由选择)。
(2)SDN方法
SDN三大特征:
①网络开放可编程
②控制平面与数据平面分离
③逻辑上的集中控制
SDN是进行远程控制的方法,利用可编程的软件来实现计算转发与路由交互。
SDN控制器可以计算出准确的网络状态与链路信息,并为应用程序提供信息,进行路由选择。
三、IP
根据TCP/IP协议栈能看到,网络层主要协议为ARP、IP、ICMP、IGMP协议。
3.1 IP数据报
IP数据报和IP分组是同义词,分组就是数据报。
IP数据报首部在前,其分为两部分(固定部分、可变部分(可有可无))。
3.1.1 IP数据报格式
固定部分固定长度20Bit,第一个为版本字段,有4位,0~4,指的是IP协议版本是IPV4还是IPV6。
第二个是首部长度,4~8,单位是4B
,首部长度表示的是固定部分加可变部分的总长。而首部长度占4个bit(4位),可表示的数字有0-15(0000-1111)个。这里需要注意的是首部长度单位不是1B而是4B,因此最大时可表示15×4 = 60B(字节)即最大首部长度,即最大值15个32位bit(1位为1bit)。而固定部分为20B即固定长度最小也为20,代表着首部没有可变部分,因此首部最小为5(0101)。
第三个字段为区分服务,只有在区分服务时该字段才会起作用。
第四个字段为总长度。即首部+数据长度单位1B.16~31总长16位,即最大为2^16-1=65535B个数据报长度。
生存时间(TTL):为了防止无法交付的数据报无限制的在网络中传播,没经过一个路由器TTL-1,直至为0丢弃。
协议:指明数据部分所使用的协议。每一个协议对应一个字段值。
首部检验和:检验首部的字段,检验方法为二进制和方法。每经过一个路由器,首部中的标志和片偏移可能会变化,路由器都要重新计算数据报首部和,以防止变化,首部错误时直接丢弃数据报。
源地址与目的地址:长度都是32位。
3.1.2IP数据报分片
当数据报的长度大于链路要求的MTU时时,需要分片。
标识:同一数据报的分片使用同一标识。
标志:只有2位有意义,即中间位和最低位。
只有DF=0,允许分片,MF才会有意义。
片偏移:13位长度。MF只知道目前的分片是不是最后一个,不知道具体在数据报的什么位置,因此片偏移指出分组分片后,某片在原分组的相对位置。以8B为单位。例如片偏移此时为000 000 000 000 1.那么此时相对位置位1(十进制)×8B = 8B。
例子:
对于这样的数据将3800分为1400、1400、1000长度,那么第一个片数据部分0~1399,第二个1400-2799,第三个2800-3800。那么第一个片偏移量即0,第二个即1400/8=175(0000 0000 1010 1111),第三个片偏移量2800/8=350。而由于都来自同一数据报,标识都相同。
3.1.3 IP数据报的三种传输方式
组播相对于单播传送效率高,但是组播组不同的主机可能在不同的物理网络中,那么服务器怎样确定同一组播组
中不同主机的传输路径和地址呢?-IP组播地址
对于IP组播地址不能使用组内某个主机的地址,这样的话只能确定这一台主机,无法发送给同一组播组内的其他主机,因此需要一群共同需求主机的相同标识)
3.1.4 IGMP协议与组播路由选择协议
上述的多播是在局域网内,这两个协议是在internet网上的组播与多播。
IGMP是路由器内部所规定的协议,让连接在局域网上的组播路由器是不是还有主机(本质上是主播的某个进程)参加或者退出了某个组播组,即通过IGMP就可以让路由器知道是不是还有可以接收主播数据报的主机。但是IGMP协议不知道组播组的主机数量(听个响)。
组播路由协议也是路径选择协议,单纯的RIP协议无法完成组播当中的数据传输,而且无法以最小的代价来传送给主播组中的全部成员。组播路由协议->选路:当组播组中的主机在不同的局域网中,某个主机发送数据时,也需要先找到到达不同局域网的最短路径,发送给其最短路径的路由器,再由该路由器分发给这个局域网中的所有主播组的成员。
在图中R1,R2,R3在组播组中,R4不在。
IGMP与ICMP都属于网络层的最上层,都会使用IP数据报传送报文。
移动IP:
3.2 IPV4地址
每一台设备都有一个或多个IP地址。
物理地址=MAC地址 = 硬件地址
逻辑地址 = IP地址
3.2.1 分类的IP地址
IP地址={<网络号><主机号>}
IP地址分A,B,C,D,E五类,我们常用的是A,B,C三类。
A类是1.0.0.1-126.255.255.254 第一位是网络号,后三位是主机号。
B类是128.1.0.1-191.254.255.254 前两位是网络号,后两位是主机号。
C类是192.0.1.1-223.255.254.254 前三位是网络号,后一位是主机号。
特殊IP
私有IP
A类网络除了第一位固定,当网络号其他位全0(0)或者全1(127)都是特殊IP地址,因此是2^7-2
,而主机数同样。B类网络除了前两位固定,也存在网络号其他位全0的特殊IP地址因此是2^14-1
。而主机号存在全0(本网络)全1(广播地址)的特殊IP因此是2^16-2
。C类网络同样。
3.2.2 网络转化NAT
私有IP地址只能在本地网和专用网中使用。路由器对目的地址是私有IP地址的数据报一律不进行转发。也就是说私有IP在外网或者以太网中是无效的。
想要访问专用网(私有IP)则需要进行内网穿透,而内网穿透需要一个公网IP,而NAT路由器可以提供一个外部全球IP地址,类似代理模式(梯子)。因此本地主机发送数据报会先发给公网IP(NAT路由器),再有NAT路由器根据NAT转换表,进行地址转化,将源地址和目的地址换为公网IP和专网IP,并将数据发送给私有IP地址。而端口号可以具体到某一个进程。
3.2.3 子网划分
将主机号当中较高的位划分为子网号(位数不一定是8位,看单位的划分规则)。
外部并不知道单位内部的子网划分规则。
而如果需要通过路由器对单位内部具体的某个主机转发数据,便需要直到其详细的IP地址,但是现在表现出来的只有一个网络号。那么便需要子网掩码的帮助。
子网掩码网络号全为1,主机号全为0。网络号和主机号与其IP地址划分相同。
而划分子网后的子网掩码,除了主机号为全0,网络号和子网号全为1。而通过子网掩码与子网IP地址相与
得到最终的网络地址。
对于同一个IP子网掩码不同,但是相与的结果是一样的,但是子网掩码是有区别的,192(11
00 0000)、224(111
0 0000),这代表前一个子网掩码,前两位是划分后的子网位,后一个前三位是划分后的子网位。其划分的子网个数,与每一个子网中能容纳的主机个数是不同的。
使用子网时分组的转发,需要将目的IP地址与各子网的子网掩码进行相与。
例:假设给子网145.13.3.10发送数据,将其与子网(145.13.3.0)的子网掩码(255.255.255.0)相与得出结果(145.13.3.0),直接交付。而如果相与后结果无法在网络中找到该子网号,那么会在路由表中找有没有特定主机路由,如果有且和目的地址一样那么直接按照特定路由的步骤走,如果没有和目的主机地址相同特定主机路由,那么检测路由表中有无路径,利用目的主机地址与路由表中的每一行子网掩码进行相与,直至找到目的子网,如果都没有,那么进入默认路由0.0.0.0,默认路由将数据发给另一个路由器然后继续循环执行这些步骤,如果仍没找到,则返回默认路由再发给另外一台路由器直至找到为止。如果再生存时间内没有找到,那么丢弃该分组。
3.2.4 无分类编址CIDR
可变长网络号,因此没有ABC类网络的划分。
CIDR在IP地址后面加一个斜杠/,后面接网络前缀的位数。其子网掩码与之前的划分规则一样,同样要进行子网划分时,可以继续往低位延申网络前缀。
CIDR应用
(1)构成超网(路由聚合)
将很多子网聚合在成一个较大的子网。
对于两个相连的路由器,当路由表链接了很多路由时,路由表会一直增加,路由表项会一直增加,也很不好维护。CIDR提供路由聚合方式,将相同接口的IP地址合并在一起,合并方法将网络前缀缩短(所有网络地址取交集)。聚合后的网络地址,网络号取交集,主机号全0。
(2)最长前缀匹配
使用CIDR表示IP地址时,使用子网的分组转发会与各个子网的子网掩码进行相与得到子网号,但是有时与每个子网相与都会得到该子网号(目的IP地址为206.0.71.130与子网号为206.0.68.0/22的子网掩码相与得到的结果是206.0.68.0,但是与206.0.71.128/25的子网掩码相与得到的也是206.0.71.128),即数据报给每个子网都要发送?可是目的IP地址只有一个鸭,此时选择最长网络前缀的路由(发送给206.0.71.128)。
3.3 ARP协议(地址解析协议)
对于主机来说,发送数据需要对数据进行封装,应用层首先要发送一个数据,传输层会将数据进行分段(数据过大时划分报文段),网络层对报文段添加首部形成IP数据报(分组),其中主要包括源主机地址与目的主机地址(根据DNS得到),到了链路层在进行封装加上MAC地址,其中除了源MAC地址,还需要目的MAC地址,那么源地址知道,目的MAC地址
怎么获得呢(ARP协议解决)。
每一台主机和路由器上都有一个ARP高速缓存,其中存放的是某一个IP地址及其对应MAC地址的映射。因此只需要查询ARP高速缓存就能得到目的IP地址对应的MAC地址。而当ARP高速缓存中没有目的IP地址及其对应的MAC地址,那么便需要ARP协议
。
ARP协议:首先会广播一个ARP请求,源主机会发送一个数据帧,其中包含源IP地址、目的IP地址,源MAC地址,目的物理地址(全1)。
当数据帧从主机到集线器再到交换机,交换机原本不会随意的转发分组(帧),但是全F为广播分组的,那么交换机会将广播分组从所有端口发送出去,而当目的主机接收到了该分组后会回应一个单播(只发送给一个主机)ARP响应分组。其包括目的IP地址及其MAC地址,那么会完成数据链路层的封装。
那么对于不在一个局域网的主机怎么获取MAC地址进行封装呢(ARP中存放的是该局域网下的所有主机/路由器的IP地址与MAC地址的映射)。那么源主机会先用自己的IP地址与目的主机IP地址的子网掩码相与查看是不是在一个网段内,如果不在,此时会查询默认网关
,默认网关是局域网与外界沟通的接口也是一个路由器,因此源主机会先发送一个广播ARP请求分组,请求默认网关的MAC地址。
默认网关会返回一个单播ARP响应分组。回应自己的IP地址及MAC地址对数据进行封装。封装完后发送数据给路由器,默认网关会发送广播ARP请求分组,且路由器会持续一个封装与解封装的过程,但是此时的广播ARP请求分组不会改变其源地址和目的地址,只会不断地改变MAC地址来继续往下一个路由器继续发送,直至找到目的地址对应局域网,由目的地址返回单播ARP响应分组,其中包含目的MAC地址。(交换机没有MAC地址, 在广域网的点对点传输过程中MAC地址是要改变的(变为路由器端口对应的MAC地址))
MAC地址(Media Access Control Address)的全称叫做媒体访问控制地址,也称作局域网地址,以太网地址或者物理地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。MAC地址共48位(6个字节)。前24位由IEEE(电气和电子工程师协会)决定如何分配,后24位由实际生产该网络设备的厂商自行制定。例广播地址:FF:FF:FF:FF:FF:FF
3.4 DHCP协议
主机的IP地址获取方式有两种:静态配置、动态配置。
静态配置由别的主机静态的固定的分配IP地址、子网掩码、默认网关(局域网与外界交流的关口,通常是一个路由器的接口的IP地址)。静态IP就是固定IP,运营商给了你固定IP也会告诉你对应的掩码与网关,然后你可以把这个配置在本地连接里可以直接连接上网,不需要获取地址。
动态配置:根据网段划分网络,每一个网段内都有DHCP服务器,DHCP可以为移动设备在静止时,分配IP地址。动态IP就是指在需要的时候才进行地址分配的方式。所谓动态就是指当你每一次上网时,服务端会随机分配一个地址,随用随分配安全性比较高,比较灵活。
一般来说,动态IP有两种情况:一种是DHCP
动态分配,这种动态IP可以省去你配置IP的过程,就是路由器分配给你的一个空闲的IP地址,你就可以直接上网了;另一种就是运营商的动态分配了,这是为了解决IP稀缺的问题。当用户需要使用IP的时候,运营商就给你分配一个,当你不需要用的时候,这类动态IP就会回收给其他人使用。
动态的变化一般出现在每次断开网络的时候,也就是说如果我们好几天没有关机或者重启网络,那么你的动态地址也是不会变得。
所以说,其实动态也不是一个真实的地址,而是每次路由器联网的时候,都会获得一个新的地址,而这样的地址因为不断更换所以安全性比较高。
动态主机配置协议DHCP分配IP的步骤:
1.首先,主机广播DHCP发现报文,主机可以从服务器获取IP地址、子网掩码、默认网关、DNS服务器名称。
2.DHCP服务器广播DHCP提供报文。(IP地址、子网掩码、默认网关、DNS服务器名称等相关配置)。
3.主机广播DHCP求情报文。主机向服务器请求提供IP地址(我要用你的IP地址了)
4.DHCP服务器广播DHCP确认报文。正式将IP地址分配给主机(用吧!)
3.5 ICMP(网际控制报文)协议
根据TCP/IP协议栈,ICMP协议与IGMP位于网络层和传输层之间,起桥梁作用。其目的是为了更有效的转发IP数据和提高交付成功的机会。
它用于 TCP/IP 网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使网络管理者可以对所发生的问题作出诊断,然后采取适当的措施解决问题。
虽然 ICMP 是网络层协议,但是它不像 IP 协议和 ARP 协议一样直接传递给数据链路层,而是先封装成 IP 数据包然后再传递给数据链路层。所以在 IP 数据包中如果协议类型字段的值是 1 的话,就表示 IP 数据是 ICMP 报文。IP 数据包就是靠这个协议类型字段来区分不同的数据包的。
ICMP差错报告报文
1.终点不可达:无法交付数据
2.时间超过:拥塞丢数据
3.时间超过:TTL= 0;
4.参数问题:首部字段有问题
5.重定向:换路由
所有的ICMP差错报告报文的数据格式都一样,将收到的需要进行差错报告的IP数据报的首部和前8个字节作为ICMP报文的数据字段,再加上ICMP的前8个字节组成ICMP差错报告报文,在加上首部构成完整的数据报。
ICMP差错报告报文即IP数据报,也就是网络层传输单元的数据部分。
组播:也是一对多,但是不用发送给所有结点,是有选择性的。
ICMP询问报文分为:
1.回答请求和回答报文:例如在ping+IP/DNS时,便需要请求和回答
ICMP的应用:
3.6 IPV6
32位的IPv4地址空间已经分配殆尽。
IPV6在源地址和目的地址都从32位扩充位128位。
IPV6常以16进制进行表示。
IPV6独有的同行方式是任播,实际上还是一对一通信,表现形式是一对多,假设一台主机其IP数据包所封装的地址是任播地址,那么其会给任播组内的最近的一台发送信息。
IPV6与IPV4的兼容与过度:双栈协议/隧道技术
隧道技术实现了IPv6到ipv4的伪装(将ipv6的数据报作为数据部分封装在首部为IPv4的数据报中)
3.7 路由选择协议
3.7.1 内部网关协议
3.7.1.1 RIP协议与距离向量算法
RIP协议
RIP适用于较小的网络
RIP没30秒交换一次路由信息,若超过180秒没收到邻居路由器的通告,则判定路由器或者链路有问题,那么此时更新路由表便会把要通过邻居的表项更新掉。
RIP报文:包含路由表的全部信息,是相邻路由器所交换的信息。
对于路由表当中最短距离以及下一跳的更新与添入,即通过距离向量算法确定。
距离向量算法
返回就是在不断更新直至收敛。
RIP报文
- RIP是将首部和路由信息部分塞到了UDP用户数据报当中,在加上UDP首部形成UDP用户数据报。UDP是传输层协议,传输层的传输单元数据部分也是高层(应用层)传下来的,所以RIP是应用层协议,将封装的好的RIP报文塞进UDP数据报中,使用UDP传送数据。
- 一个RIP报文最多可包括25个路由。对于比较庞大的网络,常常需要发送不止一个RIP报文。
3.7.1.2 OSPF协议链路状态算法
OSPF(开放最短路径优先协议)
OSPF在链路状态改变时,通过向相邻的路由器发送信息(相邻的所有路由器的链路状态),来传播到整个自治系统,类似广播形式。最终所有路由器都能知道自己到这个全网络内的其他路由器的最短路径。
路由状态路由算法
主要划分为主干区域和普通区域,主干区域0.0.0.0主要是用来联通其他区域,其中R3与R7即是主干路由器也是区域边界路由器负责两个区域的通信。
OSPF报文
OSPF分组用IP数据报传送,是网络层协议。
3.7.2 外部网关协议-BGP协议
在配置BGP协议时,自治系统管理员都要选择最少一个路由器作为BGP发言人,两个BGP发言人通过网络连接在一起,一般BGP发言人就是BGP边界路由器,与外界进行相连,因此发言人不仅会使用RIP,OSPF等内部网关协议,也会使用BGP外部网关协议。即边界路由器不仅要清楚,通过那几个自治系统才能到达目的自治系统,也得知道自治系统内部的最短路由信息。而自治系统与OSPF一样,链路变化时才会更新路由信息。
因此BGP交换的便是路径向量(一组完整路径信息)
BGP报文
BGP报文信息封装在TCP报文当中,因此传输BGP报文必须先建立TCP连接。
BGP路由表中的网络是通过CIDR这种网络前缀的形式来表示的。
open报文即实现TCP连接的建立,同时证实发送发身份,实现身份认证。
KEEPALIVE报文:虽然相邻的BGP发言人之间建立了TCP连接,但是如果长时间没有发送报文,没有路径的更新,但是为了确实对方是否还在线,则需要发送该报文,同时也可以对连接报文进行确认。
NOTIFICATION(通知)报文:可以用来关闭TCP连接。
3.7.3 三种协议的比较
四、 网络层设备
路由选择:是宏观的,选择一个合适的路径把数据从源地址转发到目的地址。
转发:是路由器内部从一个输入端口转发到一个输出端口。
默认路由在路由表中找不到能转发的路由时,先转发到默认路由,在局域网中通常也是一个路由器,再由路由器慢慢寻找能不能转发。