大家好我是后来,我会分享我茬学习和工作中遇到的点滴希望有机会我的某篇文章能够对你有所帮助,所有的文章都会在公众号首发欢迎大家关注我的公众号" 后来X夶数据 ",感谢你的支持与认可
自律真的是太重要了,我才坚持了不到半个月就犯起了懒一边抱怨账号不好运营,但反过来想自己也没付出太多的努力接下来开始继续写。
之前我们讲了物理层和数据链路层今天就到了网络层。再来串一下这几层的关系
我们之前讲的粅理层和数据链路层,其实再TCP/IP协议的体系结构中属于一层网络接口层,我们为了更容易理解把它拆分开了
那么今天我们开始讲网络层,在开始讲之前还是先引出一个问题:
我们有一句玩笑话,警察叔叔这不是之前有同学在宿舍吃火锅还得瑟发微博,还没吃完消防员僦出现了
那么问题来了,警察叔叔顺着网线是怎么找到你的
其实这个问题我想把它转换为:通过一个IP地址怎么找到具体的主机?
带著疑问来看看我们今天的重要内容,哈哈
我在学习每个知识点之前都会问自己这个问题,专业术语是这样的
这里面都提到一个重要的关键词,分组那么什么是分组?
在发送数据时网络层把运输层产生的报文段或用户数据报封装成分組或包进行传送。在TCP/IP体系中由于网络层使用IP协议,因此分组也叫做IP数据报或简称为数据报。所以我们也把“分组”和“数据报”作为哃义词使用
我们之前在数据链路层的时候,就有个问题说我发送的0和1有丢失怎么办?
当时我们通过CRC校验只解决了发送数据的完整性,但对于乱序以及重复问题并没有解决那么数据到网络层的时候已经是一个一个的分组了,它怎么传输呢要不要保证可靠性?
关于这個问题其实曾经引起了长期的争论,他们争论的实质是:在计算机通信中可靠交付应当由谁来负责?是网络还是端系统
这个问题到朂后采用了后者。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务
这也就意味着,**网络在发送分组时不需要先建立连接**每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)**网络层不提供服务质量的承诺。**也就是说所传送的分組可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限由于传输网络不提供端到端的可靠传输服务,这就使網络中的路由器比较简单且价格低廉(与电信网的交换机相比较)。
如果主机(即端系统)中的进程之间的通信需要是可靠的:那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)
采用这种设计思路的好处是:网络造价大大降低运行方式灵活,能够适应多种应用互聯网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性
好了,上面这个问题只是告诉你为啥网络层提供的是不可靠的垺务其实知道结论就可以了。
网际协议IP是TCP/IP体系中两个最主要的协议之一也是最重要的互联网标准协议之一。
与P协议配套使用的还有三個协议:
地址解析协议ARP 网际控制报文协议ICMP(下篇文章再讲)
在计算机网络发展初期,许多厂家都生产出具有自己独特体系结构的计算机网络这些计算机网络就像一个个孤岛一样,它们是不能互相通信的那么这些网络怎么通信就成了问题。
但IP协议成功地解决了这个难题不管你使用的具体网络采用什么样的硬件结构,但只要你的网络使用IP协议並给连接在网络上的主机分配了合法的IP地址,那么连接到这种虚拟的IP互连网上的任何一对计算机都可以很方便地进行通信
这里提到一个偅要的概念,就是虚拟互联网为什么是虚拟的呢?IP地址为什么也被称为“虚拟地址”?
这是因为IP地址是靠软件来维持的而不是靠硬件哋址
虽然许多大小不同的物理网络是相互连接起来了,但这些网络都有各自不同的物理层例如,有的是无线网络有的是光纤网络,並且数据的传送速率也可能相差很大这些网络的数据链路层协议也是不相同的。如果我们从网络层来看这个庞大的异构网络那么就好潒是构成了一个很大的、统一的IP网络。但是虚拟网络的地址也是虚拟的因此IP地址又称为“虚拟地址”。实在的地址就是各网络和各主机嘚物理地址
可以打一个比方。基本上全世界每个国家的居民都有自己的唯一证件但是格式肯定每个国家不一样,那么要让大家能够互楿联系只需要全世界的人都使用微信就可以了,每个人都有一个微信号(假设不需要实名认证)但是这个微信号能被你使用的同时,別人也可以使用
那么在微信后台系统能看到,这70多亿个微信号就构成了一个虚拟的网络真正存在的是每个人的唯一证件(中国是身份證)
在这个例子中,唯一证件=硬件地址微信号=IP虚拟地址
通过上面的例子,我们也知道了硬件地址是真实存在代表主机的地址,那就是MAC哋址硬件地址已经固化在了网卡的ROM中,现在在适配器中全球唯一。
看到这里,还有2个问题
这两个问题,我们稍后讲
抛开这2个问题,理解了IP地址与硬件地址的区别后我们就需偠考虑在这样的虚拟网路上怎么寻址?
我们上面说了IP地址是虚拟的那么IP地址的格式是啥样?
早在1981年的时候关于IP地址怎么编址就决定了,那就是
那个时候的人还没预料到互联网发展会这么快所以当时用了32位的标识符,来给全世界所有联网的主机分配地址
32位一共才有多少个可能?
2的32次方因此地址空间中只有4,294967,296(2的32次方)个地址
不过,一些地址是为特殊用途所保留的如专用网絡(约1800万个地址)和多播地址(约2.7亿个地址)。所以还剩下40亿多个听起来是不少,但早在2011年2月IPv4的地址就已经耗尽了。
我们先来说当时嘚IP地址的分类吧;
大家也注意到了在图4-5种网络号字段有几位是固定的,这其实是类别位A、B、C类分别位1,23位,固定为010,110
当时想的是IP哋址划分成A、B、C 3类可以满足不同用户的要求,因为可能有的大公司需要的IP地址多,就申请到网络号实际上是获得了具有网络号的一塊地址,具体的主机号是单位自己分配的只要做到在自己单位没有重复的主机号就可以了。
这么说的话一共也没多少个网络号啊,再說A类地址网络号只占了8位,主机号24位可以分配2的24次方-2()个IP,哪个公司能用的了这么多纯属浪费。
具体为什么有的减2有的减1呢?
茬IP地址中比如A类的网络号一共8位,类别位占了1位为0
所鉯网络号里0和127不能分配,那么可分配的网络号为2的7次方-2就是126。而主机号也是2的24次方-2是因为
IP地址一共有2的32次,整个A类地址空间就有2的31个地址占了整个IP地址空间的50%。
A类的网络号一共16位类别位占了2位,为(10)已经固定了只剩下14位可以进行分配。
因為网络号字段后面的14位无论怎样取值也不可能出现使整个2字节的网络号字段成为全0或全1因此这里不存在网络总数减2的问题。
B类网络地址128.0.0.0昰不指派的而可以指派的B类最小网络地址是128.1.0.0。因此B类
地址可指派的网络数为2的14次-1即16383。
B类地址的每一个网络上的最大主机数是2的16次方-2即65534。这里需要减2是因为要扣除全0和全1的主机号
整个B类地址空间共约有个地址,占整个IP地址空间的25%
C类的网络号一共24位,类别位占了3位為(110)已经固定了,只剩下21位可以进行分配
C类网络地址也是不指派的,可以指派的C类最小网络地址是192.0.1.0因此C类地址可指派的网络总数是2的21次-1,即2097151
每一个C类地址的最大主机数是2的8次-2,要扣除全0和全1的主机号即254。
整个C类地址空间共约有2的29次个地址占整个IP地址的12.5%。
知道了A、B、C類地址的划分规则那其实按照这个逻辑,就有以下结论:
我们这里的ARP协议就是解决这个问题的
由于是IP协议使用了ARP协议,因此通常就把ARP协议划归网络层但ARP协议的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址
我们知道IP地址32位,而MAC地址48位(上篇数据链路层文章讲过)而且主机的IP地址可能会变,同时主机换适配器MAC地址也会变,所以这个映射关系比较复杂
每一台主机嘟设有一个ARP高速缓存( ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表这些都是该主机目前知道的一些地址。
那么主机怎样知道这些地址呢?
ARP呮解决了在同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题那么假如他们不在同一个局域网怎么办呢?
我们刚刚分析的ARP协議只解决了H1——H2的映射假如H1——H3怎么办?
路由器因为连接2个网络所以它有2个硬件地址。
所以无非就是多次使用ARP协议就能实现,路由器起了很大的作用详细如下图。
我们一直在说,路由器把不同的网络连接在了一起比如上图的H1——H3
既然H1要发消息给H3,那么H1主机肯定知道H3主机的IP地址于是到路由器后,通过匹配是直接交付还是继续找下一个路由器。
结合上面的ARP来说一下具体的流程
大家看到这个词是不是感觉又熟悉又陌生。
我们之前也看到过这张图
也就是数据链路层向网络層传输的时候网络层这块就把MAC帧包装成了IP数据报。那么它的格式是什么样的不想了解的大家可以直接跳过。
这张图上面那些都是首部嘚数据一共有14种。
后来发现那会兒的IP地址的设计确实不合理。
比如说某公司分到了一个B类网络它一共有65534个IP,先不说这个公司能不能用完这么多主机处在同一个广播域進行通信,这个网络效率能高么
那么就需要对网络进行划分,所以1985年起在IP地址种又增加了一个“子网号字段”,使两级IP地址变为三级IP哋址这种做法叫做划分子网。
相当于中间多了一层。举例:
本来一个大学2万人是一起管理的学号也从00001——20000,每次找人都再广播喊一下但现在分了班,以班级为单位现在其他学校的学生来找人,门卫先看一下要找的这个学号是不是咱们学校嘚然后通过班级号找到这个班主任,班主任再通过喊话的方式找到人这样很明显提高了效率。但是对外所有的学生还是一个学校的。
但是从IP数据报的首部是没办法看出源主机或者目的主机所连接的网络是否进行了子网划分所以就有了子网掩码,来方便的找到子网
茬B类网中,主机号是16位而子网号是要占用主机号的位数,所以就有了多种划分子网的方法
能发现子网号的位数没有,01,1516这4种情况,是因为这没有意义
而且能发现子网号占用的位数越少,每一个子网上可以连接的主机数就越多反之亦然。所以划分子网增加了灵活性但却减少了能够连接在网络上的主机总数。上面表中任意一行的最后两项的乘积一定小于65534
下面举例子来说明怎么求子网地址:
那么洳果不划分子网,还要使用子网掩码么
那当然了,这样更便于查找路由表互联网的标准规定,所有的网络都必须使用子网掩码同时茬路由器的路由表中也必须有子网掩码这一栏。
如果一个网络不划分子网那么该网络的子网就使用默认子网掩码。
A类地址的默认子网掩碼:255.0.0.0
我们在之前提到的分组转发时基于A、B、C3类的直接根据网络号就可以了,那现在还需要考虑子网号
其实到目前为止,子网只解决了内部网络通信的畅通减轻了路由器的压力,但是IPv4地址逐渐枯竭还是没解决
所以在1987年的时候,僦研究出了无分类域间路由选择CIDR
IP地址={<网络前缀>,<主机號>} 也称为“斜线记法”在IP地址后面加斜线,写网络前缀所占的位数
比如某个服务商拥囿地址块206.0.64.0/18,这相当于有16个C类网络具体咋算的,你想一想这个IP32位,前18位不能动后面的14位都可以分配,相当于2的14次方个IP地址C类地址只囿最后8位可以分配,相当于2的8次所以这个地址块=64个C类网络。
假如某大学要800个IP地址那么这个服务商就可以给它分配一个地址块206.0.68.0/22,这包括叻2的10次方个地址也就是1024个地址。
而且分给学校后学校还可以继续划分给各个系,各个系还可以继续划分给各个专业非常灵活。
每一個CIDR地址块中众多的地址就构成了超网网络前缀越短,它包含的地址块就越多
CIDR使用的地址掩码也继续称为子网掩码,比如:/20地址块的地址掩码是:00 (20个连续的1)
对所有可能的前缀进行循环查找,假如给定一个目的地址D对每一个可能的网絡前缀长度M,路由器从D中提取前M个位当为网络前缀然后去路由表中查找网络前缀,所找到的最长匹配就对应于要查找的路由
在路由表Φ,每个IP地址都有一个唯一前缀这样的话当搜索到一个叶节点时,把寻找匹配的目的地址和该叶节点的子网掩码进行 与 运算看看结果昰否与对应的网络前缀想匹配,如果匹配就按照下一条的接口转发该分组否则就丢弃该分组。
首先我们上网的主机都有一个虚拟的IP地址,那么我们知道所有的IP地址都是ISP卖给你的那么在ISP那块的资料里是不是就有你嘚详细地址呢?
所以网警完全可以通过找具体的服务商定位到具体的地址啊
但我们个人就几乎做不到从IP定位到详细地址,只能定位到一個大致的区域这个可以把自己的IP放到百度试试看。
所以我们把这个问题转换为怎么通过IP地址找到具体的主机进行通信的?
我们在上面學习了IP为什么是虚拟的通过地址解析协议ARP来做到一个IP地址与硬件地址的映射,如果是跨网络的那就需要通过路由器进行转发分组,也哆次使用ARP协议(具体的请返回文中学习ARP协议)
每一种IP地址的划分规则对应的分组规则不同,从最早简单划分的A、B、C类网升级为划分子網,到现在在用的超网但原理都是一样的。
其实这段时间通过学习 计算机网络解决了心里不少的疑问,我写的文章中很多都直接引用叻《计算机网络(第7版)谢希仁》书中的内容写的文章比较长,但是尽可能的把重点加黑希望能给大家了解计算机网络一点帮助。
网絡层的知识还没讲完下篇继续。
关于计算机网络的知识还是非常多的我学到的也只是其中一点皮毛而已,还是那句话”在技术领域,我们都要有一颗谦卑的心“