《跟唐老师学习云网络》 -第4篇 router路咋走啊【华为云技术分享】
【摘要】 好了,到这里至少你应该能看懂路由表信息了。给你一个目的IP,你也应该知道它会使用哪一条路由了。 路怎么走就看骚年你了~
一、路由
其实关于网络大家遇到最多的问题就是:卧 槽,为什么不通啊!
比这个运气好一点的:卧 槽,过去通,回来不通啊!
不慌,看完这一章节,这种问题下次碰到基本自己就能搞定。首先我们希望两台机子能通,那你得知道通是怎么通的,也就是通的时候,路是怎么走的。
大多数情况你(这里的你是指你的报文)走过去的路,跟走回来的路是一样的。
少数情况下,你走大路过去,然后绕小路回来。这个都不影响找路的原理。
举个栗子:当你在杭州,想去黑龙江,应该往北走。一般情况你不会从深圳绕一把。万一线路中断,你从西安绕一下也行。
整体而言:具体报文怎么走,就是路由的问题了。
二、路由表
如果有你想要懂网络,这张表是一定要看懂的。
找台Linux主机,输入#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.120.174.1 0.0.0.0 UG 0 0 0 eth0
10.120.174.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
注意,这里的-n参数不是必须的,但是建议带上,其他很多网络相关的命令,也都建议带-n参数。
(原因:route命令,默认会把IP地址翻译为hostname,但是IP->Hostname这个动作,就会去查DNS,有时候DNS配置的不好,例如查不通,那么route命令就会感觉卡住了一样。)
这个表的第一行:
Destination Gateway Genmask Flags Metric Ref Use Iface
红色部分是基础,含义分别为:
Destination Gateway Genmask Iface
目的IP 网关 掩码 网卡
(目的地, 中转站, 目的地范围, 哪个门出发)
先看中间一条路由记录
目的地 中转站 目的地范围, 哪个门出发
10.120.174.0 0.0.0.0 255.255.254.0 eth0
首先,目的地址是 10.120.174.0,范围是 255.255.254.0
根据上节的掩码原理,我们知道掩码是23位的,也就是只有前面23不动,只有最后9位可以动。
两者一结合(与),就知道了网络目的范围:
(图:目的地址)
(图:目的地范围)
两者结合的范围为:10.120.174.0(可变部分全为0)~ 10.120.175.255(可变部分全为1),总共512个目的地址(IP)。
也就是所有这些目的IP地址在这个范围内的,在选择路由时,都匹配这条路由记录。
那这条记录是这么说的:当匹配到这条记录时,中转站不需要(gateway为0),只管把报文往eth0这个门扔出去就行了(Iface为eth0)。
这是什么意思呢?就是这个IP范围的大家都在一个小的局域网络里面,你喊一声,大家都能知道,不需要中转。
再看最后一条路由记录
目的地 中转站 目的地范围, 哪个门出发
172.17.0.0 0.0.0.0 255.255.0.0 docker0
这条记录跟上面一条基本一样含义,目的地址 & 目的地范围,结合后得出:
目标地址为 172.17.0.0~172.17.255.255的报文只管往网卡docker0上面扔就是了。
最后看第一条路由记录
目的地 中转站 目的地范围, 哪个门出发
0.0.0.0 10.120.174.1 0.0.0.0 eth0
这里目的地址为0,表示default默认路由,意思是:当你的目的地址实在是找不到其他能够匹配的路由记录时,就用这一条吧。
而这一条默认的规则的意思是:往eth0网卡丢,先送到中转站 10.120.174.1。 后面的事情你不用管了(意思是让中转站去解决后面的路由)
比如我想要:
# ping 10.184.43.7
的时侯,这个目的IP,明显即不符合中间那条记录的范围,也不符合最后一条记录的范围。怎么只能使用这一条默认记录了。
再来细看这条默认路由记录:
这条记录说:当匹配到这条记录时,中转站要设置为10.120.174.1,并且报文要往eth0这个门扔出去(Iface为eth0)。
这里隐含的表示了,中转站你必须能到达,否则网络会不通。
报文如何导到中转站
好了,那我们来看看报文是怎么与中转站通的。 这里中转站IP为10.120.174.1,要想把报文送到这里去,我们应该怎么走?
咦,又是路怎么走的问题,这不是上面刚学的嘛。
来,跟我一起匹配,第三条行不行?不行。
第二条行不行,行!
刚好是第二条路由记录的范围(10.120.174.0~10.120.175.255),那就用第二条路由指定的方式发送(报文从eth0扔出去就行了)。
很明显的是在递归查找路由表。同时,这也说明中转站就在同一个局域网内嘛。
即报文送到网关,也是要查找路由表的。
小结
通过把所有的路由表都匹配一遍,你会发现,任意的目的IP,都能匹配到路由表中的一条(因为你有一个default规则)。
匹配的过程你就当做是“人工”一个一个的查。如果你连路怎么走都没有设置好,网络又怎么能通呢?
三、本机IP地址对路由的影响
先看一下本机的IP信息:
# ifconfig
docker0 Link encap:Ethernet HWaddr ::e6:::
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
eth0 Link encap:Ethernet HWaddr :6e:d4::f8:
inet addr:10.120.175.166 Bcast:10.120.175.255 Mask:255.255.254.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
你会发现,每个网卡如果有IP,就会在路由表里面增加一条路由记录。比如你把一个网卡down掉,再看route表,就会发现少了一条路由记录。再次up这个网卡的时候,路由记录又回来了。
并且,这条路由的Destination(目的地范围)和你设置的这个IP的掩码是一致的。例如这里,我本机ip为10.120.175.166,掩码为255.255.254.0。所以路由就是IP&掩码=10.120.174.0。
为什么?这个不是很明显么,你新加了一个网卡,插上了网线,还拿到了新IP,说明你这个网卡接入了一个新的局域网啊,你当然多了一条新的路可以走了。
四、包含问题
当两条路由记录互相包含时怎么办?
比如:
172.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
这个时候,如果想要
# ping 172.17.0.2
是用哪条路由记录呢?
首先,如果你之前的课有认真学习,那么你会知道,这里不同的掩码,就代表了不同的网络。这时脑海中应该会展现两条不同的路。选哪条路,当然是选择最匹配的那一条了 :-)
(例如default记录,其实任意目的IP都能匹配,但它不是最精准匹配的)
其次,如果出现这种情况,说明你的网络规格有待改进,虽然这不会出问题,但是由于会影响人的理解,所以建议不要这样子设置。
除非你非常明确地故意这么规划,例如flannel的网络设置:
root@k8s-node1:~# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.0.0 0.0.0.0 255.255.0.0 U flannel0 // 跨节点容器的包
10.1.15.0 0.0.0.0 255.255.255.0 U docker0 // 本节点容器的包
为了将所有的容器(容器也可以看作一个独立的主机,后面章节会介绍)连在一起,首先把所有主机上面的容器作为大的网络一部分,然后每台互相独立的主机里面的容器又单独划分小的网络。且任意两个单独的小子网不重复。
注意站在本机的角度看来,这是两个独立网络,只是在管理员视角看大家在一个大的网络内。
主机对待报文,是作完全独立的判断:是本机的 or 不是本机的。
所以发给容器的报文,都符合:不是本机的。 那么就要开始匹配路由表啦。匹配过程见上面的课程。
好了,到这里至少你应该能看懂路由表信息了。给你一个目的IP,你也应该知道它会使用哪一条路由了。
路怎么走就看骚年你了~
作者:tsjsdbd
HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。
《跟唐老师学习云网络》 -第4篇 router路咋走啊【华为云技术分享】的更多相关文章
- 云上领跑,快人一步:华为云抢先发布Redis5.0
12月17日,华为云在DCS2.0的基础上,快人一步,抢先推出了新的Redis 5.0产品,这是一个崭新的突破.目前国内在缓存领域的发展普遍停留在Redis4.0阶段,华为云率先发布了Redis5.0 ...
- 【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现
当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的.以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的. 一.简单介绍下Kubernetes 略..容器集群 ...
- 【跟唐老师学习云网络】 - 第7篇 Tcpdump大杀器抓包
[摘要] 前面章节的网络协议栈相关的信息建议大家多学习一遍,因为这些都是最基础的东西,想玩好云网络必备基本功.. 一.上帝视角 之前提到过定位问题可以开启上帝视角,那么如何开启就要依靠tcpdump这 ...
- 《跟唐老师学习云网络》 -第5篇 Ping喂报文
[摘要] 这一章节你的角色是国王,你要派一个小兵去对方打探一下.是站在你的角度看这个小兵.哦,对了,这个小兵的名字叫"喂". 一.Ping命令介绍 ping就是用来检测一下网络能不 ...
- 车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#
万法同源 一直觉得可能自己不太适合搞技术,更适合在天桥底下支个摊子说书.技术的东西从来没人关注,扯东扯西的文章莫名的火.之前的一篇文章MarkDown添加图片的三种方式不管是在技术为主的CSDN还是娱 ...
- 【跟唐老师学习云网络】-第8篇 iptables - filter过滤功能
[摘要] 前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜.比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题. 一.背景介绍 前面的各种协议已经可以把基本可 ...
- 【跟唐老师学习云网络】 - 第6篇 ARP你在哪
[摘要] 这一章节你的角色就是ping报文这个"使者",你要去往目的地,然后回到本机.然而目的地路漫漫,不知道要经过多少个小地盘(局域网),没两把刷子也不好行走江湖.所以你作为使者 ...
- python基础学习笔记——网络编程(协议篇)
一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...
- 技术解密 |阿里云多媒体 AI 团队拿下 CVPR2021 5 冠 1 亚成绩的技术分享
6 月 19-25 日,备受全球瞩目的国际顶级视觉会议 CVPR2021(Computer Vision and Pattern Recognition,即国际机器视觉与模式识别)在线上举行,但依然人 ...
随机推荐
- MQTT实战2 - 使用MQTTnet实现mqtt通信
MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码 QQ:505645074 MQTT ...
- java查看进程:jps命令
java查看进程:jps命令 jps(Java Virtual Machine Process Status Tool) 是JDK .5提供的一个显示当前所有java进程pid的命令,简单实用,非常适 ...
- if语句编写Mysql备份脚本
#!/bin/bash #auto bakcup mysql db #by authors zgh #define backup path BAK_DIR=/data/backup/`date +%Y ...
- JS高阶---函数
[问题] [主体] 1.什么是函数? ①实现特定功能 ②多条语句的封装体 ③可以重复执行的代码块 2.为什么用函数? 提高代码的复用性,提升效率 3.如何定义函数? ①函数声明定义 ②函数表达式定义③ ...
- LVS---linux虚拟服务(一)
一.集群cluster 1.集群的产生 2.集群的类型 3.分布式系统 4.集群和分布式的区别 二.LVS 1.为什么使用LVS? 2.LVS术语 3.LVS架构 4.LVS集群的类型 5.关于会话保 ...
- 201871010125 王玉江 《面向对象程序设计(java)》 第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wswyj/ 作业学习目 ...
- Linux简单命令的使用
1.linux上怎么快速删除一个目录在linux中删除一个目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可解决.直接rm就可以了,不过要加两 ...
- 前端之CSS(下)
文本属性 ## 文字对齐 #text-align属性规定元素中文本的水平对齐方式 left: 左边对齐 默认值 right: 右对齐 center: 居中对齐 justify: 两端对齐 ## 文字装 ...
- 微信小程序 - 组件 | 自定义组件 | 组件事件传递页面
组件 小程序允许我们使用自定义组件的方式来构建页面 类似Vue的小组件 自定义组件 类似于页面,一个自定义组件由 json, wxml, wxss, js 4个文件组成 1.创建 1.创建compon ...
- Codeforces Round #549 (Div. 2) F 数形结合 + 凸包(新坑)
https://codeforces.com/contest/1143/problem/F 题意 有n条形如\(y=x^2+bx+c\)的抛物线,问有多少条抛物线上方没有其他抛物线的交点 题解 \(y ...