• 注册
当前位置:1313e > 默认分类 >正文

【网络】 网络层笔记

网络层

  网络层是OSI七层模型中的第三层也是TCP/IP模型中最重要的一层。网络层的基本功能是:

  用IP地址编址

  将来自传输层的数据段加上网络层PDU后封装成数据包

  规划数据传输的路由,选择传输目的的网络

  将来自第二层的帧解封装

  网络层协议中,最为通用的是目前的IPv4,将来会有越来越多的IPv6。后者不区分内外网,全网的机器都暴露在公网上。

■  IPv4协议

  IPv4有以下特征

  1. 无连接,进行通信的双方不进行事先或者传输时的连接

  2. 尽力传输,不保证数据到达的完整性。这减少了路由器的处理时间和负担,节省了带宽。相应的这部分工作交给了传输层的TCP协议来做。

  3. 介质无关,协议工作在有线(双绞线,光纤)、无线等各种环境中

  *介质这一条不完全准确,因为不同的传输介质有不同的MTU(最大传输单元),MTU由链路层决定,所以这一要求也势必影响到了网络层。在不同介质上,IPv4协议可能会为了适应物理介质的MTU而将数据包进一步分片

 

  IPv4的PDU——报头含有下面这些内容:

    IP源地址

    IP目的地址

    生存时间(TTL):每经过一跳减去1,直到这个包的TTL减小到0后包会被丢弃

    服务类型:指出数据类型的优先级别

    上层协议

    标志和分片偏移量:如果数据包被分片,接收端将据此部分信息重组数据包

    版本:指出是v4还是v6

    报头长度

    数据包长度

    标识:有源主机发出,帮助重组分片

    报头校验和

    选项

    空白填充

 

■  路由

  网络层的动态,最重要的就是路由这个概念了。

  网关:连接本地网络的路由器接口,通常是指一张网卡或者一个IP地址。现在一般路由器可能有好多个LAN口和一个WAN口,一般有路由地址 = LAN口IP地址 = 网关地址。另外顺便一提,因为连接到外网去时不一定只连一台路由器,可能会连好几层级的路由器,所以本地路由器的WAN口IP也不一定就是我们上网时用的IP。

  路由表:路由表是路由器或主机中维护的一张用来指出路由的信息表,有很多条路由组成。路由表中的一条路由包含了三个十分重要的信息。分别是目的网络,下一跳和度量。目的网络维护了目的地址和子网掩码等信息,作用相当于是确定一个网络。下一跳指出去相应网络的下一步应该把数据包传送到什么地址的什么网络。度量则说明,假如有不同路径可以到达目的地的话,通过一些算法得到这条路由的长短,复杂度等信息。

  路由器根据路由表来选择发送或丢弃一个数据包,一般情况下路由器会设置默认路由,即当一个目的地址在路由器中没有维护的数据包到来,路由器不知道往哪发送的时候,就按照默认路由发送数据包。路由表可以存在主机中,称为主机路由表。主机路由表通常用于记录和直连网络以及直连路由器的路由信息,一张典型的主机路由表可能含有以下字段:目的网络;子网掩码;网关(对于主机来说就是下一跳);接口(发出的源地址);度量。路由器中的路由表通常还分成本地路由表(维护该路由器统领下网络的路由信息)和远程路由表(记录了进行远程网际通信时的路由信息)。

  *当目的网络是0.0.0.0时,其意思是让本数据包走默认路由

  *当网关和接口字段内容一样时,八成是指做一个本地loop,不需要通过LAN网关

  *目的网络是127.0.0.0或者本机IP的情况,其度量肯定是1,因为是进行本地环回的地址

  路由过程:当路由器拿到数据包,匹配路由表中的目的地址,其匹配的优先级遵循“从具体到普遍”的原则。比如要前往10.1.1.55的包,路由器依次查找路由表中目的网络是10.1.1.0,10.1.0.0,10.0.0.0 , 0.0.0.0。如果最终都没有匹配到(0.0.0.0是默认路由,没有匹配到应该是指没有设置默认路由的情况),那么就丢弃这个包。如果匹配到了某一条路由,那么就按照这条路由所指出的下一跳发送数据包。

  每一个收到数据包的网络中间路由器都会check数据包的目的网络地址与自身的路由器从而确定是丢弃这个包还是继续转发,转发到哪里。如果目的网络对路由器来说是直连网络的话,那么路由器就把这个包发到相应的本地LAN口,接着由链路层中的信息来确定把包发往哪台主机。另一方面,如果路由器决定丢弃某个包了,它不用强制性地返回源地址任何错误信息。但是它也可以选择通过ICMP这个应用层的协议发回比如超时,主机未找到,网络未找到等等错误。网络测通工具ping用到的就是ICMP协议。

  综合其七层模型来看的话,其实在网络传输过程中,中间的路由器只需要把收到的物理数据逐层解析解析到网络层即可,更加上层的应用层和传输层等等对路由器而言没有意义。

  路由配置方法: 如何在路由表中配置路由,有两种主要方法。一种是静态路由,即路由写死在路由表中,最开始就需要手工进行配置并且还需要人工进行后续性的维护管理工作。另一种方法是动态路由,同一个网络中的路由器可以从其他路由器中动态地学习路由信息,无需人工干预。实现动态路由学习需要有相关的路由协议。在协议规定中,当有一个路由器,它自己充当网关的那个网络或者它与其他路由器的链路结构发生变化时,它就会把这种变化的信息传递给同一个网络中的其他路由器,促使它们更新路由表。常用的路由协议有RIP,EIGRP,OSPF等等

  动态路由虽然节省了人力,但是增加了网络开销和路由器计算资源的消耗,在实际情况中,我们通常采用动静态路由相互结合的方式来配置路由。

■  IPv4通信方式

  现在最常用的IP仍然是四个255以内的数字用点连接起来的IPv4协议的IP地址。在基于IPv4构建的网络中,主机可以选择的通信方式有多种,包括单播(由一台主机对另一台主机发送数据包的过程),广播(由一台主机向该网络内所有其他主机发送数据包的过程)以及多播(由一台主机向多台主机发送数据包的过程)。

  单播十分简单,只要指出对方主机的IP地址就可以了。

  广播进一步分成两种,分别是定向广播和有限广播

    定向广播的目的地址是某个网段主机号在二进制表达时全是1的那个地址,比如要向172.16.4.0/24网段发送广播的话其目的地址应该是172.16.4.255。一般情况下定向广播的数据包不会被作为网关的路由器转发,但是也可以配置其转发。

    有限广播的目的地址是255.255.255.255,数据包发送同网络中的所有主机,路由器不转发此包。因为这种有限广播通常只出现在LAN中,所以IPv4的一个网络也被称为一个广播域,路由器则是广播域的边界。

  显然广播的数据包占用网络资源十分巨大,因此广播通信应该被加以控制,比如多加几个路由器进一步划分子网(子广播域)。

  多播的地址是224.0.0.0-239.255.255.255,这段地址特意留出来用作多播地址。当一台主机具有多播地址后,它既要处理发给它的单播包又要处理多播包。

 

■  IPv4地址分类

  同样的一段IP,如果子网掩码不一样那么所代表的含义就不一样。比如某个IP的末尾是.48(00110000),当子网掩码是/28的时候,前四位属于网络号部分,后四位才是主机号。除去这个网络的地址和其广播地址,剩下14个IP是可供分配的IP。但是如果子网掩码是/27的话,那么就有30个可以分配的IP了,相应的网络号少了一位。

  10.0.0.0/8

  172.16.0.0/12

  192.168.0.0/16

  这三个网络规定是私有网络,这些网段中的IP不允许直接访问因特网,为了让其可以顺利访问公网,就要在其LAN的边界(路由器)上进行公网访问的地址转换,即NAT服务。NAT服务把某个内网IP的请求换装成网关所在路由器WAN口的地址,并且向公网发出请求,从而实现私有网络访问公网。在这三种私有网络中可以看出来,10.0.0.0/8能提供的IP数最多(主机号有24位),适合大型局域网的假设。相对的最下面的192.168.0.0/16能提供的IP数目最少,适合用于小型局域网络的假设。

  除了以上三类地址之外,还有一些地址比较特殊不能用于公网中普通的设备:

  224.0.0.0-239.255.255.255  为多播地址段

  240.0.0.0-255.255.255.254  为保留实验地址段

  0.0.0.0-255.0.0.0  为默认路由段

  127.0.0.0-127.255.255.255  为本地环回地址段

  164.254.0.0-164.254.255.255  为链路本地地址,常给那些没有可用IP配置的环境或者没有从DHCP那里得到IP的主机使用

  192.0.2.0-192.0.2.255  为Test-Net地址

 

  除去以上这些网段的IP,其他IP都可以被作为公网IP使用。传统上,把基于IPv4地址分成A,B,C三类。

  A类地址的范围是 1.0.0.0/8 - 126.0.0.0/8,即提供了126个网络,但这些网络每个都很大,可以容纳上一亿多台机器。从二进制的角度看,A类地址的网络号最高位一定是0,后面7位可以随便发挥

  B类地址的范围是 128.0.0.0/16-191.255.0.0/16,提供了16382个网络,每个网络可以容纳6万多台主机。B类地址的网络号最高位一定是10

  C类地址的范围是 192.0.0.0/24-223.255.255.0/24,C类一共提供了209万余个网络,但是每个网络最多只能容纳254个主机。C类地址的网络号最高三位一定是110

 

■  网络层测试工具

  1. ping

  ping工具的原理是基于ICMP(Internet Control Message Protocol)协议的。ping从一台主机发出ICMP回应请求并等待回应,分析回应结果。ping主要用于测试网络的联通性或对方主机是否存活。

  2. tracert

  tracert用于观察主机间的通信路由,会生成沿途成功到达的每一跳的列表。tracert中有两个较为重要的指标,RTT(响应往返时间)以及TTL(包生存长度)。tracert也是利用了ICMP协议,只不过它的用法更加高级一点。首先它发出三个TTL为1的包,当这三个包到达路由中的第一跳,并且返回到达通知,tracert就知道了三个包到达花的RTT。然后tracert又发出三个TTL=2的包,检测到第二跳所花的RTT……以此类推,每得到一跳的返回信息后统计返回时间并且发出一个TTL++的包测试下一跳,最终到达目标地址,得到了一个完整的路由表。如果某个包的响应时间是*的话,就代表这个包丢失或者对方主机没有响应。通过查看每一跳的IP,我们就可以知道这次请求的路由了:

  *上述两个工具都用到了ICMP协议但是这个协议并不是网络层必须的,这也从侧面说明网络层的信息传输并不是可靠传输。在ICMP协议回报的数据中可能含有以下几种信息

  1. 主机确认:主机向另一台设备发出ICMP请求,被请求方用ICMP协议作出应答

  2. 目的网络or主机不可达:不可达代码,0代表网络不可达,1代表主机不可达,2代表协议不可达,3代表端口不可达。

  3. 超时提示:当TTL减小到0,当前设备就会用ICMP协议通知发出请求的主机此包已经被丢弃,这个通知就是超时提示

  4. 路由重定向:通知网络中有更好的路由

  5. 源抑制:通知源主机暂时停止发送包(如路由器无足够的buffer等情况),原主机收到通知后会通过在传输层进行流量控制来实现源抑制

  

 

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录