计网第四章——网络层

网络层

两个重要作用

  • 转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适合的输出链路;作用范围是单一路由器;
  • 路由选择:当分组从发送方流向接受方时,决定这些分组所采用的路由或路径;指网络范围的过程,已决定分组从源到目的地所采取的端到端路径。
    • 集中式:算法在某个中心场点执行,并向每台路由器下载路由选择信息;
    • 分布式:使用运行在每台路由器上的分布式路由选择算法的一部分。

插播一个概念,分组交换机是指一台通用分组交换机内,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。

  • 链路层交换机:基于链路层字段中的值做转发决定;
  • 路由器:基于网络层字段中的值做转发决定。

网络层的连接

网络层和运输层类似,也能在两台主机之间提供无连接或连接服务。连接的话和运输层一样,从源与目的的握手开始,无连接的话没有握手预备步骤。

  • 在网络层提供连接服务的计算机网络称为虚电路(virtual-circuit VC)网络,提供无连接服务的计算机网络称为数据报网络
  • 运输层的有连接服务的是 运输层->应用层 提供的进程到进程的服务,网络层的有无连接的是 网络层->运输层 提供的主机到主机的服务;
  • 运输层的面向连接的服务是在位于网络边缘的端系统中实现的,但网络层的服务除了在端系统中,还在位于网络核心的路由器中实现。

虚电路

一条虚电路由三个部分组成:

  • 源和目的主机之间的路径(一系列链路和路由器);

  • VC(virtual circuit)号——沿着该路径的每段链路的号码;

  • 该路径上每台路由器中的转发表。

属于一条虚电路的分组将在它的首部携带一个VC号。一条虚电路在每条链路上可能具有不同VC号,故每台中间路由器必须用一个新的VC号替代每个传输分组的VC 号。该新的VC号从转发表获得。

每台路由器的转发表包括了VC号的转换【入接口,入VC号,出接口,出VC号】。无论何时跨越一台路由器创建一条虚电路,转发表就增加一个新表项。无论何时删除一条虚电路,沿着该路径每个表中的相应项将被删除(路由器必须为进行中的连接维持连接状态信息)。

一个分组沿着其路由在每条链路上不简单的保持相同的VC号的原因:

  • 逐链路代替VC号减少了在分组首部中VC字段的长度;

  • 通过允许沿着该虚电路路径的每条链路有不同的VC号,大大简化了虚电路的建立。若沿着某路径的所有链路要求一个共同的VC号,路由器不得不交换并处理相当大的报文以约定一个共同的VC号用于一次连接。

虚电路的三个阶段(建立、数据传输、拆除)

  • 虚电路建立:
    • 在建立阶段,发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路;
    • 网络层决定发送方和接收方之间的路径,即该虚电路的所有分组要通过的一系列链路和路由器;
    • 网络层也为沿着该路径的每条链路决定VC号
    • 最后,网络层在沿着路径的每台路由器的转发表中增加一个表项
  • 数据传送;
  • 虚电路拆除:当发送方(或接收方)通知网络层它希望终止该虚电路时,就启动该阶段。网络层通常将通知网络另一侧的端系统结束呼叫,并更新路径上每台路由器中的转发表以表明该虚电路已不存在

运输层连接建立和网络层连接建立区别

  • 运输层的连接建立仅涉及两个端系统,两个端系统独自决定运输层连接的参数(初始序号和流量控制窗口长度),端系统知道该运输层连接,但网络中路由器对这些完全不知情
  • 虚电路网络层,沿着两个端系统之间的路径上的路由器都要参与虚电路的建立,且每台路由器都完全知道经过它的所有虚电路;
  • 端系统向网络发送指示虚电路启动与终止的报文,以及路由器之间传递的用于建立虚电路(即修改路由器表中的连接状态)的报文,被称为信令报文,用来交换这些报文的协议称为信令协议

数据报网络

  • 端系统每要发送一个分组,就为该分组加上目的端系统的地址,然后将该分组推进网络;
  • 数据报网路中不维护连接状态信息,但有转发状态信息;
  • 每个路由器使用一个分组的目的地址来转发该分组。路由器匹配目的地址时,使用最长前缀匹配规则;
  • 转发表大概每1~5分钟由路由选择算法更新一次;

路由器工作原理

路由器由四个部分组成——输入端口、交换结构、输出端口、路由选择处理器。

输入端口

  • 输入端口的数据既可能来源于物理层(收到的数据)、也可能来源于链路层(要发送的数据),因此其既要能实现物理层的功能也要能实现数据链路层的功能;
  • 使用转发表来查找输出端口;
    • 转发表由路由选择处理器(集中使用路由选择算法)计算和更新,但转发表的副本会经过独立总线复制到每个输入端口的线路卡;
    • 在每个输入端口都有了副本后,就能自己做出选择,无需调用中央路由选择处理器,从而避免了集中式处理的瓶颈;
  • 有了转发表后,查找的必须要在纳秒级执行,所以要使用硬件技术和超出简单线性搜索的技术(到达速度通常会很快,在查找上要尽可能的快);
  • 确定好输出端口后,该分组就能发送进入交换结构,但若当前来自其他输入端口的分组正在使用交换结构,则会发生阻塞并等待稍后被调度(这只是一种阻塞的原因)。

交换结构

交换结构位于一台路由器的核心步为,实际的从一个输入端口交换到一个输出端口中。

经内存交换

  • 最简单、最早的路由器中,输入端口与输出端口之间的交换是在路由选择处理器(CPU)的直接控制下完成的,类似于传统操作系统的IO操作;
  • 当一个分组到达输入端口后,该端口会先通过中断方式向路由选择处理器发出信号,于是该分组从输入端口处被复制到处理器内存中;
  • 路由选择处理器则从其首部中提取出目的地址,在转发表中找出适当的输出端口 并将该分组复制到输出端口的缓存中;
  • 若内存带宽每秒可写/读出B个分组,则总的转发量小于B/2,且不能同时转发两个分组。

经总线交换

  • 通过一根共享总线直接传送到输出端口,不需要路由选择处理器的干预;
  • 实现方法:让输入端口为分组预先计划一个交换机内部标签(首部)来指示输出端口,接着让分组在总线上传送;该分组能够由所有输出端口收到,但只有与该标签匹配的输出端口才保存该分组
  • 若多个分组同时到达路由器且位于不同的输出端口,除了一个分组外其余都得等待,因为一次只有一个分组能够跨域总线。

经互联网络交换(纵横式)

  • 由2N条总线组成,连接N个输入端口与N个输出端口;
  • 假设分组从端口X需要转发到端口Y,交换机控制器闭合总线 X和Y 交叉步为的交叉点,然后分组就可以在总线上传送,且仅由Y端口接收;
  • 若同时有两个输出端口不同的分组到达路由器,则可以同时进行传送,因为其是在不同的总线上进行传送;但不同输入端口到达同一个输出端口,则需要进行等待。

输出端口

主要作用有,选择和取出排队的分组进行传输,执行所需的链路层和物理层的传输功能。

何时出现排队

在输入和输出端口都有可能发生排队。

  • 假定输入线路速度与输出线路速度都是 Rline,交换结构传送速度 Rswitch为从输入端口到输出端口能够移动分组的速率,若 Rswitch比Rline快N倍,则输入端口的排队将微不足道,输出端口排队的分组数量将会增长得很快;

  • 路由器通常会有缓存,能够在一定程度上防止丢包,缓存数量B应当为 平均往返时延RTT * 链路容量C。但最新的研究表明,当有大量分组(N)流过一条链路时,缓存所需数量为 B=RTT * C / 根号N;

  • 输出端口有排队现象的话,必然要有一个分组调度程序来在这些排队的分组中选出一个来发送,如 先来先服务FCFS、加权公平排队WFQ;

  • 若没有足够的内存来缓存一个分组,该分组就可能被简单的丢弃或删除一个或多个已经排队的分组来为新到来的分组服务;

  • 主动队列管理算法(AQM)——在某些情况下,在缓存被填满前便丢弃一个分组 以便向发送方提供一个拥塞信号;

  • 随机早期检测算法(RED)——为输出队列维护一个加权平均值;

    • 若平均队列长度小于最小阈值min,则分组被接纳进队列;
    • 若大于最大阈值max,则分组被标记或丢弃;
    • 若在[min, max]之间,则以一定概率被接纳或丢弃。
  • 若交换结构不能非常及时的让所有分组无时延的通过它传送,则输入端口也会发生排队:

    • 在纵横式交换机中,若输出端口不同则可以被并行传递,但输出端口相同则只有一个能够被传送,其余被阻塞;
    • 线路前部阻塞(HOL)——如下图,左边两个输入端口最前端的分组都要被传送到同一个输出端口,因此下面的输入端口发生阻塞,则下面的输入端口后面的分组也要发生阻塞。

路由选择转发和控制平面

路由控制平面

控制平面指系统中用来传送指令、计算表项的部分。诸如协议报文转发、协议表项计算、维护等都属于控制平面的范畴。例如在路由系统中,负责路由协议学习、路由表项维护的进程就属于控制平面。

路由转发平面

转发平面指系统中用来进行数据报文的封装、转发的部分。诸如数据报文的接收、解封装、封装、转发等都属于转发平面的范畴。例如系统接收到IP报文后,需要进行解封装,查路由表,从出接口转发等工作,系统中负责以上行为的进程则属于转发平面。

网络协议

网络层主要有三个组件:IP协议、路由选择部分(决定了数据报从源到目的地所流经的路径)、报告数据报中的差错和对某些网络层信息请求进行响应的设施

数据报格式

IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

  1. 版本:4b,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4。
  2. 首部长度:4b,由于IPv4数据报可包含一些可变数量的选项,故需要用4b来确定IP数据报中数据部分实际从哪里开始。大多数IP数据报都不包含选项,所以IP数据报一般具有20字节首部。(以4字节为单位,如 20 字节首部 首部长度字段值就为5)
  3. 区分服务:8b,区分不同类型的IP数据报,如 实时数据报(如ip电话应用) 和非实时流量 (如FTP).
  4. 数据报长度:16b,首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。
  5. 标识、标志、片偏移:用于IP分片。
  6. 寿命(TTL):8b。路由器在转发数据报之前(每当数据报由一台路由器处理时),先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。
  7. 协议:8b。该字段仅在IP数据报到达其最终目的地才会有用,指示了IP数据报的数据部分应交给哪个特定的运输层协议(6-TCP,17——UDP),类似于运输层报文段中端口字段所起的作用。
  8. 首部校验和:16b,用于帮助路由器检测收到的IP数据报中的比特错误,检测到差错则简单丢弃。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。
    • ip层只对IP数据报首部计算了校验和,而TCP/UDP检验和是对整个TCP/UDP报文段进行的。
  9. 源、目的IP地址
  10. 可选字段:该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。
    • 一般不用,可节约开销。
  11. 数据(有效载荷):长度不固定。

IP数据报分片

  • 一个链路层帧能承载的最大数据量叫做 最大传送单元(MTU)
  • 一个运输层报文段的最大数据量叫做 最大报文段长度(MSS)

路由器从某条链路收到一个IP数据报时,会通过检查转发表确定出链路,若出链路的MTU比该数据报的长度要小,则必须要进行分片(一次传送不完)。所以每个数据报里必须要由能够标识该数据报的分片还是整个,若是分片的话是位于哪个位置的分片——标识,标志和字偏移 字段。

在目的地,数据报的有效载荷仅当在IP层已完全重构为初始IP数据报时,才会被传递给目的地运输层。若出现分片丢失,则不完整的数据报将会被丢弃。

  • 标识:16b,IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。
  • 标志:3b。
    • 第一位未使用,其值为 0。
    • 第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。
    • 第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。
  • 字偏移:13b,当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。(8字节是为了数据对齐)。

子网划分与路由聚合

参考本人的另一篇文章:

子网划分和路由聚合

动态主机配置协议DHCP

DHCP简介

DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

DHCP使用UDP协议工作,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务。

DHCP的实现大概分为以下几个部分:

类似于TCP握手阶段的部分,也就是完整分配IP地址的流程:

  • DHCP Discover(广播):DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置;
  • DHCP Offer(广播,单播):DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复;
  • DHCP Request(广播,单播):DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送单播的Request请求报文以请求续延租约;
  • DHCP ACK(广播,单播):DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。

另外还有四个过程为:

  • DHCP NAK(广播,单播):如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址,这时候客户端必须重新发送discover来获取IP地址;
  • DHCP Release(单播):当DHCP客户端不再需要使用分配IP地址时,就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址;
  • DHCP Decline(单播):DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址;
  • DHCP Inform(单播):DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。

NAT技术

参考本人的另一篇文章:

NAT技术(公网、私网IP)

ICMP 因特网控制报文协议

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

  • ICMP被主机和路由器用来彼此沟通网络层的消息,最典型的用途是差错报告;
  • ICMP是作为IP有效载荷承载的,就像TCP和UDP报文段作为IP有效载荷被承载那样/

路由选择算法

参考本人的另一篇文章:

路由选择协议(RIP、OSPF、BGP)

posted @ 2021-05-19 09:47  TRY0929  阅读(364)  评论(0编辑  收藏  举报