Linux网络 | 理解运营商与网段划分、理解NAT技术和分片
前言:本节内容结束IP层。 主要带友友们理解一下运营商的作用以及网段划分。 另外也要理解一下分片,什么是分片以及NAT技术。 那么废话不多说, 开始我们的学习吧!
ps:本节内容友友们最好了解一下IP层的报文哦!
目录
理解运营商
网段划分的理解(全球互联网的理解)
私有IP和私有网络
NAT技术
为什么使用NAT技术
路由
编辑 查路由表的过程
路由查表得结果
谈谈分片
理解运营商
我们是怎么上网的?
首先,我们如果是在农村里面,就要将一根网线拉到家里面,这就对映了城市里面的光纤入户。然后, 我们入网还需要两个设备:调制解调器 (俗称猫) 、路由器。
然后光纤的一端连接猫。这个光线的里面的玻璃丝就是用来传递光电信号,也叫模拟信号。调制解调器收到了信息之后,就把模拟信号转化为了数字信号。 数字信号可以被路由器识别,然后就可以保证上网了。
光纤的信号是从哪里来的? 是从电信这种公司来的。 电信(这里说电信)来了之后,给我们
连接上光纤。然后电信公司就将账号和密码配置到路由器里面了,然后就能上网了 (这个密码是我们进行上网的时候需要登陆的账号和密码)。倒时候如果我们想要上网就是路由器发送信息穿过
电信,电信验证我们的路由器的账号密码,验证通过了,信息就能穿过电信到达其他局域网当中。
我们知道任何路由器都能构建局域网,我们有时候就可能担心别人蹭网。 所以家用路由器就
允许路由器本身设置登录联网的时候的登陆账号和密码。
也就是一共有两套密码,一套给电信,用来验证路由器的正确性。一套给用户,用来连接局域网。
接下来我们要谈一下电信公司,他们叫做运营商。也就是我们谈一下运营商。在上网之前,有一件事情非常重要, 叫做:网络基础设施建设。
网络基础设施建设就是建机房机站等等设施。将这些设施建在了全球的范围里边,所以这个时候才有更多的网民能够上的起网。所以才有了更多的互联网公司。国家为了让互联网更多,就得投入大量的基础设施建设,让更多网民入网。
网络基础设施建设活动周期太长, 所以私人企业是不愿意做的。但是国家大力发展互联网,所以像这些国企,电信中国联通,中国移动就必须干。 而且不仅要干,还要干好。所以运营商就花费了大量的钱去干。而且要知道我们以前的流量费是特别贵的。现在便宜了, 为什么便宜? 因为便宜人们才愿意加入进来。
而且,不仅城里人要上网,村里人也要上网。所以就要有基层的工作人员进来进行工作。以后中国移动因为要花费大量的钱去建设,所以基本上是不赢利的。但是会对人互联网公司进行税收,税收的钱给运营商继续搞建设。
由上面我们可以知道,能上网,就要有基础设施以及入网设备。
从滴滴和支付宝身上就能看出国家是下了很大决心搞网络的。
网段划分的理解(全球互联网的理解)
其实IP地址是一份很大的资源。公网IP一共有32个比特位。这些IP地址是怎么划分的呢?其实不是按照国家进行分配的。一般是按照国家地区组织,人口综合评估去分配IP地址的个数的。下面为了便于理解,就用国家进行划分。
比时,我们假如就规定前八个比特位作为国家的编号,中国就叫0000 0001,美国就叫0000 0010,俄罗斯就是0000 0011,巴西就是0000 0100等等。每个国家都是有自己的国际路由器的。
然后,我们国家认为IP地址的子网掩码是:0000 0001/8 。往后我们国家的网络IP地址前8个比特位就不考虑了就默认是0000 0001。这是国际上的划分。
然后到了省级划分。加入我们使用6个比特位。那么就应该是前八个比特位是0000 0001不动。然后接下来6个比特位!假如河北省是0000 0001,河南省是0000 0010,江西省是0000 0011,黑龙江省是0000 0100。那么组合起来就是0000 0001 0000 0001、0000 0001 0000 0010、0000 0001 0000 0011、0000 0001 0000 0100。
现在是14个比特位已经用了,然后就是划分市级单位,假如我们划出来四个比特位来表示市级的IP编号。那么就是0001、0010、0011等等。
到目前为止,一共是18个比特位。所以,以后整个石家庄的IP地址就是0000 0001 0000 0100 0100 0000 0000 0000/18。所以这个IP地址就是 1.4.64.XXX。 假如当前主机是5号主机,那么就是1.4.64.5。然后有一个美国人,如果个美国人想访问1.4.64.5。那么就是先查看1的比特位排列0000 0001,与子网掩码1111 1111以按位与,得到0000 0001。定位到中国,就通过国际路由器跳转到中国。然后向下看1.4,转化为比特位就是0000 0001 0000 0100,按位与上1111 1111 1111 1100 0000 0000得到0000 0001 0000 0100 0000 0000 0000 0000。
然后以此类推。 就能找到我们的目标主机。
从上面的理解我们就能看出,我们的网络是被精心设计过的。
私有IP和私有网络
NAT技术
假如我们今天有数相要从主机1发往P地2的主机。那么就要先看dst是不是自己这个子网的。如果不是1,那么就先出子网,然后到了运营商路由器出去。最后到了广域网,从广域网种找到dst的IP。
然后P地址2的主机接收到了数返回的时候是-样的,先战-下是不是自己的子网的,不是,一看是私有P家用路由器子网,要知道,私有1在子网中是大量重复的,所以就发不回来了,所以,为了能够让公网IP中定位到私有IP的主机。就要把源IP替换成每一个路由器的WAN口IP。
过程就是,主机1当把数据交给家用路由器,那么主机1的src就变成了家用路由器的WAN口IP
当由家用路由器交给运营商路由器的时候,这个src就变成了运营商的WAN口IP。所以到时候报文要回来的时候只需要将数据交给运营商的WAN口IP就可以了。至于之后的动作,IP地址2的主机不关心。
上面的私有IP不断被替换的技术,叫做NAT技术。
为什么使用NAT技术
经过我们上面的说法,NAT技木可以将地进,只改变源P,然后就到了目的地主机。假如目的地主机是一个公司内的主机,那这生机返回信息的时候一定也是要经过运营商的,那么请,这些大公司要不要给运营商交钱呢?是的。因为大公司的内部结构,其实和我们的家用路由器的结构图是类似的。
为什么要这样呢?
主要原因是因为IP地址不足,所以使用了相同的主机IP表示了多台主机,为了能够正常上网,就要有NAT技术。(这有一题就是运营或者路器换源的本质其实就是修改报头,那然以修改我们报文中的P地处,那么是不是修改文中的其他数,所以就出现了我们之前的运营商劫持回额,就是我
有时候下载一个app, 结果下载连接被替换了,和我们预期的下载不符。)
路由
查路由表的过程
当我们的cient向server进行转发的时候。这个报文里面就一定有src ip和dst ip。本地的数据也是可以工作在网络层。所以报文向后交付的之前一定要现在本机内进行路由。我们每台主机都内置了路由表:
第一列就是我们将来的目标网络。第二列就是我们下一跳的路由器。第三列就是子网掩码。每一个目的网络都要配上子网掩码。FLAG里面的u标识当前正在使用,G标识该条目所对应的路由器。lface代表的是我本地的网络接口最终我的报文在进行转发时就通过这个结构来发。所以我们查路由表时是拿着目标主机的IP地址 & Genmask,然后与Destination做对比。如果是,就通过eht0发出去,如果不是就直接去匹配下一个路由。
注意: 不匹配default,只有当其他非缺省子网匹配不上时才会进入缺省路由。
路由查表得结果
路由查表结果有四种:
- 1、不知道
- 2、给你具体的下一跳
- 3、路由器不清楚,但是转入默认路由当中 (同网段的另一台路由器)
- 4、到达入口路由器
如果我们在查目的ip的时候,查的目的ip的网络号不是当前子网的网络号。比如说这面的这个client向server发送,所以在查的时候,就先将目的1p和当前子网掩码进行按位与。得到的结果和当前子网网络号进行匹配,如果匹配不到,就默认转入了出口路由器(即默认路由器)。然后就到了运营商了。到了运营商一定是有非常多的路由器的,到时候它怎么知道要转入到哪个路由器当中呢。这是因为每一个路由器都是知道彼此的信息的,所以到时候报文就会转入合适的出口路由器当中。一层一层的比对与转发,直到进入到目标网络当中。
谈谈分片
在一台主机中,报文并没有通过网络层直接发出去,而是继续交给了自己的下一层协议(数据链路)。数据链路层,不能一次发送过大的报文。所以就要求上层不能给我交付过大的报文。这就是为什么滑动窗口里面有各种字段,一个一个发。
首先对于IP来讲,也有一个十六位标识。不同的IP报文,标号是不一样的。 分片之后IP报文,标号是相同的。3位标志,第二位为0,表示允许分片。第三个标志位表示结束标记(当前是否是最后一个小包,是的话设置为0。否则的话设置为1) ;然后就是13位片偏移。假如分成了若干片,每一片在原始报文当中的偏移量是什么,就叫做十三位片偏移。要谈分片,不能只谈分片,也要谈如何组装。如何组装呢? 如果一个报文被分片了,那么即便是每一个分片,也要带IP报头。假设一个报文4500字节。 然后分成三片, 每一片都是1500字节。
- 那么第一片的十六位标识叫: 1234, 三位标志:00?(问好表示不知道),十三位片偏移: 0。
- 第二片的十六位表示叫: 1234,标志位00?,十三位偏移: 1500
- 第三片的十六位表示叫: 1234,标志位00?,十三位偏移: 3000
如何组装,首先a、确保将分片全部都聚集到一起(相同的十六位标识)。b、片偏移进行排序(完成组装)
但是上面这句话里面有两个细节,就是如何保证一个报文是一个分片,以及如何保证分片全都聚集到一起了呢?
问题是它怎么知道一个P是被分片了呢?如果我们收到了上面报文除了第一个报文中的任一个报文,那么这报文所对应的片偏一定不能为零。那么如果是第个报文呢那么他的片信移就是0,但是没关系。三位标志中还有一个叫做结束标记,如果一个报文被分片,那第一个报文就一定不是最后一个报文,所以他的结束标记一定是1。那么他就是一个分片。即 片偏移!= 结束标志 = 1
如果报文丢失了呢?就有三种情况: 1、丢第一个,2、丢第中间,3、丢第最后一个。
- 1、如果我们收到的众多报文中没有一个片偏移是零的,那么就能识别出来。
- 2、如果丢中间,我们在进行排序的时候,后一个的偏位偏移 前一个的偏位偏移 +分片大小所以,最终就能确定所有报文是否聚全部聚集到一起
- 3、如果丢最后一个,我收到的众多分片里,就没有一个分片报文的3位标记位的结束标记位是0。
建不建议分片?
不建议分片,为什么呢?因为在当中,有任意一个分片丢失了,那么将来组装的时候,就一定会失败,这种报文就要整体被丢弃了,就要求对方对我的报文进行整体重发,概括下来就是可能增加丢包概率。
如果我们仔细用数据测试一下就是下面这一张图:
——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!