网络层是协议栈中最复杂的层次,可以分为两个相互作用的层次:数据平面和控制平面.
转发和路由选择
转发:在数据平面中实现的唯一功能,数据平面功能就是在路由器中,把入链路的数据转发到对应的出链路,是一个路由器内部的微观视角。
是指将分组从一个书输入链路接口转移到适当的输出链路接口的路由器本地动作。时间短(几纳秒),通常用硬件来实现。
路由选择:是在控制平面实现的功能,控制平面是个范围更大的功能,是一种宏观视角,控制数据从源主机到目的主机之间的路由选择方式。
是指确定分组从源到目的地所采取的的端到端路径的网络范围处理过程。时间长(几秒),通常用软件来实现。
控制平面:
传统方法:由路由器的硬件使用路由选择算法决定插入该转发表的内容
SDN方法:通过计算转发表与路由器交互的远程控制器软件来确定并分发转发表的值
网络层提供的服务
一般来说,我们期望网络层能够提供一些服务,包括:
确保交付;
具有时延上界的确保交付;
有序分组交付
确保最小带宽
安全性
但事实上,因特网的网络层只提供了一种服务,称为尽力而为服务。传送的分组既不能保证以它们发送的顺序被接收,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。
路由器的组成及其工作原理
输入端口:将一条输入的物理链路与路由器相连接,并提供查找功能;
交换结构:将路由器的输入端口连接到它的输出端口;
输出端口:存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组;
路由选择处理器:执行控制平面相关的功能;
IPv4 网络协议
IP 协议是非常著名的网络协议,其有两个版本正在使用:IPv4 和 IPv6。其中 IPv4 使用得更加广泛
IPv4 的数据报格式如下:
关键字段如下:
版本号:4 比特,规定了数据报的 IP 协议版本;
首部长度:4 比特,用来确定 IP 数据报中载荷实际开始的地方;
服务类型:8 比特,使不同类型的 IP 数据报能相互区别开来;
数据报长度:16 比特,表示 IP 数据报的总长度(首部 + 数据);
标识、标志、片偏移:总计 32 比特,用于 IP 数据报分片;
寿命:8 比特,用来确保数据报不会永远在网络中循环;
上层协议:8 比特,值为 6 表示数据部分要交给 TCP,值为 17 表示数据部分要交给 UDP;
首部检验和:16 比特,用于帮助路由器检测收到的 IP 数据报中的比特错误;
源IP 地址:32 比特;
目的 IP 地址:32 比特;
选项:32 比特,可能是没有的,该字段允许 IP 首部被扩展;
数据(载荷):也就是数据
当IP 数据报的大小超过链路层能承载的最大数据量(也被称为最大传送单元)时,就必须被分成多个独立的数据片段进行传输,这就是IPv4 数据报分片。值得注意的是,IPv6 协议不允许数据报进行分片。数据报分片之后就涉及到接收者需要将分片数据报重新组装。IPv4 的设计者决定将这项工作放在端系统中执行,而不是放到网络路由器中
由于 IP 是一种不可靠的服务,一个或多个分片可能永远到不了目的地,因为这种原因,为了让目的主机绝对相信它已经收到了初始数据报的最后一个分片,所以最后一个分片的标志比特被设为 0(其它分片的标志位 1)。另外,为了让目的主机确定是否丢失了一个分片,使用偏移量字段来指定该片应放在初始 IP 数据报的位置
IPv4 编址
IP 协议要求每台主机和路由器接口拥有自己的 IP 地址
注意:从技术上来讲,一个 IP 地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联
每个 IP 地址的长度为 32 比特,以点分十进制记法书写,例如:192.168.100.1
通常情况下,多个主机与一个路由器接口会形成一个子网,子网会被分配一个 IP 地址,例如:223.1.1.0/24,其中的/24被称为子网掩码
以223.1.1.0/24 为例,子网掩码/24 表示整个 32 比特 IP 地址终的前 24 比特定义了子网的地址,因此该子网下的几个主机地址可能会为:233.1.1.1、233.1.1.2、233.1.1.3 等等
DHCP服务
主机和路由器的 IP 地址可以是由系统管理员手动配置,但更多的是通过动态主机协议(DHCP)来完成的
在使用 DHCP 的情况下,一台新的主机获取自己的 IP 地址需要经过 4 个步骤:
DHCP 服务器发现:可以通过 DHCP 发现报文来完成。客户在 UDP 分组中以 255.255.255.255 广播地址向端口 67 发送 DHCP 发现报文;
DHCP 服务器提供:当 DHCP 服务器收到一个 DHCP 发现报文时,用 DHCP 提供报文想客户做出响应。该报文使用 255.255.255.255 广播地址向子网的所有接口进行广播;
DHCP 请求:客户从一个或多个服务器响应中选择一个,并想选中的服务器提供 DHCP 请求报文;
DHCP ACK:接收到请求的服务器用 DHCO ACK 报文对 DHCP 请求报文进行响应;
当客户收到 DHCP ACK 后,交互变完成了,客户就能够在租用期内使用 DHCP 分配的 IP 地址了
参考:
1、https://dengisacoder.github.io/2019/06/23/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/06.%20%E7%BD%91%E7%BB%9C%E5%B1%82-%E6%95%B0%E6%8D%AE%E5%B9%B3%E9%9D%A2/
2、https://github.com/RuimingLi/reading/blob/master/ComputerNetworking/Chapter4.md