即时通讯开发之详解TCP/IP中的IP选路、动态选路

news2024/11/15 20:44:38

静态 IP 选路

1一个简单的路由表

选路是 IP 层最重要的一个功能之一。前面的部分已经简单的讲过路由器是通过何种规则来根据 IP 数据包的 IP 地址来选择路由。 这里就不重复了。

 

对于一个给定的路由器,可以打印出五种不同的 flag:

     U 表明该路由可用。
     G 表明该路由是到一个网关。如果没有这个标志,说明和 Destination 是直连的,而相应的 Gateway 应该直接给出 Destination
    的地址。
     H 表明该路由是到一个主机,如果没有该标志,说明 Destination 是一个网络,换句话说 Destination 就应该写成一个网络号和
    子网号的组合,而不包括主机号(主机号码处为0),例如 192.168.11.0
     D 表明该路由是为重定向报文创建的
     M 该路由已经被重定向报文修改


U 没啥可说的,G 说明这是一个网关,如果你要发数据给 Destination,IP 头应该写 Destination 的 IP 地址,而数据链路层的 MAC地址就应该是 GateWay 的 Mac 地址了;反之,如果没有 G 标志,那么数据链路层和 IP 层的地址应该是对应的。H 说明了 Destination 的 性质,如果是 H 的,则说明该地址是一个完整的地址,既有网络号又有主机号,那么再匹配的时候就既要匹配网络号,又要匹配主 机号;反 之,Destination 就代表一个网络,在匹配的时候只要匹配一下网络号就可以了。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

 

这样,IP 选路的方式就可以更加具体化了。如下:

     首先用IP地址来匹配那些带H标志的DestinationIP地址。
     如果1失败就匹配那些网络地址。
     如果2失败就发送到Default网关


顺便提一下那个 GenMask(还记得子网掩码么),它指定了目的地址的子网号,例如第一条的子网就是11。

2其他有关路由表的知识

一般,我们在配置好一个网络接口的时候,一个路由就被直接创建好了。当然我们也可以手动添加路由。用 route add 命令就可以了。而当一个 IP 包在某一个路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”或者“网络不可达”的 ICMP包来报错。

注意,一般的操作系统默认是没有路由功能的,这需要自己配置。这些历史原因就不细说了。

3ICMP 的 IP 重定向报文和路由发现报文

当 IP 包在某一个地方转向的时候,都回给发送 IP 报的源主机一个 ICMP 重定向报文,而源主机就可以利用这个信息来更新自己的路由表,这样,随着网络通信的逐渐增多,路由表也就越来越完备,数据转发的速度也会越来越快。我们需要注意的是:

     重定向报文只能由路由器发出。
     重定向报文为主机所用,而不是为路由器所用。


在主机引导的时候,一般会发送在网内广播一个路由请求的 ICMP 报文,而多个路由器则会回应一个路由通告报文。而且,路由其本身不定期的在网络内发 布路由通告报文,这样,根据这些报文,每一个主机都会有机会建立自己的路由表而实现网络通信。路由 器在一份通告报文中可以通告多个地址,并且给出每一个地 址的优先等级,这个优先等级是该 IP 作为默认路由的等级,至于怎么算 的就不深究了。

路由器一般会在450-600秒的时间间隔内发布一次通告,而一个给定的通告报文的寿命是30分钟。而主机在引导的时候会每三秒发 送一次请求报文,一旦接受到一个有效的通告报文,就停止发送请求报文。在 TCP/IP 详解编写的时候,只有 Solaris2.x 支持这两种报文,大多数系统还不支持这两种报文。(后面还会讲到一些有用的路由 报文)

动态选路协议

前面的选路方法叫做静态选路,简要地说就是在配置接口的时候,以默认的方式生成路由表项。并通过 route 来增加表项,或者 通过 ICMP 报文来更新表项(通常在默认方式出错的情况下)。 而如果上诉三种方法都不能满足,那么我们就使用动态选路。

动态选路协议是用于动态选路的重要组成部分,但是他们只是使用在路由器之间,相邻路由器之间互相通信。系统(路有选择程 序)选择比较合适的路有放到 核心路由表中,然后系统就可以根据这个核心路有表找到最合适的网路。也就是说,动态选路是在系统 核心网络外部进行的,它只是用一些选路的策略影响路由表, 而不会影响到最后通过路由表选择路由的那一部分。选路协议有一大类 常用的叫做内部网关协议(IGP),而在 IGP 中,RIP 就是其中最重要的协议。一种新 的 IGP 协议叫做开放最短路经优先(OSPF)协议,其意在取代 RIP。另一种最早用在网路骨干网上的 IGP 协议--HELLO,现在已经不用了。如今,任何支持动态选路的路由器都必须同时支持 OSPF 和 RIP,还可以选择性的支持其他的 IGP 协议。

1Unix 选路程序

Unix 系统上面通常都有路由守护程序--routed。还有一个叫做 gate。gate 所支持的协议要比 routed 多,routed 只是支持 RIPv1
版本。而 gate 则支持 RIPv1、v2,BGPv1 等等。

2RIP:选路信息协议

它的定义可以在 RFC1058内找到,这种协议使用 UDP 作为载体(也就是 UDP 的上层协议)。我们最关心的就是 RIP 其中的一个段,叫做度量的 段,这是一个以 hop 作为计数器(就是以走过多少路由为计数器)的段(IP 协议里面也有一个 TTL 不是么)。这个度 量段将最终影响到路由表的建立。

一般说来 routed 要承担如下的工作:

     给每一个已知的路由器发送 rip 请求报文,要求其他路由器给出完整的路由表。这种报文的命令字段为1,地址字段为0,度量 地段为16(相当于无穷大)。
     接受请求,如果接收到刚才的那个请求,就把自己的完整的路由表交给请求者。如果没有,就处理 IP 请求表项,把表项中自 己有的部分添上跳数,没有的部分添上16。然后发给请求者。
     接受回应。更新自己的路由表。使用 hop 数小的规则。
     定期更新路由表,一般是30s(真频繁)给相邻的路有启发一次自己的路由表。这种形式可以使广播形式的。


这个协议看起来会工作的很好,但是,这里面其实有很多隐藏的忧患,比如说 RIP 没有子网的概念,比如说环路的危险。而且 hop数的上限也限制了网络的大小。因此,出现了很多 RIPv1的替代品,比如说 RIPv2,比如说 OSPF。他们都是通过某种策略来影响路由表,所以就不说了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qlik Sense Enterprise Windows版(非集群)——详细安装步骤

Qlik Sense分为客户端(Desktop)和服务器(Server),本文主要介绍Qlik Sense Server的图形化界面安装操作。 安装方式也分为两种,一种是图形化界面安装,另一种是静默安装。一般只有在特殊报错情况下我们才使用静默安装,静默安装的方…

实现分页查询

实现分页查询一、分页要素与语法二、例:博客系统文章列表页2.1 原始前端代码2.2 实现:查询分页数据验证2.3 实现 “首页” “上一页” “下一页” “末页”前端代码添加得到总页数实现 四个点击效果验证一、分页要素与语法 分页要素: 1&…

Qt音视频开发13-视频解码线程基类的设计

一、前言 这个解码线程基类的设计,是到目前为止个人觉得自己设计的最好的基类之一,当然也不是一开始就知道这样设计,没有个三五年的摸爬滚打以及社会的毒打,是想不到要这样设计的,一方面是要不断提炼各种视频类视频组…

伪逆矩阵 的使用

伪逆矩阵(pseudo-inverse)_Uglyduckling911的博客-CSDN博客_伪逆矩阵 一、什么是伪逆矩阵 若任意矩阵Am*n,B 为A的广义逆矩阵,若B满足下述条件(Moore-penrose条件): (1)BAB B&am…

4.门面模式,组合模式,享元模式

门面模式 为了保证接口的可复用性(或者叫通用性),我们需要将接口尽量设计得细粒度一点,职责单一一点。但是,如果接口的粒度过小,在接口的使用者开发一个业务功能时,就会导致需要调用 n 多细粒度…

【手把手】教你使用JMH和Disruptor - 多线程与高并发工具

JMH JMH全称是Java Microbenchmark Harness(Java微基准测试),简单讲其实就是测一个方法的性能好坏。这个测试的框架是2013年发出来的,由JLT的开发人员开发,后来归到了OpenJDK下面,官网地址:htt…

运维实践 | OpenMLDB 跨机房容灾方案

背景 在单集群部署环境下,OpenMLDB 具备集群内节点级别的高可用能力。但若受到机房断电或者自然灾害等不可抗拒因素,则将造成的机房或大部分节点无法正常运转的情况,从而引发该集群状态异常,导致在线服务中断。为此,Op…

悉数美剧《黑客军团》中的黑客工具

本篇文章中主要列举《Mr. Robot》电视剧中主要用到的黑客工具,并对它们所对应的现实中的黑客工具做一简要介绍。Mr. Robot2015年美剧出了一部关于黑客题材的电视剧,相信爱看黑客电视剧、电影的同学们已经看过或者正在追这部神秘的《Mr. Robot》&#xff…

零基础学MySQL(四)-- 数据库最常用的操作【查询基础篇 -- 单表查询】

目录📔一、最简单的 select 语句1️⃣基本语法2️⃣基本练习3️⃣补充说明(1) 使用表达式对查询的列进行运算(2) 在 select 语句中可使用 as 语句取别名📕二、使用 where 子句进行过滤查询1️⃣基本语法2️⃣在 where 子句中经常使用的运算符3️⃣基本练…

4道面试题让你了解 ThreadLocal 的那点小秘密

我收集了4个面试中出现频率较高的关于ThreadLocal的问题: 什么是ThreadLocal?什么场景下使用ThreadLocal?ThreadLocal的底层是如何实现的?ThreadLocal在什么情况下会出现内存泄漏?使用ThreadLocal要注意哪些内容&…

工赋开发者社区 | 事件驱动架构要避开的 5 个陷阱

事件驱动架构非常强大,非常适合用在分布式微服务环境中。事件驱动架构提供了解耦的架构、更容易实现的可伸缩性和更高程度的弹性。请求应答(客户端和服务器)与事件流(发布和订阅)但是,与请求和应答类型的架…

防范DDOS攻击的最佳方法

Botnets是由多个感染的计算机(称为"bots"或"zombies")组成的网络。这些感染的计算机受到攻击者的控制,可以同时发送大量的数据流量到目标网站,导致DDoS(分布式拒绝服务)攻击。Botnets也可以用于从感染的计算机中获取私人信息,传播病毒和蠕虫,或者执…

Git使用个人访问令牌提交代码到仓库

文章目录前言解决方法1、创建自己的token2.1、使用token(classic)2.2、使用token(方法二)参考链接前言 2021年8月13日开始,GitHub在使用Git操作远程仓库时不再支持使用用户名密码形式进行身份验证,需使用个人访问令牌。 使用Git操作GitHub仓库时使用用户…

整合spring cloud云服务架构 - 企业分布式微服务云架构构建

1. 介绍 Commonservice-system是一个大型分布式、微服务、面向企业的JavaEE体系快速研发平台,基于模块化、服务化、原子化、热插拔的设计思想,使用成熟领先的无商业限制的主流开源技术构建。采用服务化的组件开发模式,可实现复杂的业务功能。…

电脑开不了机怎么办?排查这3种情况

电脑开不了机不一定是电脑故障损坏的问题,也可能是硬件或者是线路松动导致的。电脑开不了机的原因有很多,电脑开不了机怎么办?我们先来了解下主要是哪些原因,排查出原因才好对症下药。 操作环境: 演示机型:…

Leetcode刷题注意点

时间复杂度:一个句子被执行多少次。 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度 列表可以用.append() 添加数据 字符串 用 s q 这个写法。 03 此题关键是哈希表的运用。 dic set() 表示取出nums中的key 并且set里面元素不重复 53…

python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用

普通数码相机记录了红、绿、蓝三种波长的光,多光谱成像技术除了记录这三种波长光之外,还可以记录其他波长(例如:近红外、热红外等)光的信息。与昂贵、不易获取的高光谱、高空间分辨率卫星数据相比,中等分辨…

2023年广州Java培训机构排行榜来啦,快来围观!

到底哪个Java培训机构靠谱?Java培训怎么选?如何在千万培训机构中一眼寻觅到自己的唯一所爱?别疑惑,别迷茫,小编带着2023最新数据来了,保证你看完有“山重水复疑无路,柳暗花明又一村”的豁然开朗感&#xf…

在线 OJ 项目(四) · 前端设计与项目总结

一、页面设计题目列表页题目详情页二、获取到后台数据实现思路遇到换行问题小结引入 ace.js三、项目总结接下来将实现 online-oj 项目的前端界面。 先随便从各大网站上下载网页模板~ 因为好看的前端网页设计需要美工的,我们只是程序员… 一、页面设计 但是我们可…

【可解释性机器学习】详解Python的可解释机器学习库:SHAP

详解Python的可解释机器学习库:SHAPSHAP介绍SHAP的用途SHAP的工作原理解释器Explainer局部可解释性Local Interper单个prediction的解释多个预测的解释获取单个样本的Top N个特征值及其对应的SHAP值全局可解释性Global Interpersummary_plotFeature ImportanceInter…