Linux:深入理解网络层

06-02 558阅读

Linux:深入理解网络层

网络层在复杂的网络环境中确定一个合适的路径.传输到指定的网络中

一、网络层的理解

问题1:为什么要有网络层的概念呢??

——>我们先来讲一个故事:

      假设我在学校里被誉为数学大神,是因为我的数学有考满分的能力,但是这种形容只能说明我有很大概率能考满分,而不是说我一定能考满分!!

        那我要怎么保证每次都考满分呢??假设我的三叔是学校的教导主任,当我发现这次考试因为粗心没考满分的时候,三叔就会公布此次考试无效,然后让教务处重新出一份试卷再考一次,多考几次那么基本可以保证满分了!!

        而此时我是一个具备满分能力的执行者(前提),而三叔是一可以通过重考的决策帮助我百分百考满分的人,所以能力+策略可以完美地完成这件事

        此时我就相当于是IP层(跑腿的能力),而三叔就相当于是TCP层(提供可靠性决策)。所以总的来说,用户需要的是一种可以将数据可靠地跨网络从A主机送到B主机的能力,而其中IP协议的本质工作就是提供一种能力,将数据跨网络从A主机送到B主机!!而TCP协议就是提供策略保证这个过程的可靠性。 

Linux:深入理解网络层

 问题2:数据是如何通过IP层发送给给对方的呢??

——>我们常说唐僧自东土大唐而来要去往西天取经,其中西天是目标城市(网络)、大雷音寺是目标地点(主机)、佛祖就是目标人物(进程)。

      找到主机后将数据交给具体进程是传输层的事情,而找到主机是IP层的事情,所以这就需要我们对所有的主机进行标识,通过源IP和目的IP来标识源主机和目的主机!

     而要找到该主机,我们还需要确认他在哪个局域网里面,所以IP=目标网络+目标主机!(让我们可以在构建网络的时候为将来快速定位一台主机提供基础保证!!) 

    所以我们的IP层会先找到目标网络(通过路由器转发),等找到了之后,再在该网络里用mac地址去定位具体的主机,然后将数据传给他!! 

Linux:深入理解网络层

问题3:如何理解  目标网络+目标主机可以快速定位呢??

——> 我们来讲个故事

    其实我们生活在一个精心设计的世界里,假设我们学校的学号为  学院+学号。  前三位标识学院,后三位标识学生序号。假设计算机学院的编号是123,理学院是124,材料是125,电气是432,经管是223。我们每个学院都有一个群,而每个学院的学生会主席也有一个群。

  我是计算机123009学生,我有一天捡到了一个钱包,上面写的是432008,但是我只知道计算机学院开头是123,但是这个432我并不清楚,于是我只能去学校门口一个个问,但是查找本质上是排除,因此这种线性遍历的效率太低了!! 

  于是我又想了一个方法,虽然我不知道432是哪个学院的,但是我们学生会主席和各学院的主席都在一个群里,所以他肯定知道432是哪个学员的!!于是我就在我们的学院群里面@计算机学生会主席,然后我们主席一看这个432是电气的,于是就在主席群里@电气的学生会主席 ,然后电气主席看到了再在他们学员群里@432008同学!!这样就很快找到了 !!为什么归还的效率变快的呢??因为我们排除的效率变高了!!当我们确认432是电气学院的时候,其实就已经将其他所有学院的人都排除了!!

     同理,学院就相当于是目标网络,而学生就相当于是目标主机,如果我们能够优先定位到目标网络,就可以排除一大堆其他网络,因此我们的IP在设计的时候肯定也得遵循这种方式!!

Linux:深入理解网络层

二、IP协议的报头 

主机: 配有IP地址, 但是不进行路由控制的设备;

路由器: 即配有IP地址, 又能进行路由控制;

节点: 主机和路由器的统 称;

 ​​​Linux:深入理解网络层

1、4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.

2、4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因此IP头部最大长度是60字节.

     通过头部长度-20可以知道是否携带选项 

3、8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.

      服务类型就是一个自主策略,因为IP的路径选择是有多种方案的,而我们可以根据具体的需求去选择并给路由器一个提供转发的策略!

4、16位总长度(total length): IP数据报整体占多少个字节.

     我们会发现IP报头有长度!说明他也是面向数据报形式一块块发送的!!

      而字节流动是TCP层给用户层提供的一个概念(就像你看到十字路口的人流一样,在你眼里是人流,但是其实他们是从各个方向走过来的) 他想表明的含义就是你别管我里层的数据从哪来的,是什么类型的,你就统一当做字节流去处理!!而IP层显然是没有这个概念的!!

    所以只有目标主机能够看到TCP报文,中间路由器只能看到网络层,就相当于快递只知道快递去哪但是不知道快递是什么!! 

Linux:深入理解网络层

5、16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.

6、3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.

7、13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片 在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了).

     以上三个是为后面的切片做准备! 

8、8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环  

      因为网络是错综复杂的,如果也一个报文一直转发但是却一直找不到目标地址,就会出现大量的游离报文,所以为了避免这种情况就会设置一个生存时间!! 

9、8位协议: 表示上层协议的类型

     这个可以得知我们要IP层的有效载荷交付给上层的哪个协议

10、16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.

11、32位源地址和32位目标地址: 表示发送端和接收端.

 我们可以根据这个来让路由器进行路径选择!! 

12、选项字段(不定长, 最多40字节): 

问题1:IP层是如何将报头和有效载荷分离的呢??

---——>固定长度(20字节)+自描述字段(首部长度+总长度)!!

问题2: 如何将有效载荷交付给上层呢??

——>32位源IP和目的IP是用来定位IP地址的,而其中8位协议字段是用来定位该主机的上层协议的(定位端口)

Linux:深入理解网络层

 问题3:数据在传输过程中光电信号是如何维持的?

--——>不要觉得数据报丢出去就没事了,因为报文是用光电信号传输的,所以有无数个中间设备要维持数据来发送给远端,而01的二进制信号会随着时间增加、距离增加而信号慢慢变弱,因此我们的网络设计者运营商考虑了这一点,因此在物理层有一个集线器的概念,当信号衰减的时候可以做信号放大,帮助我们进行长距离传输!(有点像我们生活中的电力一样,电力不足了可以通过变压放大来让我们进行长距离的传输)

三、网段划分(重要)

3.1 路由器的初步理解

我们的快读定位离不开路由器的转发

1、路由器本质上也是特定一个子网的主机,也有自己的ip地址

2、因为路由器需要转发别的网络,所以路由器一定至少要连接两个子网,路由器也就相当于同时在两个子网!(也说明了路由器可以配置多个IP,也就是需要多张网卡)

3、路由器一般是一个子网中的第一台设备,一般他的IP地址都是:网络号.1

4、路由器不仅仅可以用于IP报文的转发,还可以用来构建局域网!!因此该局域网里的主机号IP都是由该路由器去管理的(确保IP地址不会重复)

5、路由器有WAN口ip和LAN口ip

6、家用路由器理解上和运营商的路由器性质是类似的

3.2 IP地址的理解

IP地址分为两个部分, 网络号和主机号

网络号: 保证相互连接的两个网段具有不同的标识;

主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

Linux:深入理解网络层

不同的子网其实就是把网络号相同的主机放到一起.  

       如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复.  

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.  

那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.

有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.

一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

3.3 IP地址的划分

IP地址有多少个呢?? 2的32次方=42亿+ 其实现在已经远远不够了

3.3.1 早期方案

      过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP])。

Linux:深入理解网络层

A类 0.0.0.0到127.255.255.255

B类 128.0.0.0到191.255.255.255

C类 192.0.0.0到223.255.255.255

D类 224.0.0.0到239.255.255.255

E类 240.0.0.0到247.255.255.255  

     随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址;

例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.

然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

 3.3.2 子网掩码

针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;

将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;

网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;Linux:深入理解网络层

Linux:深入理解网络层

因为子网掩码的前28个是1,这说明只有后4位是用来表示主机号的! 

一般来说子网掩码的书写方式是Linux:深入理解网络层表明有几个1

 问题1:怎么理解这个&呢??为什么他可以做到让IP地址和A类、B类还是C类无关呢??

——> 因为子网掩码可以对IP32位,进行任意的区域划分!!!

     比方说我当前有一个B类IP地址,按道理来说我可以有2的16次方台主机,但是我当前的子网里只需要14个机器,那么直接使用显然会造成大量的浪费。

     而后有了子网掩码,使得我们可以自己去做内网划分,比如我发现其实我只要4个bit位就可以表示14台主机了,因此我规定只有后面4位表示主机号,因此我们可以用IP/28!!这样我一次最多可以有14个IP地址(16-2)这样提高了地址的利用率 (一个B网络就可以使用2的12次方个大小为14个主机号的网络)

Linux:深入理解网络层

 问题2:子网掩码的二次理解

——>

        引入额外的子网掩码而不是直接修改原来的方案,这是对历史的尊重

       多几个1是能够让主机数变得更少,少几个1是可以让主机数变得更多 

        子网掩码和分类划分的方法都是在路由器中去配置好的!!我们作为用户并没有太多的感觉,你报文发送的时候只看到了IP,其实子网掩码是在经历的一个个网络路由器中去操作的,因此我们眼中的网络世界其实就是路由器的世界!!

3.3.3 特殊的IP地址 

将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;

将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

Linux:深入理解网络层

四、IP地址数量的限制 

       我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.

         这意味着, 一共只有43亿台主机能接入网络么?

         实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡 都需要配置一个或多个IP地址.

          CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

1、动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;(其实就是共享IP)

2、NAT技术(后面会重点介绍);

3、IPv6:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址; 但是目前IPv6还没有普及; (重大变革!!)

问题:IPv6最成熟的就是中国了(因为ipv4是老外的),但是为什么ipV6出现了这么久还是没普及呢??

——>因为TCP IP协议栈是在OS内部的,你如果要改的话就得先把全世界的OS都给换了!!除此之外还得要求全世界的路由器都得支持IPV6!!这是很难做到的,因为互联网太大了!!

        但是如果有一天我们中国的网络比全世界的网络加起来还要大(网络的大小以前可以说是由人口决定,也可以说是当地经济发展设施建设决定的,但是最本质的是可入网设备的多少决定的!!!)

      比如说我们未来的物联网设备、汽车等各种设备需要独立控制,那么入网设备就会剧增!!从而孵化出新的经济场景和互联网公司,给国家带来更大的税收!!科学技术推动了生产力的进步!!一旦影响力很大了,那么他们想不想学我们赚很多钱呢??想的话我们自然就有动力去换IPV6了!!

     国家也在想办法推动,会要求互联网公司在搭建内网的时候必须支持IPV6,其实目前默认的路由器也会支持,所以这其实是一个系统性的工程!! 

五、理解运营商

问题1:我们是怎么上网的??

如果你是在城镇或者农村的话,你想上网前就得先联系运营商的工作人员把网线拉到你家里

如果你家里在城市里面,国家建设的时候就要求必须光纤(塑料壳里面包了很多玻璃丝)入户。

Linux:深入理解网络层

除此之外还需要两个设备,一个设备叫做调制解调器(猫),还需要有一台家用路由器

光纤(从运营商哪里接过来的)传递的是光电信号,但是计算机不认识,所以调制解调器会将他转变为数字信号(可以被识别的01序列)然后交给路由器

 除此之外,你还得交钱!!(早些年智能手机还不是很普及的时候会送你一台手机和电话卡,然后你要上网的话就得交钱往电话卡收费)    交钱可以获得上网的账号和密码(运营商会在你的家用路由器里把他们配置进去,你只要不欠费你就可以访问外网了)  相当于是征得了运营商的许可  

家用路由器还有一个作用是构建局域网, 当你把路由器打开的时候,因为里面配置了被运营商许可的账号和密码,所以你可以上网了,但是你并不希望你的邻居也可以用你的网络,因此家用路由器本身可以有路由器账号和密码,用来给用户链接路由器做登录认证的!!

    所以有路由器两套密码 ,一套是经过运营商认证可以上网,一套是用来认证用户连接网络的!

 问题2:运营商的意义 

      首先我们要知道我们国家的互联网应用几乎在世界领域上是数一数二的,什么京东、支付宝、闲鱼等应用都得益于我们国家的互联网公司,但是之所以有这些公司,他们背后有一些角色很重要,那就是运营商!!(千万不要觉得运营商天天催话费,不交的话就不让打电话而特别仇视他,虽然在历史的发展中他有一些乱收费的事情,但是我们不能忽略他的一个积极和重大意义)

      因为这种应用的使用前提就是得上网!!而上网之前要做的就是网络基础设施建设!!因为只有这样才能让更多的网民入网,才能孵化更多的互联网公司!!

     但是因为网络基础设施建设回报周期太长了!!一般私人企业都是想赚快钱,所以为了能够推动网络设施的建设,国家会想方设法在这方面大力支持!!而这些运营商就会垄断这个网络建设的行业。

      以前流量费很贵,现在流量费变便宜了!!这也是为了能够让更多的人参与进来,不光是城市,还有农村也要有基层的工作人员去给你做工作!!

     我们会发现如果国家不逼着他们运营商的做建设的话,那么就不会有后面那么多大型互联网私企,就不会有那么多技术发展带来的时代红利!!

问题3:国家推动网络建设的意义

       比方说国家大力发展滴滴,因为出租车越多,地方政府就能发更多的牌照,赚更多的钱,但是滴滴一旦进来了,因为有国家的支持,你地方政府还是可以发,但是你不能拦住滴滴的发展,所以他们并不欢迎。

       比方说国家发展支付宝,银行其实也可以线上支付只不过他做得没有支付宝好,大家都用支付宝那么存钱给银行的就少了。所以银行并不欢迎支付宝

      所以我们会发现国家存在的意义就是统筹全局!!一些新技术的出现总会有一部分人不喜欢、不愿意去改变,但如果整体的趋势就是好的,那么国家就需要去鼓励他们来帮助他们把影响力做大!!(下一盘大棋)

问题4:为啥互联网就业就业环境不好呢??

1、好和不好是需要对比的,这个跟国家当前经济发展所处的环境和阶段是有关系的,也跟周边环境有关系,而且跟人的预期也有关系。所以其实大家并不敢盲目去扩张业务。

2、我们国家互联网发展到一定程度也会有问题,有些互联网公司做事情会没有底线,比如很多公司但是想做团购买菜,但是这样的话会让那些摆摊卖菜的小商小贩无法生存,我是希望你互联网公司创造岗位的,而不是让你搞得别人没岗位,做的太过分影响就太大了!!所以国家会出面进行管控!! 

六、理解全球网络

IP是一份大资源 。所以其实世界上的ipv4是被划分的

Linux:深入理解网络层

 一般来说IP地址的划分不是根据国家来划分的,而是根据国家组织地区人口综合评估来分发的(比如说中国网络设施建设好,入网设备多,那么就发分一点,但是印度人多但是网络建设很差,入网的设施很少,那就分少一点) 

        那会不会分配不均吵起来呢??一般是不会的,因为本身IP的存在就是为了让尽可能更多的人入网的,这样才能赚钱!!

 那么IP具体是怎么分配的呢????

(举例,并不是真的这么分)比方说全国一百九十多个地方,那么我们就可以用前8个bit位来标识,然后我们中国有23个省,那么就需要5个bit位  然后再具体细分 你会发现这样的话其实IP地址已经严重不够了!!所以这些IP地址是不足以支撑这么多人去使用的!!

Linux:深入理解网络层

      所以真实的网络情况是,他用公网IP来构建全球网络,然后划分到一定程度后(某个地区),比如划分到西安市,再由当地的运营商拿到具体的公网IP后,再根据这个公网IP来构建内网!

     所以我们所使用的都是内网IP,然后再通过运营商的路由器访问到公网IP   

     公网+私网=互联网 任何一个人想访问网络之前都需要经过运营的网络(所以我们常说的翻墙,这个墙就是在运营商那里)这也是为什么我们一欠费就上不了网的原因  以及之前在信息没加密的时候会出现运营商劫持的问题

七、公有IP和私有IP

Linux:深入理解网络层

 IP被硬性分为了公有IP和私有IP,其实我们一般使用的都是私有IP,而云服务器是用的公网IPLinux:深入理解网络层

     如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都 可以,但是RFC1918规定了用于组建局域网的私有IP地址

10.*,前8位是网络号,共16,777,216个地址

172.16.到172.31.,前12位是网络号,共1,048,576个地址

192.168.*,前16位是网络号,共65,536个地址

包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP); 

私有IP类型具体你选择哪一个,看你的构建的子网范围大不大,大的话选第一个,小的话选第三个(我们家里用的大部分都是192.168 )

目标ip一般是公有ip,是私有ip的时候当且仅当在内网中 

Linux:深入理解网络层

怎么解决上面的问题呢??我们会发现我们的路由器都有自己的子网IP和WAN口IP ,而我们家用路由器的WAN口IP就是运营商路由器的内网IP。所以报文在从路由器出去的时候会做一种策略:将源IP替换成每一个路由的的WAN口IP!!

交给公网之前Linux:深入理解网络层  

交给公网之后 Linux:深入理解网络层这样至少可以将响应报文先传给运营商的入口路由器

私有IP不断被替换的过程就是NAP技术!! 

1、一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).

2、路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.

3、不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之 间的IP地址就可以重复了.

4、每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,

最外层的运营商路由器, WAN口IP就是一个公网IP了.

5、子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地 址转换).

6、如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

问题1:一个子网如果有两台路由器的话,我怎么知道该去哪个路由器呢??

----->路由器之间在内网是可以互相通信的,可以知道彼此的联网情况!一般来说我们自己的子网有两台路由器的情况是比较少见的!!但是运营商的子网路由器一般就比较多了!!! 

问题2:公司是不是这样的呢??

---->公司也是类似的!!因为公司也要给你发回数据,所以他们也是要给运营商交钱的

问题3:为什么要这么做呢??

——>主要是因为IP地址不足!!所以这种方法可以通过创建更多相同的内网IP来让更多人入网,这也是NAT技术的实际意义! 

八、路由

在复杂的网络结构中, 找出一条通往终点的路线;(通过目的IP进行路径选择)

Linux:深入理解网络层

路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.

所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间

Linux:深入理解网络层

IP数据包的传输过程也和问路一样 

当IP数据包, 到达路由器时, 路由器会先查看目的IP;

路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;

依次反复, 一直到达目标IP地址;

 那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表

Linux:深入理解网络层 路由表可以使用route命令查看(本地主机也有路由表)

如果目的IP命中了路由表, 就直接转发;(查路由表就是看目标主机的IP&Genmask是否等于Destination)

路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

 假设某主机上的网络接口配置和路由表如下:

Linux:深入理解网络层

        这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;

Destination是目的网络地址

Genmask是子网掩码

Gateway是下一跳地址

face是发送接口

Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

 转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3

跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符

再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出 去;

由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转 发;

转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2

依次和路由表前几项进行对比, 发现都不匹配;

按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;

由192.168.10.1路由器根据它的路由表决定下一跳地址;

问题1:路由表查询的结果是什么呢??

——> 其实有点像我们刚考上大学去一个陌生的地方上大学,下了火车的时候,我们找不到路,只能问人。无非就以下结果:

1、不知道(基本不存在这种情况,因为这样的话路由器本身设计就有bug  所以不考虑) 

2、给你具体下一跳

3、路由器不清楚,但是转入默认路由(一般是同网段的另一台路由器  )

      主机会先查自己的路由表,然后当发现目的IP和我的网络号不一致的话,说明我的目标IP一定不在我这个子网内,所以我就要去我子网里设置的缺省路由器的路由表去查(内网之间的路由器是可以互相知道对方子网的连接情况的),因为他里面可能会有其他的子网, 如果还找不到的话,那就再去同网段的另一套路由器或许能找到     

    反正不管怎么跳转 因为网络是精心设计的,所以一定可以越来越接近目标网络(一般一路的default上去都能到公网IP)

Linux:深入理解网络层

4、到达入口路由器

拿着目标IP&该路由器的子网掩码发现该网络就是我这个子网里面的!!

 因为IP=目标网络+目标主机,所以我们在进行转发的时候,我们先到达目标网络!

Linux:深入理解网络层

问题2:有关路由表生成算法(选学)

——> 路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由).调研一些相关的生成算法, 例如距离向量算法, LS算法, Dijkstra算法等.

当前主机也可以查

Linux:深入理解网络层

Linux:深入理解网络层

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码