IP 转发分组的流程
IP 转发分组的流程
数据路由:路由器在不同网段转发数据包;
网络畅通的条件:数据包能去能回;
从源网络发出时,沿途的每一个路由器必须知道到目标网络下一跳给哪个接口;
从目标网络返回时,沿途的每一个路由器必须知道到源网络下一跳给哪个接口;
可以看到网段1~5对应的地址主机号都是归零的,即配置路由器端口网段地址时主机号要归零。如端口B连接的网段2地址:172.16.0.0 / 24 。
如图所示,计算机PC0 ping PC1,网络要想通,要求沿途的路由器Router0、 Router1、 Router2和Router3都必须有到192.168.1.0/24网络的路由(路由器中存储路径的路由表中的信息),这样数据包才能到达PC1;
PC1要回应数据包给PC0,沿途所有的路由器必须有到192.168.0.0 /24网络的路由,这样数据包才能回来。
由于网段1和2直连路由器Router0,所以不用给Router0的路由表手动添加关于网段1和2的路径信息。但是Router0路由表内是没有与Router0非直连网段3 、4 、5的相关路径信息的,需要管理员手动添加。同理Router1直连网段2 、3,非直连网段1 、4 、5,所以需要手动添加网段1 、4 、5路径信息。这叫做静态路由。
举例:如上图,PC0想要访问Router0的B端口,由于不在同一网段,PC0先把数据包给Router0的A端口(网关),路由器Router0就会自动把数据包转给B端口。B端口收到数据包之后向PC0发出一个回复数据包,Router0直连1网段所以知道到PC0要怎么走,所以Router0自动把回复的数据包通过A端口转给PC0;数据包能去能回,所以PC0访问Router0的B端口时不用手动给Router0添加路径信息,Router0会自动中转数据包;
如果PC0想要访问Router1的C端口,同样不在同一个网段,PC0先把数据包给Router0的A端口,由于Router0直连1 、2网段,所以Router0知道去Router1的C端口怎么走,然后Router1自动把数据包转给C端口。C端口收到数据包之后向PC0发出一个回复数据包,但是Router1直连的是2 、3网段,与1网段非直连,所以如果不给Router1手动输入关于网段1的相关路径信息,Router1将无法把数据传回PC0,数据包能去不能回,造成通信失败。
因此,判断两个地址能否通过路由器自动中转数据,要看数据包在两个地址间是否能去能回。
查看Windows本地路由表
在命令行窗口输入以下命令:
route print
可以发现Windows的默认网关就是默认路由。
只加IP地址和子网掩码没设置网关的话,就到不了其他网段,也就是说不知道到其他网段的路由。
以下为为计算机添加路由表的命令:
route add 0.0.0.0 mask 0.0.0.0 10.7.86.1
三个地址分别是网络目标IP地址、 网络掩码和网关。
现实意义:例子
问题:一个计算机有两个网卡1和2,它们对应的网关分别是A和B;网卡1通过网关A访问网络,网卡2通过网关B访问企业内网;出现的问题为Internet上的其他计算机与该计算机通信时断时通。
原因:由于该计算机存在两个网关就意味着存在两个默认路由,也就意味着该计算机认为到其他网段有两条路径,但是却不知道一条路径通Internet,另一条路径通企业内网,而是认为两条路径是等价的,可以随意选择路径访问;
所以当Internet上的计算机如C “ping” PC-PT的时候时不时会造成丢包。因为计算机C向PC-PT发数据包时只能通过网关A这条路径,但是PC-PT给计算机C发送数据包时却认为通过网关A和B两条路径都可以,都等价;所以PC-PT发出的数据包一部分通过网关A路径正常发送到计算机C,另一部分数据包则通过网关C路径发送到企业内网导致丢包,造成访问速度变慢,这是因为发生丢包时上层协议会要求重传,所以只会导致通信速度变慢,而不会导致无法通信。
解决方案:删除网卡2的默认路由,手动添加路由:
route add 172.16.0.0 mask 255.255.255.0 172.16.0.1
这样设置之后,网卡1通过默认路由访问Internet,网卡2通过指定路由访问公司内网,彼此互不影响。这就是在Windows上添加路由表的意义。
经验:存在多张网卡时,禁用所需使用的那张网卡之外的其余网卡,保证只有一个默认网关,防止出现路由表错误。
再如:
PC0一个网卡连接Internet把A设为网关,另一网卡连接一个交换机组成的内网,内网内的计算机通过PC0连接Internet,所以内网计算机需要把B作为网关,但是PC0连接内网的网卡不用设置网关,否则会出现路由表错误。
故障判断规律:通与断的次数相当很大可能是路由问题;通的次数多,断的次数少很大可能是网络阻塞的问题。
网络负载均衡
配置和验证网络负载均衡
如图所示:192.168.0.0/24网段的PC0到192.168.3.0/24网段的PC1有两条路①和②,可以通过设置网络中路由器的路由来实现:PC0到PC1走线路① / ②,PC1到PC0走线路② / ①。从而实现负载均衡控制。
图中:
Router0直连192.168.2.0和192.168.1.0网段,所以只需要手动添加网段192.168.0.0和192.168.3.0的路由便可在Router0中实现PC0到PC1的数据自动中转。
Router1直连192.168.5.0和192.168.4.0网段,所以只需要手动添加网段192.168.0.0和192.168.3.0的路由便可在Router1中实现PC0到PC1的数据自动中转。
Router3中删除路由192.168.5.2(192.168.1.2)即可实现PC0到PC1只走路线①(②);
Router2中删除路由192.168.2.1(192.168.4.2)即可实现PC1到PC0只走路线②(①);
最长前缀匹配
- 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
- 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。
- 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。
例如:目的地址 D = 206.0.71.128。路由表中的路由:A:206.0.68.0 / 22;B:206.0.71.128 / 25 ;A路由主机位10位,B路由主机位7位,B路由更具体,根据最长前缀匹配原则匹配B路由。
使用二叉线索查找路由表
- 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。
例:用 5 个前缀构成的二叉线索:
先将前缀按相同的位排列好,再按每位逐级分支查找。如现分为01开头和10开头的,在分别每一位分支查找下去,查找深度是5。如果为32位前缀构成的二差线索查找深度为32。
IP 转发分组的流程的更多相关文章
- 调用altera IP核的仿真流程—下
调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...
- 调用altera IP核的仿真流程—上
调用altera IP核的仿真流程—上 在学习本节内容之后,请详细阅读<基于modelsim-SE的简单仿真流程>,因为本节是基于<基于modelsim-SE的简单仿真流程>的 ...
- linux ip 转发设置 ip_forward
工作原理: 内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应.由于源主机ip是私有的,禁止在公网使用,所以必须将数 ...
- ubuntu wireshark找不到网卡及开启IP转发
wireshark找不到网卡问题? 解决办法1:sudo wireshark 解决办法2: 1)添加用户组,我以wireshark为例 sudo groupadd wireshark 2)将dumpc ...
- Ubuntu 防火墙IP转发做NAT,内网集群共享网络(简单)
服务器架构: 系统: Ubuntu 16.04 x64 使用自带防火墙 UFW 操作: 在有公网的服务器上,进行防火墙基本操作开启自己所需业务的端口,并按下方设置启动NAT: 其他内网机器修改网关或者 ...
- Linux下启用IP转发功能(主要针对Ubuntu的使用)
说明:以下的操作只要在Linux下都是通用的. Linux发行版默认情况下是不开启IP转发功能的.如果架设一个Linux路由或者VPN服务就需要开启该服务. 1.通过访问sysctl的内核ipv4.i ...
- Linux上用IP转发使内部网络连接互联网
IP转发的概念: 使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络.所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器. 1. 启用 IPv ...
- IP转发和子网路由
IP地址的分类 在TCP/IP协议中,协议栈分为4层.从上到下依次是应用层.运输层.网络层.网络接口层. IP协议就工作在网络层.IP协议将纷繁复杂的物理层协议屏蔽掉,对上层提供统一的描述和管理服务. ...
- CentOS7 下使用 Firewall防火墙系统封禁允许IP和端口的访问 端口转发 IP转发方法
CENTOS7的防火墙系统默认已经从iptable改成了firewall,使用方法也有所不同,下面是详细介绍 一.管理端口 列出 dmz 级别的被允许的进入端口 # firewall-cmd --zo ...
随机推荐
- 吴裕雄--天生自然 JAVA开发学习:继承
class 父类 { } class 子类 extends 父类 { } public class Penguin { private String name; private int id; pub ...
- Servlet&JSP复习笔记 02
1.Servlet获取请求参数 获取请求参数依靠的是表单元素的name属性,广泛意义来说id属性是给客户端使用的,name属性是服务器使用的. a.获取Name-Value的方法: - getPara ...
- mysql_secure_installation 安全安装(用于生产环境设置)
编译安装完mysql5.6,如果用于生产环境,最好执行mysql_secure_installation来做一些常规化安全设置. 需要提前将~mysql/bin加入环境变量 /apps/mysql// ...
- MFC的程序,不想显示窗口,任务栏里也不显示
在dialog的oninitdialog里设置如下属性,很简单,网上一些乱七八糟的做法,一行代码就能搞定啊 SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,S ...
- 再来看看Java的新特性——其他新特性
关于剩余Java8新特性知识点总结,包含:默认方法.Optional.CompletableFuture.时间相关. 默认方法 默认方法皆在帮助Java新功能可以兼容低版本JDK已开发的程序. 比如说 ...
- Java复习(三)类中的方法
3.1方法的控制流程 与C/C++类似 3.2异常处理 Java处理错误的方法 抛出(throw)异常 在方法的运行过程中,如果发生了异常,则该方法生成一个代表该异常的代码并把它交给运行时系统,运行时 ...
- 二十五、SSH服务企业级应用场景
一.需求分析: 要求所有服务器在同一个用户oldboy1系统用户下,实现A机器从本地分发数据到B\C机器上,在分发过程中不需要B\C的提示系统密码验证,除了分发功能,还需要可以批量查看客户上的cpu. ...
- shiro PermissionUtil
package org.linlinjava.litemall.admin.util; import org.apache.shiro.authz.annotation.RequiresPermiss ...
- LoggingService
package me.zhengjie.common.aop.log; import java.lang.annotation.ElementType; import java.lang.annota ...
- bzoj1076 奖励关(概率dp)(状态压缩)
BZOJ 1076 [SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...