zoukankan      html  css  js  c++  java
  • 计算机网络自顶向下的方法-第四章 网络层

    # TODO

    ------------恢复内容开始------------

    网络层

    网络层:实现主机到主机的通信服务

    网络层存在哪里:主机和路由之间

    名词解释:

      转发 forwarding:涉及分组在单一路由器中从一条入链路到一条出链路的传送。

      路由选择 routing:涉及一个网络所有的路由器。

      路由选择协议:决定分组从源到目的地的节点所采用的路径。

    为了加深分组转发的理解,需要做一下几步:

      1. 进入路由器内部观察硬件体系结构和组织

      2. 观察在因特网中的分组转发,了解网际协议IP

      3. 了解网络层编址和IPV4的数据报格式

      4. 了解网络地址转换NAT,数据报分段,因特网控制报文协议ICMP和IPV6

    为了理解网络层的路由选择功能,需要做一下几步:

      1. 了解路由选择算法,链路状态算法

      2.了解路由选择算法,距离矢量算法

      3. 根据不同的网络组织架构,了解对应的算法

    1. 概述

    图中的目的是,H1向H2发送信息

        H1主机--->H1运输层中的报文--->H1网络层--->H1相邻的路由器R1--->链路传递--->H2相邻的R2路由器拿到数据包--->H2网络层--->H2主机

        路由器不运行在应用层和运输层

    1.1 转发和路由选择

      转发:将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。

      路由选择:网络范围的过程,决定分组从源到目的地所采取的端到端的路径。相当于线路选择,从西安到上海,选择适合的线路。高速公路相当于链路,汽车上的货物相当于分组,跨省收费站相当于路由。

    驾驶员在进行路线选择的时候,可以依赖纸质地图或者电子地图,能够查阅到从起始位置到终点位置的各种路线,选择最适合自己的路线。

    路由器在进行路线选择的时候怎么操作呢?

       每台路由器具有的路由转发表相当于司机的地图,检查到达分组的首部字段的值,进行转发分组,获取该值后,去路由转发表中索引查询,首部字段的值指出了该分组将被转发的路由器的输出链路接口。

       分组首部字段的值---->路由器去路由表索引查询----> 表中可能存着:首部的值:输出链路接口---> 转发到对应的输出链路接口,具体看下图

      

    司机的地图是自己买的或者下载的,那么路由器的转发表示是哪里来的呢?路由转发表是由路由器自己创建的。

    这里需要区分交换机的概念。

      

      分组交换机:链路层交换机,基于链路层字段的值进行转发。

      分组交换机:路由器,基于网络层字段的值做转发决定。

    1.2 网络服务模型

      网络服务模型定义了分组在发送与接收系统之间的端到端的运输特性。模型提供了如下服务

        确保交付服务:

          1.  具有延时上界的确保交付。例如保证100ms内交付,类似于顺丰的三天到货保证。

          2. 确保分组是有序发送到目的地

          3. 确保最小带宽,规定了1秒钟最多能传输多少bit的数据,只要发送端低于这个规定发送数据,就能保证分组不丢失且能按照顺序到达。

          4. 确保最大时延抖动

          5. 安全性服务,使用了源和目的主机都知道的一个私密的秘钥,加密数据。

      下表是几种服务模型的比较

    2. 虚电路和数据报网络

      运输层能够为应用程序提供无连接或面向连接的服务,UDP和TCP,网络层也能够提供无连接和面向连接的服务,连接服务也需要握手,无连接服务则不需要握手。

      看看网络层的无连接和连接服务和运输层的区别:

        1. 网络层提供的是主机到主机的服务。运输层提供的是进程到进程之间的服务。

        2. 网络层提供无连接服务或有连接服务,但不同时提供这两种服务,因此必须二选一。提供连接服务的是虚电路网络,VC,提供无连接服务的是数据报网络。

      

      虚电路网络和数据报网络是计算机网络的两种基本类型,在做出转发决定时,它们用的东西差异很大。

    2.1 虚电路网络

      ATM、帧中继的体系结构,都用虚电路网络,面向连接服务

      一条虚电路组成如下:

        1. 源和目的主机之间的路径(一些列链路和路由器)

        2. VC号码,沿着该路径的每段链路的号码

        3. 沿着该路径的每台路由器中的转发表表项

        

        属于一条链路的分组将在它的首部携带一个VC号,因为一条虚电路在每条链路上可能具有不同的VC号,每台中间路由器必须使用一个新的VC号代替每个传输分组的VC号,该VC号从转发表获得。

     

      假设主机A请求该网络在它和主机B之间创建一条虚电路。同时假设网络收到请求后,选定了一条虚电路的路径为A-R1-R2-B,并且为这条路径上的三条链路分别分配了VC号。 红色链路为12号,绿色链路为22号,蓝色链路为32号。

      这种情况下,分组离开主机A时,在该首部中的VC字段值是12,离开R1时,首部字段变为22,离开R2时,首部字段变为32。 如果能拿到首部字段,是不就可以知道在那条链路上传输。

      为什么首部不将每一个VC号都存下载,而是采用替换呢?

        1. 减少了首部中VC字段的长度

        2. 不同的VC号,大大的简化了虚电路的建立。

      在虚电路中,该网络中的路由器必须为进行中的连接信息维持连接状态信息,特别是,每当跨越一台路由器创建一个新的连接时,必须在该路由器的转发表中增加一个新的连接选项,每当释放一个连接时,必须从该表中删除该项。

      虚电路中的三个阶段

        1. 虚电路建立:发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路,网络层决定发送方和接收方的路径。

        2. 数据传输:

        3. 虚电路拆除:当发送方或接收方通知网络层它希望终止该虚电路时,就启动了这个阶段,更新路径上每台分组路由器的转发表以表明该虚电路已不存在。发送的报文是信号报文,用来交换这些报文的协议称为信令协议。

    2.2 数据报网络 

      发送消息前不需要连接,不需要创建虚电路,路由器也不维护任何虚电路的状态信息,当分组从源到目的地传输,它通过一些列路由器传递,这些路由器中的每台都是用分组的目的地址来转发该分组,特别是,每台路由器有一个将目的地之映射到链路接口的转发表。分组到达路由时,路由器可以使用该分组的目的地址在转发表中查找适当的输入链路接口,然后将该分组转出链路接口。假设转发表如下图。

                                                  一一映射

    目的地址 输入链路接口
    127.0.0.1 x1
    127.0.0.2 x2

     

      如果路由通过分组携带的目的地址,在路由转发表里面没有找到对应的输入链路接口,怎么办?

      

      为了理解查找转发表的操作,举例说明,假设目的地址都是有32比特。每个位置上的数要么是0,要么是1,那么一共有2的32次方中可能,4294967296中可能性,共有42亿条数据,来源一个目的地址都去表里面找,太浪费时间了,因此不可能。

                                                         范围映射

     

    目的地址 输入链路接口
    127.0.0.1-127.0.0.255 x1
    127.0.1.1-127.0.1.255 x2

     

     

      

      

     

     

     

     

     

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    # TODO

  • 相关阅读:
    JavaScript知识点总结
    Python错误:ImportError: No module named 'requests'
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class
    Html重点知识
    使用Gson中的JsonElement所遇到的坑
    AndroidStudio:The number of method references in a .dex file cannot exceed 64K错误
    使用TextUtils.isEmpty()遇到的坑
    Gson常用方法
    AndroidStudio——java.lang.UnsatisfiedLinkError错误
    RecyclerView点击,移动到中间位置
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/14495023.html
Copyright © 2011-2022 走看看