IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络模型(五):网络层其他协议 -> 正文阅读

[网络协议]计算机网络模型(五):网络层其他协议

计算机网络模型(四):网络层IP协议
计算机网络模型(五):网络层其他协议

ICMP协议

接上文,为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告。

ICMP协议不是上层协议,而是依附于IP协议的数据部分。
在这里插入图片描述

ICMP报文种类

目前ICMP报文有两种,一种是ICMP差错报文,一种是ICMP询问报文。下面列出几种常用的ICMP报文类型:

ICMP报文种类类型的值ICMP报文的类型
差错报告报文3终点不可达
4源点抑制(Source quench)
11时间超时
12参数问题
5改变路由(Redirect)
询问报文8或0回(Echo)请求或回答
13或14时间戳(Timestamp)请求或回答

差错报文类型有五种:

  1. 终点不可达:路由器或者主机发送了不能交付的数据报,就会向源点发送不可达报文。
  2. 源点抑制:当路由器或者主机由于拥塞而丢弃数据报时,向源点发送抑制报文,使源点直到把报文发送速率降低
  3. 时间超时:当路由器收到生存时间为0的报文时,应该向源点发送时间超时报文,并丢弃该生存时间为0的报文;或者当一个报文分片后,不能在规定时间内收到全部该分片报文,也会将其丢弃,并向源点发送时间超市报文。
  4. 参数问题:当路由器或者目的主机收到的数据报的首部中,有值不正确时,丢弃数据报,并向源点发送参数问题报文
  5. 改变路由:路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可以更好的路由)。

有几种情况,即使出现报文传问题,我们也不会发送差错报文:

  1. 对ICMP差错报告报文不再发送ICMP差错报告报文
  2. 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
  3. 对具有多播地址的数据报都不发送ICMP差错报告报文
  4. 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文

常用的ICMP询问报文有两种:

  1. 回送请求和回答:ICMP回送请求报文时由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送回送请求报文。
  2. 时间戳请求和回答: 请主机或者路由器回答当前日期和时间,有一个32位字段,写入整数,代表从1900年1月1日到当前时刻一共有多少秒。可用来同步时钟和测量时间。

内部网关协议

RIP协议以及Bellman-ford算法

RIP(Routing Information Protocol)是最广泛使用的内部网关协议,其中文是路由信息协议。它是一种分布式的,基于距离向量的路由选择协议。

RIP要求每个路由器都要维持一个从它本身到其他每一个目的网络的最短距离的记录。从一个路由器直连的网络距离定义为1,否则每经过一个路由器,距离加一。这个距离被称为跳数。RIP定义每一条路径最大跳数为15,即跳数等于16时,认为不可达。

RIP协议特点是:

  1. 仅相邻的路由器交换信息
  2. 交换的信息是路由表
  3. 按固定的时间间隔交换信息

这就要依靠距离向量算法,对每一个相邻的路由器发来的路由表进行以下步骤:

  1. 对地址为 X X X的的相邻路由器发来的RIP报文,修改此报文中的所有项目:
    a. 把下一跳字段中的地址都改为 X X X
    b. 把所有的距离加一
  2. 对修改后报文中的每一个项目:
    a. 若 原来路由表中没有目的网络,则将该项目添加进当前路由器的路由表
    b. 若有,则查看信息。若下一跳的地址为 X X X,则将RIP报文中的信息替换原路由表信息(保证最新信息原则);若下一跳地址不为 X X X,则判断距离,距离小则替换,否则跳过。
  3. 3分钟内未收到相邻路由器发来的路由表,则将相邻路由器距离设置为16,认为不可达。
  4. 返回。

以上就是Bellman-Ford算法。

RIP报文格式

在这里插入图片描述
RIP首部,命令指报文的意义,例如:1是标识请求路由信息,2表示对请求路由信息的响应或未被请求而发出的路由更新报文。版本即IPv4还是IPv6。填充0的部分,是为了字节对齐。

难理解的就是地址族标识符,该协议可以用于非IP报文的情况下,因此需要一个字段判断地址的类型,IP报文该字段为2。

图示中可见,报文为UDP报文

RIP简单易实现,开销小,但是也有缺点,那就是不适用于大型网络,因为它最多有15跳。此外,好消息可以快速传递,但是坏消息由于阻塞,可能需要3分钟才能被感知。

OSPF协议

为了解决RIP不适应大型网络的缺点,创造了OSPF协议,该协议是开放最短路径优先协议(Open Shortest Path First)。

OSPF仅仅是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。,实际上基本所有的内部路由选择协议都是最短路径,包括RIP协议。OSPF是分布式链路状态协议,与RIP的特点相比有区别:

  1. 向本自治系统内所有的相邻路由器发送消息,被称为“洪泛法”。每一个相邻路由器再发送给其他相邻的路由器,但是不发送给之前发给自己消息的相邻路由器。
  2. 发送的信息就是与本路由器相邻的所有路由器的链路状态。所谓链路状态,就是说明本路由器都和哪些路由器相邻。除此之外,还有路由器的度量,也称代价,表示费用,距离,延时,带宽等等。(RIP中,是到下一跳的距离)
  3. 只有链路发生变化的时候,路由器才做洪泛操作。(RIP是定期)

因此,对于每一个路由器,都保存有一个内部链路状态数据库,包含了网络中所有的路由器节点连接信息(可以使用Dijistra算法得到单源最短路径)。

这里就不提OSPF的数据报格式了,但是与RIP不同的是,OSPF由于是向除发送给自己的路由器更新信息,因此我们捋一下过程:
假设A与B相连,A与C相连,B与C不相连。

  1. 假设现在网络中只有一个路由器A,向其他路由器发送信息,发现没有路由器。
  2. 新路由器B进入网络,由于自己是新来的,会向其他路由器发送信息。老路由器A收到B的信息,会向除了B以外的路由器发送自己更新的信息。但是此时没有其他路由器接收。
  3. 新路由器C进入网络,向与自己相连的A发送信息,A收到信息后向B发送信息。
  4. 此时A知道了B的和C的信息,B知道C的信息,C不知道任何信息。因为没有信息反馈。此时就会出现问题。

所以OSPF为了解决这个问题,采用的是TCP连接(RIP是UDP),在发送信息的时候,会收到ACK确认帧来确定自己发出的信息被收到。

在这里插入图片描述

外部网关协议BGP

为啥要用这个东西呢?主要原因就是RIP协议不能适应大型网络,OSPF使用的单源最短路径如Dijistra算法时间复杂度由太高,在大型网络中,上万个路由器使用该算法非常耗时。且“直连网络并不一定是最优路径”,这句话的意思是:假设A直连B,B直连C,C直连D,D直连E,B还直连F,F也直连E,而F的网络并不好,因此即使经过F是最短路径,但绝非最优路径。

BGP选择了路径向量路由选择协议

对于每一个自治系统,都要指派一个发言人,就是路由器,对外界进行信息交换,我们称之为BGP边界路由器。BGP会利用TCP连接与其他BGP边界路由器进行BGP会话。当然,两个网络必须相连才能进行边界会话。
在这里插入图片描述
注意,上图仅仅表达了信息的交换,当找到较好的路由信息时,会构造出一个连通图,是树形图,不存在环。
在这里插入图片描述
之后,便可以交换路径向量:
在这里插入图片描述
BGP所用的也是TCP报文。BGP可以解决“坏消息传播的慢”这个问题,因为当某个链路出现故障,发言人可以从不止一个临站获取路由信息,很容易选出新的路由。报文不表。

IP多播

在往常的IP协议中,往往是一对一的定点通信,但是在某些时候,比如教师远程的上课,若有20个终端,那么需要建立20条链路进行信息信号的传送,这样就很耗费服务器资源。如果能够一对多通信,那么久不用耗费太多资源。于是出现了多播的概念。

当采用多播的形式,服务器只需要把视频分组,只发送一次,路由器在进行转发的时候,会将收到的分组复制成多份,这个份数和与该路由器相连的路由器个数有关,由于局域网具有硬件多播功能,因此在到达局域网的时候不需要复制分组,如图:

在这里插入图片描述
多播的条件是:路由器支持多播功能,且不能保证一定能传达到信息,也就是UDP所谓的“尽最大努力交付”。因此,一般多播的IP地址是D类地址,其IP首部协议字段号是2。利用PING键入多播地址将无响应,因为其不产生差错报文。

还需要注意的两个点是,IP多播协议为IGMP协议,IP多播不会向自己发送消息。

关于硬件的多播会在硬件部分提及。

IGMP协议与多播路由选择协议

IGMP是网际组管理协议(Internet Group Management Protocol),他是对本地连接的网际组进行管理,同时,IGMP不关心IP多播组包含的成员数,也不知道这些成员都分布在哪些网络。IGMP仅仅是让连接在本地局域网上的多播路由器直到本局域网上是否有主机或进程参加或者退出了多播组。因此,IGMP协议本身无法完成多播任务,这就需要另一个协议:多播路由选择协议。

IGMP

其工作可以分为两个阶段:

  1. 当某一个主机加入新的多播组时,该主机会向多播组的多播地址发送一个IGMP报文,声明自己是该组的新成员。多播路由器收到信息后,利用多播路由选则协议将这种成员关系告诉其他多播路由器。
  2. 组成员关系是动态的,本地多播路由器会周期性的询问本地局域网上的主机是否还是组成员。只要有一个组成员回应,多播路由器就会认为这个组是活跃的。若没有成员回应,就不会将关系报告给其他多播路由器。

为了避免增加网络拥塞,IGMP采用的具体措施如下:

  1. 能用硬件进行多播的,就会用硬件进行多播。因此不支持硬件多播的主机将无法收到多播信息。
  2. 多播路由器在询问主机是否存在是,向所有组发送一个报文,而不是一个组一个组发送报文,频率是125s一次。
  3. 当一个网络有多个多播路由器,只会选择一个进行询问操作。
  4. 在IGMP的询问报文中有一个数值N,它指明一个最长响应时间(默认值是10s)。当收到询问时,主机在0到N之间随机选择发送响应所需经过的时延。因此,若一个主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延响应最先发送。
  5. 同组内所有主机都要监听响应,当组内已有主机发送消息,则本机不用再次发送消息。

多播路由选择协议

该协议尚未标准化,因此不能具体说明哪一个是正确的做法。多播路由选择实际上就是要找出以源主机为根节点的多播转发树,在该树上,每一个多播路由器向叶子结点发送多播数据包,但多播转发树上的路由器不会收到重复的多播数据报。因此,不同的多播组要对应不同的多播树。

目前有三种方法实现多播数据报:

  1. 洪泛与剪除:这种方法适合较小的多播组,所有的组成员接入的局域网也是相邻接的。一开始,路由器转发多播数据报使用洪泛的方法(就是广播),为了避免兜圈子,采用了叫做反向路径广播RPB的策略。RPB的要点是:每一个路由器在收到一个多播数据报时,先检查数据报是否从源点经过最短路径传送过来的(只需要从本路由器寻找到源点最短路径上的第一个路由器,是否是刚发出多播数据报的路由器即可)。若是,则向其他方向转发数据报,否则丢弃。若存在多条最短路径,则选择IP地址最小的一个传播。
    在这里插入图片描述
    如图所示,源点向R1发送多播报,R1收到后向R2,R3广播。R2,R3收到后向(R3, R4),(R2, R5)进行广播,然而发现有的数据报不从最短路径传来,因此丢弃。假设R8没有成员组,则剪除。

  2. 隧道技术:适用于多播组的位置在地理上很分散的情况。
    在这里插入图片描述
    两个网,都支持多播,但是期间的网络不支持,我们就要利用隧道技术,在网1和网2之间利用普通的IP技术传递数据报。然后到了网2再将数据报拆分成多播数据报。也就是说,IP数据报内可以继续封装IP数据报。

  3. 基于核心的发现技术:该方法对于大小广播组都合适,对每一个多播组指定一个核心路由器,给出它的IP单播地址。核心路由器创建一个多播树,如果有路由器向核心路由器发送数据报,那么在图中经过的每一个路由器都要检查其内容,当数据报到达多播组,检查后发现该数据报是一个多播数据报,那么向成员转发;如果数据报是申请加入,那么就将其将其放入路由中,并利用隧道技术向核心路由器转发副本。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:11:58  更:2021-08-06 10:12:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 8:18:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码