zoukankan      html  css  js  c++  java
  • IP 转发分组的流程

    IP 转发分组的流程

    数据路由:路由器在不同网段转发数据包;

    网络畅通的条件:数据包能去能回;

    • 从源网络发出时,沿途的每一个路由器必须知道到目标网络下一跳给哪个接口;

    • 从目标网络返回时,沿途的每一个路由器必须知道到源网络下一跳给哪个接口;

    image-20200122200825717

    可以看到网段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
    

    image-20200122211643326

    image-20200122211748997

    可以发现Windows的默认网关就是默认路由。

    只加IP地址和子网掩码没设置网关的话,就到不了其他网段,也就是说不知道到其他网段的路由。

    以下为为计算机添加路由表的命令:

    route add 0.0.0.0 mask 0.0.0.0 10.7.86.1
    

    三个地址分别是网络目标IP地址、 网络掩码和网关。

    现实意义:例子

    image-20200122220610644

    • 问题:一个计算机有两个网卡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上添加路由表的意义。

      经验:存在多张网卡时,禁用所需使用的那张网卡之外的其余网卡,保证只有一个默认网关,防止出现路由表错误。

      再如:

    image-20200123143503747

    PC0一个网卡连接Internet把A设为网关,另一网卡连接一个交换机组成的内网,内网内的计算机通过PC0连接Internet,所以内网计算机需要把B作为网关,但是PC0连接内网的网卡不用设置网关,否则会出现路由表错误。

    故障判断规律:通与断的次数相当很大可能是路由问题;通的次数多,断的次数少很大可能是网络阻塞的问题。


    网络负载均衡

    配置和验证网络负载均衡

    如图所示:192.168.0.0/24网段的PC0到192.168.3.0/24网段的PC1有两条路①和②,可以通过设置网络中路由器的路由来实现:PC0到PC1走线路① / ②,PC1到PC0走线路② / ①。从而实现负载均衡控制。

    image-20200122224624860

    图中:

    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 个前缀构成的二叉线索:

    image-20200122231450448

    先将前缀按相同的位排列好,再按每位逐级分支查找。如现分为01开头和10开头的,在分别每一位分支查找下去,查找深度是5。如果为32位前缀构成的二差线索查找深度为32。

  • 相关阅读:
    纪念这一天,我找到了实习工作
    在编程的道路上坚定地走下去
    今天是1024程序员节
    趣谈函数调用与返回值
    为期3个月的实训结束了,有感而发
    学习编程时遇到难点怎么办?
    今天学习了安卓中的UI线程
    Java程序员要掌握的常用快捷键
    我是一个注重基础的人
    我也有自己的小家啦
  • 原文地址:https://www.cnblogs.com/AhuntSun-blog/p/12230700.html
Copyright © 2011-2022 走看看