计算机网络——网络层

  网络层可称得上是本书最重要的一章了,考试也是重点。本文对于网络层的介绍重点在各个协议的介绍,以及为啥会有这个协议的产生。
  回到上文提到的网络层的功能:路由选择和分组转发。所以网络层的各个协议基本是为了完成这两个功能提出的。但还有一些特殊情况像VPN这种的与功能无关的也会介绍滴!
  网络层提供两种服务:虚电路服务和数据报服务,前者是面向连接的,后者是无连接的。前面了解到数据链路层不是可靠传输,那网络层是不是呢?答案是网络层也不提供服务质量的承诺,那这样做是为什么呢?在网络层涉及到大量的路由转换,如果提供可靠传输那么对每一个路由器都有要求,造价什么的就上来了。所以为了方便设计,在网络层也不使用可靠传输。可以看看这个:https://network.51cto.com/art/201503/469032.htmlink
  对应上面的服务,在TCP/IP结构中使用的也是数据报服务啦!在TCP/IP中IP属于网络层,TCP属于运输层,那为什么要提出IP协议呢?我的理解是这样的,如果网络要想实现全世界的互联,那么它需要有一个统一的标准。前面介绍的两层属于物理层次,在实际物理世界中很难做到统一。于是迫切需要一个层次来制定一个标准,这就是IP协议提出的初衷。
  网际协议IP(internet Protocal)连接的是全世界的网络,全世界的一个大网又是由若干个小网组成的。这里就有一个虚拟互联网络的概念,我把它理解为一种技术,能够连接不同类型的小网络。这种技术的落实需要一种工具,统一称为中间设备,中间设备在不同的层次有不同的代表:
    物理层——转发器/集线器
    数据链路层——网桥/桥接器
    网络层——路由器
    网络层以上——网关
  其实一提到IP,所有人想到的不是什么IP协议,而是IP地址(当然了,IP地址也是IP协议的一部分),总有那个问题:你的IP地址是多少?那就会有两个问题:IP地址是什么?IP地址有什么用?

  IP地址是什么?IP地址有什么用?
    IP地址又叫做逻辑地址,是网络的一个标号。其实有什么用很好解释:那么多网络,网络里那么多主机,你怎么就能确切的找到你想要哪个呢?这就是IP地址的作用,通过IP地址我们可以锁定一个具体的网络主机,进而完成我们的传输。下面介绍一些有关IP地址基本概念:
  最开始广为流传的是IPV4地址,有32位。描述IP地址可以用一个二元组描述<网络号,主机号>。现在应该大致明白如何确定具体主机的了,先匹配网络号,再匹配主机号。IPV4有5类,分别是A,B,C,D,E。它们五个的特点及区分,下图说的很明白:
在这里插入图片描述
  那为啥分了个ABC,也很好解释,不同情况需要分配不同数量的IP的地址嘛。由上面的图知道,每个网络都不小啊,如果你有需要就分给你一个网络号。比如你就1台主机,但是给你分了一个C类地址,那让剩下的2^8-2(通常刨除全0和全1)-1个标号情何以堪呢?于是理所当然的想出,需要将网络进行划分,划分为更小单元进行分配,也叫划分子网。采取的方法就是将二级IP地址变成了三级IP地址。这个思想很好理解,就是在网络中再分层,这个分层实际上是拆了主机号,从原来的主机号里面拿出几位变成了子网络号。就变成<网络号,子网号,主机号>。
  有的划分,有的没划分,那就懵了,到底划没划呢?(IP地址本身和数据报头部都没有提供相关信息)为了区分,也提供了一种方法:子网掩码。子网掩码就是一连串的1(代表网络号)和一连串的0(代表主机号),是事先确定好的。其实我觉得这里书上讲的不是很清楚,那子网掩码到底是怎么判断是否划分子网了的呢?(这个其实就是将主机号部分归零,从而得到网络号,结合分类网络的特点就可以准确得到子网号)子网掩码有一个好处,就是IP地址与子网掩码相与,所得的结果就是网络地址(具体的我解释不太清楚)。这样路由器就可以根据这个特性进行转发分组。(这里其实也有一个题型,就是寻找目的网络的时候,将目的IP与子网掩码相与再与提供的该网络已知IP相比较判断目标是不是这个,和路由器的选路差不多)。
  现在的互联网规定,不管划不划分都要使用子网掩码,这个是为了便于查找路由表,为什么呢?(是因为路由器的路由表影响性能,通过子网掩码可以先不考虑具体主机地址,通过转发寻找吓一跳路由器,发到相应的网络去,到最后一个路由器再交付给具体主机,这样可以大大提升路由的性能)(https://www.51dzw.com/embed/embed_96641.html)link
  上面介绍的子网掩码思想不错,但好像还有点儿局限性:拆分的时候只拆了原来的主机号,能不能把网络号拆了?如果两个都能灵活的变化,能不能统一?这就是无分类编址CIDR提出的思想,抛掉所有的分类与子网的概念。将3级重新变回2级,通过在地址后加一个数字来定义网络的位数(这个位数相当于子网掩码中1的数量)。CIDR常使用斜线记法,与点分十进制相结合(可简单理解为斜线后面的数字代表网络号的位数,剩下的代表主机号):
在这里插入图片描述
  注意CIDR不使用子网并不是说它不能划分子网,而是没有像之前那样具体的指明多少位作为子网的位数。分配到了一个CIDR的单元,仍可以在本单位根据需要进行子网的划分。
  都知道转发分组依据的是路由表,路由表就是要存储IP地址信息的,那如果有这么多IP地址,路由表里的内容就太多了,检索也不比较慢。于是重新利用分级的思想,叫路由聚合(也叫构成超网),作用就是将几个小网络汇聚成一个大网,就是使用CIDR来实现。这样可以大大的减少路由表中表项。具体的路由聚合过程可以看看这个:https://blog.51cto.com/1318643/870551link
  上面讨论了两种增长IP地址数量的方法,但即使这样,快速发展的互联网还是填满了所有的可能性。没有办法,只能再次扩充。这次选择的是扩充位数,由32位扩充为128位,也就是IPV6技术。其实这个听的很多啊,在使用啥啥APP的时候都会加上一句支持IPV6技术的标识,以显示扩展性好。因为IPV6有128位,写起来不方便,除了用16进制表示,还有零压缩法(将16进制中的连续0用::代替),但注意零压缩法只能使用1次。那有人可能会想IPV6会分配完吗?会不会有IPV8呢?我的答案是说不定呢?但网上查到IPV6号称可为地球上每一粒沙子分配一个地址,我见识少,大到我想不到。
  由于一些历史的原因,现在属于IPV4和IPV6并存的时代。有的网络针对于IPV4,有的网络针对于IPV6。要想保证数据的顺利传输,就要想办法消除这种差异,实现IPV4和IPV6之间的转化,常用的办法有三种:
  1. 双协议栈:同时维护IPV4和IPV6,用到哪个选哪个
  2. 隧道技术:IPV4正常传输,遇到IPV6将其作为IPV4的数据部分分装,传输过后再提取出来,就像过隧道一样
  3. 网络地址转化技术(NAT):将IPv4地址和IPv6地址分别看作内部地址和全局地址,或者相反。例如,内部的IPv4主机要和外部的IPv6主机通信时,在NAT服务器中将IPv4地址(相当于内部地址)变换成IPv6地址(相当于全局地址),服务器维护一个IPv4与IPv6地址的映射表。反之,当内部的IPv6主机和外部的IPv4主机进行通信时,则IPv6主机映射成内部地址,IPv4主机映射成全局地址。NAT技术可以解决IPv4主机和IPv6主机之间的互通问题。(源自百度知道:https://jingyan.baidu.com/article/154b46317201d328ca8f41c4.htmllink
  对于IP协议的介绍就到此为止了,下面说说和它相关的三种协议。这里只介绍各自的功能和出现的原因了。

  地址解析协议ARP(Address Resolution Protocol)

  ARP的作用就是把IP地址转换成对应的物理地址,那为什么要把IP地址转换成物理地址呢?原因是在物理实现上找到一台主机具体还是要靠物理地址,IP地址看不见摸不着。那为什么不直接用物理地址呢?前面我其实有说过,物理比较复杂,难以统一。这个问题可以看看这个:https://blog.csdn.net/poison_biti/article/details/74364356link需要注意的是ARP协议只作用于一个局域网中。或许可以这样理解是IP地址和物理地址的合作:IP地址负责寻找目标网络,到了网络中再通过物理地址寻找具体主机。相反也有RARP协议作用是将物理地址转换成IP地址。

  网际控制报文协议ICMP(Internet Control Message Protocol)

  ICMP的作用是更有效地转发IP数据报和提高交付成功的机会。是负责控制差错发生时的协议。报文种类分两种:ICMP差错报告报文(分为终点不可达、时间超过、参数问题、改变路由)和ICMP询问报文(分为回送请求或回答、时间戳请求或回答)。简单点儿说这个协议就是给人用的,会输出一些错误信息,用于在出错的时候帮助人判断。这个协议不太出名(嘿嘿,至少我之前没怎么听过),但有一个应用很有趣,就是ping。Ping可以在cmd中后面加上ip地址,用于判断是否可达。

  网际管理组协议IGMP(Internet Group Management Protocol)

  IGMP实际上是用于IP多播管理分组的,啥叫IP多播呢?比如一个节点要给90个节点发送相同信息,单播的话要发送90次。但如果最开始将信息复制给相邻的节点各发一份,收到的节点再复制发给相邻自己的,一轮轮后90个都会收到。这就叫多播,相比单播会省很多资源。IP多播分为两种:在局域网内多播和在互联网上多播。注意:多播地址只能做目的地址不能做源地址。想多播,但是不想广播(给所有节点),就要把对象分组,只给我想要给的人,这就是多播分组。那我怎么知道你是不是这个多播组的成员呢?这就是IGMP的作用啦,我这里留一个参考网址(其实我自己还没看~):https://blog.csdn.net/qq_38265137/article/details/80475475link
  说了这么多,还是没有回到考点上啊~网路层作用之一是路由选择。路由选择大致可以分为两类:静态路由选择(非自适应)和动态路由选择(自适应)。各自的特点是:
  静态:
    优点:简单开销小 缺点:不能及时适应网络状态的变化
  动态:
    优点:较好的适应网络状态的变化 缺点:实现较为复杂,开销较大
(其实学了这么久,我也看明白了,容易实现的永远有个优点叫简单~~~)
那路由选择相关的协议有什么呢?学了三个:RIP、OSPF、BGP。
  在说之前,先说一个概念——自治系统AS(autonomous system):AS是在单一技术管理下的一组路由器,这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。简单点儿说就是把网络划块儿,块儿内统一。
对于以上三种协议的划分就是根据AS划分的,AS内部有RIP,OSPF。AS外部有BGP。对于三种协议不具体介绍了,书上或者网上都有,只说一些它们的特点。

  内部网关协议RIP(Rounting Information Protocol)

  RIP协议是一种分布式的基于距离向量的路由选择协议。RIP协议中只和相邻的路由器节点交换信息。RIP协议优点是实现简单,开销较小。缺点是网络规模小,最大距离为15跳。而且收敛速度慢(源于“好消息传得快,坏消息传得慢”的特点)。主要适用于小规模网络。

  内部网关协议OSPF(Open Shortest Path First)

  OSPF是一种分布式的基于链路状态的路由选择协议。从名字shortest path可以看出是基于最短路径算法的(具体是迪杰特斯拉算法)。OSPF优点是规模比RIP更大,且收敛的速度更快。OSPF中使用了洪泛(flooding)思想,于是对自治系统由进行的再划分,划分单元叫做区域。在区域内进行洪泛,避免了洪泛开销过大的缺点。每个区域间由边界路由器作为衔接。
  以上两种协议里面,原理不同,一个是距离向量(DV)一个是链路状态(LS)。那二者有什么区别呢?其实我是这么理解的DV里面每一个路由器维护的只是自己相邻节点的信息,而LS维护的是整个拓扑的信息。各自特点决定了路由选择的方式:DV是逐条转发,送到下一个节点就不管了,剩下的由后面的节点做选择。而LS是源路由转发,是从自己的路由表中选择一条最短路径,然后按照这个最短路径转发。二者各有优劣,在网络比较稳定的情况下,肯定LS更快,因为少了每步判断的过程。但如果网络动态性比较强,像Ad Hoc那种,LS维护的大多是脏路由,反而不如DV每次做抉择效果好。所以这就是网络的特点:根据需求做选择。

  外部网关协议BGP(Border Gateway Protocol)

  BGP面对的是整个互联网,那么多网络,如果细致的判断太慢了!所以它提供一种“可达性”的判断,即是否可达。比如想去xxx网,可通过我。BGP面对的是自治系统,那多个自治系统之间的桥梁叫做BGP发言人,之前在想一个自治系统里有几个BGP发言人?其实没有确定的答案,但至少一个。
  最后剩下网络层提供的三种服务吧:VPN、NAT、MPLS

  虚拟专用网VPN(Virtual Private Network)

  总能听到挂个VPN,那这VPN是啥呢?说VPN之前,先说说专用网。都知道IP地址比较紧张,要省着点儿用。IP地址实际上是接入互联网的手段,那一个公司就想在一个办公楼的某一层相互通信,不和外界通信,那没必要每个都弄个IP地址啊。这就是专用网——只是实现一部分范围的通信,不完全连入互联网。那如果这是个大公司,一个楼在上海,一个楼在深圳。也是部分范围,只不过不是一个地理范围,依旧不想完全接入互联网,怎么办呢?就是VPN。简单来说VPN是跨地区的专用网

  网络地址转化NAT(Network Address Translation)

  NAT的概念和专用网也分不开,上面提到专用网是不怎么和互联网通信的。但这是一种理想的情况,哪里能不上网呢?但是专用网里面的主机又没有各自的IP地址,所以需要一个代理(代理有IP地址)。如果专用网中的某个主机需要用发送数据,先把数据发给代理,以代理的名义发送出去实现通信。如果对方回信,那么也会先发给代理。代理再转交给主机。对于接收方来说是不知道发送方是不是专用网的,也是一种透明~代理有几个IP地址就能同时处理几台主机的业务。这种特性也限制里专用网中的主机不能作为服务器,因为找不到。

  多协议标记交换MPLS(MultiProtocol Label Switching)

  MPLS的提出是基于这样一种问题:在分组转发的时候查找路由表,路由表中项目很多查找的很慢,需要一一按照IP地址匹配。如果给每个IP数据报打上个标签,直接匹配标签就知道往哪里送了。这就是MPLS的核心思想。而且这个是通过硬件实现,速度更加快。但天上不会掉馅饼,这也增加了一定开销。不过权衡得失,还是赚的。是IP增强的一种方式。我说的不好,但这个不错:https://zhuanlan.zhihu.com/p/27232535link

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值