计算机网络 Vol4 | 网络层协议

在应用层我们可以解释数据传输的目的、在运输层分析可以看出两个主机进程之间逻辑通信、在本次的网络层将涉及主机与主机之间的通信服务是如何实现的。由于网络层的复杂性,其可以分为数据层面和控制层面。

0x01 运输层overview

假设从H1向H2转送信息

H1中的网络层取得来自于H1运输层的报文段,将每个报文段封装成一个数据报,然后向相邻路由器R1发送数据, 在网络中经过多个路由器的转发和控制,到达接收方的路由器;

在网络的过程中每台路由器的功能是从输入链路向输出链路的转变;控制层面是协调本地的路由器转发动作,然后整个过程的数据报沿着origin和end主机之间的路由器路径进行主机之间端到端传送。

在接收方主机H2收到来自相邻路由器的R2的数据报,提取出运输层的数据段,并将其上交给H2的运输层,在传递给应用层

img

添加图片注释,不超过 140 字(可选)

转发(forwarding):指的将分组从一个输入链路接口转移到适当的输出链路接口的路由本地工作

路由选择(routing):确定分组从origin到end次的网络范围处理过程

转发表(forwarding table):路由器检查到达分组首部的一个或多个字段值,进而实现这些首部值在其转发表中索引,通过这种方法来转发分组

转发表制定的方法??

  1. 传统方法,路由器中物理存在的所有转发表的内容是由人类网络操作员直接配置的
  2. SDN方法,远程控制器计算和分发转发表来供每台路由器选择;这个需要设计在具有高可靠性和冗余性的远程数据中心,由IDP或者第三方管理。此时路由器和远程控制器之间的通信通过软件定义网络(software defined networking,SDN)来控制

0x02 运输层分析

我们可以用开阔的视野来专注于我们引入的新东西并考虑网络层可能提供的不同类型的服务;在这样一个复杂的情况中可能存在的问题包括:

  1. 运输层如何将多个分组交付给目的地?
  2. 运输层之后是否可以保持顺序?
  3. 发送两个分组和接收分组的时间间隔相同吗?
  4. 网络层如何提供拥塞的信息给运输层?
  5. 在发送主机和接收主机之间连接运输层通道的抽象特性是什么?
  6. ===

这些答案都是对网络层提供的服务模型进行描述所决定。网络服务模型(network service model)定义数据分组在分送与接收端系统之间端到端的运输特性

我们首先考虑网络层所能提供可能的服务:

  1. 确保交付,该服务确保分组将最终到达目的地
  2. 时延上界,在特定的主机与主机之间的最大延迟
  3. 有序分组交付,确保分组按照发送顺序到达目的地
  4. 确保最小带宽,模仿发送和接收按照特定速率传输链路
  5. 安全性,网络层能够在源加密所有数据报,并在目的地解密这些分组
  6. 以及一些其他的方式

但是!因特网的网络层只提供一种服务,尽力而为服务(best- effort service);其他的网络体系结构定义和实现了超过因特网尽力而为服务的服务模型,例如ATM网络体系实现了确保顺序恶化时间延迟、有边界时延迟的确保足校带宽、以及一些继承服务体系结构提供端到端的时延保证。但是因特网这种尽力而为的服务模型已经被证明足够好。

后面我们将讨论:

  • 路由器内部硬件操作,包括输入和输出分组、内部交换机制以及分组排队和调度
  • 传统的ip转发,其中分组基于它们的目的IP地址转发到输出端口,将学习到IP寻址

以及更近一步的一般转发,基于大量首部值来转发到输出端口

转发和交换两个术语;约定

  • 分组交换机:指的是一台通用分组交换,根据分组首部字段的值,从输入链路转移到输出分组
  • 链路层交换机:根据链路帧中的字段值做出转发决定
  • 路由器(router):其他的分组交换机称为路由器,基于网络层的数据报中的首部字段值做出转发决定

0x03 路由器工作原理

  1. 输入端口(input port)(硬件)
  2. 执行进入 物理链路的物理层功能
  3. 链路远端的数据链路层交互来执行数据链路层功能
  4. 输入端口需要执行查找功能
  5. 对于控制分组从输入端口转发到路由选择处理器
  6. 交换结构(switch)(硬件)
  7. 将路由器的输入端口连接到输出端口
  8. 网络路由器内部网络
  9. 输出端口(output port)(硬件)
  10. 存储从交换结构接收的分组,并执行必要的链路层和物理层功能
  11. 路由选择处理器(router select process)
  12. 传统控制,执行路由选择协议、维护路由选择表与关联链路状态信息
  13. SDN控制,与远程控制器通信、输入输出端口安装表项

为什么路由器需要使用硬件实现?比如10Gpbs和64字节为单位的IP数据报,其输入端口在另一个数据报到达之间只有51.2ns来处理数据报,如果N各端口结合在一块线路卡上,数据处理速率必须以N倍速率来运行,远远超过软件实现的速率;数据层面以ms或者s的方面运行,执行包括路由选择协议、上下线路响应、远程控制通信和执行管理功能

在深入讨论路由器内部细节之前,我们需要明确路由器处理需要什么信息?

  1. 有目的地转发
  2. 通用转发

3.1 输入端口处理和基于目的地转发

img

image-20220628112516078

  1. 线路端接
  2. 数据链路处理(协议、拆封)
  3. 查找、转发、排队
  4. 交换结构

首先看出一个最基本的例子,路由器的输入端口分为四条链路,我们不必对路由器的映射包括40亿可能存在的地址;我们可以设置不同的匹配原则来进行交换,但是由于IP地址编码的存在,我们需要使用最大前缀匹配规则(longest prefix matching rule)来进行匹配

在转发表确定的此技术,查找是简单的,也就是实现硬件逻辑下的最大前缀IP,但是在Gpbs速率下,这种查找必须在ns执行,因此必须要用硬件执行查找、还需要对大型转发表使用超出简单线性搜索技术,硬件常时间DRAM、SRAM、TCAM等

确定分组的输出端口,该分组能够发送进入交换结构,如果其他分组正在使用,我们在进入交换结构时候暂时阻塞,因此一个被阻塞的分组必须在输入端口出排队,并等待稍后被及时调度来通过交换结构

  1. 必须出现物理层和链路层处理
  2. 必须检查分组的版本号、检验和以及寿命字段,并且重写这两个字段
  3. 必须更新用户网络管理的计数器

匹配+动作

3.2 交换

img

image-20220628112544656

三种交换技术

  1. 内存交换
  2. 总线交换
  3. 互联网络交换

3.3 输出端口处理

img

image-20220628112552623

3.4 排队分析

在输入端口和输出端口都会出现排队的现象,当路由器的缓存空间耗尽的时候就会出现丢包的现象

那么在什么情况下(输入速率、N和交换速率)在多少的时候会出现拥堵?如何缓解拥堵现象?

  1. 输入排队:线路前部阻塞(HOL head of the line)
  2. 输出排队,弃尾(drop tail)、以及提供主动队列管理(active queue management,AQM算法)、随机早期检测(Random Early Detection,RED)

3.5 分组调度

排队的分组如何经输出链路传输的问题,这里存在一些基本的规则

  1. 先进先出
  2. 优先权排序 priority queuing
  3. 循环排序规则 round robin queueing discipline

0x04 网络层协议 – 网际协议(IPv4、IPv6)

4.1 IPv4数据报格式

img

image-20220628112708344

关键字段分析

  1. 版本号
  2. 首部长度
  3. 服务类型TOS
  4. 数据报长度,因为该字节为16bit,所以IP数据报理论长度为65536;但是一般很少超过1500
  5. 标识、标志、片偏移,与IP分区有关,但是IPv6不允许分组
  6. 寿命TTL,time to live
  7. 协议,比如6标识TCP、17表示UDP;协议号类似运输层报文段中端口号字段起到的作用
  8. 首部检验和
  9. 源和目标IP地址
  10. 选项,意味着IP首部允许被拓展
  11. 数据,有效载荷,处理TCP、UDP还包括ICMP等协议

4.2 IPv4数据报切片

网络层下面的链路层的不同,其承载网络分组的长度也不同,有的协议能承载大数据报、有的协议只能承载小的分组。比如以太网不能超过1500字节、某些广域网不能超过576字节,这个被称为最大传送单元(Maximum Transmission Unit,MTU)

为了保证在所以的链路中都可以传输,我们需要将IP数据报中的数据分片成多个较小的IP数据报,用单独的链路层帧(Frame)来封装这些较小的IP数据报,然后通过输出链路发送这些帧,每个较小的数据报称为片(Fragment)

4.3 IPv4编址

在讨论IP编址之前,我们简要了解主机与路由器接入网络的方法,一台主机通常只有一条链路连接到网络,当主机中的IP想发送一个数据报,他就需要在该链路发送,这件称为接口(interface);路由器由于是网络中的设置,因此具有多个接口;同时因为主机和路由器都可以发送和接收IP数据报,因此都需要拥有自己的iP地址,从技术上说,IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联

IPv4采用点分十进制记法,比如192.168.0.1

在全球因特网中每台主机和路由器上的每个接口都必须有全球唯一的IP地址(在NAT后面的接口除外),这些地址不能随意自由选择

img

image-20220628112808159

互联这主机接口和路由器接口形成一个子网(subnet),IP编址为这个子网分配一个地址,223.1.1.0/24.称为子网掩码(network mask)

因特网的地址分配策略为无类别域间路由选择(Classless interDomain routing,CIDR)将子网寻址概念化为a.b.c.d/x 构成IP地址的网络部分;网络中剩余的32-x比特被认为是用于区分该组织内部设置的,其中的额所有的设备具有相同的前缀

在CIDR被采用之前,IP地址的网络部分为选址为8、16、24比特,称为分类编址(classful addressing),称为A、B和C类网络,但是C类网络只能使用254台、B类可以65534太多了

特殊的IP地址,255.255.255.255为IP广播地址,该数据交付给同一个网络的所有主机

在详学习IP编址,我们需要知道主机或者子网最初是如何得到地址的

第一步:获取地址,可以从ISP获得、ISP从因特网名字和编号分配机构(Internet corporation for assigned Names and Numbers,ICANN)管理,其还管理DNS服务器

第二部,主机与路由器接口分配IP地址,系统管理员通常手工配置IP地址,主机地址也可以手动配置但是通常使用动态主机配置协议(Dynamic Host configuration,DHCP),允许主机自动获取一个IP地址,允许主机每次和网络连接的时候都会获得一个相同的IP地址或者临时的IP地址

4.4 地址转换与通信过程

对于家庭网络等专用网络(private network)和具有专用地址的地域(realm with private address),其中的IP地址只有在专用网络中才有作用;但是在专用网中至少需要有一个公网IP地址的设备,此时这个路由器是如何获取自己的iP地址的?使用的是ISP提供的DHCP服务

之间通信的过程是这样的:

专用网10.0.01:3345想和公网IP的128.119.40.186:80进行通信;专用网中的公网IP路由器为138.76.29.7,这个时候可以将专用网和公网IP路由器新增一个映射,10.0.0.1:3345和128.76.29.7:5001(5001任意),然后数据通过128.76.29.7:5001和128.119.40.186:80进行通信,路由器负责两者之间的转换,同时路由的NAT协议支持超过60000个并行连接

NAT协议的批评者指出:

  1. 路由器或者设备是用来进行进程寻址、而不是主机寻址的,这种违规用法在运行家庭网络中的服务器会出现问题;这里需要NAT穿越(traversal)或者通用即插即用(Universal Plug and play,UPnP协议)
  2. 违反了主机之间应当直接对话的原则

4.5 IPv6

img

image-20220628112904862

0x05 控制层面

其中算法过于硬核,这里不做介绍,可以看出转发表的制作分为两种

  1. 预先物理设置
  2. 由SDN来软件控制

软件控制面临集中还是分散的区别、面临静态路由和动态路由、面临负载敏感或迟钝的问题

0x06 实际应用和感悟

6.1 一个实际的例子

img

image-20220628113107112

6.2 一些实际的应用

ssh连接远程主机

搭建自己的webdav云盘

开放自己的MC服务器

利用腾讯云服务器实现内网穿透


计算机网络 Vol4 | 网络层协议
https://blog.tjdata.site/posts/d93fb6.html
作者
chenlongxu
发布于
2024年4月29日
许可协议