【计算机网络】第四章·网络层

🌈个人主页: 十二月的猫-CSDN博客

🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

[1. 前言](#1. 前言)

[2. 网络层](#2. 网络层)

[2.1 章节框架](#2.1 章节框架)

[2.2 网络层有哪些功能](#2.2 网络层有哪些功能)

[2.2.1 网络层数据交换方式](#2.2.1 网络层数据交换方式)

[2.2.1.1 电路交换](#2.2.1.1 电路交换)

[2.2.1.2 报文交换](#2.2.1.2 报文交换)

[2.2.1.3 分组交换](#2.2.1.3 分组交换)

[2.2.2 路由算法及路由协议](#2.2.2 路由算法及路由协议)

[2.2.2.1 静态路由算法(非自适应)(RIP协议)](#2.2.2.1 静态路由算法(非自适应)(RIP协议))

[2.2.2.2 动态路由算法(自适应)(OSPF协议)](#2.2.2.2 动态路由算法(自适应)(OSPF协议))

[2.2.3 IP数据报](#2.2.3 IP数据报)

[2.2.3.1 IP协议](#2.2.3.1 IP协议)

[2.2.3.2 IP数据报格式](#2.2.3.2 IP数据报格式)

[2.2.4 IP数据报分片](#2.2.4 IP数据报分片)

[2.2.5 IPv4协议](#2.2.5 IPv4协议)

[2.2.5.1 IPv4地址概论](#2.2.5.1 IPv4地址概论)

[2.2.5.2 IPv4地址分类](#2.2.5.2 IPv4地址分类)

[2.2.5.3 特殊的IPv4地址](#2.2.5.3 特殊的IPv4地址)

[2.2.6 NAT网络地址转换(私有IP和公有IP/IP地址复用)](#2.2.6 NAT网络地址转换(私有IP和公有IP/IP地址复用))

[2.2.7 子网划分与子网掩码](#2.2.7 子网划分与子网掩码)

[2.2.7.1 子网划分](#2.2.7.1 子网划分)

[2.2.7.2 子网掩码](#2.2.7.2 子网掩码)

[2.2.7.3 分组转发与子网掩码](#2.2.7.3 分组转发与子网掩码)

[2.2.8 CIDR(无分类编址)](#2.2.8 CIDR(无分类编址))

[2.2.9 IPv6 协议](#2.2.9 IPv6 协议)

[2.2.9.1 IPv6地址形式(冒号16进制记法)](#2.2.9.1 IPv6地址形式(冒号16进制记法))

[2.2.9.2 IPv6目的地址类型](#2.2.9.2 IPv6目的地址类型)

[2.3 网络层有哪些通信方式](#2.3 网络层有哪些通信方式)

[2.3.1 ARP协议](#2.3.1 ARP协议)

[2.3.2 DHCP协议(动态主机配置协议)](#2.3.2 DHCP协议(动态主机配置协议))

[2.3.3 ICMP协议(网际控制报文协议)](#2.3.3 ICMP协议(网际控制报文协议))

[2.3.4 RIP协议和距离向量算法(路由选择协议)](#2.3.4 RIP协议和距离向量算法(路由选择协议))

[2.3.4.1 RIP报文结构](#2.3.4.1 RIP报文结构)

[2.3.4.1 距离向量算法](#2.3.4.1 距离向量算法)

[2.3.5 OSPF协议和链路状态算法](#2.3.5 OSPF协议和链路状态算法)

[2.3.5.1 OSPF协议](#2.3.5.1 OSPF协议)

[2.3.5.2 链路状态算法](#2.3.5.2 链路状态算法)

[2.3.6 BGP协议(外部网络协议)](#2.3.6 BGP协议(外部网络协议))

[2.3.7 三种路由协议的对比](#2.3.7 三种路由协议的对比)

[2.3.8 IP组播](#2.3.8 IP组播)

[2.3.8.1 IP组播地址](#2.3.8.1 IP组播地址)

[2.3.8.2 因特网范围组播](#2.3.8.2 因特网范围组播)

IGMP协议

组播路由选择协议

[2.3.9 MAC地址实现组播](#2.3.9 MAC地址实现组播)

[2.3.10 移动IP](#2.3.10 移动IP)

[2.4 网络层的设备](#2.4 网络层的设备)

2.4.1路由表和转发表

[3. 总结](#3. 总结)


1. 前言

今天是【计算机网络】课程考试前一周时间,趁着计算机网络考试,猫猫来进一步梳理计网这门课程的知识,希望也能给阅读本系列文章的友友们提供一些帮助。

本系列分为两个部分:

  1. 全面知识梳理
  2. 特别知识梳理

(全面知识梳理一律加上【第*章】字样,是软件工程所有知识的全面梳理)

(特别知识梳理一律加上 【一篇搞定】字样,仅仅作为特别重要内容的展开延申)

参考书籍🥰:

《计算机网络(第5版)》是2012年清华大学出版社出版的图书,作者是Andrew S. Tanenbaum, David J. Wetherall

十二月的猫猫在这里祝愿大家都能在期末考试中取得好成绩,高分拿拿拿!考试过过过!💯


2. 网络层

数据链路层保证了数据在相邻节点的可靠传输,网络层关注的是如何将源端数据包经过网络上的节点一路送到接收方(主机到主机)。为了实现这个目标,网络层必须知道网络拓补结构,并从中选出适当的路径。本章包含到路由算法、拥塞控制、服务质量、网络互连和 IP 协议。

2.1 章节框架

知识回顾:

2.2 网络层有哪些功能

  • 路由选择(选择最佳转发路径)和分组转发(转发分组)
  • 异构网络互联(不同网络协议、终端等都不同)
  • 拥塞控制(网路量太大,选择丢弃一些数据)

2.2.1 网络层数据交换方式

首先要研究网络层上数据交换的方式,然后我们研究路由选择和分组转发才有意义
**数据交换方式:**研究数据报分组要用哪种交换方式在路由器之间交换,最终实现传输

  • 电路交换:基于物理上电路的
  • 报文交换:基于逻辑上存储转发
  • 分组交换:基于逻辑上存储转发
2.2.1.1 电路交换

电路交换: 专用物理线路,传输结束前始终保持(模仿打电话的情况)

  1. 建立连接
  2. 通信
  3. 释放连接

注意:

  • **不同类型:**不是指终端不同,是指终端内的网络设备不同。
  • **无法纠错:**没有数据存储,所以无法纠错且难以平滑数据量
2.2.1.2 报文交换

报文实例:我们访问百度网页:

主机A:我们的电脑

主机B:百度的服务器

**报文:**报文头、报文内容


**报文交换:**无需通路,采用存储转发方式传输报文。主机AB之间若电路空闲则可以被使用,没有连接限制。

  1. 节点接受并暂存报文,检错
  2. 电路空闲,利用路由信息/路由表找到下一个节点地址并发送

注意:

  • 只适用于数字信号
  • 动态选择线路,因此平滑通信量
  • 可以提供多目标服务
  • 利用存储转发可以实现代码转化和速率匹配
  • 报文长度理论上没有限制,但是实际上节点缓冲区大小会限制报文长度
2.2.1.3 分组交换

**报文交换缺点:**报文长度不确定导致中间节点缓存大小不知道如何设定

**分组交换:**把任意长度数据分成限制长度(128B)的组发送

  • 分组大小一般为128B
  • 接受-存储-分组-发送,接受点将分组重新组装成报文(中间节点也有可能需要分组/组装)

注意:

  • 分组后传输信息更小,因此线路利用率更高,传输时延更少
  • 存储管理更简单
  • 分组转发可以并行,因此可靠性高
  • 目的节点需要重新排序,可能出现失序(不同组选择线路不一样)、丢失(噪音)、重复(可能是节点处理过慢)
  • **虚电路:**逻辑上建立一个连接电路

数据报方式:

数据报的分组交换:

  1. 将报文分组,发给邻节点
  2. 邻节点进行差错检测-路由选择
  3. 所有节点同上操作

注意:

  • 数据链路层的ACK回复确认仍然工作,每一个节点之间都会用ACK实现可靠传输和流量控制。
  • 需要分组号,用来重新排序
  • 拥塞时可能被丢弃分组。打王者如果王者服务器很忙,则你按了按键这个数据分组被扔了,你会发现你的英雄不动

虚电路方式:

**虚电路:**结合数据报方式和电路交换方式,建立逻辑连接

  1. 建立连接:源主机发送呼叫分组并收到应答。
  2. 数据传输:携带虚电路号,分组号等信息。
  3. 释放连接:源主机发送"释放请求"拆除虚电路,目的主机去实现拆除虚电路

注意:

  • 不需要携带源地址和目的地址,不会乱序和重复和丢失。
  • 不需要进行路由选择。
  • 每个节点可能有多个虚电路(这就是其和电路交换的区别)

数据报方式和虚电路方式的对比:

**网络层:**现在不太处理检错和流量控制,检错主要由传输层进行

2.2.2 路由算法及路由协议

电报转发过于简单,报文转发过于复杂,因此这里都不讨论。

当然目前最常用的数据交换方式也就是分组交换

路由算法仅仅讨论在分组情况下如何选择路由路径

2.2.2.1 静态路由算法(非自适应)
  • 简单稳定,适用于负荷稳定,物理拓扑变动少。
  • 适用于军事网络、小型商业网络。
  • 网络运行前,由管理员手动配置路由信息,后续不再改变。
2.2.2.2 动态路由算法(自适应)
  • 路由表信息不断更新,随时获得最优路径。
  • 具体算法包括:距离向量路由算法(RIP)、链路状态路由算法(OSPF)

**距离:**是指路由之间需要跳转多少次。

**向量:**是指路由跳转的方向。

网络: 一个路由器管理一个网络,路由器划分网络。

2.2.3 IP数据报

浅尝几个协议,后面会学:

  • **协议栈:**指一套协议,是TCP/IP模型使用的协议的集合
  • **TCP/UDP区别:**是否建立协议
  • **DNS协议:**解析地址,解析域名和IP地址
  • **ARP协议:**解析地址,解析IP地址和MAC地址
2.2.3.1 IP协议

IP是一个网络协议(网际互联协议,用于解决异构网络的互联问题),在我们电脑上具体如下:

为什么有IPv6?因为IPv4长度不够用了,不够所有电脑使用

IPv4:32位

IPv6:128位

2.2.3.2 IP数据报格式

总格式:

  • IP数据报 = 首部 +数据部分
  • 首部 = 固定部分 + 可变部分
  • 固定部分有20B
  • IP数据报最大长度 = 65535B
  • 以太网帧数据部分最大长度 = 1500。数据部分长度就是IP数据报部分

首部固定部分具体格式:

  • 首部长度 = 固定部分+可变部分
  • 固定部分:20B
  • 首部长度每次增加都以4B为单位,最小值为20B
  • **区分服务:**保证服务质量定义的规则,包括吞吐率、丢包率等
  • 标识: 数据报分片后需要重新组装,标识用来判断每一个片是不是属于一个数据报
  • 标志: 用来判断当前的分片后面还有没有分片
  • 片偏移: 当前片在整个数据报中哪个位置(数据部分开始算),以8B为单位
  • **生存时间(TTL):**生存次数,可以通过路由器数量的最大值
  • **协议:**数据部分使用了什么协议,也就是传输层用了什么协议。6是TCP,17是UDP。
  • **首部检验和:**检验整个首部,和的意思是看首部总共有多少位
  • **一个长度口诀(用来记IP中的长度单位):**418,首总偏

2.2.4 IP数据报分片

  • **分片目的:**让IP数据报去适应数据链路层的MTU
  • **分片组装:**利用标识和片偏移在目的节点重新组装
  • 标志: 占3位,后两位有意义。中间位MF表示还有没有分片;最低位DF表示是否禁止分片。
  • **分片要求:**数据部分长度一定要是8B的整数倍(除了最后一个分片)

例题1:

解答:

  • **确定分片方式:**判断分片后数据部分是不是8B的整数倍。
  • **确定每一个分片首部的细节:**片偏移、标志等会发生变化

2.2.5 IPv4协议

2.2.5.1 IPv4地址概论
  • 第四代IP地址
  • 三个点将IP地址分为四个部分,每个部分由8位bit表示,范围0-255。总共有32位
  • IP地址用于在全世界内去唯一标识主机
  • IP地址=网络号+主机号
  • IP地址是标识路由器主机的接口,不是标识路由器主机(接口和IP绑定,不是路由器和IP绑定)
2.2.5.2 IPv4地址分类

不同需求使用不同IP段(需要多少主机在一个网络中),让我们更加便于管理

  • **A类地址:**全0和全1都不可以使用,从1开始
  • **网络号:**用来分网络
  • **主机号:**用来区分同一个网络下的主机
  • 因特网中网络号不能相同,但是主机号在不同网络下可以相同
  • **本机回环地址:**127开头的IP地址,本机内部通信使用,只在本机内部使用(应用程序等)
  • A类地址开头为0,B类地址开头为10,C类地址开头为110
  • A类地址前一位是网络号,后3位是主机号;B类地址前两位是网络号,后面2位是主机号

**记忆:**A:1-126;B:128-191;C:192-223;D:224-239;E:240-250
IP地址的唯一性:

  • 网络号在全世界都是唯一的
  • 主机号在同一个网络中是唯一的,在不同网络中可以重复(利用NAT技术)
2.2.5.3 特殊的IPv4地址
  • **网络号全0:**本网络
  • **网络号全1:**本网络广播
  • **主机号全0:**什么主机都不选,网络本身
  • **主机号全1:**什么主机都选,广播

2.2.6 NAT网络地址转换(私有IP和公有IP/IP地址复用)

  • 好几个设备共享同一个对外的公网IP地址
  • 对内的IP是私有IP地址,可以重复,随便使用
  • 使用NAT转换表:WAN端和LAN端匹配(外,Local)

辨析名词:

  • 私有IP地址与公有IP地址
  • 网络号与主机号

2.2.7 子网划分与子网掩码

2.2.7.1 子网划分

两级IP地址

  • **不够灵活:**网络号多,路由表将很大,不利于查询;主机号多,可能出现IP地址浪费的情况

三级IP地址

  • 对外表现仍然为一个网络,子网划分仅仅针对内部
  • 子网号从主机号划分,和网络号没有关系
  • 子网号可以全0/1,主机号不能全0/1。和前面的广播、不选主机的原则相兼容
  • 根据目的:减少主机号多情况下出现的IP地址浪费

分析:

  1. 145代表其是B类地址,因此前2B是网络号
  2. 因此后两位分别是 子网号、主机号(两者内部如何划分是自定义的,不是完整字节)
  3. 增加一个解析子网的步骤。之前是直接根据IP去找对应网络,现在是先根据网络找对应网络再根据子网号去找对应子网。
  4. 路由器除了交付给子网外,也可以直接交付给自己本身。优先看IP地址能不能交付给自己,不行的话,再看子网。例如上图先看145.13这个行不行,不行再看145.13.1、145.13.2等等。直接交付的IP地址的子网掩码和交付给子网的IP地址是不同的。
2.2.7.2 子网掩码

分析

  1. 子网掩码: 区分出子网号、网络号和主机号。对原网络主机号的借位,意思是把原本的主机号一部分借过来当作子网号。主机号为0,网络号和子网号为1.
  2. 子网地址: 网络号+子网号。子网掩码和IP地址做按位与操作。
2.2.7.3 分组转发与子网掩码

几个特点:

  • 同一个网络下的不同子网的子网掩码相同,但是子网地址不相同。
  • 直接交付的网络的子网掩码和交付给子网的子网掩码是不同的。
  • 子网掩码:体现子网地址。子网地址本质是区分出一组主机。

路由器转发分组算法:

  1. 提取目的IP地址
  2. 判断是否直接交付: 利用子网掩码按位与,若结果是和网络地址相同则说明直接交付;若结果和网络地址不相同,则说明在子网中,需要子网号参与。
  3. 特定主机路由: 没有找到直接路由器,也没有找到子网,则看看特定主机路由是否正确。
  4. **检测路由表中有无路径:**没有路径就交给默认路由0.0.0.0。
  5. **默认路由:**默认路由会重新发送,走其他的路径看看是否找得到目的地。每次都是走到TTL为0,然后重新开始。走了很多次后还没有找到,则转到6,报错。
  6. **丢弃:**报告转发分组出错。

1与2是一般步骤

3-6都是对特殊情况进行处理

2.2.8 CIDR(无分类编址)

越细的划分使得主机IP地址浪费越来越少

**二级、三级等:**目的都是提高主机号分配的自由度,主机号可以多也可以少

**无分类编址:**彻底没有约束,使得自由度达到最高,因此主机号利用率最高

  • 网络前缀和主机号位数都是自由分配的。
  • 子网掩码:显示子网地址(这里称为网络前缀)。CIDR中子网地址就是自定义的,灵活度很高。
  • 网络前缀仍然可以引入划分子网操作
  • 网络前缀后的部分,IP地址不会重复。相比于三级地址,会存储子网号、网络号,一个子网就会拥有一个路由转发表;CIDR将子网号+网络号看成一个整体,因此只会存储一个路由转发表。因此更节省内存且查询转发速度更快。
  • CIDR相比于子网划分本质区别: 将多个子网聚合成为一个较大的子网,构成超网,也叫路由聚合
    无分类编址: 更灵活的二级IP地址

2.2.9 IPv6 协议

为什么要IPv6协议?

  • **CIDR:**无分类编址,增加IP地址使用率

  • NAT: 让一个IP地址对应多个主机

  • **更大的地址空间:**128位
  • **拓展地址层次:**存在拓展首部,使得首部更加灵活
  • 改进选项: 通过增加首部信息,让我们不需要检验
  • **允许协议进行扩充:**留部分拓展首部信息
  • **即插即用:**不需要DHCP协议去配置,可以自动配置
  • **支持资源预分配:**不走动态分配资源,而是提前确定
2.2.9.1 IPv6地址形式(冒号16进制记法)

压缩:

  1. 0000能压缩成0
  2. 多个0可以用::来代替,这种压缩只能出现一次
2.2.9.2 IPv6目的地址类型

利用 双栈协议(两个协议都启动)、隧道技术(将IPv6包装成IPv4)等实现IPv4向IPv6的过渡。

2.3 网络层有哪些通信方式

网络通信方式 = 网络有哪些协议

协议决定网络通信方式

2.3.1 ARP协议

**ARP:**地址解析协议

分析:

  • IP地址是逻辑地址,并不存在。在实际传输时需要使用MAC地址完成真正的传输。
  • **ARP功能:**IP地址到MAC地址的映射
  • 一般情况:一个IP对应一个MAC地址

ARP工作流程:

  1. 检查ARP高速缓存,如果找到对应表项,则直接拿到目的IP对应的目的MAC地址。
  2. 若没有,则用FF-FF-FF-FF-FF-FF当目的MAC地址(广播帧),把ARP请求分组广播出去(广播可在同一网络中进行,也可以通过路由器在不同网络中进行)。
  3. 其他主机收到广播帧,如果IP地址和信息中的目的IP地址一致,则回复一个ARP响应分组。
  4. 源主机根据ARP响应分组,记录下目的IP地址对应的MAC地址,写入ARP缓存

实际运行中,ARP隔一段时间就会发送广播帧去更新一次所有的ARP缓存
这个思路很像 泛洪算法

2.3.2 DHCP协议(动态主机配置协议)

通过ARP协议,我们能够将IP地址转为MAC地址
但是,主机的IP地址又是什么呢?

我们知道一个主机肯定有一个固定的MAC地址(网卡决定),但是IP地址是逻辑地址并不是真实存在的。因此,IP地址是需要分配的,我们如何给每一个主机去分配IP地址呢 ?

  • DHCP协议是运行在应用层的协议。
  • **用于给主机配置IP地址:**静态配置+动态配置
  • **配置:**IP地址、子网掩码、默认网关等
  • **静态配置:**医院、军队等不会随意增加修改主机的情况,事先知道每个主机的IP地址,出现问题找问题很快。
  • **动态配置:**在IP地址池中找到一个IP地址分配给对应的MAC地址,并且记录在DHCP服务器中

DHCP工作流程:

  1. **发现阶段:**主机发送DHCP发现报文
  2. **提供阶段:**所有DHCP服务器发送提供报文(广播形式,根据MAC地址主机去判断)
  3. **选择阶段:**DHCP客户端接受到DHCP 提供报文之后,选择第一个接收到的提供报文,然后以广播的方式回答一个DHCP request请求信息
  4. **确认阶段:**对应DHCP服务器发送确认报文给对应的客户端,告诉其IP地址、使用时间等

DHCP协议允许地址重用,支持移动用户加入网络和续租

2.3.3 ICMP协议(网际控制报文协议)

IP数据报在网络中传输会出现异常出错,因此需要ICMP协议来减少IP报错误,提高IP数据报交付的机会。
**ICMP协议:**用来控制整个网络的情况和状态

  • **ICMP报文有:**ICMP差错报告、ICMP询问报文。
  • **发送方:**目标主机或者路由器。
  • **源点抑制:**路由器很忙,没时间发送出现丢包了。
  • **时间超过:**TTL到这个路由时已经为0了,数据报生存时间不够。
  • 参数问题: 数据报中的首部字段存在问题。
  • **改变路由:**让源主机下次发送不要发送给我了,路由器重定向。
  • **时间戳请求:**同步主机和服务器的时间

ICMP数据报的格式:

  • 拿到可能出错的IP数据报的首部和数据部分前8个字节,加上ICMP首部信息,封装成ICMP差错报告报文
  • ICMP差错报告报文 加上 IP数据报首部 封装成 IP数据报 在网络中传输
    不是所有IP数据报在传输中都需要ICMP差错报文。本地回环地址的IP数据报就不用。

2.3.4 RIP协议和距离向量算法(路由选择协议)

自治系统:单一技术管理下的整个系统

  • RIP是内部路由选择协议。
  • RIP是基于距离向量算法的路由器信息协议。
  • RIP基于UDP。
  • **距离(跳数):**通过路由器的数量;路由器到直接连接的网络距离为1。
  • 每一个路由器都维护一组自己到其他网络之间最佳距离的路径,用于后续使用。
  • RIP没有考虑到网络复杂的情况,是早期的协议,所以有只允许最大15跳数的规定。
  • 仅和相邻路由器交换信息,例如:R3向R4去获取到R6的距离信息。
  • **交换信息:**路由表信息。
  • **按固定时间间隔:**超过这个间隔没有收到信息,就认为这个路由器掉线了。
2.3.4.1 RIP报文结构

RIP不适用于大规模网络,如下图可以看到百度服务器信息发到我的本机需要51次跳转,15次的限制根本不够用:

2.3.4.1 距离向量算法

假设R1更新路由表,R3是相邻路由器(下一跳结点)(真实不只R1),更新的网络是Net4(真实不只Net4)

算法流程如下:

1、R1发送广播帧,想要更新所有路由信息

2、R1修改相邻路由器R3发来的RIP报文中的所有表项(例如距离+1等)

3、R1根据修改后的R3报文更新自己的路由信息,作如下操作:

4、若180s还没收到R3的更新路由表,则R3不可达,距离设为16(就是不可达)

5、返回


练习题1:

  • 原本R6中存在Net2距离为3且下一跳为R4,但是新的R4到Net2距离为4,这说明原本的距离是错误的。因此要更新R6中到Net2的距离为最新的R4路由信息(路由信息是动态变化的)

练习题2:

  • B:(5,0,8,12,6,2):指B到A、B、C、D、E、F的距离

解答:

2.3.5 OSPF协议和链路状态算法

**RIP:**每次发送,只有一个路由更新其路由信息

**OSPF:**每次发送,所有路由器都会更新其路由信息

2.3.5.1 OSPF协议

OSPF与RIP协议的不同:

自治系统分区域:

  • **区域边界路由器:**连接主干区域和区域
  • **主干路由器:**在主干区域的路由器
  • **区域内部路由器:**在区域内部的路由器
  • **自治系统边界路由器:**连接其他自治系统
2.3.5.2 链路状态算法

上面的几个步骤可以总结为:

OSPF分组结构:


具体来看OSPF:

每个节点都将自己的邻居信息表传给所有节点,每个节点都保存所有节点的邻居信息表,并使用 Dijkstra 计算出本节点到其他所有节点的最短路。

上面可以看到,邻居信息表中都包含两个字段:Seq 和 Age。

Seq:由于邻居信息表需要泛洪给所有节点,为了控制泛洪的规模,所以使用 Seq 序号。新的链路状态数据包到达一个节点的时候,路由器检查这个新来的数据包的序号和源路由器是否已经出现在自己的列表中。重复则丢弃,源路由器相同而序号过时则拒绝接受。

Age:在数据包发出时设定初值,然后每一秒都会减一,变为 0 则会被丢弃,①可以在泛洪时防止数据包无限生存②及时清理路由器中链路状态数据库中旧的或无效的信息,以防以下问题的影响,如:路由器崩溃后重启序号从 0 开始的话会被当做过时信息丢弃;传递过程中序号出现差错如 4 变 65540,那么只有 seq 字段就会导致后面的 5-65539 全被拒绝。
算法步骤:

①发现邻居节点,并知道其网络地址

②测量到各邻居节点的延迟或开销

③构造一个分组,分组中包含所有它刚知道的信息

④将这个分组发送给所有其他的路由器

⑤计算出到每一个其他路由器的最短路径

因为距离矢量算法每个节点只与邻居节点交换信息,在面临路由器失效时会出现无穷计数问题。链路状态算法用泛洪的方式分发链路状态包,所以每个节点都知道完整的网络加权拓补图,重点在链路状态包的构造和分发方法以及健壮性。

2.3.6 BGP协议(外部网络协议)

**BGP协议:**让不同自治系统之间进行信息交换

BGP协议的格式:

  • 基于TCP连接,是应用层的协议
  • **保活:**保证彼此之间的活跃关系
  • **通知:**发送检测到的差错

2.3.7 三种路由协议的对比

2.3.8 IP组播

**IP组播:**提高IP数据报发送的效率

  • 单播: 收发之间需要单独的数据通道,且需要都需要一个数据包。一个单播需要一个数据通道需要一个数据包。
  • 组播(多播): 每个链路上只有一个数据报,由路由器进行复制。 D类地址用来组播(多播)

注意:

  1. 一个主机可以有一个单播的IP地址,也可以再有其他的组播IP地址(可以有多个)。
  2. 根据目的地址是多播地址(D类地址)还是单播地址来确定要单播还是组播。
  3. 组播是UDP协议,不建立TCP连接。
  4. D类地址只能是目的地址,不能是发送地址。

2.3.8.1 IP组播地址
  • 组播组地址范围就是D类地址范围。

  • 组播数据报尽最大努力交付,使用UDP协议。

  • 组播数据报不产生ICMP差错报文,因为D类地址不能作为源地址发送差错信息。因此ping一个组播地址会出现请求超时错误。

  • 并不是所有D类地址都可以作为组播地址,被拿去专用了。

2.3.8.2 因特网范围组播

**因特网范围内的组播依赖两个协议:**IGMP协议 和 组播路由选择协议

IGMP协议
  • IGMP协议: Internet Group Manage 协议。让路由器管理组播组成员,控制主机加入或退出组播组。
  • 现在整个因特网上的所有路由器基本都是组播路由器
  • 组播组成员就是我们的主机

加入组播组:

  1. 发送IGMP报文给组播组(告诉组播组我要加入)。
  2. 组播组发送一个回复一个IGMP报文(告诉主机你已经成功加入)。
  3. 主机用泛洪算法告诉其他所有人。

离开组播组:

  1. 主机要离开组播组。
  2. 悄悄离开就可以,不用告诉组播组。
  3. 组播路由器周期性探寻活跃主机 。
组播路由选择协议
  • 组播路由选择协议:路由器知道如何把数据报以最小代价发送给一个组 。
  • 构建以源主机为根节点的组播转发树。 构建树是为避免数据报在主机中循环(图可能有环)
  • 组播转发都是从组播转发树的根节点(源主机)开始。
  • **注意:**不同多播组有不同转发树,同一多播组因为源主机不同也会有多个转发树。

2.3.9 MAC地址实现组播

前面提到IP地址实现组播,但是IP地址终究是逻辑地址,真正要实现数据的传输还需要MAC地址。前面用ARP协议让IP地址和MAC地址相对应,因此用IP地址传播数据时可以找到对应的MAC地址,从而实现底层的数据传播。

那么,这里IP组播在MAC地址层面需要如何实现呢?

  • 组播MAC地址: 我们的网卡有MAC地址,也有组播MAC地址。
  • 以太网多播地址: 以太网多播MAC地址,也就是组播MAC地址。记住01-00-5E。

如何理解单播/组播下的IP和MAC地址(必看):

  1. 每一个主机有一个固定的MAC地址和MAC组播地址。
  2. 当主机联网时会获得一个IP单播地址。
  3. 当我们单播传输时,根据ARP协议从IP单播地址找到MAC地址,从而完成传输。
  4. 当主机想要IP组播地址时,根据MAC组播地址,计算得到IP组播地址。一个MAC组播地址对应很多个IP组播地址。
  5. 主机利用ICMP协议加入一个组本质就是把其IP组播地址放在一张表上。因此只要有这张表发送组播数据报时,可以找到对应的组播IP地址,并计算得到对应的组播MAC地址,实现发送。
  6. 由于多个IP组播地址对应一个MAC组播地址,因此我们的主机可能会收到其他组的IP数据报信息,这时候就需要在我们本机进行一个过滤。具体见下图:

你问我,为什么只选IP组播地址后23位去成为MAC组播地址,导致多个IP组播地址对应一个MAC组播地址,让我们的主机需要过滤。而不是直接让IP组播地址后28位直接对应MAC组播地址,那样子不就一一对应了嘛,就不用过滤了❓❓

说起来也是离谱,那是因为当时设计MAC组播地址的公司,买不起那么多的MAC地址用来当作MAC组播地址,因此只要了23位,没有要28位。真离谱,让现代主机那么麻烦要过滤一次😅。

2.3.10 移动IP

**为什么要移动IP:**我们的手机/电脑会跟随我们移动,不同地区的路由器可能使用的规则不一样。例如在一部浙江的手机连接浙江的路由器,使用A类IP地址。但是到美国,这部浙江的手机就要连接美国的路由器,使用原本的浙江网络中的A类IP地址就不行了,要按照美国路由器的要求使用B类IP地址。但是我们想要维持我们的IP是不变的,这就要用到移动IP技术。

  • 固定网络IP地址,虽然我们移动了,但是我们的IP地址不变,并且所拥有的网络权限不变。这也就是跨越不同的网段。
  • **本地代理:**归属网络。移动手机是浙江的,那我们就永远都是浙江的移动IP。
  • **外部代理:**外部网络。浙江的手机到了山东,山东网络对于我们就是外部网络。
  • 固定地址(永久地址): 在归属网络中的地址,也是永久使用的地址。不会变化。
  • 转交地址: 在外部网络中临时申请的地址,可能发生更新变化。
  • 到达外地后,我们仍然使用原本的IP地址,同时由原本的本地代理为我们提供服务。例如,我们到美国后,仍然是用的中国移动,不过这个时候需要交额外的费用。
  • 主机在外地后需要根据外地网络申请一个转交地址,并将这个地址告诉本地代理。
  • 本地代理后面的信息就发送给外地代理,外地代理再转交给不属于他的主机。
  • 主机A发送主机B时可以直接通过外地代理发送(因为外地代理能够识别目的地址)。
  • 主机B给主机A发送信息需要走到本地代理(外地代理不能识别就会转发到广域网中),广域网根据IP地址会不停在路由器之间转发,最后到达本地代理,本地代理再根据转交地址以隧道技术交给主机A。
  • 主机A的转交地址可以申请、更新或者注销操作。

2.4 网络层的设备

**网络层设备:**路由器

  • 多个输入/输出端口
  • **专用计算机:**路由器也是一个计算机,但是只能用于路由相关操作。
  • **功能:**连接异构网络,并完成网络之间的路由转发。
  • **转发功能:**直接交付(经过路由器,但是不经过转发);间接交付(经过路由器,但是经过住哪发)。
  • **广播域:**可以理解为不同的网络。

路由器的功能: 分组转发、路由选择(分组转发需要路由选择功能作为辅助)

  • 路由表: 是根据前面提到的RIP、OSPF等路由选择协议确定的。
  • **路由选择处理机:**不停更新路由表信息。
  • **一组输入端口:**从应用层一层层传下来的数据包装成的IP数据报。
  • **一组输出端口:**从物理层传上来的比特流信息拆解成的IP数据报。
  • **发送流程:**输入端口的IP数据报根据转发表查找到对应的转发目的路由地址,再找到目的路由地址的MAC地址,最后由数据链路层+物理层完成实际的传输。
  • **接收流程:**目的主机接收到转发过来的比特流信息,经过层层拆解得到IP数据报,再往上面层(例如传输层和应用层)去处理。
  • **缓存处理:**每一个输入端口都需要对数据进行缓存,因为需要对比特流数据进行差错等。如果有错误则要发送ICMP差错报文。

2.4.1路由表和转发表

  • 路由表:用于路由选择,描述因特网的网络拓扑结构(是属于网络层的结构)。
  • 转发表:根据路由表得出,用于转发数据包。转发数据包就需要底层的MAC信息,因此不能仅仅是网络层逻辑上的网络拓扑结构。

3. 总结

本文到这里就结束啦~~

目前已完成:

【计算机网络】第一章·计算机网络入门-CSDN博客

【计算机网络】第二章·物理层-CSDN博客

【计算机网络】第三章·数据链路层与局域网/广域网-CSDN博客

期待您的关注~~🥰🥰

猫猫陪你永远在路上💪💪

如果觉得对你有帮助,辛苦友友点个赞哦~

相关推荐
傻啦嘿哟1 分钟前
用Python实现简单的任务自动化
网络·数据库·python
tjjingpan4 小时前
HCIA-Access V2.5_8_1_EPON原理_PON基本概念
网络
hc_bmxxf4 小时前
【无标题】
网络
阿乾之铭6 小时前
计算机网络(第七版)知识点
网络·计算机网络
m0_748252606 小时前
在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
linux·服务器·网络
XuanRanDev6 小时前
【计算机网络】深入了解交换机:概念、命令及基本操作
网络·计算机网络
raysync8886 小时前
如何保留企业传输系统操作习惯来实现企业无缝FTP替代升级
运维·服务器·网络
严文文-Chris6 小时前
【一个HTTP请求和一个HTTP会话的区别】
网络·网络协议·http
zhgjx_chen7 小时前
ENSP综合实验(中小型网络)
服务器·网络·华为
爱思考的发菜_汽车网络信息安全7 小时前
汽车网络信息安全-通信安全方案(基于OSI模型)
网络·汽车