网络层

概述

  • 对于不同帧使用同一方案进行处理
  • 希望通过路由选择算法进行路径选择和转发,对第二层是透明的
  • 只能避免拥塞,不能流量控制

职责

  • 使用分层寻址方案,方便逐步细化目的地地址
  • 细分网络并控制流量
  • 减少交通堵塞,基于IP做分段和传达,用来减少拥塞
  • 与其他网络交谈
  • 对于不同的数据链路层的帧,第三层基于IP协议,来实现跨介质的逻辑理解和互通
  • 负责进行连通和传达,数据可靠性由终端设备(第四层及以上)来进行保证

    路由器

    • 互连网段或网络(分割网段)
    • 根据IP地址做出合理的决定
    • 根据路由表确定最佳路径
    • 将数据报从入站端口切换到出站端口
  1. 如果A网段的设备向路由器发送了一个B网段的广播地址,那么路由器会进行转发
  2. 如果A网段的设备发送的是本网段的广播地址,那么路由器不会进行转发(广播域划分)

IP协议

网际协议IP是TCP/IP体系中两个最主要的协议之一,配套使用的还有三个协议:

  • 地址解析协议ARP(Address Resolution Protocol)
  • 网际控制报文协议ICMP(Internet Control Message Protocol)
  • 网际组管理协议IGMP(Internet Group Management Protocol)

IP数据报格式

数据格式常以32位(4字节)为单位来描述

IP数据报格式_片偏移怎么计算_小皮子摘星星的博客-CSDN博客

  • 首部的前一部分是固定长度,共20字节
  • 首部固定部分后面是一些可选字段,长度可变

首部固定部分中的各字段:

  1. 版本:IP协议的版本,共4位,广泛使用的版本是IPv4

  2. 首部长度:首部长度的表示单位是32位字(4字节),可表示的最大十进制数值是15,共4位

    • 由于首部的固定长度是20字节,所以首部长度字段最小值为5,最大值为60字节($15 \times 4 = 60$)
    • IP分组的首部长度不是4的字节时,必须利用最后的填充字段加以填充,因此数据部分永远在4字节的整数倍开始
    • 最常用的是20字节,即首部长度为0101
  3. 区分服务:在旧标准中叫做服务类型,共8位,一般情况不使用这个字段

  4. 总长度:首部和数据部分的长度和,单位为字节,共16位

    • 数据链路层设置了最大传输单元MTU,因此数据报的总长度不能超过规定的MTU值,不然会将数据报进行分片处理
  5. 标识(identification):IP软件在存储器中维持一个计数器,每产生一个数据报计数器+1,并将此值赋给标识字段,当产生分片时就将标识字段的值复制给每一个分片,便于重装为完整的数据报,共16位

  6. 标志(flag):共3位,但只有两位有意义

    • 最低位为MF(More Fragment),MF = 1表示后面还有分片,MF = 0表示这时若干数据报片的最后一个
    • 中间一位是DF(Don’t Fragment),表示不能分片,只有DF = 0才允许分片
  7. 片偏移:指出分片在原分组的相对位置(相对于起点在何处开始),偏移单位为8字节,共13位

  8. 生存时间:数据报在网络中的寿命,防止无法交付的数据报无限制地在互联网中兜圈子,现在功能为跳数限制(至多可经过几个路由器),共8位

  9. 协议:指出数据报携带的数据是使用何种协议,共8位

  1. 首部校验和: 这个字段只检验数据报的首部,共16位

  2. 源地址:共32位

  3. 目的地址:共32位

首部可变部分:
可变部分就是一个选项字段,选项字段用来支持排错、测量以及安全等措施,内容很丰富,最后用全0的填充字段补齐成为4字节的整数倍

IP地址

IP地址就是给互联网上的每一台主机(或路由器)的每一个端口分配一个在全世界范围内唯一的32位标识符

IP地址分为若干类,但都由两个固定长度的字段组成,分别是网络号和主机号
如何对IP地址进行子网划分?

  • D类地址为组播/多播(一对多)
  • 通常写法是点分十进制(每8位二进制加一个点)

A类:0 ~127
B类:128~191
C类:192~223
D类:224~239
E类:240~255

A类网络号只有7位可指派,但是一般不能指派全0和全1

  • 全0表示本网络
  • 全1用于环回测试(根本不是一个网络地址)

B类网络号只有14位可指派,但是网络地址128.0.0.0是不指派的

  • B类开始IP地址是128.0.0.1

C类网络号只有21位可指派,但是网络地址192.0.0.0是不指派的

  • C类开始IP地址是192.0.0.1

主机号一般不能取全0,也不能取全1

  • 全0用来标识网段地址
  • 全1用来表示网段的广播地址

一般不使用特殊IP地址 的图像结果

  • 用交换机或网桥连接起来的若干个局域网仍属于一个网络
  • IP地址是一种逻辑地址

划分子网和构造超网

早期IP地址的设计不够合理,主要体现在:

  • IP地址空间利用率有时很低
  • 两级IP地址不够灵活

划分子网(subnetting):在IP地址中增加一个子网号字段,也叫做子网寻址或者子网路由选择

  • 从主机号借用若干位作为子网号,从而变成三级IP地址:网络号、子网号、主机号
  • 减小了广播域,提高网络利用率

子网可以借用的位数:

  • 最小位数是2:当只借用1位时就只能表示本网络和广播
  • 最大位数可以是保留至少2位主机号的任何数字
    • A类20位
    • B类14位
    • C类6位
  • 借用4位是最高效率的

32位IP地址本身以及数据报首部都没有包含任何有关子网划分的信息,因此我们可以使用子网掩码(subnet mask)来确认数据报属于哪个子网

  • 把网络号和子网号全赋1,主机号全赋0
    计算机网络子网划分相关知识点 | 张甲博客

子网掩码和IP地址逐位相与,就可以得到子网的网络地址
IP2——IP地址和子网划分学习笔记之《子网掩码详解》 - 白灰 - 博客园

  • 不管有没有划分子网,与运算后都能得出网络地址

默认子网掩码:

  • A类:255.0.0.0
  • B类:255.255.0.0
  • C类:255.255.255.0

子网数 = $2 ^ n$ - 2

  • 子网号有n位
  • 除去全0和全1(实际上在CIDR协议中已经可以使用这两种情况了)

无分类编制CIDR(构建超网):
在一个划分子网的网络中可同时使用几个不同的子网掩码,使用可变子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源利用率。在VLSM的基础上又进一步研究出无分类编制路由选择CIDR(Classless Inter-Domain Routing)

  1. 网络前缀

    CIDR消除了传统的A类、B类、C类地址以及划分子网的概念,而是把互联网地址分为网络前缀和主机号

    • 使用斜计线法(CIDR记法),即在IP地址后面加上斜线“\”,然后写上网络前缀所占的位数
    • 把网络前缀相同的连续IP地址组成一个“CIDR地址块”,我们只要知道CIDR地址块中任何一个地址,就可以知道起始地址和最大地址以及地址数

      为了更方便的进行路由选择,CIDR使用32位的地址掩码(address mask),也可以继续称作子网掩码

    • 网络前缀赋为1,主机号赋为0
    • 分配到地址块后仍可以划分子网,但是借用的位应当加入到网络前缀

      路由表利用CIDR地址块查找目的网络,这种地址的聚合常称为路由聚合(route aggregation),也称为构成超网

      CIDR记法有多种形式:

    • 地址块10.0.0.0/10可以简写为10/10,也就是把点分十进制中低位连续的0省略
    • 在网络前缀的后面加个*,例如00001010 00*,意思是*之前是网络前缀,*之后是主机号,可以是任意数字

      从表格可以看出,除了最后几行,CIDR地址块都包含了多个C类地址($2^n$倍),这就是构成超网一词的由来划分子网和构造超网之无分类编址 CIDR_ 融合统一通信常见问题

    • 网络前缀越短,包含的地址数越多
  2. 最长前缀匹配(最长匹配/最佳匹配)
    路由表项目和由网络前缀和下一跳地址组成

    • 可能查找路由表时不止一个结果

应该在匹配结果中选择具有最长网络前缀的路由

  1. 利用二叉线索查找路由表
    先找出对应于每一个IP地址的唯一前缀
    • 唯一前缀就是在表中所有IP地址中,该前缀是唯一的

二叉线索查找路由表 的图像结果

路由器

路由器有两个功能:路径选择、分组转发
二叉线索查找路由表 的图像结果

  1. 分组转发

    • 在分类子网划分时,全0代表本机地址,全1代表广播地址
    • 做转发根据的是网段而不是具体的IP
  2. 路径选择
    路由器根据路由规范,选择他当时认为最合适的路径

    • 选择数据包到达目的地的路径中的下一跳

路由器端口:

接口是路由器连接到网络的附件,在IP路由中也可以称为端口

  • 这个IP地址往往被称作这个网络的网关
  • 每个接口必须有一个单独的唯一网络地址
    • 比如S1和S2不能相同
    • 路由器的连接的网段一定要不同·

  1. 路由器端口记录了网段的IP地址(和连接的地方是相同的)
  2. 在计算需要分配的端口总数时,注意路由器的端口也需要算上

IP地址分配:

  1. 静态地址分配(Static addressing)

    • 为每个单独的设备配置一个IP地址
    • 保证不重复
    • 需要知道规范,通过命令行进行分配
  2. 动态地址分配(Dynamic addressing)

    • 反向地址解析RARP(Reverse Address Resolution Protocol):发起请求根据IP地址信息来分配
    • BOOTStrap协议(BOOTP):用于工作栈
    • 动态主机配置协议DHCP(Dtnamic Host Configuration Protocol):IP地址和掩码处理后得到网络地址,保证每个网段中的主机的网段地址一致

地址解析协议ARP

ARP协议通过IP地址解析出MAC地址

  • 在IP层抽象的互联网上只能看到IP数据报
  • 在局域网的链路层只能看见MAC帧

ARP协议在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且动态更新

  • 每台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网各主机和路由的IP地址到硬件地址的映射表(已知)

主机A向本局域网上的主机B发送IP数据报过程:

  1. 先在ARP高速缓存中查看有无主机B的IP地址

    • 如果有就查出硬件地址并写入MAC帧,然后发送
    • 如果无就进行下面步骤
  2. 广播发送ARP请求分组,内容为自身IP地址、自身硬件地址、想知道IP地址为xxx的主机的硬件地址

    • 写入自身信息是便于以后主机B向主机A发送数据报
  3. IP地址一致的主机B收下ARP请求分组,并发送ARP响应分组,内容是自身IP地址、自身硬件地址

    • ARP响应分组是单播
  4. 主机A收到ARP响应分组后就写入ARP高速缓存

主机发送给另一个网络上的另一主机数据报时,应该先找到相应的路由器进行转发,这时需要把路由器的IP地址解析为硬件地址

为了使设备与另一网络上的零一设备通信,必须提供默认网关

  • 默认网关就是路由器连接到源主机所在网段的接口的IP地址

ARP四种典型情况:
网络层(七)地址解析协议ARP_数学家是我理想的博客-CSDN博客

  1. 主机$H_1$发送数据报到同一网络上的另一主机$H_2$。这时$H_1$发送ARP请求分组,找到$H_2$的硬件地址

  2. 主机$H_1$发送数据报到零一网络上的另一主机$H_3$或$H_4$,这时$H_1$发送ARP请求分组,找到路由器$R_1$的硬件地址,剩下的交给$R_1$,即下面的3和4

  3. 路由器$R_1$把数据报转发到与$R_1$相连的网2的主机$H_3$,这时$R_1$发送ARP请求分组,找到$H_3$的硬件地址

  4. $R_1$要把数据报发送到网3上的主机$H_4$,这时$R_4$发送ARP请求分组,找到$R_2$的硬件地址,剩下的交给$R_2$

网络层设备

面向连接的网络服务

在任何发送数据的行为之前,要先建立好连接,协商好参数才会开始传输,所有数据有序传输

  • 网络情况导致数据出现问题,需要接收方进行一定处理来保证数据正确
  • 传输过程要保持连接距离,只有完成传输才能断开连接
  • 传输比较可靠,代价高

无连接的网络服务

不要求发送方和及受访在发送前先建立一个连接,分别对待每一个数据包,系统不需要进行大量的数据保留,不需要很多的缓存

  • 局域网使用比较多,可靠性比较低,不处理报文丢失
  • 少量报文使用无连接可以调高效率(可靠网)

IP就是提供无连接的网络服务

电路交换(Circuit Switched)

电路交换要先建立一个虚电路关系,之后报文走对应的虚电路

  • 所有数据包依次在同一虚拟通道上传播
    • 电路利用效率低
    • 可能是分段建立,可能局部可以复用,但是整体不可以复用
  • 虚电路强于面向连接,传输更可靠,保证传输先后关系

报文交换(Packet Switched

当数据包从源传递到目标时,它们可以:

  1. 切换到其他路径(根据当前的网络情况,进行路由选择)
  2. 乱序到达

将原始数据分为很多子报文,每个子报文自己选择路径进行发送

  • 设备根据各种标准为每个数据包确定路径,某些标准可能因分组而异
  • 大部分无连接网络都是基于报文交换实现的,可以控制网络拥塞
  • 出现问题时只需要重传对应部分的报文

网络协议操作

被动路由协议用于路由器之间,保证路由器之间连通

主动路由用于做各自路由表的生成,路由器彼此交换信息

routed protocol是用来使用路由表的
routing protocol是用来生成路由表的
routing protocol决定routed protocol

  • 存在冗余,A转发给B是由当前网络状况处理
  • ABC之间都是通过帧来今进行计算的

被动可路由协议Routed protocol

路由协议或可路由协议是为网络层提供支持的协议

  • IP是网络层协议,因此它可以通过互联网进行路由(routed)

不可路由协议Non-routable protocol

不可路由协议是不支持第三层的协议,最常见的是NetBEUI

  • 直接根据目的方的地址在局域网中进行生成定位
  • 跨局域网也不支持第三层
  • NetBEUI仅限于在一个网段上运行

routing protocol是主动可路由协议也就是Dynamic routes

被动可路由协议的寻址:

将目的主机和子网掩码进行逻辑与运算得到对应的网段,然后请求路由表可以发现某个端口为目的网段,接着将报文封装转发给对应的主机

  • 路由表存储在内存中

路由协议的分类

  1. 静态路由:
    网络管理员在路由器中手动输入路由信息

    • 用于隐藏部分网络,安全(不进行路由表交换)
    • 测试网络中的特定链接
    • 用于仅在到达目标网络的路径时维护路由表
  2. 动态路由:
    路由器在运行过程中互相学习信息,使用路由协议更新路由信息,如RIP、IGRP、EIGRP、OSPF等,人工维护代价比较大

    • 维护路由表
    • 以路由更新的形式即使分发信息
    • 路由器可以调整以适应不停变化的网络状况
    • 打开后会启动进程,按照不同的协议和网上的不同设备学习信息,然后根据算法生成路由表

主动路由协议Routing protocol也是动态路由

  • 路由协议确定路由协议遵循的到达目的地的路径
  • 用来构建路由表
  • 公平、简单、适应变化

动态路由协议分类

  1. 内部网关协议(Interior Gateway Protocols):

    例如RIP,IGRP,EIGRP,OSPF等,可在自治系统中使用

    • 自治系统是逻辑的划分,而不是物理层次的划分
    • IGP是内部确定的管理规则

      分类:

    1. 距离矢量协议DVP(Distance-Vector Protocols)

      例如RIP、IGRP

      • 从邻居的角度查看网络拓扑(不是全局)
      • 在路由器之间添加距离向量(根据跳数决定和)
      • 经常会定期更新
      • 将路由表副本传递到邻居路由器

        示例:

        • 只知道最少跳数(不知道最佳路径)
        • 定时路由表会相互交换给邻居

        DVP的代表RIP(Routing Information Protocol):

        基于距离矢量的内部网关协议,唯一指标是跳数,选择走跳数最短的路径而非最快的路径,最受欢迎

        • 最大跳数是15
        • 每30秒更新一次(广播),可以修改
        • RIP v2是RIP v1的改进版本,更加常用

        IGRP(Interior Gateway Routing Protocol) 和 EIGRP(Enhanced IGRP):

        基于距离矢量的内部网关协议,指标由带宽、负载、延迟、可靠性组成,EIGRP是IGRP的高级版本,它是混合路由协议(不全根据跳数计算)

        • IGRP最大跳数为255
        • 每90秒更新一次
    2. 链路状态协议LSP(Link State Protocols)

      例如OSPF

      • 获取整个网络拓扑的通用视图(全局)
      • 计算到其他路由器的最短路径
      • 事件触发的更新
      • 将链路状态路由更新传递给其他路由器

        LSP操作过程:

      1. 相互交换彼此学到对应的Topological Database(全局)
      2. 使用SPF算法,以自己为根,通过最短路径优先算法,生成以自己为根的树
      3. 根据这一个树再生成路由表,逻辑是树的逻辑

        示例:

        • 彼此交换连接状态
        • LSP不是定时进行交换的,而是初始的时候进行交换,稳定之后根据事件触发的时候才会更新数据
          • 更新后发送给所有路由器,需要将Database发送给所有路由器
          • 根据Database更新自己的树,然后再次生成路由表
        • 从所有可达的道路上找到代价最小的路径

        LSP的代表OSPF(Open Shortest Path First)

        • 最短路径优先协议
        • 本科阶段指标只考虑带宽
  2. 外部网关协议(Exterior Gateway Protocols):例如EGP、BGP,用于自治系统之间路由数据报

    • 通过BGP,让其他自治系统了解自己的自治系统中的网段(不同系统)

因特网控制报文协议ICMP

ICMP为了提高IP数据报交付成功的机会,允许主机或路由器报告差错情况和提供有关异常情况的报告,一般路由器在丢弃报文的时候,都会返回一个ICMP差错报文

  • ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去
  • ICMP只是IP层的协议

ICMP报文格式:

数据字段如下:

  1. 一般会把原始的 IP 数据报文的数据报首部 + 8 字节(数据的,可能会包含端口信息)作为 ICMP 的数据部分
  2. ICMP 的前 8 个字节的是确定的(前 4 个字节是类型,校验位,后面四个字节是确定的)
  3. 然后添加一个首部作为 IP 数据报进行发送。

两种ICMP报文:

  • 查询报文:不是很多
  • 差错报告报文:比较多

目的站不可到达

  1. 网络不可到达(net unreachable)
  2. 主机不可到达(host unreachable)
  3. 协议不可到达(protocol unreachable)
  4. 端口不可到达(port unreachable)
  5. 源路由选择不能完成(source route failed)
  6. 目的网络不可知(unknown destination network)
  7. 目的主机不可知(unknown destination host)
  8. 不可知是完全不可以解析,不可达是可以解析但是不可以到达

下面几种情况不应该发送ICMP差错报文:

  1. 对ICMP差错报文不再发送
  2. 对第一个分片的数据报片的所有后续数据报片
  3. 对具有多播地址的数据报
  4. 对具有特殊地址的数据报

PING(Packet InterNet Groper)

  1. PING 用来测试两个主机之间的连通性,一般是用来检查局域网的连通性:PING 不通,不仅仅是发送不过去,有可能是应答不回来
  2. PING 使用了ICMP 回送请求与回送回答报文
  3. PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或 UDP

不同设备