网络层

概述

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

职责

  • 使用分层寻址方案,方便逐步细化目的地地址
  • 细分网络并控制流量
  • 减少交通堵塞,基于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

不同设备