网络层是路由器最高层。
转发发生在路由器内部(微观),路由选择发生在路由器外部(宏观路由器之间)。
网络层:主要任务是把分组
从源端传到目的端,为分组交换网上的不同主机提供通信服务。
网络层的传输单位是数据报
。(把数据报
切割成分组
)
网络层功能:
(1)路由选择与分组转发,确定最佳路径
(2)实现异构网络互联(手机、电脑、4G、WiFi、校园网,依靠路由器连接在一起)
(3)拥塞控制:若所有结点都来不及接收分组,而要丢弃大量分组的话,网络就处于拥塞状态。因此要采取一定措施,缓解这种拥塞。
拥塞解决方法:开环控制(静态,提前规划),闭环控制(动态,运行时调整)
转发:达到路由器输入链路之一
的数据报如何转发到该路由器的输出链路之一
。
路由选择:控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式。
数据平面
: 数据平面对于数据处理过程中各种具体处理转发过程。(转发。数据平面用时短,通常用硬件解决)
控制平面
:控制平面用于控制和管理网络协议的运行,比如 OSPF 协议、RIP 协议,BGP 协议。(路由选择。控制平面用时长,通常用软件解决)
数据平面执行的主要功能是根据转发表进行转发
,这是路由器的本地动作。
控制平面(传统方法):路由选择算法运行在每台路由器中
,并且在每台路由器中都包含转发和路由器选择两种功能
。
具体方法:在一台路由器中的路由选择算法与其他路由器中的路由选择算法通信(通过交换路由选择报文),计算出路由表和转发表。
控制平面(传统方法):控制平面从路由器物理上分离。路由器仅实现转发
,远程控制器计算和分发转发表以供每台路由器所使用。
远程控制器可能在具有高可靠性的远程数据中心中,并可能由 ISP 或某些第三方管理。(外置大脑)
具体方法:路由器通过交换包含转发表和其他路由选择信息的报文与远程控制器通信。因为计算转发与路由器交互的控制器是用软件实现的,所以网络是“软件定义的”。
传统方法:路由选择处理器执行控制平面功能
。在传统的路由器中,它执行路由选择协议,维护路由选择表关联链路状态信息,并为该路由器计算转发表。
SDN 方法:在 SDN 路由器中,路由选择处理器负责远程控制器通信
,目的是接受远程控制器计算的转发表项。
SDN 控制器:维护准确的网络状态信息(远程链路,路由器和主机的状态);为运行在控制平面中的网络控制应用程序提供这些信息(逻辑集中,在多台服务器上实现)
网络控制应用程序:根据 SDN 控制器提供的方法,这些应用程序通过这些方法能够监视、编程和控制下面的网络设备。
北向 API 向上,南向 API 向下
上层,北向 API 以上:
对于网络控制应用程序的接口
:SDN 控制器通过“北向接口”与网络控制应用程序交互,该 API 允许网络控制应用程序在状态管理层之间读写网络状态。
中层,SDN 控制器部分:
网络范围状态管理层
:由 SDN 控制平面作出的最终控制决定,将要求控制器具有有关网络的主机、链路等最新状态信息。
下层,南向 API 以下:
通信层
:SDN 控制器与受控网络设备之间的通信(OpenFlow 协议),包含“南向接口”。
**习题:
网络范围状态管理层。因为在这一层能获得有关网络的主机,链路,交换机和其他 SDN 控制设备的最新状态信息,可以根据这些信息的基础上实现新型路由选择协议,并通知给控制器落地执行。
2. 谁是从控制器跨越南向接口发送的这些报文的接收者?谁是跨越北向接口从控制器发送的这些报文的接受者?
① 受控网络设备(路由器);② 网络控制应用程序;
总结:
数据平面(转发):从哪个出站口等车;
控制平面(路由选择):本地火车站(传统方法)或者远程中央火车站为你规划线路(SDN),车的下一站到哪;
SDN:上层是聪明的应用程序来计算,中层上下层的衔接,给出最终路线,下层是被 SDN 控制的本地火车站;
最佳路由:“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
固定部分:对任一 ip 数据报,它的固定部分大小都相同且一定会有,为 20 字节。
首部长度:IP 数据报首部固定部分为 20B,所以最低为 20B。转换成十进制就是需要 20/4 = 5 个单位(1 个单位 4B),5 转换成 2 进制是 0101(首部长度共4B,容纳四个数字),首部长度最小值为 0101。
填充部分:填充成 4 的整数倍,因为数据报单位为“位”,而首部长度使用的单位是4B。
总长度:共 16 位,最大可达 216−1=65535(单位 1字节)。
协议:指数据部分协议。TCP 面向服务的连接,字段值为 6;UDP 不面向连接,字段值为 17。
链路层数据帧可封装数据的上限。以太网的 MTU 是 1500 字节。
IP 地址:给网络中每一台主机接口、路由器接口都赋予一个全球唯一化的标识符。
分类的 IP 地址 → 子网的划分 → 构成超网(无分类编址方法)
一个路由器下的主机地址只有最后一位不同,一个路由器可以有多个地址(因为它有多个接口)。
{<全0>, <全0>}:只可以作为 IP 分组的源地址
,表示本网范围内的当前主机,而不可以作为 IP 分组目的地址;
{<全0>, <特定值>}:可作为源地址,表示本网内的某一个特定主机,不可作为目的地址;
{<全1>, <全1>}:点分十进制表示为 255.255.255.255 ,不可作为源地址,可作为目的地址,表示本网络内的广播地址,发送给了本网内的所有主机
,也可以叫做受限地址,路由器会因为隔离广播域而不转发该广播;
{<特定值>, <全0>}:不可以作为源地址,不可以作为目的地址,表示本网;
{<特定值>, <全1>}:不可以作为源地址,可以作为目的地址,对特定网络上的所有主机广播,也就是对其他网络上所有主机
进行广播;
{<127>, <任何数(非全 0/1)>} : 例子中的 127 为 a 类网络,用于本地环回测试来测试网络功能,发出去就回来了,不会进入网络,称为环回地址,可以作为源地址,也可以作为目的地址;
这些只适用于内部网络,比如本网、本地网、专用网,例如学校,单位。
路由器对目的地址是私有 IP 地址的数据报一律不进行转发。
网络地址转换 NAT (Network Address Translation):在专用网
连接到因特网
的路由器上安装 NAT 软件,安装了 NAT 软件的路由器叫 NAT 路由器,他至少有一个有效的外部全球 IP 地址。
NAT 转换表中,第一列 WAN 端为广域网段(外网),第二列 LAN 端为局域网端(内网)。
端口号可以唯一的标识主机当中的某一个具体进程,在同一主机内,不同进程的端口号是不同的。
从 A 发送到 B 的过程中,数据报在 A 处,前面加源地址,后面加目的地址,端口号,通过 NAT 路由器时,源地址和目的地址被替换;
从 B 发送到 A 的过程中,数据报在 B 处,前面加源地址,后面加目的地址,端口号,通过 NAT 路由器时,源地址和目的地址被替换,替换规则在 NAT 转换表里;
分类 IP 地址的弱点:
IP 地址空间的利用率有时很低;
二级 IP 地址不够灵活;
主机号不能全 0 或者全 1,所以主机号至少两位;
子网号需看情况,如果应用到 CIDR 技术就可以全 0 和全 1;
(1)已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0,求网络地址。
第一步,明白解题思路。应该把 IP 地址与子网掩码的“点分十进制”转化为二进制的形式,做“逻辑与运算
”。
第二步,简化运算。因为两级 IP 地址要与两级 IP 地址的二进制
子网掩码做“逻辑与运算
”(全 1 为 1),所以后面子网掩码的 255 化为十进制就是 1111 1111 (8 个 1),141.14 部分就不用再转化为二进制了,即使转化了,逻辑与运算
之后得到的结果转化为点分十进制还是 141.14;
第三步,将两个地址中的第三个字节 72,192 转化成二进制,逻辑与运算之后结果是 0100 0000,转换成十进制为 64;
第四步,网络地址结果转换为点分十进制为 141.14.64.0
(2)已知 IP 地址是 141.14.72.24,子网掩码是 255.255.224.0,求网络地址。
修改第三步,将 72 与 224 转换成八位二进制,再做按位与运算,将结果转换成十进制;
结果 0100 0000 转换成十进制是 64,最后的网络地址仍然是 141.14.64.0
观察(1)题第一个子网掩码 255.255.192.0,第三个字节 192 转化为二进制为 1100 0000,子网号占了 2 位,第三字节还有剩下的 6 位,第四字节还有剩下的 8 位,给主机号留了 6 + 8 = 14 位;
观察(2)题第一个子网掩码 255.255.224.0,第三个字节 224 转化为二进制为 1110 0000,子网号占了 3 位,第三字节还有剩下的 5 位,第四字节还有剩下的 8 位,给主机号留了 5 + 8 = 13 位;
得出结论:相同的网络地址,可以划分的子网个数、以及每一个子网中可以使用的最大主机数是不同的。
八位二进制与十进制转换表 128、64、32、16、8、4、2、1
Q1:有一个IP地址为192.168.1.200,子网掩码是255.255.255.224,要求计算其网络地址,主机地址和广播地址。
https://blog.csdn.net/jiudihanbing/article/details/6022969
(3)某主机的 IP 地址为 180.80.77.55,子网掩码为 255.255.252.0.若该主机向其所在子网发送广播分组,则目的地址可以是( )。
A. 180.80.76.0
B. 180.80.76.255
C. 180.80.77.255
D. 180.80.79.255
广播分组就是广播地址,目的地址一定是一个广播地址,广播地址主机号全是 1 (IP 地址={<网络号>,<主机号>}),排除 A 选项;
子网掩码第三字节 252 转换成二进制为 1111 1100,前面 8 + 8 + 6 = 22 位为子网号,后面 2 + 8 = 10 位作为主机号;
IP 地址 180 开头属于 B 类地址,前两个字节(16 位)作为网络号;6 位子网号,10 位主机号;
第三个字节为 77,转换成 8 位二进制为 0100 1101,子网号占 6 位,0100 1100 转换成十进制为 77,180.80.77.0 为主机所占的子网号;
广播分组就是目的地址为全部主机,需要把剩下的主机号全设为 1,第三字节就变成了 0100 1111 即 79, 180.80.79.255 选 D。
Q:如何判断是否直接交付?
A:目的网络子网掩码和路由器中存放的三个字网的子网掩码进行“逻辑与”运算,如果结果能得出目的网络地址,就说明能直接交付。
图中画起来的目的网络子网掩码 1 为 145.13.3.10 根据子网号可得子网掩码为 255.255.255.0,进行“逻辑与”运算之后结果为 145.13.3.0 所以它为直接地址。
CIDR 出现的原因:B 类地址要被分完了;将网络号和子网号统一称为“网络前缀”,它是可变的。
例如 CIDR 地址 192.199.170.82/27 中,/27 表示网络号占了 27 位,则主机号剩下了 4*8-27=5 位,
这个地址块包含 25=32个地址,
第四字节为 82,即 0101 0010
,最小地址 0100 0000
,即 192.199.170.64;最大地址 0101 1111
,即 192.199.170.95,
CIDR 地址块为主机号全 0 的最小地址,表示本网络;
子网掩码为:前 27 位为 1,主机号为 0;
路由器 R1 的路由表中,到达网络 1 与网络 2 都需要通过接口 a,造成了数据冗余。
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。
例题:
某路由表中有转发接口相同的 4 条路由表项,其目的网络地址分别为
35.230.32.0/21、
35.230.40.0/21、
35.230.48.0/21、
35.230.56.0/21,将该 4 条路由聚合后的目的网络地址为( )。
A. 35.230.0.0/19
B. 35.230.0.0/20
C. 35.230.32.0/19
D. 35.230.32.0/20
前 21 位为网络地址,即前两字节加第三字节的 5 位
第三字节转换成八位二进制再按位与
32 0010 0
000
40 0010 1
000
48 0011 0
000
56 0011 1
000
结果 0010 0
000 ,将前3 位划给网络号,即 35.230.32.0/19
使用 CIDR 时,查找路由表可能得到几个匹配结果(跟网络掩码按位相与),应选择具有最长网络前缀的路由。
聚合网络地址:206.0.68.0/22
网络一:206.0.71.128/25
网络二:206.0.71.0/25
一个目的地址为 206.0.71.130 的数据报想发给网络一。
71 0100 0111
130 1000 0010
将目的地址和网络掩码进行按位相与,
恰好是聚合网络地址,匹配成功,还要计算另外两个网络地址网络掩码,看是否有更长的一个网络前缀。
网络一:206.0.71.128/25 网络掩码为前 25 位为网络号,全 1
网络二:206.0.71.0/25 网络掩码为前 25 位为网络号,全 1
匹配失败,不能发给网络二。
发给网络一的网络前缀更长,所以发给网络一。
解题思路:想看能不能匹配成功,再看匹配成功的哪个网络前缀最长,就选哪个。
最后一行全 0 的目的网络代表默认路由,路由器的路由表中,所有网络都匹配不上的话,才用默认路由;
R1 匹配之后的结果应该为:132.0.0.0/8
R2 匹配之后的结果应该为:132.0.0.0/11
不匹配,R1 与 R2 相比 R2 网络掩码更长,选 R2。
处于链路层和网络层中间的协议,结合了 IP 地址与 MAC 地址。
主机 1,向主机 3 发送数据的过程,当主机 1 找不到主机 3 的 MAC 地址时,就广播 ARP 分组请求,问遍局域网内 所有的主机,来得到主机 3 的回应。
当主机 1 与主机 5 行进通话时,首先得到的目的 MAC 地址得到的是 MAC6;MAC7 再与 MAC8 通信,MAC9 再与 MAC5通信;
路由器会再次使用 ARP 协议进行广播,找目的 MAC地址。
ARP 协议的产生:在实际网络的链路上传送数据帧时,最终必须使用 MAC 地址。
有的主机在自己的高速缓存中找不到目的主机对应的 MAC 地址,就需要用 ARP 协议帮助自己找下一跳。
ARP 协议:完成主机或路由器 IP 地址到 MAC 地址的映射。(解决下一跳走哪的问题)
ARP 协议使用过程:检查 ARP 高速缓存,有对应表项则写入 MAC 帧,没有则用目的 MAC 地址为 FF-FF-FF-FF-FF-FF 的帧封装并广播 ARP 请求分组
,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个 ARP 响应分组
,源主机收到后将此映射写入 ARP 缓存(10~20 min 更新一次)。
ARP 协议四中典型情况:
(1)主机 A 发给本网络上的主机 B:用 ARP 找到主机 B 的硬件地址;
(2)主机 A 发给另一网络上的主机 B:用 ARP 找到本网络上一个路由器(网关)的硬件地址;
(3)路由器发给本网络的主机 A:用 ARP 找到主机 A 的硬件地址;
(4)路由器发给另一网络的主机 B:用 ARP 找到本网络上的另一个路由器的硬件地址;
习题:
主机发送 IP 数据报给主机 B,经过了 5 个路由器,请问此过程总共使用了几次 ARP 协议?
6次
静态配置:像机房电脑,IP 地址是挨着的;静态配置主要配置的是 IP 地址、子网掩码、默认网关;
动态配置:手机,笔记本等可以自由移动的设备,由当地的 DHCP 服务器给它们分配 IP地址;
动态主机配置协议 DHCP 是应用层
协议,使用客户/服务器
方式,客户端和服务端通过广播
方式进行交互,基于 UDP
。
DHCP 提供即插即用联网的机制,主机可以从服务器动态获取 IP 地址、子网掩码、默认网关、DNS 服务器名称与 IP 地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
DHCP 协议工作过程:
(1)主机广播
DHCP 发现报文(主机询问本网络有没有 DHCP 服务器,之后 DHCP 服务器会得到该主机的 IP 地址);
(2)DHCP 服务器广播
DHCP 提供报文(DHCP 回复主机,服务器拟分配给主机一个 IP 地址及相关配置,先到先得);
(3)主机广播
DHCP 请求报文(主机使用被 DHCP 分配的 IP 地址);
(4)DHCP 服务器广播
DHCP 确认报文(正式将 IP 地址分配给主机);
(1)终点不可达:当路由器或主机不能交付
数据报时就向源点发送终点不可达报文。
(2)源点抑制: 当路由器或者主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
(3)时间超过:当路由器收到生存时间 TTL = 0 的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定时间内不能收到一个数据报的全部数据片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
(4)参数问题: 当路由器或目的主机收到的数据报的首部中有的字段的值不正确
时,就丢弃该数据报,并向源点发送参数问题报文。
(5)改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器,也就是可通过更好的路由
。
(1)将收到的IP数据报的首部和数据字段前8字节取出;
(2)将(1)装入新的ICMP差错报告报文+新的ICMP前8字节;
(1)对 ICMP 差错报告报文不再发送 ICMP 差错报告报文;
(2)对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文;
(3)对具有组播地址的数据报都不发送 ICMP 差错报告报文;(组播就是有选择性的发给多个主机)
(4)对具有特殊地址(如 127.0.0.0 环回地址或 0.0.0.0 本主机地址)的数据报不发送 ICMP 差错报告报文;
(1)回送请求和回答报文:主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。(ping)测试目的站是否可达以及了解其相关状态。
(2)时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
(3)掩码地址请求和回答报文;
(4)路由器询问和通告报文;
PING
测试两个主机之间的连通性,使用了 ICMP 回送请求和回答报文。(询问报文)
Traceroute
跟踪一个分组从源点到终点的路径,使用了 ICMP 时间超过差错报告报文。
32 位 IPv4 地址空间已分配得快没了,CIDR 与 NAT 技术治标不治本,IPv6 会从根本上解决地址耗尽问题。
IPv6 想要通过改进首部格式,来快速处理/转发数据报、支持 QoS。
QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术。
下图为 IPv6 基本首部与有效载荷;
基本首部的版本:指明了协议版本,总是6;
优先级:本数据报的优先级,什么时候进行处理;
流标签:“流”是互联网上从特定源点到指定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。
有效载荷长度:指有效载荷部分的长度;
下一个首部:标识下一个扩展首部或上层协议首部,在 IPv6 的基本首部中下一个首部指“扩展首部一”;“扩展首部一”的下一个首部指的就是“扩展首部二”…最后一个扩展首部的“”
跳数限制:相当于 IPv4 的 TTL,如果到达零路由器就会把这个数据报丢弃,并且返回一个 ICMP 差错报告报文;
源地址/目的地址:由 IPv4 的 32 位,扩充为 128 位;
(1)IPv6 将地址从 32 位(4B)扩大到 128 位(16B)
,更大的地址空间;
(2)IPv6 将 IPv4 的校验和字段彻底移除
,以减少每跳的处理时间;
(3)IPv6 将 IPv4 的可选字段移出首部,变成了扩展首部
,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率;
(4)IPv6 支持即插即用
(即自动配置),不需要 DHCP 协议;
(5)IPv6 首部长度必须是 8B 的整数倍
,IPv4 首部是 4B 的整数倍;
(6)IPv6 只能在主机处分片
,IPv4 可以在路由器和主机分片;
(7)ICMPv6:附加报文类型“分组过大”;
(8)IPv6 支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用;
(9)IPv6 取消了协议字段,改成下一个首部字段;
(10)IPv6 取消了总长度字段,改用有效载荷长度字段;
(11)IPv6 取消了服务类型字段;
(1)双栈协议:双协议栈技术就是指在一台设备上同时启用 IPv4 协议栈和 IPv6 协议栈
。这样的话,这台设备就能进行两个协议栈的网络通信。
如果这台设备是一个路由器
,那么这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了 IPv4 地址和 IPv6 地址,并很可能分别连接了 IPv4 网络和 IPv6 网络。
如果这台设备是一个计算机
,那么他将同时拥有 IPv4 地址和 IPv6 地址,并具备同时处理这两个协议地址的功能。
(2)隧道技术:通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其他协议的数据帧或包重新封
装然后通过隧道发送。
数据报在过 IPv4 路由器时会加一个 IPv4 数据报的头,伪装成 IPv4 数据报。
RIP 协议 路由算法选择的距离向量,适用于网络大小较小的网络;
(1)仅和相邻路由器
交换信息;
(2)路由器交换的信息是自己的路由表
;
(3)每 30 秒
交换一次路由信息,然后路由表根据新信息更新路由表。若超过 180s 没收到邻居路由器的通告,则判定邻居没了,并更新自己路由表;
路由器刚开始工作时,只知道直接连接的网络距离(距离为 1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
经过若干次更新后,所有路由器都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。https://baike.baidu.com/item/UDP/571511?fr=aladdin
Q:为什么使用 TCP 而不是UDP?
A:为了提供一个可靠服务
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。https://baike.baidu.com/item/TCP/33012?fr=aladdin