【王道】计算机网络 知识点总结(合集)【超详细!】

文章目录

计算机网络知识点总结

1 计算机网络体系结构

1.1 计算机网络概述
  1. 计算机网络概念——互连的、自治的计算机系统的集合
  • 广义观点:能实现远程信息处理的系统或能进一步达到资源共享的系统。

  • 资源共享观点:以能够相互共享资源的方式互连起来的自治计算机系统的集合。

    • 目的:资源共享;组成:多台自治计算机;规则:网络协议
  • 用户透明性观点:整个网络就像一个大的计算机系统一样对用户是透明的。

  1. 计算机网络的组成

组成部分硬件、软件、协议。

​ 工作方式:边缘部分(用户主机)、核心部分(路由器、网络)

​ 功能组成:通信子网(物理层、数据链路层、网络层)、资源子网(会话层、表示层、应用层)

  1. 计算机网络的功能

​ 数据通信、资源共享、分布式处理、提高可靠性、负载均衡

  1. 计算机网络分类
  • 范围分类:广域网(WAN)、城域网(MAN)、局域网(LAN)、个人局域网(PAN)
网络范围特点
广域网(WAN)10km-1000km互联网、交换技术
城域网(MAN)5km-50km以太网
局域网(LAN)10m-5km广播技术
个人局域网(PAN)0-10m无线技术
  • 传输技术:广播式网络、点对点网络
  • 拓扑结构:总线型、星型、环形、网状

image-20230810113136136

  • 使用者:共用网、专用网
  • 交换技术:电路交换网络、报文交换网络、分组交换网络
网络特点应用/别称
电路交换网络专用通路;建立连接、传输数据、断开连接
优点:数据直接传送、时延小
缺点:是线路利用率低、不能充分利用线路容量、不便于进行差错控制
传统电话网络
报文交换网络数据加上源地址、目的地址、校验码等辅助信息,封装成报文
优点:充分地利用线路容量、实现传输速率的转换、格式转换、差错控制
缺点:增加资源开销、缓冲延时、缓冲区难以管理
存储转发网络
分组交换网络数据分成固定长度的数据块,数据块加上目的地址、源地址等组成分组
优点:缓冲易于管理;包的平均时延更小;更易于标准化
包交换网络
  • 传输介质:有线网络、无线网络
  1. 计算机网络性能指标
  • 带宽(Bandwidth):最高数据传输速率,表示网络的通信线路所能传送数据的能力,单位是比特/秒(b/s)。

  • 时延(Delay):指数据(一个报文或分组)从网络(或链路)的一端传送到另一端所需要的总时间。

    • 发送时延:又称传输时延,主机或路由器发送数据帧所需的时间,从发送分组的第一个比特算起,到该分组的最后一个比特发送完毕所需的时间。

            发送时延 
           
          
            = 
           
          
            数据帧长度 
           
          
            ( 
           
          
            b 
           
          
            ) 
           
          
            / 
           
          
            信道宽度 
           
          
            ( 
           
          
            b 
           
          
            / 
           
          
            s 
           
          
            ) 
           
          
         
           发送时延=数据帧长度(b)/信道宽度(b/s) 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">发送时延</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord cjk_fallback">数据帧长度</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mord">/</span><span class="mord cjk_fallback">信道宽度</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mord">/</span><span class="mord mathnormal">s</span><span class="mclose">)</span></span></span></span></span></span></p> 
    

  • 传播时延:电磁波在信道中传播一定距离花费的时间,一个比特从链路的一端传播到另一端所需的时间。

        传播时延 
       
      
        = 
       
      
        信道长度 
       
      
        ( 
       
      
        m 
       
      
        ) 
       
      
        / 
       
      
        传播速率 
       
      
        ( 
       
      
        m 
       
      
        / 
       
      
        s 
       
      
        ) 
       
      
     
       传播时延=信道长度(m)/传播速率(m/s) 
      
     
   </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">传播时延</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord cjk_fallback">信道长度</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose">)</span><span class="mord">/</span><span class="mord cjk_fallback">传播速率</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mord">/</span><span class="mord mathnormal">s</span><span class="mclose">)</span></span></span></span></span></span></p> 

  • 处理时延:数据在交换结点为存储转发而进行的一些必要的处理所花费的时间。
  • 排队时延:分组在进入路由器后要先在输入队列中排队等待处理。路由器确定转发端口后,还要在输出队列中排队等待转发,这就产生了排队时延。

        总时延 
       
      
        = 
       
      
        发送时延 
       
      
        + 
       
      
        传播时延 
       
      
        + 
       
      
        处理时延 
       
      
        + 
       
      
        排队时延 
       
      
     
       总时延=发送时延+传播时延+处理时延+排队时延 
      
     
   </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">总时延</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">发送时延</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">传播时延</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">处理时延</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">排队时延</span></span></span></span></span></span></p> </li><li> <p><strong>时延带宽积</strong>:又称以比特为单位的链路长度,指发送端发送的第一个比特即将到达终点时,发送端已经发出了多少个比特。<br> <span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml"> 
    
     
      
      
        时延带宽积 
       
      
        = 
       
      
        传播时延 
       
      
        × 
       
      
        信道带宽 
       
      
     
       时延带宽积=传播时延×信道带宽 
      
     
   </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">时延带宽积</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">传播时延</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信道带宽</span></span></span></span></span></span><br> <img src="https://i-blog.csdnimg.cn/blog_migrate/4016d5f6e947f758cb7c5db7ba693d1d.png#pic_center" alt="image-20230810131802529"></p> 

考虑一个代表链路的圆柱形管道,其长度表示链路的传播时延,横截面积表示链路带宽,则时延带宽积表示该管道可以容纳的比特数量。

  • 往返时延(RTT):指从发送端发出一个短分组,到发送端收到来自接收端的确认(接收端收到数据后立即发送确认),总共经历的时延。

  • 速率(Speed):数据传输速率、数据率或比特率,网络中的速率是指连接到计算机网络上的主机在数字信道上传送数据的速率,单位为b/s (bps)。更常用的速率单位是千比特/秒(kb/s)、兆比特/秒(Mb/s)、吉比特秒(Gb/s)、太比特/秒(Tb/s)。

    在计算机领域,表示存储容量或文件大小时,K=210=1024,M=220,G=230,T=240。这与通信领域中的表示方式不同。

    在计算机网络中,通常把最高数据传输速率称为带宽。

    传播速率是指电磁波在信道中传播的速率,单位是米/秒(m/s),更常用的单位是千米/秒。电磁波在光纤中的传播速率约为2x108m/s。

  • 信道利用率:指出某一信道有百分之多少的时间是有数据通过的。

            信道利用率 
           
          
            = 
           
          
            有数据通过时间 
           
          
            / 
           
          
            (有 
           
          
            + 
           
          
            无)数据通过时间 
           
          
         
           信道利用率=有数据通过时间/(有+无)数据通过时间 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信道利用率</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord cjk_fallback">有数据通过时间</span><span class="mord">/</span><span class="mord cjk_fallback">(有</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">无)数据通过时间</span></span></span></span></span></span></p> </li></ul> 
    

  • 例:假定一条链路的传播速率为2x108m/s,这相当于电磁波在该媒体上1μs可向前传播200m。若链路带宽为1Mb/s,则主机在1μs内可向链路发送1bit数据。

    image-20230810171545349

    ​ 当t=0时,开始向链路发送数据:当t=1μs时,信号传播到200m处,注入链路1比特:当t=2μs时,信号传播到400m处,注入链路共2比特:当t=3μs时,信号传播到600m处,注入链路共3比特。

    可以看出,一段时间内,链路中有多少比特取决于带宽(或传输速率),而1比特“跑” 了多远取决于传播速率。

    1.2 计算机网络体系结构与参考模型
    1.2.1 计算机网络分层结构

    ​ 为了方便对网络进行研究、实现与维护,促进标准化,通常对对计算机网络的体系结构以分层的方式进行建模。分层原则如下:

    • 每层都实现一种相对独立的功能,降低大系统的复杂度。
    • 各层之间界面自然清晰,易于理解,相互交流尽可能少。
    • 各层功能的精确定义独立于具体的实现方法,可以采用最合适的技术来实现。
    • 保持下层对上层的独立性,上层单向使用下层提供的服务。
    • 整个分层结构应能促进标准化工作。

    ​ 依据一定的规则,将分层后的网络从低层到高层依次称为第1层、第2层…第n层,通常还为每层取一个特定的名称,如第1层的名称为物理层。

    ​ 实体:在计算机网络的分层结构中,第n层中的活动元素通常称为第n层实体。具体来说,实体指任何可发送或接收信息的硬件或软件进程,通常是一个特定的软件模块。

    ​ 不同机器上的同一层称为对等层,同一层的实体称为对等实体

    ​ 第n层实体实现的服务为第n+1层所利用。第n层称为服务提供者,第n+1层则称为服务用户。

    ​ 在计算机网络体系结构的各个层次中,每个报文都分为两部分:一是数据部分,即SDU;二是控制信息部分,即PCI,它们共同组成PDU。

    • 服务数据单元(SDU):为完成用户所要求的功能而应传送的数据。第n层的服务数据单元记为n-SDU。
    • 协议控制信息(PCI):控制协议操作的信息。第n层的协议控制信息记为n-PCL。
    • 协议数据单元(PDU):对等层次之间传送的数据单位称为该层的PDU。

    image-20230810140133449

    ​ 层次结构的含义包括以下几方面:

    • 第n层的实体不仅要使用第-1层的服务来实现自身定义的功能,还要向第n+1层提供本层的服务,该服务是第n层及其下面各层提供的服务总和。
    • 最低层只提供服务,是整个层次结构的基础:中间各层既是下一层的服务使用者,又是上一层的服务提供者:最高层面向用户提供服务。
    • 上一层只能通过相邻层间的接口使用下一层的服务,而不能调用其他层的服务;下一层所提供服务的实现细节对上一层透明。
    • 两台主机通信时,对等层在逻辑上有一条直接信道,表现为不经过下层就把信息传送到对方。
    1.2.2 计算机网络协议、接口、服务的概念
    1. 协议

    ​ 为进行网络中的对等实体数据交换而建立的规则、标准或约定称为网络协议(水平结构);由语法、语义和同步三部分组成。

    • 语法:规定传输数据的格式
    • 语义:规定所要完成的功能
    • 同步:规定各种操作的顺序
    1. 接口

    ​ 接口是同一结点内相邻两层间交换信息的连接点。同一结点相邻两层的实体通过服务访问点(Service Access Point, SAP)进行交互。服务是通过SAP提供给上层使用的,第n层的SAP就是第n+1层可以访问第n层服务的地方。

    1. 服务

    ​ 服务是指下层为紧邻的上层提供的功能调用(垂直结构),对等实体在协议的控制下,使得本层能为上一层提供服务,但要实现本层协议还需要使用下一层所提供的服务。

    ​ 上层使用下层所提供的服务时必须与下层交换一些命令,这些命令在OSI参考模型中称为服务原语。OSI参考模型将原语划分为4类:

    • 请求(Request)由服务用户发往服务提供者,请求完成某项工作。
    • 指示(Indication)由服务提供者发往服务用户,指示用户做某件事情。
    • 响应(Response)由服务用户发往服务提供者,作为对指示的响应。
    • 证实(Confirmation)由服务提供者发往服务用户,作为对请求的证实。

    ​ 协议、接口、服务三者之间的关系如下图所示。

    image-20230810141423671

    ​ 服务类型可按以下三种方式分类:

    • 面向连接服务与无连接服务
      • 面向连接服务中,通信前双方必须先建立连接,分配相应的资源(如缓冲区),以保证通信能正常进行,传输结束后释放连接和所占用的资源。分为连接建立、数据传输和连接释放三个阶段。如TCP。
      • 无连接服务中,通信前双方不需要先建立连接,需要发送数据时可直接发送,把每个带有目的地址的包(报文分组)传送到线路上,由系统选定路线进行传输。是尽最大努力交付的服务,不可靠。如IP、UDP。
    • 可靠服务和不可靠服务
      • 可靠服务是指网络具有纠错、检错、应答机制,能保证数据正确、可靠地传送到目的地。
      • 不可靠服务是指网络只是尽量正确、可靠地传送,而不能保证数据正确、可靠地传送到目的 地,是一种尽力而为的服务。
    • 有应答服务和无应答服务
      • 有应答服务是指接收方在收到数据后向发送方给出相应的应答,该应答由传输系统内部自动实现,而不由用户实现。
      • 无应答服务是指接收方收到数据后不自动给出应答。
    1.2.3 ISO/OSI参考模型和TCP/IP模型
    1. OSI参考模型

    ​ 国际标准化组织(ISO)提出的网络体系结构模型,称为开放系统互连参考模型,通常简称为OSI参考模型。

    ​ OSI参考模型有7层,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

    ​ 低三层统称为通信子网,它是为了联网而附加的通信设备,完成数据的传输功能;高三层统称为资源子网,它相当于计算机系统,完成数据的处理等功能。 传输层承上启下。

    image-20230810150448523

    • 物理层

    ​ 物理层的传输单位是比特,功能是在物理媒体上为数据端设备透明地传输原始比特流。

    透明传输指不管所传数据是什么样的比特组合,都应当能够在链路上传送。

    ​ 物理层主要定义数据终端设备(DTE)和数据通信设备(DCE)的物理与逻辑连接方法,物理层协议也称物理层接口标准。由于在通信技术的早期阶段,通信规则称为规程(Procedure),因此物理层协议也称物理层规程。如EIA-232C、ElA/TIA RS-449、 CCITT的X.21等。

    ​ 物理层规定电路接口参数、通信链路上传输信号的意义和电气特征。

    • 数据链路层

    ​ 数据链路层的传输单位是,任务是将网络层传来的IP数据报组装成帧。数据链路层的功能可以概括为成帧、差错控制、流量控制和传输管理等。

    ​ 两个主机之间,点对点传输需要数据链路层协议,将数据报组装成帧透明传输

    ​ 典型的数据链路层协议有SDLC、HDLC、PPP、STP和帧中继等。

    • 网络层

    ​ 网络层的传输单位是IP数据报,它关心的是通信子网的运行控制,主要任务是把网络层的协议数据单元(分组)从源端传到目的端,为分组交换网上的不同主机提供通信服务。

    ​ 关键问题是对分组进行路由选择,并实现流量控制、拥塞控制、差错控制和网际互连等功能。

    数据链路层、网络层、传输层都具有流量控制功能,数据链路层是相邻结点之间的流量控制,网络层是整个网络中的流量控制,传输层是端到端的流量控制。

    ​ 因特网是一个很大的互联网,它由大量异构网络通过路由器(Router)相互连接起来。因特网的主要网络层协议是无连接的网际协议(Internet Protocol,IP)和许多路由选择协议,因此因特网的网络层也称网际层或P层。

    ​ 网络层的协议有 IP、IPX、ICMP、IGMP、ARP、RARP 和 OSPF 等。

    • 传输层

    ​ 传输层也称运输层,传输单位是报文段(TCP)或用户数据报(UDP),传输层负责主机中两个进程之间的通信。

    ​ 功能是为端到端连接提供可靠的传输服务,为端到端连接提供流量控制、差错控制、服务质量、数据传输管理等服务。

    数据链路层提供的是点到点的通信,传输层提供的是端到端的通信。

    点到点可以理解为主机到主机之间的通信,一个点是指一个硬件地址或IP地址,网络中参与通信的主机是通过硬件地址或IP地址标识的;
    端到端的通信是指运行在不同主机内的两个进程之间的通信,一个进程由一个端口来标识,所以称为端到端通信。

    ​ 由于一台主机可同时运行多个进程,因此传输层具有复用分用的功能。

    ​ 复用是指多个应用层进程可同时使用下面传输层的服务,分用是指传输层把收到的信息分别交付给上面应用层中相应的进程。

    ​ 传输层的协议有TCP、UDP。

    • 会话层

    ​ 会话层允许不同主机上的各个进程之间进行会话。会话层利用传输层提供的端到端的服务,为表示层实体或用户进程建立连接并在连接上有序地传输数据,这就是会话,也称建立同步(SYN)

    ​ 会话层负责管理主机间的会话进程,包括建立、管理及终止进程间的会话。会话层可以使用校验点使通信会话在通信失效时从校验点继续恢复通信,实现数据同步。

    • 表示层

    ​ 表示层主要处理在两个通信系统中交换信息的表示方式。

    ​ 为了使不同表示方法的数据和信息之间能互相交换,表示层采用抽象的标准方法定义数据结构,并采用标准的编码形式。表示层的功能有实现数据格式变换、数据加密解密和数据压缩和恢复。

    • 应用层

    ​ 传输单位是报文

    ​ 应用层是OSI参考模型的最高层,是用户与网络的界面。

    ​ 应用层为特定类型的网络应用提供 访问OSI参考模型环境的手段。

    ​ 典型的协议 有用于文件传送的FTP、用于电子邮件的SMTP、用于万维网的HTTP等。

    1. TCP/IP模型

    ​ ARPA在研究ARPAnet时提出了TCP/IP模型,模型从低到高依次为网络接口层(对应OSI参考模型中的物理层和数据链路层)、网际层、传输层和应用层(对应OSI参考模型中的会话层、表示层和应用层)。

    ​ TCP/IP由于得到广泛应用而成为事实上的国际标准。TCPP模型的层次结构如下图所示。

    image-20230810162556468

    • 网络接口层

    ​ 网络接口层的功能类似于OSI参考模型的物理层和数据链路层。它表示与物理网络的接口。

    ​ 具体的物理网络既可以是各种类型的局域网,如以太网、令牌环网、令牌总线网等,也可以是诸如电话网、SDH、X.25、帧中继和ATM等公共数据网络。网络接口层的作用是从主机或结点接收P分组,并把它们发送到指定的物理网络上。

    • 网际层

    ​ 网际层(主机-主机)一是TCP/IP体系结构的关键部分。它和OSI参考模型的网络层在功能上非常相似。

    ​ 网际层将分组发往任何网络,并为之独立地选择合适的路由,但它不保证各个分组有序地到达,各个分组的有序交付由高层负责。网际层定义了标准的分组格式和协议,即IP。

    • 传输层

    ​ 传输层(应用-应用或进程-进程)的功能同样和OSI参考模型中的传输层类似,即使得发送端和目的端主机上的对等实体进行会话。主要使用TCP、UDP协议。

    ​ 传输控制协议(Transmission Control Protocol, TCP)。它是面向连接的,数据传输的单位是报文段,能够提供可靠的交付。

    ​ 用户数据报协议(User Datagram Protocol, UDP)。它是无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付”。

    • 应用层

    ​ 应用层(用户-用户)包含所有的高层协议,如虚拟终端协议(Telnet)、文件传输协议(FTP)、域名解析服务(DNS)、电子邮件协议(SMTP)和超文本传输协议(HTTP)。

    1. TCP/IP模型与OSI参考模型的比较

    image-20230810163407699

    • 相同点

      • 二者都采取分层的体系结构
      • 二者都是基于独立的协议栈的概念
      • 二者都可以解决异构网络的互连
    • ​ 不同点

      • OSI参考模型的最大贡献就是精确地定义了三个主要概念:服务、协议和接口,这与现代的面向对象程序设计思想非常吻合。
        而TCP/IP模型在这三个概念上却没有明确区分,不符合软件工程的思想。
      • OSI参考模型产生在协议发明之前,没有偏向于任何特定的协议,通用性良好。但设计者在协议方面没有太多经验,不知道把哪些功能放到哪一层更好。
        TCP/IP模型正好相反,首先出现的是协议,模型实际上是对已有协议的描述,因此不会出现协议不能匹配模型的情况,但该模型不适合于任何其他非TCP/IP的协议栈。
      • TCP/IP模型在设计之初就考虑到了多种异构网的互连问题,并将网际协议(IP)作为一个单独的重要层次。OSI参考模型最初只考虑到用一种标准的公用数据网将各种不同的系统互连。OSI参考模型认识到IP的重要性后,只好在网络层中划分出一个子层来完成类似于TCP/IP模型中的IP的功能。
      • OSI参考模型在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信。
        而TCP/IP模型认为可靠性是端到端的问题,因此它在网际层仅有一种无连接的通信模式,但传输层支持无连接和面向连接两种模式。
    OSI参考模型TCP/IP模型
    网络层无连接+面向连接无连接
    传输层面向连接无连接+面向连接
    1. 5层协议体系结构

    ​ 学习计算机网络时,我们往往采取折中的办法,即综合OSI参考模型和TCP/IP模型的优点,采用一种如图所示的只有5层协议的体系结构,即我们所熟知的物理层、数据链路层、网络层、传输层和应用层。

    image-20230810164337238
    层次协议
    应用层路由选择协议:距离向量路由算法(RIP)、边界网关协议(BGP);
    动态主机配置协议(DHCP);
    域名系统(DNS);文件传输协议(FTP);超文本传输协议(HTTP);
    电子邮件协议:简单邮件传输协议(SMTP)、邮局协议(POP3)、互联网消息访问协议(IMAP)、多用途网际邮件扩充(MIME)
    传输层传输控制协议(TCP)、用户数据报协议(UDP)
    网络层网际协议:IPv4、IPv6;地址解析协议(ARP);网络地址转换协议(NAT);
    互联网控制报文协议(ICMP);网际组管理协议(IGMP);
    路由选择协议:链路状态路由算法(OSPF);无分类编址(CIDR)
    数据链路层组帧协议:字符计数法、字符填充法和比特填充法
    差错控制协议:奇偶校验码、循环冗余校验码(CRC)、海明码
    流量控制与可靠传输协议:停止-等待协议、后退N帧协议(GBN)、选择重传协议(SR)
    介质访问控制协议:ALOHA、CSMA/CD、CSMA/CA
    物理层物理层接口标准(不需了解)

    2 物理层

    2.1 通信基础
    2.1.1 基本概念
    1. .数据、信号与码元
    • 数据:数据是指传送信息的实体;数据传输方式可分为串行传输和并行传输。

      • 串行传输是指1比特1比特地按照时间顺序传输(远距离通信通常采用串行传输)
      • 并行传输是指若干比特通过多条通信信道同时传输。
    • 信号:是数据的电气或电磁表现,是数据在传输过程中的存在形式。

      • 模拟数据(信号):连续变化的数据(或信号)
      • 数字数据(信号):取值仅允许为有限的几个离散数值的数据(或信号)
    • 码元:码元是指用一个固定时长的信号波形(数字脉冲)表示一位k进制数字,代表不同离散数值的基本波形,是数字通信中数字信号的计量单位,这个时长内的信号称为k进制码元,而该时长称为码元宽度。

      • 1码元可以携带若干比特的信息量。例如,在使用二进制编码时,只有两种不同的码元:一种代表0状态,另一种代表1状态。
    1. 信源、信道与信宿

    ​ 一个数据通信系统主要划分为信源、信道和信宿三部分。

    image-20230811135439310

    • 信源是产生和发送数据的源头。

    • 信宿是接收数据的终点,它们通常都是计算机或其他数字终端装置。

    ​ 发送端信源发出的信息需要通过变换器转换成适合于在信道上传输的信号,而通过信道传输到接收端的信号先由反变换器转换成原始信息,再发送给信宿。

    • 信道与电路并不等同,信道是信号的传输媒介。

    ​ 一个信道可视为一条线路的逻辑部件,一般用来表示向某个方向传送信息的介质,因此一条通信线路往往包含一条发送信道和一条接收信道。

    ​ 噪声源是信道上的噪声(即对信号的干扰)及分散在通信系统其他各处的噪声的集中表示。

    信道的极限容量是指信道的最高码元传输速率或信道的极限信息传输速率。

    a. 信道分类

    • 按传输信号形式:分为传送模拟信号的模拟信道和传送数字信号的数字信道
    • 按传输介质的不同:分为无线信道有线信道

    b. 信道传输信号分类

    • 基带传输:基带信号将数字信号1和0直接用两种不同的电压表示,然后送到数字信道上传输。
    • 宽带传输:宽带信号将基带信号进行调制后形成频分复用模拟信号,然后送到模拟信道上传输。

    c. 通信方式分类

    • 单向通信。只有一个方向的通信而没有反方向的交互,仅需要一条信道。例如,无线电广播、电视广播就属于这种类型。
    • 半双工通信。通信的双方都可以发送或接收信息,但任何一方都不能同时发送和接收信息,此时需要两条信道。
    • 全双工通信。通信双方可以同时发送和接收信息,也需要两条信道。
    1. .速率、波特与带宽

    ​ 速率也称数据率,指的是数据传输速率,表示单位时间内传输的数据量。可以用码元传输速率和信息传输速率表示。

    • 码元传输速率。又称波特率,它表示单位时间内数字通信系统所传输的码元个数(也可称为脉冲个数或信号变化的次数),单位是波特(Baud)。1波特表示数字通信系统每秒传输一个码元。码元可以是多进制的,也可以是二进制的,码元速率与进制数无关。
    • 信息传输速率。又称信息速率、比特率等,它表示单位时间内数字通信系统传输的二进制码元个数(即比特数),单位是比特/秒(b/s)。
    2.1.2 奈奎斯特定理与香农定理
    1. 奈奎斯特定理

    奈氏准则:规定在理想低通(没有噪声、带宽有限)的信道中,为了避免码间串扰,极限码元传输速率为2W波特,其中W是理想低通信道的带宽

    码间串扰:信号中的许多高频分量往住不能通过信道,否则在传输中会衰减,导致接收端收到的信号波形失去码元之间的清晰界限。

    ​ 若用V表示每个码元离散电平的数目(码元的离散电平数目是指有多少种不同的码元,比如有16种不同的码元,则需要4个二进制位,因此数据传输速率是码元传输速率的4倍),则极限数据率为

          理想低通信道下的极限数据传输速率 
         
        
          = 
         
        
          2 
         
        
          W 
         
        
          l 
         
        
          o 
         
         
         
           g 
          
         
           2 
          
         
        
          V 
         
        
          (单位为 
         
        
          b 
         
        
          / 
         
        
          s 
         
        
          ) 
         
        
       
         理想低通信道下的极限数据传输速率=2Wlog_2V(单位为b/s) 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">理想低通信道下的极限数据传输速率</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">2</span><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span style="margin-right: 0.0197em;" class="mord mathnormal">l</span><span class="mord mathnormal">o</span><span class="mord"><span style="margin-right: 0.0359em;" class="mord mathnormal">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3011em;"><span class="" style="top: -2.55em; margin-left: -0.0359em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span style="margin-right: 0.2222em;" class="mord mathnormal">V</span><span class="mord cjk_fallback">(单位为</span><span class="mord mathnormal">b</span><span class="mord">/</span><span class="mord mathnormal">s</span><span class="mord cjk_fallback">)</span></span></span></span></span></span></p> 
    

    • 在任何信道中,码元传输速率是有上限的。若传输速率超过此上限,就会出现严重的码间串扰问题,使得接收端不可能完全正确识别码元。
    • 信道的频带越宽(即通过的信号高频分量越多),就可用更高的速率进行码元的有效传输。
    • 奈氏准则给出了码元传输速率的限制,但并未对信息传输速率给出限制,即未对一个码元可以对应多少个二进制位给出限制。

    由于码元传输速率受奈氏准则的制约,所以要提高数据传输速率,就必须设法使每个码元携带更多比特的信息量,此时就需要采用多元制的调制方法。

    1. 香农定理

    ​ 香农(Shannon)定理给出了带宽受限且有高斯白噪声干扰的信道的极限数据传输速率,当用此速率进行传输时,可以做到不产生误差。香农定理定义为

          信道的极限数据传输速率 
         
        
          = 
         
        
          W 
         
        
          l 
         
        
          o 
         
         
         
           g 
          
         
           2 
          
         
        
          ( 
         
        
          1 
         
        
          + 
         
        
          S 
         
        
          / 
         
        
          N 
         
        
          )(单位为 
         
        
          b 
         
        
          / 
         
        
          s 
         
        
          ) 
         
        
       
         信道的极限数据传输速率=Wlog_2(1+S/N)(单位为b/s) 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信道的极限数据传输速率</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span style="margin-right: 0.0197em;" class="mord mathnormal">l</span><span class="mord mathnormal">o</span><span class="mord"><span style="margin-right: 0.0359em;" class="mord mathnormal">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3011em;"><span class="" style="top: -2.55em; margin-left: -0.0359em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord cjk_fallback">(</span><span class="mord">1</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mord">/</span><span style="margin-right: 0.109em;" class="mord mathnormal">N</span><span class="mord cjk_fallback">)(单位为</span><span class="mord mathnormal">b</span><span class="mord">/</span><span class="mord mathnormal">s</span><span class="mord cjk_fallback">)</span></span></span></span></span></span><br> ​ 式中,W为信道的带宽,S为信道所传输信号的平均功率,N为信道内部的高斯噪声功率。S/N 为信噪比,即信号的平均功率与噪声的平均功率之比,<span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml"> 
      
       
        
        
          信噪比 
         
        
          = 
         
        
          10 
         
        
          l 
         
        
          o 
         
         
         
           g 
          
         
           10 
          
         
        
          ( 
         
        
          S 
         
        
          / 
         
        
          N 
         
        
          ) 
         
        
          (单位为 
         
        
          d 
         
        
          B 
         
        
          ) 
         
        
       
         信噪比=10log_{10}(S/N) (单位为dB) 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信噪比</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">10</span><span style="margin-right: 0.0197em;" class="mord mathnormal">l</span><span class="mord mathnormal">o</span><span class="mord"><span style="margin-right: 0.0359em;" class="mord mathnormal">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3011em;"><span class="" style="top: -2.55em; margin-left: -0.0359em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">10</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord cjk_fallback">(</span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mord">/</span><span style="margin-right: 0.109em;" class="mord mathnormal">N</span><span class="mclose">)</span><span class="mord cjk_fallback">(单位为</span><span class="mord mathnormal">d</span><span style="margin-right: 0.0502em;" class="mord mathnormal">B</span><span class="mord cjk_fallback">)</span></span></span></span></span></span>,例如 当S/N=10时,信噪比为10dB,而当S/N= 1000时,信噪比为30dB。</p> 
    

    • 信道的带宽或信道中的信噪比越大,信息的极限传输速率越高。
    • 对一定的传输带宽和一定的信噪比,信息传输速率的上限是确定的。
    • 只要信息传输速率低于信道的极限传输速率,就能找到某种方法来实现无差错的传输。
    • 香农定理得出的是极限信息传输速率,实际信道能达到的传输速率要比它低不少。

    奈氏准则只考虑了带宽与极限码元传输速率的关系,而香农定理不仅考虑到了带宽,也考虑到了信噪比。这从另一个侧面表明,一个码元对应的二进制位数是有限的。

    2.1.3 编码与调制

    编码:把数据变换为数字信号的过程;调制:把数据变换为模拟信号的过程。

    1. 数字数据编码为数字信号

    image-20230811145912844

    • 归零编码。在归零编码(RZ)中用高电平代表1、低电平代表0(或者相反),每个时钟周期的中间均跳变到低电平(归零),接收方根据该跳变调整本方的时钟基准,这就为传输双方提供了自同步机制。由于归零需要占用一部分带宽,因此传输效率受到了一定的影响。
    • 非归零编码。非归零编码(NRZ)与RZ编码的区别是不用归零,一个周期可以全部用来传输数据。但NRZ编码无法传递时钟信号,双方难以同步,因此若想传输高速同步数据,则需要都带有时钟线。
    • 反向非归零编码。反向非归零编码(NRZI)与NRZ编码的区别是用信号的翻转代表0、信号保持不变代表1。翻转的信号本身可以作为一种通知机制。这种编码方式集成了前两种编码的优点,既能传输时钟信号,又能尽量不损失系统带宽。USB2.0通信的编码方式就是NRZI编码。
    • 曼彻斯特编码。曼彻斯特编码(Manchester Encoding)将一个码元分成两个相等的间隔,前一个间隔为高电平而后一个间隔为低电平表示码元1:码元0的表示方法则正好相反。当然,也可采用相反的规定。该编码的特点是,在每个码元的中间出现电平跳变,位中间的跳变既作为时钟信号(可用于同步),又作为数据信号,但它所占的频带宽度是原始基带宽度的两倍。以太网使用的编码方式就是曼彻斯特编码。
    • 差分曼彻斯特编码。差分曼彻斯特编码常用于局域网传输,其规则是:若码元为1,则前半个码元的电平与上一码元的后半个码元的电平相同;若码元为0,则情形相反。该编码的特点是,在每个码元的中间都有一次电平的跳转,可以实现自同步,且抗干扰性较好。
    • 4B/5B编码。将欲发送数据流的每4位作为一组,然后按照4B/5B编码规则将其转换成相应的5位码。5位码共32种组合,但只采用其中的16种对应16种不同的4位码,其他16种作为控制码(帧的开始和结束、线路的状态信息等)或保留。
    1. 数字数据调制为模拟信号

    image-20230811151338009

    • 幅移键控(ASK)。通过改变载波信号的振幅来表示数字信号1和0,而载波的频率和相位都不改变。比较容易实现,但抗干扰能力差。
    • 频移键控(FSK)。通过改变载波信号的频率来表示数字信号1和0,而载波的振幅和相位都不改变。容易实现,抗干扰能力强,目前应用较为广泛。
    • 相移键控(PSK)。通过改变载波信号的相位来表示数字信号1和0,而载波的振幅和频率都不改变。它又分为绝对调相和相对调相。
    • 正交振幅调制(QAM)。在频率相同的前提下,将ASK与PSK结合起来,形成叠加信号。设波特率为B,采用m个相位,每个相位有n种振幅,则该QAM技术的数据传输速率R为

          R 
         
        
          = 
         
        
          B 
         
        
          l 
         
        
          o 
         
         
         
           g 
          
         
           2 
          
         
        
          ( 
         
        
          m 
         
        
          n 
         
        
          )(单位为 
         
        
          b 
         
        
          / 
         
        
          s 
         
        
          ) 
         
        
       
         R=Blog_2(mn)(单位为b/s) 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0077em;" class="mord mathnormal">R</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.0197em;" class="mord mathnormal">Bl</span><span class="mord mathnormal">o</span><span class="mord"><span style="margin-right: 0.0359em;" class="mord mathnormal">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3011em;"><span class="" style="top: -2.55em; margin-left: -0.0359em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord cjk_fallback">(</span><span class="mord mathnormal">mn</span><span class="mord cjk_fallback">)(单位为</span><span class="mord mathnormal">b</span><span class="mord">/</span><span class="mord mathnormal">s</span><span class="mord cjk_fallback">)</span></span></span></span></span></span></p> 
    

    1. 模拟数据编码为数字信号

    ​ 典型的例子是常用于对音频信号进行编码的脉码调制(PCM)。它主要包括三个步骤,即采样、量化和编码。

    奈奎斯特定理:在通信领域,带宽是指信号最高频率与最低频率之差,单位为Hz。因此,将模拟信号转换成数字信号时,假设原始信号中的最大频率为

         f 
        
       
      
        f 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span style="margin-right: 0.1076em;" class="mord mathnormal">f</span></span></span></span></span>,那么采样频率<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
     
      
       
        
        
          f 
         
        
          采样 
         
        
       
      
        f_{采样} 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span class="mord"><span style="margin-right: 0.1076em;" class="mord mathnormal">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1076em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord cjk_fallback mtight">采样</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>必须大于或等于最大频率<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
     
      
       
       
         f 
        
       
      
        f 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span style="margin-right: 0.1076em;" class="mord mathnormal">f</span></span></span></span></span>的<mark>两倍</mark>,才能保证采样后的数字信号完整保留原始模拟信号的信息。<br> <span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml"> 
      
       
        
         
         
           f 
          
         
           采样 
          
         
        
          ≥ 
         
        
          2 
         
        
          f 
         
        
       
         f_{采样}≥2f 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span class="mord"><span style="margin-right: 0.1076em;" class="mord mathnormal">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1076em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord cjk_fallback mtight">采样</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span class="mord">2</span><span style="margin-right: 0.1076em;" class="mord mathnormal">f</span></span></span></span></span></span></p> 
    

    • 采样是指对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。

      根据采样定理,当采样的频率大于或等于模拟数据的频带带宽(最高变化频率)的两倍时,所得的离散信号可以无失真地代表被采样的模拟数据。

    • 量化是把采样取得的电平幅值按照一定的分级标度转化为对应的数字值并取整数,这样就把连续的电平幅值转换为了离散的数字量。采样和量化的实质就是分割和转换。

    • 编码是把量化的结果转换为与之对应的二进制编码。

    1. 模拟数据调制为模拟信号

    ​ 为了实现传输的有效性,可能需要较高的频率。这种调制方式还可以使用频分复用(FDM)技术,充分利用带宽资源。电话机和本地局交换机采用模拟信号传输模拟数据的编码方式,模拟的声音数据是加载到模拟的载波信号中传输的。

    2.1.4 电路交换、报文交换与分组交换
    1. 电路交换

    ​ 在进行数据传输前,两个结点之间必须先建立一条专用(双方独占)的物理通信路径(由通信双方之间的交换设备和链路逐段连接而成),该路径可能经过许多中间结点。这一路径在整个数据传输期间一直被独占,直到通信结束后才被释放。

    ​ 电路交换技术分为三个阶段:连接 建立、数据传输和连接释放。

    优点

    ​ 1)传输时延小,专用通道,数据直达
    ​ 2)有序传输,数据顺序传送,无失序问题
    ​ 3)没有冲突,全双工通信,通信双方有不同的信道,不会争用物理信道
    ​ 4)适用范围广,模拟信号和输数字信号都可以传输
    ​ 5)实时性强,双方一旦建立物理通路,便可以实时通信,适用于交互式会话类通信。
    ​ 6)控制简单,电路的交换设备及控制较简单

    缺点

    ​ 1)建立连接时间长
    ​ 2)线路独占,信道使用效率低。
    ​ 3)灵活性差:出现故障,就必须重新拨号建立新的连接
    ​ 4)难以规格化
    ​ 5)无数据存储能力,难以平滑通信量
    ​ 6)无法发现与纠正传输差错,难以在通信过程中进行差错控制

    1. 报文交换

    ​ 数据交换的单位是报文,报文携带有目标地址、源地址等信息。报文交换在交换结点采用的是存储转发的传输方式。

    优点

    ​ 1)无需建立连接。
    ​ 2)动态分配线路:报文发给交换设备时,交换设备先存储报文,然后选择一条合适的空闲线路,将报文发送出去
    ​ 3)线路可靠性高:如果某条传输路径发生故障,可重新选择另一条路径传输数搭
    ​ 4)线路利用率高:通信双方在不同的时间一段一段地部分占有物理通道
    ​ 5)提供多目标服务:一个报文可以同时发送往多个目的地址
    ​ 6)在存储转发中容易实现代码转换和速率匹配,甚至收发双方可以不同时处于可用状态。这样就便于类型,规格和速度不同的计算机之间进行通信。

    缺点

    ​ 1)数据进入交换结点后要经历存储、转发,从而引起转发时延(包括接收报文、检验正确性、排队、发送时间等)。
    ​ 2)报文的大小没有限制,要求网路结点需要有较大的缓存空间。增加了传送时延。
    ​ 3)只适用于数字信号。

    1. 分组交换

    ​ 分组交换限制了每次传送的数据块大小的上限,把大的数据块划分为合理的小数据块,再加上一些必要的控制信息(如源地址、目的地址和编号信息等),构成分组(Packet)。

    优点

    ​ 1)无建立时延(相对于报文减小传输时延)
    ​ 2)线路利用率高
    ​ 3)简化了存储管理(相对于报文交换)
    ​ 4)加速传输:分组是逐个传输,可以适用流水线的方式
    ​ 5)减少了出错几率和重发数据量:提高了可靠性,也减少了传输时延。
    ​ 6)分组短小,适用于计算机之间突发式数据通信

    缺点

    ​ 1)存在传输时延
    ​ 2)需要传输额外的信息量。每个小数据块都要加上源、目的地址和分组编号等信息
    ​ 3)当分组交换采用数据报服务时,可能出现失序、丢失或重复分组分组到达目的结点时,要对分组按编号进行排序等工作。

    image-20230811155139123

    • 传送数据量大,且传送时间远大于呼叫时,选择电路交换。电路交换传输时延最小。
    • 当端到端的通路有很多段的链路组成时采用分组交换传送数据较为合适。
    • 从信道利用率上看,报文交换和分组交换优于电路交换,其中分组交换比报文交换的时延小,尤其适合于计算机之间的突发式的数据通信。
    2.1.5 数据报与虚电路
    1. 数据报

    ​ 作为通信子网用户的端系统发送一个报文时,在端系统中实现的高层协议先把报文拆成若干带有序号的数据单元,并在网络层加上地址等控制信息后形成数据报分组(即网络层的PDU)。中间结点存储分组很短一段时间,找到最佳的路由后,尽快转发每个分组。不同的分组可以走不同的路径,也可以按不同的顺序到达目的结点。

    image-20230811155407956

    原理:

    • 主机A先将分组逐个发往与它直接相连的交换结点A,交换结点A缓存收到的分组。
    • 然后查找自己的转发表。由于不同时刻的网络状态不同,因此转发表的内容可能不完全相同,所以有的分组转发给交换结点C,有的分组转发给交换结点D。
    • 网络中的其他结点收到分组后,类似地转发分组,直到分组最终到达主机B。

    特点:

    • **发送分组前不需要建立连接。**发送方可随时发送分组,网络中的结点可随时接收分组。
    • 网络尽最大努力交付,传输不保证可靠性,所以可能丢失;网络为每个分组独立地选择路由,转发的路径可能不同,因而分组不一定按序到达目的结点
    • 发送的分组中要包括发送端和接收端的完整地址,以便可以独立传输。
    • 分组在交换结点存储转发时,需要排队等候处理,这会带来一定的时延。通过交换结点的通信量较大或网络发生拥塞时,这种时延会大大增加,交换结点还可根据情况丢弃部分分组。
    • 网络具有冗余路径,当某个交换结点或一条链路出现故障时,可相应地更新转发表,寻找另一条路径转发分组,对故障的适应能力强。
    • 存储转发的延时一般较小,提高了网络的吞吐量。
    • 收发双方不独占某条链路,资源利用率较高。
    1. 虚电路

    ​ 虚电路方式试图将数据报方式与电路交换方式结合起来,充分发挥两种方法的优点,以达到最佳的数据交换效果。在分组发送之前,要求在发送方和接收方建立一条逻辑上相连的虚电路,并且连接一旦建立,就固定了虚电路所对应的物理路径。

    ​ 与电路交换类似,整个通信过程分为三个阶段:虚电路建立、数据传输与虚电路释放。

    image-20230811161211880

    原理:

    • 为进行数据传输,主机A与主机B之间先建立一条逻辑通路,主机A发出一个特殊的“呼叫请求”分组,该分组通过中间结点送往主机B,若主机B同意连接,则发送“呼叫应答”分组予以确认。
    • 虚电路建立后,主机A就可向主机B发送数据分组。当然,主机B也可在该虚电路上向主机A发送数据。
    • 传送结束后主机A通过发送“释放请求”分组来拆除虚电路,逐段断开整个连接。

    特点:

    • 虚电路通信链路的建立和拆除需要时间开销,对交互式应用和小量的短分组情况显得很浪费,但对长时间、频繁的数据交换效率较高。
    • 虚电路的路由选择体现在连接建立阶段,连接建立后,就确定了传输路径
    • 虚电路提供了可靠的通信功能,能保证每个分组正确且有序到达。此外,还可以对两个数据端点的流量进行控制,当接收方来不及接收数据时,可以通知发送方暂缓发送。
    • 虚电路有一个致命的弱点,即当网络中的某个结点或某条链路出现故障而彻底失效时,所有经过该结点或该链路的虚电路将遭到破坏。
    • 分组首部不包含目的地址,包含的是虚电路标识符,相对于数据报方式,其开销小。
    数据报服务虚电路服务
    连接的建立不需要必须有
    目的地址每个分组都有完整的目的地址仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号
    路由选择每个分组独立地进行路由选择和转发属于同一条虚电路的分组按照同一路由转发
    分组顺序不保证分组的有序到达保证分组的有序到达
    可靠性不保证可靠通信,可靠性由用户主机来保证可靠性由网络保证
    对网络故障的适应性出故障的结点丢失分组,其他分组路径选择发生变化时可以正常传输所有经过故障结点的虚电路均不能正常工作
    差错处理和流量控制由用户主机进行流量控制,不保证数据报的可靠性可由分组交换网负责,也可由用户主机负责
    2.2 传输介质
    2.2.1 双绞线、同轴电缆、光纤与无线传输介质

    ​ 传输介质也称传输媒体,它是数据传输系统中发送设备和接收设备之间的物理通路。

    1. 双绞线

    ​ 双绞线是最常用的古老传输介质,它由两根采用一定规则并排绞合的、相互绝缘的铜导线组成。绞合可以减少对相邻导线的电磁干扰。

    ​ 为了进一步提高抗电磁干扰的能力,可在双绞线的外 面再加上一层,即用金属丝编织成的屏蔽层,这就是屏蔽双绞线(STP);无屏蔽层的双绞线称为非屏蔽双绞线(UTP)

    image-20230811163048085

    • 双绞线的价格便宜,是最常用的传输介质之一,在局域网和传统电话网中普遍使用。
    • 带宽取决于铜线的粗细和传输的距离。
    • 通信距离一般 为几千米到数十千米。
    • 模拟传输和数字传输都可使用双绞线,距离太远时,对于模拟传输,要用放大器放大衰减的信号;对于数字传输,要用中继器将失真的信号整形。
    1. 同轴电缆

    ​ 同轴电缆由内导体、绝缘层、网状编织屏蔽层和塑料外层构成。

    ​ 基带同轴电缆:50Ω同轴电缆,主要用于传送基带数字信号。

    ​ 宽带同轴电缆:75Ω同轴电缆,主要用于传送宽带信号。

    image-20230811163530599

    • 同轴电缆具有良好的抗干扰特性,被广泛用于传输较高速率的数据。
    • 传输距离更远,但价格较双绞线贵。
    1. 光纤

    ​ 光纤通信就是利用光导纤维(简称光纤)传递光脉冲来进行通信。

    ​ 有光脉冲表示1,无光脉冲表示0。可见光的频率约为108MHz,因此光纤通信系统的带宽范围极大

    image-20230811164005685

    ​ 光纤主要由纤芯(实心)和包层构成,光波通过纤芯进行传导,包层较纤芯有较低的折射率。当光线从高折射率的介质射向低折射率的介质时,其折射角将大于入射角。因此,如果入射角足够大,就会出现全反射,即光线碰到包层时候就会折射回纤芯、这个过程不断重复,光也就沿着光纤传输下去。

    • 多模光纤:利用光的全反射特性,可以将从不同角度入射的多条光线在一根光纤中传输。

      光脉冲在多模光纤中传输时会逐渐展宽, 造成失真,因此多模光纤只适合于近距离传输

      image-20230811164201006

    • 单模光纤:光纤的直径减小到只有一个光的波长时,光纤就像一根波导那样,可使光线一直向前传播,而不会产生多次反射。

      单模光纤的衰减较小,可传输数公里甚至数十千米而不必采用中继器,适合远距离传输

      image-20230811164306197

    特点

    • 传输损耗小,中继距离长,对远距离传输特别经济。
    • 抗雷电和电磁干扰性能好。这在有大电流脉冲干扰的环境下尤为重要。
    • 无串音干扰,保密性好,也不易被窃听或截取数据。
    • 体积小,重量轻。这在现有电缆管道已拥塞不堪的情况下特别有利。
    1. 无线介质
    • 无线电波
      • 无线电波具有较强的穿透能力,可以传输很长的距离。
      • 无线电波使信号向所有方向散播,因此有效距离范围内的接收设备无须对准某个方向,就可与无线电波发射者进行通信连接。
    • 微波、红外线和激光
      • 有很强的方向性,都沿直线传播。
      • 红外通信和激光通信把要传输的信号分别转换为各自的信号格式,即红外光信号和激光信号,再直接在空间中传播。
      • 微波通信的频率较高,频段范围也很宽,载波频率通常为2~40GHz,因而通信信道的容量大。
      • 卫星通信利用地球同步卫星作为中继来转发微波信号,可以克服地面微波通信距离的限制。卫星通信的优点是通信容量大、距离远、覆盖广,缺点是保密性差、端到端传播时延长。
    2.2.2 物理层接口的特性

    ​ 物理层的主要任务可以描述为确定与传输媒体的接口有关的一些特性:

    • 机械特性。指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等。
    • 电气特性。指明在接口电缆的各条线上出现的电压的范围。
    • 功能特性。指明某条线上出现的某一电平的电压表示何种意义。
    • 过程特性。或称规程特性。指明对于不同功能的各种可能事件的出现顺序。

    ​ 常用的物理层接口标准有EIARS.232.C、ADSL和SONET/SDH等。

    2.3 物理层设备
    2.3.1 中继器

    ​ 由于存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误。因此需要中继器在传播途中修复信号失真。

    ​ 中继器的主要功能是将信号整形并放大转发出去,以消除信号经过一长段电缆后而产生的失真和衰减,使信号的波形和强度达到所需要的要求,进而扩大网络传输的距离。

    • 原理是信号再生(而非简单地将衰减的信号放大)。中继器有两个端口,数据从一个端口输入,再从另一个端口发出。端口仅作用于信号的电气部分,而不管是否有错误数据或不适于网段的数据。

    • 中继器两端的网络部分是网段,而不是子网,使用中继器连接的几个网段仍然是一个局域网。

    • 中继器工作在物理层,因此它不能连接两个具有不同速率的局域网。

    注意:如果某个网络设备具有存储转发的功能,那么可以认为它能连接两个不同的协议;如果该网络设备没有存储转发功能,那么认为它不能连接两个不同的协议。

    中继器没有存储转发功能,因此它不能连接两个速率不同的网段,中继器两端的网段一定要使用同一个协议。

    5-4-3原则:在采用粗同轴电缆的10BASE5以太网规范中,互相串联的中继器的个数不能超过4个,而且用4个中继器串联的5段通信介质中只有3段可以挂接计算机,其余两段只能用作扩展通信范围的链路段,不能挂接计算机。

    注意:放大器和中继器都起放大作用,只不过放大器放大的是模拟信号,原理是将衰减的信号放大,而中继器放大的是数字信号,原理是将衰减的信号整形再生。

    2.3.2 集线器

    ​ 集线器(Hub)实质上是一个多端口的中继器。

    image-20230811170527515

    ​ 当Hub工作时,一个端口接收到数据信号后,由于信号在从端口到Hub的传输过程中已有衰减,所以Hub便将该信号进行整形放大,使之再生(恢复)到发送时的状态,紧接着转发到其他所有(除输入端口外)处于工作状态的端口。

    • 每个端口连接的网络部分是一个网络的不同网段,由Hub组成的网络是共享式网络,但逻辑上仍是一个总线网。集线器不能分割冲突域
    • 主要使用双绞线组建共享网络,是从服务器连接到桌面的最经济方案。
    • 只能在半双工状态下工作,如果同时有两个或多个端口输入,那么输出时会发生冲突,致使这些数据都无效。

    集线器在一个时钟周期中只能传输一组信息,如果一台集线器连接的机器数目较多,且多台机器经常需要同时通信,那么将导致信息碰撞,使得集线器的工作效率很差。

    比如,一个带宽为10Mb/S的集线器上连接了8台计算机,当这8台计算机同时工作时,每台计算机真正所拥有的带宽为10/8Mb/s=1.25Mb/s。

    3 数据链路层

    3.1 数据链路层的功能

    ​ 数据链路层在物理层提供服务的基础上向网络层提供服务,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路。基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。

    数据链路指网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。

    3.1.1 为网络层提供服务
    1. 无确认的无连接服务

      源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需发回确认。适用于实时通信或误码率较低的通信信道,如以太网。

    2. 有确认的无连接服务

      源机器发送数据帧时不需先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧。该服务适用于误码率较高的通信信道,如无线通信。

    3. 有确认的面向连接服务

      帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧。该服务适用于通信要求(可靠性、实时性)较高的场合。

    3.1.2 链路管理

    ​ 数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务。

    3.1.3 封装成帧与透明传输

    ​ 两台主机之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。

    • 帧构成:数据前后添加首部和尾部。帧长=数据长度+首部长度+尾部长度
    • 帧定界:帧首部尾部包含控制信息,其中一个重要作用是确定帧的界限。
    • 帧同步:接收方应能从接收到的二进制比特流中区分出帧的起始与终止。
    • 最大传送单元(MTU):为了提高帧的传输效率,应当使帧的数据部分的长度尽可能地大于首部和尾部的长度,但每种数据链路层协议都规定了帧的数据部分的长度上限——最大传送单元(MTU)。

    image-20230814143522092

    HDLC协议:用标识位F (01111110)来标识帧的开始和结束。帧格式如下图所示。

    image-20230814140449549

    • 透明传输:不管所传数据是什么样的比特组合,都应当能在链路上传送。通过不同组帧方式实现透明传输。
    3.1.4 流量控制

    ​ 由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,这样会导致帧的丢失导致出错。
    流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。

    流量控制在不同层,控制的对象不同。对于数据链路层来说,控制的是相邻两结点之间数据链路上的流量,而对于传输层来说,控制的则是从源端到目的端之间的流量。

    image-20230814143422344

    在OSI体系结构中,数据链路层具有流量控制的功能。而在TCP/IP体系结构中,流 量控制功能被移到了传输层。

    3.1.5 差错控制

    ​ 由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制

    ​ 位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest, ARQ)方式来重传出错的帧。

    ​ 帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。

    3.2 组帧

    ​ 为了使接收方能正确地接收并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧(称为组帧)。

    3.2.1 字符计数法

    ​ 字符计数法是指在帧头部使用一个计数字段来标明帧内字符数。目的结点的数据链路层收到字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身所占用的一个字节)。

    image-20230814145540445

    ​ 问题:若计算字段出错,则失去划分帧边界依据,彻底失去帧同步。

    3.2.2 字符填充的首尾定界符法

    ​ 字符填充法使用特定字符来定界一帧的开始与结束。如下图所示,控制字符SOH放在帧的最前面,表示帧的首部开始,控制字符EOT表示帧的结束。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个**转义字符(ESC)**来加以区分。从而实现透明传输

    注意,转义字符是ASCI码中的控制字符,是一个字符,而非“E”“S”“C”三个字符的组合

    image-20230814145805071

    ​ 接收方收到转义字符后,就知道其后面紧跟的是数据信息,而不是控制信息。

    3.2.3 零比特填充的首尾标志法

    ​ 零比特填充法它使用一个特定的比特模式,即01111110来标志一帧的开始和结束。HDLC协议使用该方法。

    ​ 为了防止误判,发送方的数据链路层在信息位中遇到5个连续的“1”时,将自动在其后插入一个“0”;而接收方做该过程的逆操作,即每收到5个连续的“1"时,自动删除后面紧跟的“0”,以恢复原信息。

    image-20230814150635814

    ​ 零比特填充法很容易由硬件来实现,性能优于字符填充法。

    3.2.4 违规编码法

    ​ 利用不会用到的编码方式作为帧的开始与终止。

    曼彻斯特编码方法将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而**“高-高”电平对和“低一低”电平对在数据比特中是违规**的(即没有采用)。

    ​ 可以借用这些违规编码序列来定界帧的起始和终止局域网IEEE802标准就采用了这种方法。

    ​ 违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余 编码的特殊编码环境。

    由于字符计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法零比特填充法和违规编码法

    3.3 差错控制

    ​ 实际通信链路中可能会发送比特差错,即1可能会变成0,0也可能会变成1。

    ​ 通常利用编码技术进行差错控制,主要有自动重传请求ARQ和前向纠错FEC。

    • 在ARQ方式中,接收端检测到差错时,就设法通知发送端重发,直到接收到正确的码字为止。属于检错编码
    • 在FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。属于纠错编码
    3.3.1 检错编码

    ​ 检错编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。

    1. 奇偶校验码

    ​ 奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。由n-1位信息元和1位校验元组成。

    • 奇校验码:在附加一个校验元后,码长为n的码字中“1”的个数为奇数。
    • 偶校验码:在附加一个校验元后,码长为n的码字中“1”的个数为偶数。

    奇偶校验码只能检测出奇数个位出错,但不能知道哪位出错,也不能发现偶数个位出错情况。

    1. 循环冗余码

    ​ 循环冗余码(Cyclic Redundancy Code, CRC)又称多项式码,任何一个由二进制数位串组成的代码都可与一个只含有0和1两个系数的多项式建立一一对应关系。

    ​ 给定一个m bit 的帧或报文,发送器生成 r bit 的帧检验序列(FCS)。将FCS接到原始帧后面,形成长度为 m+r 的序列。该序列可被约定好的多项式 G(x) 模2整除。其中r为G(x)的阶数,即位数减一;G(x)的首尾必需都为1。
    ​ 接收方用相同的G(x) 作为除数P去除收到的帧,无余数则无差错。

    生成帧检验序列(FCS)方法

    ​ 设将多项式G(x)=1101作为除数P,数据101001(m=6,r=3),计算FCS。

    ​ a. 在帧末尾加上r个0;b. 模2除法求得r位余数位FCS

    ​ 模2除法指按位异或运算,若两个二进制位相同,结果为0;不同结果为1。若首位为0则不进行异或运算,直接右移一位,如下式0111和除数1101运算时,0111右移变为01110与1101运算。直到剩余位数少于除数,得到余数。

    image-20230814155522000

    ​ 如上图所示,被除数M是原 m 位序列加 r 位0组成的序列(101001+000)。将G(x)作为除数P,进行模2除法,最后得到的余数R即为FCS。因此发送数据为原m为序列加FCS序列,即101001+001。该序列

    ​ 通过循环冗余码(CRC)的检错技术,数据链路层做到了对帧的无差错接收。也就是说,凡是接收端数据链路层接受的帧,我们都认为这些帧在传输过程中没有产生差错;而接收端丢弃的帧虽然也收到了,但最终因为有差错而被丢弃,即未被接受。

    循环冗余码(CRC)是具有纠错功能的,只是数据链路层仅使用了它的检错功能,检测到帧出错则直接丢弃,是为了方便协议的实现,因此本节将CRC放在检错编码中介绍。

    3.3.2 纠错编码

    ​ 纠错方法:在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。

    海明码:最常见的纠错编码,其原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。

    ​ 以序列1010为例讲述海明码编码过程:

    1. 确定海明码的位数

      设n为有效信息的位数,k为校验位的位数,则信息位n和校验位k应满足

              n 
             
            
              + 
             
            
              k 
             
            
              ≤ 
             
             
             
               2 
              
             
               k 
              
             
            
              − 
             
            
              1 
             
            
           
             n+k≤2^k-1 
            
           
         </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6667em; vertical-align: -0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.8304em; vertical-align: -0.136em;"></span><span style="margin-right: 0.0315em;" class="mord mathnormal">k</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.9824em; vertical-align: -0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.8991em;"><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.0315em;" class="mord mathnormal mtight">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">1</span></span></span></span></span></span><br> ​ 序列有4为有效信息,k=3时满足3+4≤2<sup>3</sup>-1;因此海明码信息位D有4位,校验位P有3位,共7位。</p> </li><li> <p>确定校验位的分布</p> <p>规定校验位P<sup>i</sup>在海明位号2<sup>i-1</sup>的位置上,其余位信息位,因此有P<sub>1</sub>在第1位,P<sub>2</sub>在第2位,P<sub>3</sub>在第4位。</p> <p>海明码分布如下:D<sub>4</sub> D<sub>3</sub> D<sub>2</sub> P<sub>3</sub> D<sub>1</sub> P<sub>2</sub> P<sub>1</sub></p> </li><li> <p>分组以形成校验关系</p> <p>每个数据位用多个校验位进行校验,但要满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。校验位不需要再被校验。分组形成的校验关系如下。</p> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/8ced715750ff4ffeffa9716e83f525e4.png#pic_center" alt="image-20230814164958994"></p> </li><li> <p>校验位取值</p> <p>校验位P<sub>i</sub>的值为第i组(由该校验位校验的数据位)所有位求异或。</p> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/1b36fc285599da36d9b5a6c7ce843b2b.png#pic_center" alt="image-20230814165047263"></p> <p>因此,1010对应的海明码为101**<u>0</u><strong>0</strong><u>10</u>**</p> </li><li> <p>海明码的校验原理</p> <p>每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查,构成k个校验方程:</p> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/9cce22ff2bab4191a5199e039416970a.png#pic_center" alt="image-20230814165230646"></p> <p>若S<sub>3</sub>S<sub>2</sub>S<sub>1</sub>的值为“000”,则说明无错;否则说明出错,且这个数就是错误位的位号,如S<sub>3</sub>S<sub>2</sub>S<sub>1</sub>=001,说明第一位出错。直接取反达到了纠错的目的。</p> </li></ol> 
      

    ​ 以上公式只能纠错一位数据,要有多位数据发生错误,需要更复杂的海明公式。海明码纠错能力和最小码距有关。海明距离即最小码距,指的是两个字符串对应位置的不同字符的个数。

    • 如果要检测 e 个错误,最小码距应该满足:$ D≥e+1 $
    • 如果要纠正 t 个错误,最小码距应满足:
            D 
           
          
            ≥ 
           
          
            2 
           
          
            t 
           
          
            + 
           
          
            1 
           
          
         
           D≥2t+1 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8193em; vertical-align: -0.136em;"></span><span style="margin-right: 0.0278em;" class="mord mathnormal">D</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7278em; vertical-align: -0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">1</span></span></span></span></span></li><li>如果要检测 e 个错误同时纠正 t个错误,最小码距应该满足: <span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
        
         
          
          
            D 
           
          
            ≥ 
           
          
            e 
           
          
            + 
           
          
            t 
           
          
            + 
           
          
            1 
           
          
            , 
           
          
            ( 
           
          
            e 
           
          
            &gt; 
           
          
            = 
           
          
            t 
           
          
            ) 
           
          
         
           D≥e+t+1, (e&gt;=t) 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8193em; vertical-align: -0.136em;"></span><span style="margin-right: 0.0278em;" class="mord mathnormal">D</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.6667em; vertical-align: -0.0833em;"></span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6984em; vertical-align: -0.0833em;"></span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.1667em;"></span><span class="mopen">(</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span></span></li></ul> 
      
    3.4 流量控制与可靠传输机制
    3.4.1 滑动窗口机制
    • 发送窗口:在任意时刻,发送方都维持一组连续的允许发送的帧的序号。

      • 发送窗口用来对发送方进行流量控制,而发送窗口的大小WT,代表在还未收到对方确认信息的情况下发送方最多还可以发送多少个数据帧。

      image-20230814175558669

    • 接收窗口:接收方也维持一组连续的允许接收帧的序号。

      • 接收窗口是为了控制可以接收哪些数据帧和不可以接收哪些帧。
      • 在接收方,只有收到的数据帧的序号落入接收窗口内时,才允许将该数据帧收下。
      • 若接收到的数据帧落在接收窗口之外,则一律将其丢弃。

      image-20230814175636711

    滑动窗口特性:

    • 只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才有可能(只有发送方收到确认帧后才一定)向前滑动。
    • 从滑动窗口的概念看,停止-等待协议、后退N帧协议和选择重传协议只在发送窗口大小与接收窗口大小上有所差别:
      • 停止-等待协议:发送窗口大小=1,接收窗口大小=1。
      • 后退N帧协议:发送窗口大小>1,接收窗口大小=1。
      • 选择重传协议:
    • 接收窗口的大小为1时,可保证帧的有序接收。
    • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意与第5章传输层的滑动窗口协议的区别)。

    可靠传输机制

    • 确认:确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认
    • 超时重传:超时重传是指发送方在发送某个数据帧后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止。
    • 自动重传请求(Automatic Repeat reQuest, ARQ):通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来差错的方法之一。传统ARQ有三种:停止-等待(Stop-and-Wait) ARQ、 后退 N帧(Go-Back-N)ARQ 和选择性重传(Selective Repeat)ARQ。

    在数据链路层中流量控制机制和可靠传输机制是交织在一起的,都由滑动窗口机制解决。

    3.4.2 单帧滑动窗口与停止-等待协议
    1. 定义

    ​ 在停止-等待协议中,源站每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。

    image-20230815092106246

    1. 有差错情况
    • 超时计时器:每次发送一个帧就启动一个计时,超时计时器设置的重传时间应当比帧传输的平均RTT更长

      • 发完一个帧后,必须保留它的副本。
      • 发送的帧交替地用0和1来标识,确认帧分别用ACK0和ACK1来表示,收到的确认帧有误时,重传已发送的帧。
    • 发送失败的三种情况:

      • 数据帧丢失或检测到帧出错:数据帧丢失时,或者接收方检测到数据帧有错,不返回ACK,超时重传。
      • ACK丢失:接收方接收到数据帧,返回ACK时丢失,发送方超时重传。
      • ACK迟到:接收方收到数据帧后,返回ACK0,但是ACK到达时间超过重传时间,发送方重新发送数据,接收到ACK0时丢失,因为此刻等待ACK1的接收。

      image-20230815122833126

    1. 性能分析

    ​ 由于要花费大量时间等待ack确认,信道利用率太低。

          信道利用率 
         
        
          U 
         
        
          = 
         
         
          
          
            T 
           
          
            D 
           
          
          
           
           
             T 
            
           
             D 
            
           
          
            + 
           
          
            R 
           
          
            T 
           
          
            T 
           
          
            + 
           
           
           
             T 
            
           
             A 
            
           
          
         
        
       
         信道利用率U=\frac {T_D} {T_D+RTT+T_A} 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信道利用率</span><span style="margin-right: 0.109em;" class="mord mathnormal">U</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 2.1963em; vertical-align: -0.836em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.3603em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.0278em;" class="mord mathnormal mtight">D</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">RTT</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">A</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.0278em;" class="mord mathnormal mtight">D</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.836em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span><br> <img src="https://i-blog.csdnimg.cn/blog_migrate/5c6faebf70936981b30fa9e809124413.png#pic_center" alt="image-20230815094310472"></p> 
    

    3.4.3 多帧滑动窗口与后退N帧协议(GBN)

    ​ 在后退N帧式ARQ中,发送方无须在收到上一个帧的ACK后才能开始发送下一帧,而是可以连续发送帧。

    ​ 发送窗口大小>1,接收窗口大小=1。

    image-20230815101525038

    1. 发送方

      • 上层的调用:上层要发送数据时,发送方先检查发送窗口是否己满,如果未满,则产生一个带序号的帧并将其发送;如果窗口已满发送方可以缓存这些数据,窗口不满时再发送帧。
      • 收到了一个ACK:GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧。
      • 超时事件:协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有己发送但未被确认的帧
    2. 接收方

      • 如果正确按序收到n号帧,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。

      • 其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。

        接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)。

    3. 窗口大小

      接收窗口为1,可以保证按序接收数据帧。

      若采用n比特对帧编号,则其发送窗口的尺寸WT应满足

             1 
            
           
             < 
            
            
            
              W 
             
            
              T 
             
            
           
             ≤ 
            
            
            
              2 
             
            
              n 
             
            
           
             − 
            
           
             1 
            
           
          
            1<W_T≤2^n-1 
           
          
        </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8333em; vertical-align: -0.15em;"></span><span class="mord">1</span><span class="mord cjk_fallback"><</span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.1389em;" class="mord mathnormal mtight">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7477em; vertical-align: -0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.6644em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">1</span></span></span></span></span>。若发送窗口大于<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
         
          
           
            
            
              2 
             
            
              n 
             
            
           
             − 
            
           
             1 
            
           
          
            2^n-1 
           
          
        </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.7477em; vertical-align: -0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.6644em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">1</span></span></span></span></span>,则会造成接收方无法分辨新帧和旧帧。</p> </li><li> <p>性能分析</p> 
      

    • 优点:因连续发送数据帧而提高了信道利用率
    • 缺点:在重传时必须把原来已经正确传送的数据帧重传,是传送效率降低。

    ​ 信道的传输质量很差导致误码率较大时,后退N帧协议不一定优于停止-等待协议。

    3.4.4 多帧滑动窗口与选择重传协议(SR)

    ​ 为解决GBN会重传正确传送的帧,设法只重传出现差错和超时的数据帧,这需要加大接收窗口,因此提出了选择重传协议。

    ​ 发送窗口大小>1,接收窗口大小>1。

    1. 发送方

      image-20230815104723761
      • 上层的调用:从上层收到数据后,发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

      • 收到了一个ACK:如果收到ACK,假如该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收

        如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。

      • 超时事件:每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。

    2. 接收方

      image-20230815105104266
      • 来者不拒(窗口内的帧):SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧【收谁确认谁】,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
      • 如果收到了**窗口序号外(小于窗口下界)**的帧,就返回一个ACK。其他情况,就忽略该帧。
    3. 窗口大小

    ​ 发送窗口尺寸WT和接收窗口尺寸WR都大于1,一次可接收发送多个帧。

    ​ WT = WR时最好,若采用n比特对帧编号,则需满足

          W 
         
         
         
           T 
          
         
           m 
          
         
           a 
          
         
           x 
          
         
        
       
         = 
        
        
        
          W 
         
         
         
           R 
          
         
           m 
          
         
           a 
          
         
           x 
          
         
        
       
         = 
        
        
        
          2 
         
         
         
           n 
          
         
           − 
          
         
           1 
          
         
        
       
      
        W_{Tmax}=W_{Rmax}=2^{n-1} 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8333em; vertical-align: -0.15em;"></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span style="margin-right: 0.1389em;" class="mord mathnormal mtight">T</span><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.8333em; vertical-align: -0.15em;"></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span style="margin-right: 0.0077em;" class="mord mathnormal mtight">R</span><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.8141em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></span>,且 <span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
     
      
       
        
        
          W 
         
        
          T 
         
        
       
         + 
        
        
        
          W 
         
        
          R 
         
        
       
         ≤ 
        
        
        
          2 
         
        
          n 
         
        
       
      
        W_T+W_R≤2^n 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8333em; vertical-align: -0.15em;"></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.1389em;" class="mord mathnormal mtight">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.8333em; vertical-align: -0.15em;"></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">W</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3283em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span style="margin-right: 0.0077em;" class="mord mathnormal mtight">R</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.6644em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></span>。</p> 
    

    ​ 如果不满足窗口大小大于序号范围一半,当一个或多个确认帧丢失时,发送方就会超时重传之前的数据帧,但接收方无法分辨是新的数据帧还是重传的数据帧。

    1. 性能分析

      • 信道利用率:也称信道效率,是对发送方而言的,是指发送方在一个发送周期的时间内,有效地发送数据所需要的时间占整个发送周期的比率。发送方从开始发送数据到收到第一个确认帧为止,称为一个发送周期。

        设一个发送周期为T,发送周期内共发送L比特的数据,发送方数据传输率为C,则发送方发送有效数据时间为

                 L 
                
               
                 / 
                
               
                 C 
                
               
              
                L/C 
               
              
            </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathnormal">L</span><span class="mord">/</span><span style="margin-right: 0.0715em;" class="mord mathnormal">C</span></span></span></span></span>,信道利用率为<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
             
              
               
               
                 ( 
                
               
                 L 
                
               
                 / 
                
               
                 C 
                
               
                 ) 
                
               
                 / 
                
               
                 T 
                
               
              
                (L/C)/T 
               
              
            </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">L</span><span class="mord">/</span><span style="margin-right: 0.0715em;" class="mord mathnormal">C</span><span class="mclose">)</span><span class="mord">/</span><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span></span></span></span></span>。</p> </li><li> <p>信道吞吐率:<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
             
              
               
               
                 信道吞吐率 
                
               
                 = 
                
               
                 信道利用率 
                
               
                 × 
                
               
                 发送方发送速率 
                
               
              
                信道吞吐率=信道利用率×发送方发送速率 
               
              
            </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">信道吞吐率</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">信道利用率</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">发送方发送速率</span></span></span></span></span></p> </li><li> <p>最小帧长:<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
             
              
               
               
                 最小帧长 
                
               
                 = 
                
               
                 2 
                
               
                 × 
                
               
                 数据传输速率 
                
               
                 × 
                
               
                 总线传播时延 
                
               
              
                最小帧长=2×数据传输速率×总线传播时延 
               
              
            </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">最小帧长</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7278em; vertical-align: -0.0833em;"></span><span class="mord">2</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord cjk_fallback">数据传输速率</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">总线传播时延</span></span></span></span></span></p> </li></ul> </li></ol> 
        

    3.5 介质访问控制

    ​ 介质访问控制的内容就是,采取一定的措施,使得两对节点之间的通信不会发生互相干扰的情况。用来决定广播信道中信道分配的协议属于数据链路层的一个子层,称为介质访问控制(Medium Access Control, MAC)子层。

    3.5.1 信道划分介质访问控制

    信道划分介质访问控制是将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备。通常采用多路复用技术,把多个输入通道的信息整合到一个复用通道中,在接收端把收到的信息分离。

    1. 频分多路复用(FDM)

      image-20230815114754984

      ​ 用户在相同时间占用不同频率带宽资源。每个子信道分配的带宽可不相同,但它们的总和必须不超过信道的总带宽。在实际应用中为了防止子信道之间的干扰,相邻信道之间需要加入“保护频带”。共享时间。

    2. 时分多路复用(TDM)

      image-20230815114926548

      ​ 每一个时分复用的用户在每一个TDM帧占用固定序号的时隙,所有用户轮流占用信道。

      ​ 不会发生碰撞,TDM帧是在物理层传送的比特流所划分的帧,标志一个周期。共享空间。

      • 统计时分多路复用(STDM)

        image-20230815115246126

        每一个STDM帧中的时隙数小于连接在集中器上的用户数。各用户有了数据就随时发往集中器的输入缓存,然后集中器按顺序依次扫描输入缓存,把缓存中的输入数据放入STDM帧中,一个STDM帧满了就发出。STDM帧不是固定分配时隙,而是按需动态分配时隙

    3. 波分多路复用(WDM)

      image-20230815115441883

      波分多路复用就是光的频分多路复用,在一根光纤中传输多种不同波长(频率)的光信号,由于波长(频率)不同,所以各路光信号互不干扰,最后再用波长分解复用器将各路波长分解出来。

    4. 码分多路复用(CDM)

      码分多路复用是靠不同的编码来区分各路原始信号的一种复用方式。既共享信道的频率,又共享时间

      码分多址(CDMA):每个比特时间再划分成m个短的时间槽,称为码片(Chip),通常m的值是64或128。每个站点指派m位码片序列,发送1时发原码,0时发反码。各个站点码片序列相互正交

      CDMA原理:

      假如站点A的码片序列被指派为00011011,则A站发送00011011就表示发送比特1,发送11100100就表示发送比特0。为了方便,按惯例将码片中的0写为-1,将1写为+1,因此A站的码片序列是-1-1-1+1+1-1+1+1。

      令向量S表示A站的码片向量,令T表示B站的码片向量。两个不同站的码片序列正交,即向量S和T的规格化内积(Inner Product)为0:

               S 
              
             
               ⋅ 
              
             
               T 
              
             
               = 
              
              
              
                1 
               
              
                m 
               
              
              
              
                ∑ 
               
               
               
                 i 
                
               
                 = 
                
               
                 1 
                
               
              
                m 
               
              
              
               
               
                 S 
                
               
                 i 
                
               
               
               
                 T 
                
               
                 i 
                
               
              
             
               = 
              
             
               0 
              
             
            
              S·T=\frac{1}{m}\sum_{i=1}^{m} {S_iT_i}=0 
             
            
          </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right: 0.1667em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 2.9291em; vertical-align: -1.2777em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.3214em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathnormal">m</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.686em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right: 0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.6514em;"><span class="" style="top: -1.8723em; margin-left: 0em;"><span class="pstrut" style="height: 3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span class="" style="top: -3.05em;"><span class="pstrut" style="height: 3.05em;"></span><span class=""><span class="mop op-symbol large-op">∑</span></span></span><span class="" style="top: -4.3em; margin-left: 0em;"><span class="pstrut" style="height: 3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 1.2777em;"><span class=""></span></span></span></span></span><span class="mspace" style="margin-right: 0.1667em;"></span><span class="mord"><span class="mord"><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3117em;"><span class="" style="top: -2.55em; margin-left: -0.0576em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3117em;"><span class="" style="top: -2.55em; margin-left: -0.1389em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">0</span></span></span></span></span></span><br> 任何一个码片向量和该码片向量自身的规格化内积都是1,任何一个码片向量和该码片反码的向量的规格化内积是-1</p> 
      

    例:A站码片00011011、B站码片00101110;此时A、B站向量相乘内积为0。

    当A站向C站发送数据1时,就发送了向量(-1-1-1+1+1-1+1+1)。

    当B站向C站发送数据0时,就发送了向量(+1+1-1+1-1-1-1+1)。

    两个向量到了公共信道上就进行叠加,实际上就是线性相加,得到S+T=(0 0 -2 2 0 -2 0 2)

    到达C站后,想获得A站数据,就与A站码片S内积化,

            S 
           
          
            ⋅ 
           
          
            ( 
           
          
            S 
           
          
            + 
           
          
            T 
           
          
            ) 
           
          
            = 
           
          
            1 
           
          
         
           S·(S+T)=1 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right: 0.1667em;"></span><span class="mopen">(</span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.6444em;"></span><span class="mord">1</span></span></span></span></span>,所以A站数据是1;同理,<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
        
         
          
          
            T 
           
          
            ⋅ 
           
          
            ( 
           
          
            S 
           
          
            + 
           
          
            T 
           
          
            ) 
           
          
            = 
           
          
            − 
           
          
            1 
           
          
         
           T·(S+T)=-1 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right: 0.1667em;"></span><span class="mopen">(</span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.1389em;" class="mord mathnormal">T</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7278em; vertical-align: -0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span></span>,所以B站发过来的向量是个反码向量,代表0。</p> 
    

    3.5.2 随机访问介质访问控制

    ​ 随机访问介质中使用争用型协议 ,胜利者通过争用获得信道,从而获得信息的发送权。将广播信道转化为点到点信道。信道并非在用户通信时固定分配给用户

    1. ALOHA协议

      • 纯ALOHA协议

        image-20230815134438174
        • 思想:不监听信道,不按时间槽发送,随机重发。想发就发
        • 冲突检测:如果发生冲突,接收方在就会检测出差错,然后不予确认,发送方在一定时间内收不到就判断发生冲突。
        • 冲突解决:超时后等一随机时间再重传。
      • 时隙ALOHA协议

        image-20230815134629248

        • 思想:把时间分成若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,若发生冲突,则必须等到下一个时间片开始时刻再发送。控制想发就发的随意性。
        • 吞吐量是纯ALOHA协议的两倍。
    2. CSMA协议

      载波监听多路访问(CSMA)指的是每个站点在发送前都先监听一下共用信道,发现信道空闲后再发送。

      监听:当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞,即发生了冲突。

      • 1-坚持 CSMA

        坚持指的是对于监听信道忙之后的坚持。

        • 思想:如果一个主机要发送消息,那么它先监听信道。空闲则直接传输,不必等待。忙则一直监听,直到空闲马上传输。如果有冲突(一段时间内未收到肯定回复),则等待一个随机长的时间再监听,重复上述过程。
        • 优点:只要媒体空闲,站点就马上发送,避免了媒体利用率的损失。
        • 缺点:假如有两个或两个以上的站点有数据要发送,冲突就不可避免。
      • 非坚持CSMA

        非坚持指的是对于监听信道忙之后就不继续监听。

        • 思想:如果一个主机要发送消息,那么它先监听信道。空闲则直接传输,不必等待。忙则等待一个随机的时间之后再进行监听。
        • 优点:采用随机的重发延迟时间可以减少冲突发生的可能性。
        • 缺点:可能存在大家都在延迟等待过程中,使得媒体仍可能处于空闲状态,媒体使用率降低。
      • p-坚持 CSMA

        P坚持指的是对于监听信道空闲的处理。

        • 思想:如果一个主机要发送消息,那么它先监听信道。空闲则以p概率直接传输,不必等待;概率1-p等待到下一个时间槽再传输。忙则持续监听直到信道空闲再以p概率发送。若冲突则等到下一个时间槽开始再监听并重复上述过程。
        • 优点:既能像非坚持算法那样减少冲突,又能像1-坚持算法那样减少媒体空闲时间的这种方案。
        • 缺点:发生冲突后还是要坚持把数据帧发送完,造成了浪费。
      信道状态1-坚持非坚持p-坚持
      空闲立即发送数据立即发送数据以概率p发送数据
      以概率1-p推迟到下一个时隙
      继续坚持监听放弃监听,等待随机的时间后再监听持续监听,直至信道空闲
    3. CSMA/CD 协议

      ​ 载波监听多路访问/碰撞检测(CSMA/CD)协议是CSMA的改进方案,适用于总线形网络或半双工网络

      碰撞检测就是边发送边监听,如果 监听到了碰撞,则立即停止数据发送,等待一段随机时间后,重新开始尝试发送数据。

      image-20230815142904674

      • 工作流程先听后发,边听边发,冲突停发,随机重发

        1)适配器从网络中获得分组,封装成以太帧,缓存等待发送
        2)适配器侦听信道,空闲则发送,忙则持续监听,直到空闲发送
        3)发送过程中持续检测信道,若检测到碰撞,停止发连并发送一个拥塞信号
        4)中止发送后,执行指数退避法确定重传时机

      争议期:两端往返传播时延。只要经过2τ(传播时延)时间还没有检测到碰撞,就能肯定这次发送不会发生碰撞。

      最小帧长=总线传播时延×数据传输速率×2

      以太网规定取51.2μs为争用期的长度。对于10Mb/s的以太网,在争用期内可发送512bit,即64B。

      如果只发送小于64B的帧,如40B的帧,那么需要在MAC子层中于数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧的长度不小于64B。

      • 截断二进制指数规避算法:

        1.确定基本退避(推迟)时间为争用期2τ。

        2.定义参数k,它等于重传次数,但k不超过10,即k=min[重传次数,10]。

        3.从离散的整数集合[0,1…2k-1]中随机取出一个数r, 重传所需要退避的时间就是r倍基本退避时间,即2rτ。

        4.当重传达16次仍不能成功时,说明网络太拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报错。

        使用截断二进制指数退避算法可使重传需要推迟的平均时间随重传次数的增大而增大(这也称动态退避),因而能降低发生碰撞的概率,有利于整个系统的稳定。

    4. CSMA/CA协议

      CSMA/CD协议无法用于无线局域网,因为其无法做到360°全面检测碰撞。会出现隐蔽站问题。

      隐蔽站:当A和C都检测不到信号,认为信道空闲时,同时向终端B发送数据帧,就会导致冲突。

      载波监听多路访问/碰撞避免(CSMA/CA):协议的设计要尽量降低碰撞发生的概率。

      image-20230815144613729

      • 工作原理

        1)发送数据前,先检测信道是否空闲。
        2)空闲则发出RTS(request to send),RTS包括发射端的地址、接收端的地址、下一份数据将持续发送的时间等信息;信道忙则等待。
        3)接收端收到RTS后,将响应CTS(clear to send)。CTS帧 ①给源站明确的发送许可;②指示其他站点在预约期内不要发送。
        4)发送端收到CTS后,开始发送数据帧(同时预约信道:发送方告知其他站点自己要传多久数据)。
        5)接收端收到数据帧后,将用循环冗余码CRC来检验数据是否正确,正确则响应ACK帧
        6)发送方收到ACK就可以进行下一个数据帧的发送,若没有则一直重传至规定重发次数为止(采用二进制指数退避:算法来确定随机的推迟时间)。

      • 帧间间隔(IFS):为了尽量避免碰撞,802.11规定,所有的站完成发送后,必须再等待一段很短的时间(继续监听)才能发送下一帧。

        1)SIFS(短IFS):最短的IFS,用来分隔属于一次对话的各帧,使用SIFS的帧类型有ACK帧、CTS帧、分片后的数据帧,以及所有回答AP探询的帧等。
        2)PIFS(点协调IFS):中等长度的IFS,在PCF操作中使用。
        3)DIFS(分布式协调IFS):最长的IFS,用于异步帧竞争访问的时延。

      • CSMA/CD与CSMA/CA主要有如下区别

        1.传输介质不同:CSMA/CD用于总线式以太网【有线】,而CSMA/CA用于无线局域网【无线】。

        2.载波检测方式不同:因传输介质不同,CSMA/CD与CSMA/CA的检测方式也不同。

        CSMA/CD通过电缆中电压的变化来检测,当数据发生碰撞时,电缆中的电压就会随着发生变化;

        而CSMA/CA采用能量检测(ED)、载波检测(CS)和能量载波混合检测三种检测信道空闲的方式。

        3.CSMA/CD检测冲突,CSMA/CA避免冲突,二者出现冲突后都会进行有上限的重传。

    3.5.3 轮询访问:令牌传递协议

    ​ 在轮询访问中,用户不能随机地发送信息,而要通过一个集中控制的监控站,以循环方式轮询每个结点,再决定信道的分配。

    令牌传递协议:每个结点都可以在一定的时间内(令牌持有时间)获得发送数据的权利,并不是无限制地持有令牌。主要用在令牌环局域网(物理星型拓扑,逻辑环形拓扑)。

    ​ 令牌:一个特殊的MAC控制帧,它不包含信息,仅控制信道的使用,确保同一时刻只有一个站点独占信道。

    • 传递过程

      1)网络空闲时,环路中只有令牌帧在循环传递
      2)令牌传递到有数据要发送的站点时,该站点就修改令牌中的一个标志位,并在令牌中附加自己需要传输的数据,将令牌变成一个数据帧,然后将这个数据帧发送出去
      3)数据帧沿着环路传输,接收到的站点一边转发数据,一边查看帧的目的地址。如果目的地址和自己的地址相同,那么接收站就复制该数据帧以便进一步处理。
      4)数据帧沿着环路传输,直到到达该帧的源站点,源站点收到自己发出去的帧后便不再转发。同时,通过检验返回的帧来查看数据传输过程中是否出错,若有错则重传。
      5)源站点传送完数据后,重新产生一个令牌,并传递给下一站点,以交出信道控制权。

    • 应用:采用令牌传送方式的网络常用于负载较重、通信量较大的网络中。

    3.6 局域网
    3.6.1 局域网的基本概念和体系结构

    ​ 局域网(LAN)指在某一区域内由多台计算机互联成的计算机组,使用广播信道。

    1. 特点

      • 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。
      • 使用专门铺设的传输介质(双绞线、同轴电缆)进行联网,数据传输速率高(10Mb/s~10Gb/s)。
      • 通信延迟时间短,误码率低,可靠性较高。
      • 各站为平等关系,共享传输信道。
      • 多采用分布式控制和广播式通信,能进行广播和组播。
    2. 局域网拓扑结构

      ①星形结构;②环形结构;③总线形结构;④星形和总线形结合的复合型结构。

    3. 传输介质

      局域网可以使用双绞线、铜缆和光纤等多种传输介质,其中双绞线为主流传输介质。

    4. 介质访问控制方法

      主要有CSMA/CD、令牌总线和令牌环,其中前两种方法主要用于总线形局域网,令牌环主要用于环形局域网。

    5. 局域网拓扑

      • 以太网(目前使用范围最广的局域网)。逻辑拓扑是总线形结构,物理拓扑是星形或拓展星形结构。
      • 令牌环(Token Ring,IEEE802.5)。逻辑拓扑是环形结构,物理拓扑是星形结构。
      • FDDI(光纤分布数字接口,EEE802.8)。逻辑拓扑是环形结构,物理拓扑是双环结构。
    6. MAC子层和LLC子层

      image-20230815152648577

      • LLC子层:逻辑链路控制子层,负责识别网络层协议,然后对它们进行封装(给帧加序号)。LLC报头告诉数据链路层一旦帧被接收到时,应当对数据包做何处理。

        主要功能:建立和释放数据链路层的逻辑连接、提供与高层的接口、差错控制、给帧加序号。与传输媒体无关。

      • MAC子层:介质访问控制子层,向上层屏蔽对物理层访问的各种差异,提供对物理层的统一访问接口。

        主要功能包括:组帧和拆卸帧、比特传输差错检测、透明传输。

    3.6.2 以太网与 IEEE 802.3

    IEEE 802.3标准是一种基带总线形的局域网标准,它描述物理层和数据链路层的MAC子层的实现方法。

    以太网逻辑上采用总线形拓扑结构,物理星型结构,以太网中的所有计算机共享同一条总线,信息以广播方式发送。为了保证数据通信的方便性和可靠性,以太网简化了通信流程并使用了 CSMA/CD方式对总线进行访问控制。

    ​ ①采用**无连接的工作方式,不对发送的数据帧编号,也不要求接收方发送确认,即以太网尽最大努力交付数据,提供的是不可靠服务**,对于差错的纠正则由高层完成;

    ​ ②发送的数据都使用曼彻斯特编码的信号,每个码元的中间出现一次电压转换,接收端利用这种电压转换方便地把位同步信号提取出来。

    1. 以太网的传输介质与网卡

    ​ 以太网采用10BASE-T网络,采用的是无屏蔽双绞线(UTP),传输速率是10Mb/s。

    参数10BASE510BASE210BASE-T10BASE-FL
    传输媒体基带同轴电缆(粗缆)基带同轴电缆(细缆)非屏蔽双绞线光纤对(850nm)
    编码曼彻斯特编码曼彻斯特编码曼彻斯特编码曼彻斯特编码
    拓扑结构总线形总线形星形点对点
    最大段长500m185m100m2000m
    最多结点数目1003022

    ​ 计算机与外界局域网的连接是通过网卡(网络适配器,又称网络接口板/卡)实现的。网卡上装有处理器和存储器,是工作在数据链路层的网络组件。网卡和局域网的通信是通过电缆或双绞线串行方式进行的,而网卡和计算机的通信则是通过计算机主板上的I/O总线并行方式进行的。网卡的重要功能就是进行数据的串并转换

    MAC地址:介质访问控制(MAC)地址,每块网卡在出厂时的唯一代码,用于控制主机在网络上的数据通信。数据链路层设备(网桥、交换机等)都使用各个网卡的MAC地址。另外,网卡控制着主机对介质的访问,因此网卡也工作在物理层,因为它只关注比特,而不关注任何地址信息和高层协议信息。

    1. 以太网的MAC帧

      ​ MAC地址也称物理地址,MAC地址长6字节,一般用由连字符(或冒号)分 隔的12个十六进制数表示,如

             06 
            
           
             − 
            
           
             E 
            
           
             A 
            
           
             − 
            
           
             56 
            
           
             − 
            
           
             3 
            
           
             B 
            
           
             − 
            
           
             4 
            
           
             F 
            
           
             − 
            
           
             4 
            
           
             D 
            
           
          
            06-EA-56-3B-4F-4D 
           
          
        </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.7278em; vertical-align: -0.0833em;"></span><span class="mord">06</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span style="margin-right: 0.0576em;" class="mord mathnormal">E</span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7278em; vertical-align: -0.0833em;"></span><span class="mord">56</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord">3</span><span style="margin-right: 0.0502em;" class="mord mathnormal">B</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.7667em; vertical-align: -0.0833em;"></span><span class="mord">4</span><span style="margin-right: 0.1389em;" class="mord mathnormal">F</span><span class="mspace" style="margin-right: 0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.2222em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord">4</span><span style="margin-right: 0.0278em;" class="mord mathnormal">D</span></span></span></span></span>。高24位为厂商代码,低24位为厂商自行分配 的网卡序列号。</p> <p>​ 以太网MAC帧格式有两种标准:DIX Ethernet V2标准(即以太网V2标准)和IEEE 802.3 标准。这里先介绍最常用的以太网V2的MAC帧格式,如图所示。</p> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/667f8a6756c4151453eda3f4c3260667.png#pic_center" alt="image-20230815155854188"></p> </li></ol> 
      

    • 前导码:使接收端与发送端时钟同步。在帧前面插入的8字节可再分为两个字段:第一个字段共7字节,是前同步码,用来快速实现MAC帧的比特同步;第二个字段是帧开始定界符,表示后面的信息就是MAC帧。
    • 地址:通常使用6字节(48bit)地址(MAC地址)。
    • 类型:2字节,指出数据域中携带的数据应交给哪个协议实体处理。
    • 数据:46~1500字节,包含高层的协议消息。由于CSMA/CD算法的限制,以太网帧必须满足最小长度要求64字节,数据较少时必须加以填充(0~46字节)。

    注意:46是怎么来的?由CSMA/CD可知以太网帧的最短顿长为64B,而MAC帧的首部和尾部的长度为18字节,所以数据字段最短为64-18=46字节。最大的1500字节是规定的。

    • 填充:0~46字节,当帧长太短时填充帧,使之达到64字节的最小长度。
    • 校验码(FCS):4字节,校验范围从目的地址段到数据段的末尾,算法采用32位循环冗余码(CRC),不但需要检验MAC帧的数据部分,还要检验目的地址、源地址和类型字段,但不校验前导码

    ​ 802.3帧格式与DIX以太帧格式的不同之处在于用长度域替代了 DIX帧中的类型域,指出数据域的长度。

    1. 高速以太网

      速率≥100Mb/s的以太网称为高速以太网。

      • 100BASE-T 以太网

        在双绞线上传送100Mb/s基带信号的星型拓扑以太网,仍使用IEEE802.3的CSMA/CD协议。

        支持全双工和半双工,可在全双工方式下工作而无冲突。

      • 吉比特以太网

        在光纤或双绞线上传送1Gb/s信号。

        支持全双工和半双工,可在全双工方式下工作而无冲突。

      • 10吉比特以太网

        10吉比特以太网在光纤上传送10Gb/s信号。

        只支持全双工,无争用问题。

    3.6.3 IEEE 802.11无线局域网
    1. 无线局域网的组成

      1)有固定基础设施无线局域网

      ​ 802.11使用星形拓扑,其中心称为接入点(Access Point, AP),在MAC层使用CSMA/CA协议。使用802.11系列协议的局域网又称Wi-Fi。

      image-20230815161549000

      ​ 无线局域网的最小构件是基本服务集BSS (Basic Service Set, BSS)。一个基本服务集包括一个接入点和若干移动站。各站在本BSS内之间的通信,或与本BSS外部站的通 信,都必须通过本BSS的AP。

      ​ AP就是基本服务集中的基站(base station)。安装AP时,必须为该AP分配一个不超过32字节的服务集标识符(Service Set IDentifier, SSID)和一个信道。SSID是指使用该AP的无线局域网的名字。

      ​ 一个基本服务集覆盖的地理范围称为一个基本服务区(Basic Service Area,BSA),无线局域网的基本服务区的范围直径一般不超过100m。

      ​ 一个基本服务集可以是孤立的,也可通过AP连接到一个分配系统(Distribution System, DS),然后再连接到另一个基本服务集,就构成了一个扩展的服务集(Extended Service Set, ESS)。

      ​ ESS还可以通过一种称为 Portal (门户)的设备为无线用户提供到有线连接的以太网的接入。门户的作用相当于一个网桥。

      ​ 移动站A如果要和另一个基本服务集中的移动站B通信,就必须经过两个接入点AP1和AP2,即A→AP1→AP2→B,注意AP,到AP2的通信是使用有线传输的。

      2)无固定基础设施移动自组织网络

      ​ 另一种无线局域网是无固定基础设施的无线局域网,又称自组网络(ad hoc network)。自组网络没有上述基本服务集中的AP,而是由一些平等状态的移动站相互通信组成的临时网络。各结点之间地位平等,中间结点都为转发结点,因此都具有路由器的功能。

      image-20230815163416468

    2. 802.11局域网的MAC帧

    ​ 802.11帧共有三种类型,即数据帧、控制帧和管理帧。

    • 数据帧

      1)MAC首部,共30字节。帧的复杂性都在MAC首部。
      2)帧主体,即帧的数据部分,不超过2312字节。它比以太网的最大长度长很多。
      3)帧检验序列FCS是尾部,共4字节。

    image-20230815175801593

    ​ 其中帧控制的去往AP和来自AP决定着地址内容,具体如下表所示。

    去往AP来自AP地址1地址2地址3地址4
    01接收地址=目的地址发送地址=AP地址源地址——
    10接收地址=AP地址发送地址=源地址目的地址——

    ​ 地址1是直接接收数据帧的结点地址,地址2是实际发送数据帧的结点地址。

    3.6.4 VLAN基本概念与基本原理

    ​ 虚拟局域网(VLAN)可以把一个较大的局域网分割成一些较小的与地理位置无关,逻辑上的VLAN,而每个VLAN是一个较小的广播域。VLAN分割了广播域

    ​ 802.3ac标准定义了支持VLAN的以太网帧格式的扩展,称为802.1Q帧。它在以太网帧中插入一个4字节的标识符(插入在源地址字段和类型字段之间),称为VLAN标签,用来指明发送该帧的计算机属于哪个虚拟局域网。

    image-20230816100549650

    ​ VLAN标签的前两个字节置为0x8100,表示这是一个802.1Q帧。在VLAN标签的后两个字节中,前4位没有用,后12位是该VLAN的标识符VID,它唯一标识了该802.1Q帧属于哪个VLAN。

    ​ VID的取值范围为0~4095,但0和4095都不用来表示VLAN,因此用于表示VLAN的有效VID取值范围为1~4094。12位的VID可识别4096个不同的VLAN。插入VID后,802.1Q帧的FCS必须重新计算

    ​ IEEE 802.1Q帧是由交换机来处理的,而不是由用户主机来处理的。(即主机和交换机之间只交换普通的以太网帧)

    image-20230816102619901

    ​ 如上图所示,交换机1连接了7台计算机,该局域网划分为两个虚拟局域网VLAN 10和VLAN 20,其中10和20是管理员分配的VID。主机不知道自己的VID,交换机知道所有的VID,主机与交换机用以太网帧交互。VLAN范围可以跨越交换机,交换机1与交换机2相连,并同时连接着两个VLAN。

    ​ 这两个VLAN虽然都跨越了两个交换机,但各自都是一个广播域

    发送地址目的地址转发路径
    AB交换机1查询目的地址接口,识别B属于本交换机管理的同VLAN设备
    直接转发以太网帧
    AE交换机1查询目的地址接口,将帧转发到交换机2,并插入VLAN标签
    交换机之间转发Q帧
    AC属于不同网络,需要通过路由器或者三层交换机完成转发
    3.7 广域网
    3.7.1 广域网基本概念

    ​ 广域网通常是指覆盖范围很广(远超一个城市的范围)的长距离网络。广域网的通信子网主要使用分组交换技术。广域网由一些结点交换机(不是路由器)及连接这些交换机的链路组成。结点之间都是点到点连接,但为了提高网络的可靠性,通常一个结点交换机往往与多个结点交换机相连。

    image-20230816120701955

    ​ 广域网不等于互联网。互联网可以连接不同类型的网络(既可以连接局域网,又可以连接广域网),通常使用路由器来连接。

    ​ 广域网与局域网有相同有不同,相似点如下:

    • 广域网和局域网都是互联网的重要组成构件,从互联网的角度上看,二者平等(不是包含关系)
    • 连接到一个广域网或一个局域网上的主机在该网内进行通信时,只需要使用其网络的物理地址

    ​ 不同点如下所示:

    广域网局域网
    覆盖范围很广,通常跨区域较小,通常在一个区域内
    连接方式结点之间都是点到点连接,但为了提高网络的可靠性,
    一个结点交换机往往与多个结点交换机相连
    普遍采用多点接入技术
    OSI参考模型层次三层:物理层,数据链路层,网络层两层:物理层,数据链路层
    着重点强调资源共享强调数据传输

    ​ 广域网中的一个重要问题是路由选择和分组转发。路由选择协议负责搜索分组从某个结点到目的结点的最佳传输路由,以便构造路由表,然后从路由表再构造出转发分组的转发表。分组是通过转发表进行转发的。

    3.7.2 PPP协议

    点对点协议(Point–to-Point Protocol,PPP)是使用串行线路通信面向字节的协议,该协议应用在直接连接两个结点的链路上。不可靠

    1. 组成部分

      • 链路控制协议(LCP)。一种扩展链路控制协议,用于建立、配置、测试和管理数据链路。
      • 网络控制协议(NCP)。PPP协议允许同时采用多种网络层协议,每个不同的网络层协议要用一个相应的NCP来配置,为网络层协议建立和配置逻辑连接。
      • 一个将IP数据报封装到串行链路的方法。P数据报在PPP帧中就是其信息部分,这个信息部分的长度受最大传送单元(MTU)的限制。

      PPP帧格式如图所示,PPP帧前3个字段和最后两个字段与HDLC帧相同。PPP是面向字节的,因 而所有PPP帧的长度都是整数个字节

      image-20230816123730025

      • 标注字段(F)为7E(01111110),前后各占1字节。

      • 若标注字段出现在信息字段中,就必须做字节填充,使用的控制转义字节是7D (01111101)。

      • 地址字段(A)占1字节,规定为0xFF,

      • 控制字段(C)占1字节,规定为0x03,两者的内容始终是固定不变的。

      • 协议字段占2字节,说明信息段中运载的是什么种类的分组。HDLC无此字段。

      • 信息部分长度可变,大于或等于0且小于或等于1500B。

      • 帧检验序列(FCS),占2字节,即循环冗余码检验中的冗余码。

      因为PPP是,点对点的,并不是总线形,所以无须采用CSMA/CD协议,自然就没有最短帧,所以信息段占01500字节,而不是46~1500字节。

    2. PPP链路建立、使用、撤销

      image-20230816131220967

      • 静止:当线路处于静止状态时,不存在物理层连接。
      • 建立:当线路检测到载波信号时,建立物理连接,线路变为建立状态。
      • LCP开始选项商定,商定成功后就进入身份验证状态。身份验证通过后,进入网络层协议状态。
      • 采用NCP配置网络层,配置成功后,进入打开状态,然后就可进行数据传输。
      • 撤销:当数据传输完成后,线路转为终止状态。载波停止后则回到静止状态。
    3. 特点

      1)PPP提供差错检测但不提供纠错功能,只保证无差错接收(通过硬件进行CRC校验)。它是不可靠的传输协议,因此也不使用序号和确认机制。
      2)它仅支持点对点的链路通信,不支持多点线路。
      3)PPP只支持全双工链路
      4)PPP的两端可以运行不同的网络层协议,但仍然可使用同一个PPP进行通信。
      5)PPP是面向字节的,当信息字段出现和标志字段一致的比特组合时,PPP有两种不同的处理方法:若PPP用在异步线路(默认),则采用字符填充法;若PPP用在SONET/SDH等同步线路,则协议规定采用硬件来完成比特填充(和HDLC的做法一样)。

    3.7.3 HDLC协议

    ​ 高级数据链路控制(HDLC)协议是面向比特的数据链路层协议。实现可靠传输

    1. 特点
    • 该协议不依赖于任何一种字符编码集
    • 数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现
    • 全双工通信,有较高的数据链路传输效率
    • 所有帧采用CRC检验,对信息帧进行顺序编号,可防止漏收或重发,传输可靠性高
    • 传输控制功能与处理功能分离,具有较大的灵活性。
    1. 帧格式

      image-20230816132019427

      • 标志字段F,为01111110。在接收端只要找到标志字段就可确定一个帧的位置。
      • HDLC协议采用比特填充的首尾标志法实现透明传输。
      • 地址字段A,共8位,根据不同的传送方式,表示从站或应答站的地址。
      • 控制字段C,共8位,HDLC的许多重要功能都靠控制字段来实现。
    2. PPP与HDLC的不同

      • PPP协议是面向字节的,HDLC协议是面向比特的。
      • PPP帧比HDLC帧多一个2字节的协议字段。当协议字段值为0x0021时,表示信息字段是IP数据报。
      • PPP协议不使用序号和确认机制,只保证无差错接收(CRC检验),而端到端差错检测由高层协议负责。HDLC协议的信息帧使用了编号和确认机制,能够提供可靠传输
    3.8 数据链路层设备
    3.8.1 网桥

    ​ 两个或多个以太网通过网桥连接后,就成为一个更大的以太网,而原来的每个以太网就称为一个网段。网桥工作在链路层的MAC子层,可以使以太网各网段成为隔离开的碰撞域

    ​ 网桥根据MAC帧的目的地址对帧进行转发和过滤。当网桥收到一个帧时,并不向所有接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃(即过滤)。

    • 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间只能有一台设备发送信息的范围。
    • 广播域:网络中能接收任一设备发出的广播帧的所有设备的集合。简单的说如果站点发出一个广播信号,所有能接收到这个信号的设备范围称为一个广播域。
    层次设备隔离冲突域隔离广播域
    网络层路由器
    数据链路层网桥、交换机不能
    物理层中继器、集线器不能不能
    3.8.2 局域网交换机
    1. 交换机的原理和特点

      局域网交换机,又称以太网交换机,以太网交换机实质上就是一个多端口的网桥,工作在数据链路层。

      以太网交换机的每个端口都直接与单台主机或另一个交换机相连,通常都工作在全双工方式

      • 原理:它检测从以太端口来的数据帧的源和目的地的MAC地址,然后与系统内部的动态查找表进行比较,若数据帧的MAC地址不在查找表中,则将该地址加入查找表中,并将数据帧发送给相应的目的端口。

      • 交换机能经济地将网络分成小的冲突域,为每个工作站提供更高的带宽

      对于传统10Mb/s的共享式以太网,若共有N个用户,则每个用户占有的平均带宽只有总带宽的1/N。

      使用交换机时,每个端口到主机的带宽还是10Mb/s,用户在通信时是独占而不是和其他网络用户共享传输媒体的带宽,因此拥有N个端口的交换机的总容量为N×10Mb/s。

      特点

      • 以太网交换机的每个端口都直接与单台主机相连(网桥的端口往往连接到一个网段),并且一般都工作在全双工方式
      • 以太网交换机同时连通多对端口,使每对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据。
      • 以太网交换机是一种即插即用设备,其内部的帧的转发表是通过自学习算法自动地逐渐建立起来的。
      • 以太网交换机由于使用专用的交换结构芯片,交换速率较高。
      • 以太网交换机独占传输媒体的带宽

      交换模式

      • 直通式交换机:查完目的MAC地址(6B)就立刻转发。延迟小,可靠性低,无法支持具有不同速率的端口的交换。

      • 存储转发式交换机:将帧放入高速缓存,并检查否正确,正确则转发,错误则丢弃。延迟大,可靠性高,可以支持具有不同速率的端口的交换。

        以太网交换机一股都具有多种速率的端口,例如可以具有10Mb/s、100Mb/s和1Gb/s的端口的各种组合,因此大大方便了各种不同情况的用户。

    2. 交换机的自学习功能

      交换机的过滤和转发借助于交换表(switch table)完成。

      过滤:决定一个帧是应该转发到某个端口还是应该将其丢弃称。

      转发:决定一个帧应该被移动到哪个接口。

      交换表:包含多个表项,每个表项包含①一个MAC地址;②连通该MAC地址的交换机端口。

      image-20230816140541143

      自学习过程

      • A先向B发送一帧,从端口1进入交换机。
      • 交换机收到帧后,查找交换表,找不到MAC地址为B的表项。
      • 交换机将该帧的源地址A和端口1(A,1)写入交换表,并向除端口1外的所有端口广播这个帧(该帧就是从端口1进入的,因此不应该将它再从端口1转发出去)。
      • C和D丢弃该帧,因为目的地址不对。只有B才收下这个目的地址正确的帧。
      • B通过端口3向A发送一帧,交换机查找交换表后,发现有表项 (A,1),将该帧从端口1转发给A。同时,将该帧的源地址B和端口 3 (B,3) 写入交换表,表明以后如有发送给B的帧,应该从端口3转发出去。
      • 经过一段时间,只要主机C和D也向其他主机发送帧,交换机就会把C和D及对应的端口号写入交换表。这样,转发给任何主机的帧,都能很快地在交换表中找到相应的转发端口。

      交换表中的每个表项都设有一定的有效时间,过期的表项会自动删除。这就保证了交换表中的数据符合当前网络的实际状况。

    4 网络层

    4.1 网络层功能

    ​ 互联网在网络层的设计思路是,向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。也就是说,所传送的分组可能出错、丢失、重复、失序或超时,这就使得网络中的路由器比较简单,而且价格低廉。

    4.1.1 异构网络互联

    ​ 网络互连是指将两个以上的计算机网络,通过一定的方法,用一些中间设备(又称中继系统)相互连接起来,以构成更大的网络系统。根据所在的层次,中继系统分为以下4种:

    • 物理层中继系统:转发器,集线器。
    • 数据链路层中继系统:网桥或交换机。
    • 网络层中继系统:路由器。
    • 网络层以上的中继系统:网关。

    ​ 使用物理层或数据链路层的中继系统时,只是把一个网络扩大了,而从网络层的角度看,它仍然是同一个网络,一般并不称为网络互连。因此网络互连通常是指用路由器进行网络互连路由选择。路由器是一台专用计算机,用于在互联网中进行路由选择。

    ​ TCP/IP体系在网络互连上采用的做法是在网络层采用标准化协议,但相互连接的网络可以是异构的。

    image-20230816150325020

    ​ 上图表示用许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的IP协议,因此可以把互连后的网络视为如图(b)所示的一个虚拟IP网络。

    ​ IP网络:是通过IP协议使性能各异的网络在网络层上看起来好像是一个统一的网络。

    4.1.2 路由转发

    ​ 路由器主要完成两个功能:一是路由选择(确定哪一条路径);二是分组转发(当一个分组到达时所采取的动作)。

    • 路由选择:指按照复杂的分布式算法,根据从各相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由。
    • 分组转发:指路由器根据转发表将用户的IP数据报从合适的端口转发出去。

    ​ 路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去区分转发表和路由表,而是笼统地使用路由表一词。

    4.1.3 SDN基本概念

    ​ 网络层的主要任务是转发和路由选择。可以将网络层抽象地划分为数据平面(也称转发层面)和控制平面,转发是数据平面实现的功能,而路由选择是控制平面实现的功能。

    数据平面:数据平面对于数据处理过程中各种具体处理转发过程。数据平面执行的主要功能是根据转发表进行转发,这是路由器的本地动作。

    控制平面:控制平面用于控制和管理网络协议的运行,比如OSPF协议、RIP协议、BGP协议。用于实现路由选择,控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式。时间长,通常软件解决。

    软件定义网络(SDN)是近年流行的一种创新网络架构,它采用集中式的控制平面分布式的数据平面,两个平面相互分离,控制平面利用控制-数据接口对数据平面上的路由器进行集中式控制,方便软件来控制网络。

    image-20230816152221821

    ​ 在网络的控制平面有一个逻辑上的远程控制器(可以由多个服务器组成)。远程控制器掌握各主机和整个网络的状态,为每个分组计算出最佳路由,通过Openflow协议(也可以通过其他途径)将转发表(在SDN中称为流表)下发给路由器。

    路由器的工作很单纯,即收到分组、查找转发表、转发分组。

    ​ SDN的可编程性通过为开发者们提供强大的编程接口,使得网络具有很好的编程性。

    • 北向接口:对上层应用的开发者,SDN提供的编程接口称为北向接口。北向接口提供了一系列丰富的API,开发者可以在此基础上设计自己的应用,而不必关心底层的硬件细节。
    • 南向接口:SDN控制器和转发设备建立双向会话的接口称为南向接口,通过不同的南向接口协议(如Openflow),SDN控制器就可兼容不同的硬件设备,同时可以在设备中实现上层应用的逻辑。
    • 东西向接口:SDN控制器集群内部控制器之间的通信接口称为东西向接口,用于增强整个控制平面的可靠性和可拓展性。

    SDN优点

    • 全局集中式控制和分布式高速转发,既利于控制平面的全局优化,又利于高性能的网络转发。
    • 灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专有的自动化工具以编程方式配置。
    • 降低成本,控制和数据平面分离后,尤其是在使用开放的接口协议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。

    SDN的问题

    • 安全风险,集中管理容易受攻击,如果崩溃,整个网络会受到影响。
    • 瓶颈问题,原本分布式的控制平面集中化后,随着网络规模扩大,控制器可能成为网络性能的瓶颈。
    4.1.4 拥塞控制

    拥塞:在通信子网中,因出现过量的分组而引起网络性能下降的现象称为拥塞。

    ​ 例如,某个路由器所在链路的带宽为

         R 
        
       
      
        R 
       
      
    </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0077em;" class="mord mathnormal">R</span></span></span></span></span> B/S,如果IP分组只从它的某个端口进入,那么其速率为r<sub>in</sub>B/s。当r<sub>in</sub>=R时,并非好事。</p> 
    

    image-20230816155911692

    ​ 当分组到达路由器的速率接近R时,平均时延急剧增加,并且会有大量的分组被丢弃(路由器端口的缓冲区是有限的),整个网络的吞吐量会骤降,源与目的地之间的平均时延也会变得近乎无穷大。

    判断网络是否拥塞方法:观察网络的吞吐量与网络负载的关系

    • 轻度拥塞状态:随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量。
    • 拥塞状态:网络的吞吐量随着网络负载的增大而下降。
    • 死锁状态:网络的负载继续增大,而网络的吞吐量下降到零。

    拥塞控制的作用是确保子网能够承载所达到的流量,这是一个全局性的过程,涉及各方面的 行为:主机、路由器及路由器内部的转发处理过程等。单一地增加资源并不能解决拥塞。

    流量控制和拥塞控制的区别:

    流量控制往往是指在发送端和接收端之间的点对点通信量的控制。流量控制所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。

    拥塞控制必须确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。

    拥塞控制的方法

    • 开环控制:在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
      这是一种静态的预防方法。一旦整个系统启动并运行,中途就不再需要修改。
      开环控制手段包括确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组,确定何种调度策略等。所有这些手段的共性是,在做决定时不考虑当前网络的状态
    • 闭环控制:事先不考虑有关发生拥塞的各种因素,采用监测网络系统去监视,及时检测哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行,并解决出现的问题。
      闭环控制是基于反馈环路的概念,是一种动态的方法。
    4.2 路由算法和路由协议
    4.2.1 静态路由与动态路由

    ​ 路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类。

    • 静态路由算法(又称非自适应路由算法)。指由网络管理员手工配置的路由信息。
      当网络的拓扑结构或链路的状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息。它不能及时适应网络状态的变化,对于简单的小型网络,可以采用静态路由。
    • 动态路由算法(又称自适应路由算法)。指路由器上的路由表项是通过相互连接的路由器之间彼此交换信息,然后按照一定的算法优化出来的,而这些路由信息会在一定时间间隙里不断更新,以适应不断变化的网络,随时获得最优的寻路效果。
    4.2.2 距离-向量路由算法
    1. 距离向量算法

      ​ 常见的距离-向量路由算法是RIP算法每个路由器定期与所有相邻路由器交换整个路由表,更新路由项。

      ​ 这种路由表包含:①每条路径的目的地(另一结点)。②路径的代价(也称距离)。

      这里的距离是一个抽象的概念,如RIP就将距离定义为“跳数”。跳数指从源端口到达目的端口所经过的路由器个数,每经过一个路由器,跳数加1。

      • 更新路由表的情况:

        • 被通告一条新的路由,该路由在本结点的路由表中不存在,此时本地系统加入这条新的路由。

        • 路由信息有一条较短的距离,发来的路由信息中有一条到达某个目的地的路由,该路由与当前使用的路由相比,有较短的距离。此时,就用经过发送路由信息的结点的新路由替换路由表中到达那个目的地的现有路由。

      ​ 距离-向量路由算法的实质是,迭代计算一条路由中的站段数或延迟时间,从而得到到达一个目标的最短(最小代价)通路。

      • 问题:大的通信子网导致大的更新报文,路由信息变得很大。

      距离-向量路由算法中,路由器只掌握物理相连的邻居及链路费用

    2. RIP(路由信息协议) 封装UDP 应用层协议 只适用于小互联网

      RIP是一种分布式的基于距离向量的路由选择协议,其最大优点就是简单。

      • 协议规定

        • 1)网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(距离向量)

        • 2)距离也称为跳数,规定从一路由器到直接连接的跳数为1。每经过一个路由器,跳数加1

        • 3)RIP认为好的路由就是它通过的路由器的数目少,即优先选择跳数少的路径

        • 4)RIP允许一条路径最多只能包含15个路由器(即最多允许15跳)距离等于16时,表示网络不可到达

        • 5)RIP默认在任意两个使用RIP的路由器之间每30s广播一次RIP路由更新信息,动态维护路由表

        • 6)在RIP中不支持子网掩码的RIP广播,RIP中每个网络的子网掩码必须相同。在RIP2中,支持变长子网掩码和CIDR

      • RIP报文格式

        image-20230818133004500

        ​ RIP报文由首部和路由部分组成。

      • RIP的特点

        • 1)仅和相邻路由器交换信息。

        • 2)路由器交换的信息是当前路由器所知道的全部信息,即自己的路由表。

        • 3)按固定的时间间隔交换路由信息,如每隔30秒。

      • 距离向量算法:每个路由表项目都有三个关键数据:

                 &lt; 
                
               
                 目的网络 
                
               
                 N 
                
               
                 ,距离 
                
               
                 d 
                
               
                 ,下一跳路由器地址 
                
               
                 X 
                
               
                 &gt; 
                
               
              
                &lt;目的网络N,距离d,下一跳路由器地址X&gt; 
               
              
            </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.5782em; vertical-align: -0.0391em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7335em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">目的网络</span><span style="margin-right: 0.109em;" class="mord mathnormal">N</span><span class="mord cjk_fallback">,距离</span><span class="mord mathnormal">d</span><span class="mord cjk_fallback">,下一跳路由器地址</span><span style="margin-right: 0.0785em;" class="mord mathnormal">X</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span></span></span></span>。</p> 
        <ul><li> <p>1)对地址为X的相邻路由器发来的报文,修改此报文中的所有项目【<strong>'下一跳’的地址都改为X,把所有’距离’的值+1</strong>】</p> </li><li> <p>2)对修改后的报文中的每一个项目,进行以下步骤:</p> 
          <ul><li>①当原来的路由表中没有目的网络N,则把该项目添加到路由表中</li><li>②当原来的路由表中有目的网络N,且下一跳路由器地址【是X】时,用收到的项目替换原路由表中的项目</li><li>③当原来的路由表中有目的网络N,且下一跳路由器地址【不是X】,若收到的项目中的<strong>距离d&lt;路由表中的距离</strong>,用收到的项目替换原路由表中的项目,否则什么也不做</li></ul> </li><li> <p>3)如果180s(默认<strong>超时时间是180s</strong>)没有收到相邻路由器的更新路由表,把此相邻路由器记为<strong>不可达路由</strong>,把距离置为16</p> </li><li> <p>4)返回</p> </li></ul> 
        <blockquote> 
         <p>例:已知路由器R6有表a所示的路由表。现在收到相邻路由器R4发来的路由更新信息,如表b所示。试更新路由器R6的路由表。</p> 
         <p><img src="https://i-blog.csdnimg.cn/blog_migrate/7cc7132153ec7c74d37cfd2282ce6aba.png#pic_center" alt="image-20230818135130787"></p> 
         <p>先把表b中的距离都加1,并把下一跳路由器都改为R4。得出表c。</p> 
         <p><img src="https://i-blog.csdnimg.cn/blog_migrate/bce19f6867279d0175482646c465c106.png#pic_center" alt="image-20230818135536228"></p> 
         <p>把这个表的每一行和表a进行比较。</p> 
         <ul><li>第一行在表a中没有,因此要把这一行添加到表a中。</li><li>第二行的Net2在表a中有,且下一跳路由器也是R4。因此要更新(距离增大了)。</li><li>第三行的Net3在表a中有,但下一跳路由器不同。于是就要比较距离。新的路由信息的距离是2,小于原来表中的4,因此要更新。</li></ul> 
         <p>这样,得出更新后的R6的路由表如表d所示。</p> 
         <p><img src="https://i-blog.csdnimg.cn/blog_migrate/cdc1ecd7f28356a5269fd7f3011de3fc.png#pic_center" alt="image-20230818135836501"></p> 
         <p>在更新完路由后,每一个路由器到每一个目的网络的路由都是最短的</p> 
        </blockquote> </li><li> <p><strong>RIP优点</strong>:实现简单、开销小、收敛过程较快</p> 
        <blockquote> 
         <p>收敛:路由器刚开始工作时,只知道直接连接的网络的距离(距离为1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。</p> 
         <p>经过若干次更新后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。</p> 
        </blockquote> </li><li> <p><strong>RIP缺点</strong>:好消息传得快,坏消息传得慢</p> 
        <ul><li> <p>1)RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)。</p> </li><li> <p>2)路由器之间交换的是路由器中的完整路由表,因此<strong>网络规模越大,开销也越大</strong>。</p> </li><li> <p>3)网络出现故障时,会出现<strong>慢收敛</strong>现象(即需要较长时间才能将此信息传送到所有路由器),使更新过程的收敛时间长。</p> </li></ul> 
        <blockquote> 
         <p>慢收敛例子:</p> 
         <p>​ 现在假定路由器R1,到网1的链路出了故障,R1无法到达网1。于是路由器R1把到网1的距离改为16(表示到网1不可达),因而在R1的路由表中的相应项目变为“1,16,直接”。但是,很可能要经过30秒钟后R1才把更新信息发送给R2。然而R2可能已经先把自己的路由表发送给了R1,其中有“1,2,R1”这一项。</p> 
         <p><img src="https://i-blog.csdnimg.cn/blog_migrate/3b090b891c3d5f8329527c1890902cd4.png#pic_center" alt="image-20230821093055417"></p> 
         <p>​ R1收到R2的更新报文后,误认为可经过R2到达网1,于是把收到的路由信息“1,2,R,”修改为:“1,3,R2”,表明“我到网1的距离是3,下一跳经过R2”,并把更新后的信息发送给R2。<br> ​ 同理,R2接着又更新自己的路由表为“1,4,R1”,以为“我到网1距离是4,下一跳经过R1”。<br> ​ 这样的更新一直继续下去,直到R1和R2到网1的距离都增大到16时,R1和R2才知道原来网1是不可达的。RIP协议的这一特点叫做:<strong>好消息传播得快,而坏消息传播得慢</strong>。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是RIP的一个主要缺点。</p> 
        </blockquote> </li></ul> </li></ol> 
        

    4.2.3 链路状态路由算法
    1. 链路状态路由算法

      • 链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息,它们执行下述两项任务。

        • 第一,主动测试所有邻接结点的状态。两个共享一条链接的结点是相邻结点,它们连接到同一条链路,或者连接到同一广播型物理网络。

        • 第二,定期地将链路状态传播给所有其他结点(或称路由结点)。

      ​ 典型的链路状态算法是OSPF算法

      • 特征

        • 向本自治系统中所有路由器发送信息(洪泛法)。

          洪泛法,即路由器通过所有端 口向所有相邻的路由器发送信息。

          image-20230818150509867

          设路由器R用洪泛法发出链路状态更新分组。图中用一些小的箭头表示更新分组。第一次先发给相邻的三个路由器。这三个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。图中的空心箭头表示确认分组。

        • 发送的信息是与路由器相邻的所有路由器的链路状态。

          OSPF算法中,链路状态的“度量”主要用来表示费用、距离、时延、带宽等。

        • 只有链路状态发生变化,才向所有路由器发送信息。

      • 优点

        • 每个路由结点使用同样的原始状态数据独立的计算路径。

        • 链路状态不加改变的传播,该算法易于查找故障。

        • 仅运载来自单个结点关于直接链路的信息,其大小与网络中的路由结点数目无关,有更好的规模可伸展性。

      ​ 链路状态路由算法可以用于大型的或路由信息变化聚敛的互联网环境。因为一个路由器的链路状态只涉及相邻路由器的连通状态,而与整个互联网的规模并无直接关系。

      链路状态路由算法中,所有路由器掌握完整的网络拓扑和链路费用信息。

    2. OSPF(开放最短路径优先)协议 网络层协议 封装IP

      • OSPF特点

        • 1)OSPF对不同的链路可根据IP分组的不同服务类型(TOS)而设置成不同的代价。因此,OSPF对于不同类型的业务可计算出不同的路由,十分灵活。
        • 2)如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。
        • 3)所有在OSPF路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
        • 4)支持可变长度的子网划分和无分类编址CIDR。
        • 5)每个链路状态都带上一个32位的序号,序号越大,状态就越新。
      • OSPF与RIP的区别

      RIPOSPF
      工作层次应用层 基于UDP网络层 基于IP
      转发范围相邻路由器整个本自治系统(洪泛法)
      发送内容整个路由表相邻路由器链路状态
      何时发送定期交换 收敛慢链路状态改变(洪泛法) 收敛快
      • OSPF报文格式

        OSPF直接用IP数据报传送,工作在网络层。

        image-20230818144119117

      • OSPF的基本工作原理

        为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域(area)。每一个区域都有一个32位的区域标识符(用点分十进制表示)。

        image-20230818142755180

        ​ 划分区域后,洪泛法交换链路状态信息的范围局限于每一个区域,减少网络的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。每个区域路由器应不超200个。

        ​ OSPF采用层次结构的区域划分,使每个区域能够与其他区域通信。

        • 在上层的区域叫做主干区域backbone area)。主千区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域

        • 从其他区域来的信息都由区域边界路由器(area border router)进行概括。如路由器R3,R4和R7。

        • 在主干区域内的路由器叫做主干路由器(backbone router),如R3,R4,R5,R6和R7。

        • 在主干区域内需要一个路由器和本自治系统外的其他自治系统交换路由信息。这样的路由器叫做自治系统边界路由器,如R6。

          ​ 采用层次划分后,使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自治系统中。

      • OSPF分组类型

        • 1)问候分组,用来发现和维持邻站的可达性。
        • 2)数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
        • 3)链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。
        • 4)链路状态更新分组,用洪泛法对全网更新链路状态。
        • 5)链路状态确认分组,对链路更新分组的确认。

        ​ 通常每隔10秒,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达。路由器刚开始工作时,OSPF让每个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链 路状态摘要信息。然后,路由器使用链路状态请求分组,向对方请求发送自己所缺少的某些链路 状态项目的详细信息。经过一系列的这种分组交换,就建立了全网同步的链路数据库。

        image-20230818145357592

      • OSPF链路状态路由算法

        • 1.每个路由器发现它的邻居结点【HELLO问候分组】,并了解邻居节点的网络地址。

        • 2.设置到它的每个邻居的成本度量metric。

        • 3.构造【DD数据库描述分组】,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。

        • 4.如果DD分组中的摘要自己都有,则邻站不做处理;如果有没有的或者是更新的,则发送【LSR链路状态请求分组】请求自己没有的和比自己更新的信息。

        • 5.收到邻站的LSR分组后,发送【LSU链路状态更新分组】进行更新。

        • 6.更新完毕后,邻站返回一个【LSAck链路状态确认分组】进行确认。

        只要一个路由器的链路状态发生变化

        • 5.泛洪发送【LSU链路状态更新分组】进行更新。

        • 6.更新完毕后,其他站返回一个【LSAck链路状态确认分组】进行确认。

        • 7.使用Dijkstra根据自己的链路状态数据库构造到其他节点间的最短路径。

        OSPF算法例子:

        因特网中的一个自治系统的内部结构如下图所示。路由选择协议采用OSPF协议时,计算R6的关于网络N1、N2、N3、N4的路由表。

        image-20230821095646559

        根据Dijkstra算法,得出以下路径表格,其中主意,经过N3网络路径代价未增加。

        R1R2R3R4R5N1N2N3N4
        第1轮66
        第2轮614678
        第3轮77614678
        第4轮776146101078

        路由表如下:

        image-20230821100223264

    4.2.4 层次路由
    1. 层次路由

      网络规模扩大,路由器的路由表成比例地增大。这样会消耗大量资源,因此路由选择应按照层次的方式进行。

      因特网将整个互联网划分为许多较小的自治系统(AS)(注意一个自治系统中包含很多局域网)。

      自治系统(Autonomous System,AS):单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量来确定分组在该AS内的路由,同时还使用一种AS之间的路由选择协议来确定分组在AS之间的路由。

      image-20230818113334901

      ​ 每个自治系统有权自主地决定本系统内应采用何种路由选择协议。如果两个自治系统需要通信,那么就需要一种在两个自治系统之间的协议来屏蔽这些差异。因此将选择协议分为以下两种类型:

      • 内部网关协议(IGP):也称域内路由选择,指一个自治系统内部所使用的路由选择协议,具体的协议有RIP和OSPF等。
      • 外部网关协议(EGP):也称域间路由选择,指自治系统之间所使用的路由选择协议,在不同自治系统的路由器之间交换路由信息,并负责为分组在不同自治系统之间选择最优的路径。具体的协议有BGP。

      使用层次路由时,OSPF将一个自治系统再划分为若干区域(Area),每个路由器都知道在本区域内如何把分组路由到目的地的细节,但不用知道其他区域的内部结构。因而使OSPF协议能够用于规模很大的自治系统中。

    2. BGP(外部网关协议) 应用层 TCP封装

      ​ 边界网关协议(Border Gateway Protocol,BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。

      • 目的:力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子)

      • 困难

        • 互联网的规模太大,使得自治系统AS之间路由选择非常困难
        • 自治系统AS之间的路由选择必须考虑有关策略。
      • 交换过程

        BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS

        当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。

      • BGP的工作原理

        image-20230818153227250

        • 每一个自治系统的管理员要选择至少一个路由器(可多个)作为该自治系统的"BGP发言人”

        • 一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接

        • 然后在此连接上交换BGP报文以建立BGP会话,再利用BGP会话交换路由信息

        • 当所有BGP发言人都相互交换网络可达性的信息后,各BGP发言人就可找出到达各个自治系统的比较好的路由

        BGP发言人交换路径向量

        image-20230818153606293

        自治系统AS2的BGP发言人通知主干网的BGP发言人:“要到达网络N1,N2,N3和N4可经过AS2。”主干网在收到这个通知后,就发出通知:“要到达网络N1,N2,N3和N4可沿路径(AS1,AS2)。”同理,主干网还可发出通知:“要到达网络N5,N6和N可沿路径(AS1,AS3)。”

      • BGP报文格式

        image-20230818152557320

      • 特点

        1)BGP协议交换路由信息的结点数量级是自治系统的数量级,比这些自治系统中的网络数少很多

        2)每一个自治系统中BGP发言人(或边界路由器)的数目是很少的,这样自治系统之间的路由选择不会很复杂

        3)BGP支持CIDR,BGP的路由表包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列

        4)在BGP刚运行时,BGP的邻站交换整个BGP路由表。但以后只需要在发生变化时更新有变化的部分

      • BGP-4的四种报文

        • 打开(Open)报文。用来与相邻的另一个BGP发言人建立关系。
        • 更新(Update)报文。用来发送某一路由的信息,以及列出要撤销的多条路由。
        • 保活(Keepalive)报文。用来确认打开报文并周期性地证实邻站关系。
        • 通知(Notification)报文。用来发送检测到的差错。

    ​ RIP、OSPF与BGP的比较如表所示。

    协议RIPOSPFBGP
    类型内部内部外部
    路由算法距离-向量链路状态路径-向量
    传递协议应用层 UDP网络层 IP应用层 TCP
    路径选择跳数最少代价最低较好,非最佳
    交换结点和本结点相邻的路由器网络中的所有路由器和本结点相邻的路由器
    交换内容自己的整个路由表与本路由器相邻的所有路由器的链路状态首次:整个路由表
    非首次:有变化的部分
    4.3 IPv4
    4.3.1 IPv4分组
    1. IPv4分组的格式

    ​ 一个IP分组由首部和数据部分组成。首部长度20B固定,后面有可选字段,长度可变。

    image-20230816172140328

    • 版本:指IP协议的版本,目前广泛使用的版本号为4。

    • 首部长度:单位是4B,最小为5,表示20B,最大是15,表示60B。

    • 区分服务:指示期望获得哪种类型的服务。

    • 总长度:首部+数据,单位是1B

    • 标识:16位,用于IP分片,同一数据报的分片使用同一标识。

    • 标志:3位,只有后两位有意义,中间位DF,DF=1,禁止分片;DF=0,允许分片。最低位MF,MF=1,后面“还有分片”;MF=0,代表最后一片/没分片。

    • 片偏移:指出较长分组分片后,某片在原分组中的相对位置;以8B位单位。除了最后一个分片,每个分片数据部分长度一定是8B的整数倍。

    • 生存时间(TTL):IP分组的保质期。经过一个路由器-1变成0则丢弃。

    • 协议:数据部分的协议,占8位。

      协议名ICMPIGMPTCPEGPIGPUDPIPv6ESPOSPF
      字段值1268917415089
    • 首部检验和:16位,只检验首部。

    • 源IP地址和目的IP地址:32位。

    • 可选字段:0~40B,用来支持排错测量以及安全等措施

    • 填充:全0,把首部补成4B的整数倍

    总长度片偏移首部长度
    长度1B8B4B
    1. IP数据报分片

    最大传送单元(MTU):一个链路层数据报能承载的最大数据量。以太网的MTU是1500字节

    ​ 当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报称为。 片在目的地的网络层被重新组装。

    image-20230817115152840

    ​ IP分片利用首部的标识、标志和片偏移三部分完成。

    • 标识:创建IP数据报时,源主机为其加一个标识号,同一个数据报分片后,每片具有相同的标识。
    • 标志:共3位,只有后两位有意义,
      • 中间位DF(Don’t Fragment),DF=1,禁止分片;DF=0,允许分片。
      • 最低位MF(More Fragment),MF=1,后面“还有分片”;MF=0,代表最后一片/没分片。
    • 片偏移:指出数据报分片后某片在原分组中的相对位置,以8B位单位。除了最后一个分片,每个分片数据部分长度一定是8B的整数倍。

    如上图所示,一个长4000B的IP数据报(首部20B,数据报部分3980B)到达路由器后,需要在以太网转发(MTU = 1500B)。需要将3980B数据分片,前2片,每片有效数据部分1480B,首部20B;后一片数据部分为1020B=(3980-1480-1480)B,首部20B。

    每一片的DF都为0,表示都允许分片。前两片MF=1,表示并非最后一片;最后一片MF=0,表示为最后一片。

    第一片片偏移为0,第二片片偏移为首位数据地址/8=1480/8=185;第三片片偏移=2960/8=370。

    4.3.2 IPv4地址与NAT
    1. IPv4地址

      ​ 连接到因特网的每台主机都分配一个32比特的全球唯一标识符,即IP地址。IP地址由互联网名字和数字地址分配机构ICANN进行分配。

      image-20230817142123571

      IP地址由网络号和主机号组成。

              I 
             
            
              P 
             
            
              地址 
             
            
              : 
             
            
              : 
             
            
              = 
             
            
              { 
             
            
              &lt; 
             
            
              网络号 
             
            
              &gt; 
             
            
              , 
             
            
              &lt; 
             
            
              主机号 
             
            
              &gt; 
             
            
              } 
             
            
           
             IP地址::=\{&lt;网络号&gt;,&lt;主机号&gt;\} 
            
           
         </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mord cjk_fallback">地址</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">::=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">网络号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 0.7335em; vertical-align: -0.1944em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">主机号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mclose">}</span></span></span></span></span></span><br> <strong>网络号</strong>标志主机(或路由器)所连接到的网络。一个网络号在整个因特网唯一。</p> <p><strong>主机号</strong>标志该主机(或路由器)自身。一台主机号在相同网络号范围是唯一的。</p> <p>​ IPv4被分为了5类地址,分别适用于不同规模的网络。</p> 
      

    网络类型网络号用途
    A类前8位,第1位为0(1-126)用于大型网络
    B类前16位,前2位为10(128-191)用于中等规模网络
    C类前24位,前3位为110(192~223)用于小型网络
    D类开头1110(224-239)多播地址,用于向多个目标发送数据
    E类开头1111(240-255)保留地址,目前还没有被使用

    ​ 某些IP地址有着特殊用途,不能做主机IP地址。

    • 主机号全为0表示本网络本身,如202.98.174.0。
    • 主机号全为1表示本网络的广播地址,又称直接广播地址,如202.98.174.255。
    • 127.×.×.×保留为环回自检(Loopback Test)地址,此地址表示任意主机本身,目的地址为环回地址的P数据报永远不会出现在任何网络上。
    • 32位全为0,即0.0.0.0表示本网络上的本主机
    • 32位全为1,即255.255.255.255表示整个TCP/P网络的广播地址,又称受限广播地址。实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址
    网络类别最大可用网络数第一个可用的网络号最后一个可用的网络号网络中最大主机数
    A27-21126224-2
    B214128.0191.255216-2
    C221192.0.0223.255.25528-2

    A类地址可用的网络数为27-2,减2的原因是:第一,网络号字段全为0的IP地址是保留地址,意思是“本网络”;第二,网络号为127的P地址是环回自检地址。

    网络号主机号作为源地址作为目的地址用途
    全0全0可以不可以本网范围内表示主机,路由表中用于表示默认路由
    (表示整个Internet网络)
    全0特定值可以不可以表示本网内某个特定主机
    全1全1不可以可以本网广播地址(路由器不转发)
    特定值全0不可以不可以网络地址,表示一个网络
    特定值全1不可以可以直接广播地址,对特定网络上的所有主机进行广播
    127任何数
    非全0/1
    可以可以用于本地软件环回测试,称为环回地址

    IP地址特点

    • IP地址是一种分等级的地址结构。其好处如下:

      ①在分配IP地址时只分配网络号,而主机号则由得到该网络的单位自行分配,方便了 IP地址的管理;

      ②路由器仅根据目的主机所连接的网络号来转发分组,减小了路由表所占的存储空间。

    • IP地址是标志一台主机(或路由器)和一条链路的接口。

    当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,每个IP地址的网络号必须与所在网络的网络号相同,且这两个IP地址的主机号是不同的。

    IP网络上的一个路由器必然至少应具有两个IP地址(路由器每个端口必须至少分配一个IP地址)。

    • 用网桥连接的若干LAN仍然是同一个网络(同一个广播域),因此该LAN中所有主机的IP地址的网络号必须相同,但主机号必须不同。

    • 在IP地址中,所有分配到网络号的网络(无论是LAN还是WAN)都是平等的。

    • 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的。

    由于广泛使用无分类IP地址进行路由选择,这种传统分类的IP地址已成为历史。

  • 网络地址转换(NAT)

    网络地址转换(NAT)是指通过将专用网络地址(如Intranet)转换为公用地址(如Internet),从而对外隐藏内部管理的IP地址。其优势如下:

    • 它使得整个专用网只需要一个全球IP地址就可以与因特网连通。
    • 由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗。
    • 它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险

    为了网络安全,划出了部分IP地址为私有IP地址。其特点如下:

    • 私有IP只用于LAN,不用于WAN连接。因此私有IP地址不能直接用于Internet,必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能用于Internet。

    • 私有IP地址被LAN重复使用。有效地解决了P地址不足的问题。

    私有IP地址网段如下:

    • A类:1个A类网段,即10.0.0.0~10.255.255.255。
    • B类:16个B类网段,即172.16.0.0~172.31.255.255。
    • C类:256个C类网段,即192.168.0.0~192.168.255.255。

    ​ 在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。

    ​ 这种采用私有 IP地址的互联网络称为专用互联网本地互联网。私有IP地址也称可重用地址

    ​ 使用NAT时需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球IP地址。使用本地地址的主机和外界通信时,NAT路由器使用NAT转换表进行本地IP地址和全球IP地址的转换。

    ​ NAT转换表存放着

           { 
          
         
           本地 
          
         
           I 
          
         
           P 
          
         
           地址:端口 
          
         
           } 
          
         
        
          \{本地IP地址:端口\} 
         
        
      </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mord cjk_fallback">本地</span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mord cjk_fallback">地址:端口</span><span class="mclose">}</span></span></span></span></span>到<span class="katex--inline"><span class="katex"><span class="katex-mathml"> 
       
        
         
         
           { 
          
         
           全球 
          
         
           I 
          
         
           P 
          
         
           地址:端口 
          
         
           } 
          
         
        
          \{全球IP地址:端口\} 
         
        
      </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mord cjk_fallback">全球</span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mord cjk_fallback">地址:端口</span><span class="mclose">}</span></span></span></span></span>的映射。该端口号是逻辑上的端口。</p> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/6c30e5e4c0eca1ee039a63bf4dfac707.png#pic_center" alt="image-20230817154901058"></p> 
    

  • 例,一个宿舍办理了电信宽带,拥有了一个全球IP:138.76.29.7;宿舍内4台主机有了私有地址:192.168.0.0网段。宿舍网关开启NAT功能,NAT表如上图所示。

    当路由器LAN端收到源IP为192.168.0.2,2233时,将其映射为138.76.29.7,5001,从WAN口发至因特网。

    当路由器从WAN端收到目的地址为138.76.29.7,5060的数据报时,将其映射成192.168.0.3,1234,然后从LAN端口发送给相应的本地主机。

    NAT工作原理

    image-20230817161347419

    • ①假设用户主机10.0.0.1(随机端口3345)向Web服务器128.119.40.186(端口80)发送请求。
    • ②NAT路由器收到IP分组后,为该IP分组生成一个新端口号5001,将IP分组的源地址更改为138.76.29.7(即NAT路由器的全球IP地址),将源端口号更改为5001。NAT路由器在NAT转换表中增加一个表项。
    • ③Web服务器并不知道刚抵达的IP分组已被NAT路由器进行了改装,更不知道用户的专用地址,它响应的IP分组的目的地址是NAT路由器的全球IP地址,目的端口号是5001。
    • ④响应分组到达NAT路由器后,通过NAT转换表将IP分组的目的IP地址更改为10.0.0.1,将目的端口号更改为3345。

    普通路由器在转发P数据报时,不改变其源P地址和目的P地址。而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源P地址或目的IP地址)。

    普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号

    4.3.3 子网划分与子网掩码、CIDR
    1. 子网划分

      由于两级IP地址有以下缺点,于是在IP增加子网号段

      • IP地址空间的利用率有时很低

      • 给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏

      • 两级的IP地址不够灵活。

      子网划分:增加子网号段,使两级IP变成三级IP地址。基本思路如下:

      • 子网划分纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。

      • 从主机号借位作为子网号;三级IP地址结构如下:

                  I 
                 
                
                  P 
                 
                
                  地址 
                 
                
                  = 
                 
                
                  { 
                 
                
                  &lt; 
                 
                
                  网络号 
                 
                
                  &gt; 
                 
                
                  , 
                 
                
                  &lt; 
                 
                
                  子网号 
                 
                
                  &gt; 
                 
                
                  , 
                 
                
                  &lt; 
                 
                
                  主机号 
                 
                
                  &gt; 
                 
                
                  } 
                 
                
               
                 IP地址=\{&lt;网络号&gt;,&lt;子网号&gt;,&lt;主机号&gt;\} 
                
               
             </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mord cjk_fallback">地址</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">网络号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 0.7335em; vertical-align: -0.1944em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">子网号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 0.7335em; vertical-align: -0.1944em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">主机号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mclose">}</span></span></span></span></span></span></p> </li><li> <p>凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号先找到连接到本单位网络上的路由器。然后该路由器在收到IP数据报后,按目的网络号和子网号找到目的子网。最后把IP数据报直接交付给目的主机。</p> </li></ul> <p><strong>性质</strong>:</p> 
        

    • 子网中的主机号为全0或全1的地址都不能被指派

    • 子网中的主机号全0的地址为子网的网络号,主机号全1的地址为子网的广播地址

  • 子网掩码

    ​ 为了告诉主机或路由器对网络进行了子网划分,使用子网掩码来表达对原网络中主机号的借位

    子网掩码是一个与IP地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成。1对应于IP地址中的网络号及子网号,而0对应于主机号。

    ​ 规定所有网络必需使用子网掩码,不划分采用默认子网掩码:

    • A类:255.0.0.0
    • B类:255.255.0.0
    • C类:255.255.255.0

    注意:

    1)一个主机在设置IP地址信息的同时,必须设置子网掩码

    2)同属于一个子网的所有主机以及路由器的相应端口,必须设置相同的子网掩码

    3)路由器的路由表中,所包含的信息其主要内容必须有:目的网络地址、子网掩码、下一跳地址

  • 无分类编址CIDR

    无分类域间路由选择CIDR是在变长子网掩码的基础上提出的一种消除传统A、B、C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址的划分方法。 IP地址结构如下:

            I 
           
          
            P 
           
          
            : 
           
          
            : 
           
          
            = 
           
          
            { 
           
          
            &lt; 
           
          
            网络前缀 
           
          
            &gt; 
           
          
            , 
           
          
            &lt; 
           
          
            主机号 
           
          
            &gt; 
           
          
            } 
           
          
         
           IP::=\{&lt;网络前缀&gt;,&lt;主机号&gt;\} 
          
         
       </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">::=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">网络前缀</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 0.7335em; vertical-align: -0.1944em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.7224em; vertical-align: -0.0391em;"></span><span class="mord cjk_fallback">主机号</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">&gt;</span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mclose">}</span></span></span></span></span></span><br> ​ CIDR地址块中的地址数一定是2的整数次幕,实际可指派的地址数通常为2<sup>N</sup>-2;N表示主机号的位数,主机号全0代表网络号,主机号全1为广播地址。</p> <p>​ <strong>CIDR记法</strong>:IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。</p> 
    

  • 例如,对于128.14.32.5/20这个地址,它的掩码是20个连续的1和后续12个连续的0,通过逐位相“与”的方法可以得到该地址的网络前缀(或直接截取前20位):

    image-20230817170446467

    构成超网:将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。

    ​ 路由聚合使得路由表中的一个项目可以表示多个原来传统分类地址的路由,有利于减少路由器之间的信息的交换,从而提高网络性能。

    ​ 方法:将网络前缀缩短(所有网络地址取交集)。

    例如,网络1的地址块是206.1.0.0/17;网络2的地址块是206.1.128.0/17。

    可以看出两个网络前16位相同,第17位分别是0和1,因此可以聚合成更大地址块206.1.0.0/16。

    image-20230817171351432

    如果不使用路由聚合,那么R1的路由表中需要分别有到网络1和网络2的路由表项。聚合后,到网络1和网络2的两条路由就可以聚合成一条到206.1.0.0/16的路由。

    最长前缀匹配:使用CIDR时,查找路由表可能得到几个匹配结果(跟网络掩码按位相与),应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。

    CIDR查找路由表的方法:为了更加有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次式数据结构中,然后自上而下地按层次进行查找。这里最常用的数据结构就是二叉线索。

  • 网络层转发分组的过程

  • ​ 分组转发都是基于目的主机所在网络的,这是因为互联网上的网络数远小于主机数,可以极大地压缩转发表的大小。当分组到达路由器后,路由器根据目的IP地址的网络前缀来查找转发表,确定下一跳应当到哪个路由器。

    ​ 在转发表中,每条路由必须有下面两条信息:

          ( 
         
        
          目的地址,下一跳地址 
         
        
          ) 
         
        
       
         (目的地址,下一跳地址) 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord cjk_fallback">目的地址,下一跳地址</span><span class="mclose">)</span></span></span></span></span></span><br> ​ 这样,IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次间接交付),当到达最后一个路由器时,才试图向目的主机进行直接交付。</p> 
    

    ​ 采用CIDR编址时,如果一个分组在转发表中可以找到多个匹配的前缀,那么应当选择前缀最长的一个作为匹配的前缀,称为最长前缀匹配。

    ​ 为了更快地查找转发表,可以按照前缀的长短排序,将前缀最长的排在第1行,按前缀长度的降序排列。这样,从第1行最长的开始查找,只要检索到匹配的,就不必再继续查找。

    ​ 此外,转发表中还可以增加两种特殊的路由:

    • 主机路由:对特定目的主机的IP地址专门指明一个路由,以方便网络管理员控制和测试网络。若特定主机的IP地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32。
      /32表示的子网掩码没有意义,但这个特殊的前缀可以用在转发表中。

    • 默认路由:用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行按位与运算,结果必然为全0,即必然和转发表中的0.0.0.0/0相匹配。只要目的网络是其他网络(不在转发表中),就一律选择默认路由。

      分组转发算法如下:

      1)从收到的IP分组的首部提取目的主机的IP地址D(即目的地址)。

      2)若查找到特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组;否则从转发表中的下一条(即按前缀长度的顺序)开始检查,执行步骤3)。

      3)将这一行的子网掩码与目的地址D进行按位与运算。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳”指出的进行处理(或者直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查,重新执行步骤3)。否则,执行步骤4)。

      4)若转发表中有一个默认路由,则把分组传送给默认路由;否则,报告转发分组出错。

    4.3.4 ARP、DHCP与ICMP
    1. IP地址与硬件地址

      IP地址是网络层使用的地址,它是分层次等级的。

      硬件地址是数据链路层使用的地址(MAC地址),它是平面式的。

      ​ 在网络层及网络层之上使用IP地址,IP地址放在IP数据报的首部,而MAC地址放在MAC帧的首部。通过数据封装,把IP数据报分组封装为MAC帧后,数据链路层看不见数据报分组中的IP地址。

      ​ 1)在IP层抽象的互联网上只能看到IP数据报。

      ​ 2)虽然在IP数据报首部中有源IP地址,但路由器只根据目的IP地址进行转发。

      ​ 3)在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中,通过路由器转发IP分组时,IP分组在每个网络中都被路由器解封装和重新封装,其MAC帧首部中的源地址和目的地址会不断改变。这也决定了无法使用MAC地址跨网络通信。

      ​ 4)尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

    2. 地址解析协议(ARP)

      ​ 无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址

      ​ **地址解析协议(ARP)**作用是完成IP地址到MAC地址的映射。

      ARP表:局域网上各主机和路由器的IP地址到MAC地址的映射表,称ARP表。使用ARP来动态维护ARP表。

      工作原理

      • 主机A欲向本局域网上的某台主机B发送IP数据报时,先在其ARP高速缓存中查看有无主机B的IP地址。

        • 如果有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。
        • 如果没有,那么就通过使用目的MAC地址为FFFF-FF-FF-FF-FF的帧来封装并广播ARP请求分组(广播发送),使同一个局域网里的所有主机都收到此ARP请求。
      • 主机B收到该ARP请求后,向主机A发出ARP响应分组(单播发送),分组中包含主机B的IP与MAC地址的映射关系,主机A收到ARP响应分组后就将此映射写入ARP缓存,然后按查询到的硬件地址发送MAC帧。

        ARP由于“看到了”IP地址,所以它工作在网络层,而NAT路由器由于“看到了”端口,所以它工作在传输层

        使用ARP的4种典型情况总结如下

      image-20230817175108090

      • 发送方是主机(如H1),要把IP数据报发送到本网络上的另一台主机(如H2)。这时H1在网1用ARP找到目的主机H2的硬件地址。
      • 发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如H3)。这时H1用ARP找到与网1连接的路由器R1的硬件地址,剩下的工作由R1来完成。
      • 发送方是路由器(如R1),要把IP数据报转发到与R1连接的网络(网2)上的一台主机(如H3)。这时R1在网2用ARP找到目的主机H3的硬件地址。
      • 发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。这时R1在网2用ARP找到与网2连接的路由器R2的硬件地址,剩下的工作由R2来完成。

      从IP地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程

    3. 动态主机配置协议(DHCP)

      动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)常用于给主机动态分配IP地址

      工作原理应用层协议,使用客户/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP

      • 1)需要IP地址的主机在启动时向DHCP服务器广播发送发现报文,这时该主机成为DHCP客户

      • 2)本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文。DHCP服务器先在其数据库中查找该计算机的配置信息

      • 3)若找到,则返回找到的信息。若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文

      ​ DHCP服务器与客户端交换过程

      • 1)DHCP客户机广播DHCP发现”消息,试图找到网络中的DHCP服务器,以便从DHCP服务器获得一个IP地址。源地址为0.0.0.0,目的地址为255.255.255.255。
      • 2)DHCP服务器收到“DHCP发现”消息后,广播DHCP提供”消息,其中包括提供给DHCP客户机的IP地址。源地址为DHCP服务器地址,目的地址为255.255.255.255。
      • 3)DHCP客户机收到“DHCP提供”消息,如果接受该IP地址,那么就广播“DHCP请求”消息向DHCP服务器请求提供IP地址。源地址为0.0.0.0,目的地址为255.255.255.255。
      • 4)DHCP服务器广播DHCP确认”消息,将IP地址分配给DHCP客户机。源地址为DHCP服务器地址,目的地址为255.255.255.255。
      客户端 服务器 DHCP发现 DHCP提供 DHCP请求 DHCP确认 客户端 服务器

      DHCP特点

      • DHCP允许网络上配置多台DHCP服务器,当DHCP客户机发出“DHCP发现”消息时,有可能收到多个应答消息。这时,DHCP客户机只会挑选其中的一个,通常挑选最先到达的。
      • DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP称这段时间为租用期。租用期的数值应由DHCP服务器自己决定,DHCP客户也可在自己发送的报文中提出对租用期的要求。
      • DHCP的客户端和服务器端需要通过广播方式来进行交互,原因是在DHCP执行初期,客户端不知道服务器端的IP地址,而在执行中间,客户端并未被分配IP地址,从而导致两者之间的通信必须采用广播的方式。采用UDP而不采用TCP的原因也很明显:TCP需要建立连接,如果连对方的IP地址都不知道,那么更不可能通过双方的套接字建立连接。
      • DHCP是应用层协议,因为它是通过客户/服务器模式工作的,DHCP客户端向DHCP服务器请求服务,而其他层次的协议是没有这两种工作方式的。
    4. 网际控制报文协议(ICMP)

      网际控制报文协议(Internet Control Message Protocol,ICMP)提高IP数据报交付成功的机会。

      ​ ICMP是网络层协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

      image-20230818095720773

      ​ ICMP分为两类,即ICMP差错报告报文ICMP询问报文

      • ICMP差错报告报文:用于目标主机或到目标主机路径上的路由器向源主机报告差错和异常情况

        ICMP差错报告报文可分为以下5类:

        • 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
        • 源点抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文。
        • 时间超过。当路由器收到生存时间(TTL)为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
        • 参数问题。当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
        • 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

        ICMP差错报告报文格式如下:

        image-20230818100345654

        ​ 把收到的需要进行差错报告的IP数据报首部数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文

        ​ 提取收到的数据报的数据字段前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。

        ​ 整个ICMP报文作为IP数据报的数据字段发送给源点。

        ​ 不应发送ICMP差错报告报文的几种情况如下:

        • 1)对ICMP差错报告报文不再发送ICMP差错报告报文。
        • 2)对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
        • 3)对具有组播地址的数据报都不发送ICMP差错报告报文。
        • 4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
      • ICMP询问报文:共有以下几类,常用的是前两类。

        • 回送请求和回答报文:主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态
        • 时间戮请求和回答报文:请主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
        • 掩码地址请求和回答报文
        • 路由器询问和通告报文

        PING:测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。工作在应用层。

        Traceroute: 跟踪一个分组从源点到终点的路径, 使用了ICMP时间超过差错报告报文; 工作在网络层。

    协议工作层次功能
    ARP网络层IP到MAC地址的映射
    DHCP应用层;基于UDP;客户/服务器模式动态分配IP地址
    ICMP网络层;基于IP检测网络连通性和故障诊断
    4.4 IPv6
    4.4.1 IPv6的主要特点
    1. 解决IP地址耗尽问题措施有以下三种:

      • ①采用无类别编址CIDR,使IP地址的分配更加合理;
      • ②采用网络地址转换(NAT)方法以节省全球IP地址;
      • ③采用具有更大地址空间的新版本的IPv6。

      其中前两种方法只是延长了IPv4地址分配完毕的时间,只有第三种方法从根本上解决了IP地址的耗尽问题

    2. IPv6特点如下:

      • 1)更大的地址空间。IPv6将地址从IPv4的32位增大到了128位。IPv6的字节数(16B)是IPv4字节数(4B)的平方。
      • 2)扩展的地址层次结构。
      • 3)灵活的首部格式。
      • 4)改进的选项。
      • 5)允许协议继续扩充。
      • 6)支持即插即用(即自动配置)。
      • 7)支持资源的预分配。
      • 8)IPν6只有在包的源结点才能分片,是端到端的,传输路径中的路由器不能分片,所以从一般意义上说,IPv6不允许分片(不允许类似IPv4的路由分片)。
      • 9)IPv6首部长度必须是8B的整数倍,而IPv4首部是4B的整数倍。
      • 10)增大了安全性。身份验证和保密功能是PV6的关键特征。
    3. IPv6数据报格式

      IPv6数据报由两大部分组成,即基本首部(base header)和后面的有效载荷(payload)。

      有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分。但所有的扩展首部并不属于IPv6数据报的首部。

      image-20230818104258996

      与IPv4的首部区别有:

      • 取消了首部长度字段,因为它的首部长度是固定的(40字节)。
      • 取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能。
      • 取消了总长度字段,改用有效载荷长度字段。
      • 取消了标识、标志和片偏移字段,因为这些功能已包含在分片扩展首部中。
      • 把TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)。
      • 取消了协议字段,改用下一个首部字段。
      • 取消了检验和字段,这样就加快了路由器处理数据报的速度。我们知道,在数据链路层对检测出有差错的帧就丢弃。在运输层,当使用UDP时,若检测出有差错的用户数据报就丢弃。当使用TCP时,对检测出有差错的报文段就重传,直到正确传送到目的进程为止。因此在网络层的差错检测可以精简掉。
      • 取消了选项字段,而用扩展首部来实现选项功能。

      把首部字段不必要功能取消后,使得IPv6首部字段减少到8个,首部结构如下。

      image-20230818104908071

      • 版本:指明了协议版本,字段是6。

      • 通信量类:区分数据报的类别和优先级。

      • 流标号:“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同个流的数据报都具有同样的流标号。

      • 有效载荷长度:指明数据报扩展首部加数据长度,最大值是64K。

      • 下一个首部:有扩展首部时,标识下一个扩展首部;没有扩展首部时,指出数据应交付的上层协议。

      • 跳数限制:相当于IPv4的TTL,最大为255。

      扩展首部功能:IPv6把原来IPv4首部中选项的功能都放在扩展首部中,并把扩展首部留给路径两端的源点和终点的主机来处理,而数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部),这样就大大提高了路由器的处理效率

      每个扩展首部都由若干个字段组成,它们的长度也各不同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了在该扩展首部后面的字段是什么。当使用多个扩展首部时,应按以上的先后顺序出现。高层首部总是放在最后面。

    4.4.2 IPv6地址
    1. IPv6数据报的目的地址可以是以下三种基本类型地址之一:

      • 单播。单播就是传统的点对点通信。
      • 多播。多播是一点对多点的通信,分组被交付到一组计算机的每台计算机。
      • 任播。这是Pν6增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一台计算机,通常是距离最近的一台计算机。
    2. IPv6地址表示

      ​ 在IPV6标准中指定了一种比较紧凑的表示法,即把地址中的每4位用一个十六进制数表示,并用冒号分隔每16位,如4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170。

      ​ 当16位域的开头有一些0时,可以采用一种缩写表示法,但在域中必须至少有一个数字。例如,可以把地址4BF5:0000:0000:0000:BA5F:039A:000A:2176缩写为4BF5:0:0:0:BA5F:39A:A:2176。

      ​ 当有相继的0值域时,还可以进一步缩写。这些域可以用双冒号缩写(::)。双冒号表示法在一个地址中仅能出现一次,因为0值域的个数没有编码,需要从指定的总的域的个数来推算。前述地址可被更紧凑地书写成4BF5::BA5F:39A:A:2176。

    3. IPv6分级

      IPv6扩展了IPv4地址的分级概念,为了使路由器能够更快地查找路由。它使用以下3个等级:

      • 第一级(顶级)指明全球都知道的公共拓扑
      • 第二级(场点级)指明单个场点
      • 第三级指明单个网络接口
    4. IPv4向IPv6过渡

      ​ 从IPv4向IPv6过渡只能采用逐步演进的办法,同时还必须使新安装的IPv6系统能够向后兼容。IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。

      ​ 过渡方法有以下两种:

      • 双栈协议:双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。

        如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了IPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。

        如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。

      • 隧道技术

        通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据顿或包。隧道协议将其它协议的数据顿或包重新封装然后通过隧道发送

    4.5 IP组播
    4.5.1 组播的概念

    ​ 为了能够支持像视频点播和视频会议这样的多媒体应用,网络必须实施某种有效的组播机制。

    image-20230818155304812

    组播:是让源计算机一次发送的单个分组可以抵达用一个组地址标识若干目标主机,并被它们正确接收。

    ​ 组播基于UDP协议。当主机想利用组播将单个数据发送给一组主机,源主机把数据发给一个组播地址,组播地址可以标识一组地址。网络把这个数据的副本投递给该组中的每台主机。主机可以同时属于多个组。

    ​ 在IPv4中,每个组播组都有一个D类地址,要给该组发送的计算机使用这个地址作为目标地址。

    ​ 主机使用**IGMP(因特网组管理协议)**加入组播组。

    ​ 主机组播时仅发送一份数据,只有数据在传送路径出现分岔时才将分组复制后继续转发。因此,对发送者而言,数据只需发送一次就可发送到所有接收者,大大减轻了网络的负载和发送者的负担。组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器

    4.5.2 IP组播地址

    ​ IP组播使用D类地址格式。D类地址的前四位是1110,因此D类地址范围是224.0.0.0~239.255.255.255。每个D类IP地址标志一个组播组。

    • 特点:

      1)组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP。

      2)组播地址只能用于目的地址,不能用于源地址

      3)对组播数据报不产生ICMP差错报文。若在PING命令后面键入组播地址,将永远不会收到响应

      4)并非所有的D类地址都可作为组播地址

    • IP组播可以分为两种:

      • 一种只在本局域网上进行硬件组播
      • 另一种则在因特网的范围内进行组播

      在因特网上进行组播的最后阶段,还是要把组播数据报在局域网上用硬件组播交付给组播组的所有成员。

    • 硬件组播

      ​ 组播IP地址也需要相应的组播MAC地址在本地网络中实际传送帧。IANA拥有的以太网组播MAC地址的范围是从01-00-5E-00-00-00到01-00-5E-7F-FF-FF。不难看出,在每个地址中,只有23位可用作组播。这只能和D类IP地址中的23位有一一对应关系。

      ​ D类IP地址可供分配的有28位,可见在这28位中,前5位不能用来构成以太网的硬件地址,如图所示。

      123

      ​ 收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。

    4.5.3 IGMP与组播路由算法
    1. IGMP网际组管理协议 网络层协议 基于IP

      • 目的:IGMP协议让组播路由器知道本局域网上是否有主机(的进程)参加或退出了某个组播组。

      • 工作阶段:

        • 1、某主机要加入组播组,向组播地址发送IGMP报文,声明自己要加入组播

          本地组播路由器收到报文,转发给因特网其他组播路由器

        • 2、本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。

          只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。

        组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。

    2. 组播路由选择协议

      • 目的:组播路由选择协议目的是找出以源主机为根节点的组播转发树

      • 组播转发树

        image-20230818162757713
        • 组播路由协议目的是找出以源主机为根节点的组播转发树。

        • 构造树可以避免在路由器之间兜圈子。

        • 在组播转发树上的路由器不会收到重复的组播数据报

        • 对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。

      • 算法:

        • 基于链路状态的路由选择
        • 基于距离-向量的路由选择
        • 协议无关的组播(PIM)
    4.6 移动IP
    4.6.1 移动IP的概念
    1. 定义

      移动IP技术是指移动站以固定的网络IP地址实现跨越不同网段的漫游功能,并保证基于网络IP的网络权限在漫游过程中不发生任何改变。移动IP的目标是把分组自动地投递给移动站

    2. 移动IP定义了三种功能实体:移动节点、本地代理(也称归属代理)和外地代理。

      • 移动节点:具有永久IP地址的移动站。
      • 归属代理(本地代理):通常就是连接在归属网络(原始连接到的网络)上的路由器。
      • 永久地址(归属地址/主地址):移动站点在归属网络中的原始地址。
      • 外部代理(外地代理):通常就是连接在被访网络(移动到另一地点所接入的网络)上的路由器。
      • 转交地址(辅地址):可以是外部代理的地址或动态配置的一个地址。
    4.6.2 移动IP通信过程
    1. 移动IP相关概念的应用

      ​ 在移动IP中,每个移动站都有一个原始地址,即永久地址(或归属地址)移动站原始连接的网络称为归属网络。永久地址和归属网络的关联是不变的。归属代理通常是连接到归属网络上的路由器,然而它实现的代理功能是在应用层完成的。

      ​ 当移动站移动到另一地点,所接入的外地网络也称被访网络。被访网络中使用的代理称为外地代理,它通常是连接在被访网络上的路由器

      ​ 外地代理有两个重要功能:①要为移动站创建一个临时地址,称为转交地址。转交地址的网络号显然和被访网络一致。②及时把移动站的转交地址告诉其归属代理

      ​ 用一个通俗的例子来描述移动IP的通信原理。例如,在以前科技不那么发达的年代,本科毕业时都将走向各自的工作岗位。由于事先并不知道自己未来的准确通讯地址,那么怎样继续和同学们保持联系呢?实际上也很简单。彼此留下各自的家庭地址(即永久地址)。毕业后若要和某同学联系,只要写信寄到该同学的永久地址,再请其家长把信件转交即可。

    2. 移动IP通信过程

      • A刚进入外部网络:
        • 1.获得外部代理转交地址(外部代理广播报文)。
        • 2.移动节点通过外部代理发送注册报文归属代理(包含永久地址&转交地址)。
        • 3.归属代理接收请求,并将移动节点的永久地址和转交地址绑定(以后到达该归属代理的数据报且要发往移动节点的数据报将被封装并以隧道方式发给转交地址),并返回一注册响应报文。
        • 4.外部代理接收注册响应,并转发给移动节点。
      • A移动到了下一个网络:
        • 1.在新外部代理登记注册一个转交地址。
        • 2.新外部代理给本地代理发送新的转交地址(覆盖旧的)
        • 3.通信
      • A回到了归属网络:
        • 1.A向本地代理注销转交地址
        • 2.按原始TCP/IP方式通信。
    4.7 网络层设备
    4.7.1 冲突域和广播域
    1. 冲突域

      冲突域是指连接到同一物理介质上的所有结点的集合,这些结点之间存在介质争用的现象。

      在OSI参考模型中,冲突域被视为第1层概念,像集线器、中继器等简单无脑复制转发信号的第1层设备所连接的结点都属于同一个冲突域,也就是说它们不能划分冲突域。而第2层(网桥、交换机)、第3层(路由器)设备都可以划分冲突域。

    2. 广播域

      广播域是指接收同样广播消息的结点集合。也就是说,在该集合中的任何一个结点发送一个广播帧,其他能收到这个帧的结点都被认为是该广播域的一部分。

      在OSI参考模型中,广播域被视为第2层概念,像第1层(集线器等)、第2层(交换机等)设备所连接的结点都属于同一个广播域。而路由器,作为第3层设备,则可以划分广播域,即可以连接不同的广播域。

      通常所说的局域网(LAN)特指使用路由器分割的网络,也就是广播域。

    4.7.2 路由器的组成和功能
    1. 定义

      ​ 路由器是一种具有多个输入输出端口的专用计算机,其任务是连接不同的网络(连接异构网络)并完成路由转发。在多个逻辑网络(即多个广播域)互连时必须使用路由器。

    2. 路由器转发

      • 当源主机要向目标主机发送数据报时,路由器先检查源主机与目标主机是否连接在同一个网络上。
      • 如果源主机和目标主机在同一个网络上,那么直接交付而无须通过路由器。
      • 如果源主机和目标主机不在同一个网络上,那么路由器按照转发表(路由表)指出的路由将数据报转发给下一个路由器,这称为间接交付。
    3. 路由器结构

      整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分。

      image-20230818171015512

      • 路由选择:根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表

      • 交换结构:根据转发表(路由表得来)对分组进行转发

      • 分组转发:若收到RIP/OSPF分组等,则把分组送往路由选择处理机;若收到数据分组,则查找转发表并输出

      • 输入端口:输入端口中的查找和转发功能在路由器的交换功能中是最重要的。当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组。

        image-20230818171141751

      • 输出端口:若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。

        image-20230818171409238

        路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。

    4.7.3 路由表与路由转发

    ​ 路由表根据路由选择算法得出的,主要用途是路由选择,总用软件来实现。

    ​ 标准的路由表有4个项目:目的网络IP地址、子网掩码、下一跳IP地址、接口。

    image-20230818172055422

    ​ 上图为一个简单的网络拓扑,R1的路由表如下图所示。

    image-20230818172538393

    ​ 转发表由路由表得来,可以用软件实现,也可以用特殊的硬件来实现。转发表必须包含完成转发功能所必需的信息,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址信息的映射。

    ​ 为了减少转发表的重复项目,可以使用一个默认路由代替所有具有相同“下一跳” 的项目,并将默认路由设置得比其他项目的优先级低,如下图所示。

    image-20230818173347615

    • 转发和路由选择的区别
      • “转发”是路由器根据转发表把收到的P数据报从合适的端口转发出去,它仅涉及一个路由器。
      • “路由选择”则涉及很多路由器,路由表是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,根据从各相邻路由器得到的网络拓扑的变化情况,动态改变所选择的路由,并由此构造出整个路由表。

    注意,在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,但要注意路由表不等于转发表。分组的实际转发是靠直接查找转发表,而不是直接查找路由表。

    5 传输层

    5.1 传输层提供的服务
    5.1.1 传输层的功能
    1. 端到端通信

      ​ 传输层提供进程和进程(端到端)之间的逻辑通信。与网络层的区别是,网络层提供的是主机之间的逻辑通信。应用进程之间的通信又称端到端的逻辑通信。

      ​ 这里“逻辑通信”的意思是:传输层之间的通信好像是沿水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接。

    2. 复用和分用

      • 复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据

      • 分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程

      网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去

      网络层的分用是指接收方的网络层在剥去首部后把数据支付给相应的协议

    3. 差错检测

      传输层检验首部与数据部分;网路层只检验首部。

    4. 提供两种不同的传输协议

      • 面向连接的传输控制协议TCP:可靠,面向连接,时延大,适用于大文件
      • 无连接的用户数据报协议UDP:不可靠,无连接,时延小,适用于小文件。

    image-20230821100425303

    5.1.2 传输层的寻址与端口
    1. 端口的作用

      端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。

      ​ 端口是传输层服务访问点(TSAP),它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程

      ​ 数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口。

      ​ 在协议栈层间的抽象的协议端口软件端口,它与路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。

    2. 端口号

      应用进程通过端口号进行标识,端口号长度为16bit,能够表示65536(216)个不同的端口号。

      端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:

      • 服务器端使用的端口号:它又分为两类,最重要的一类是熟知端口号,数值为0~1023,IANA(互联网地址指派机构)把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。

        应用程序FTPTELNETSMTPDNSTFTPHTTPSNMP
        熟知端口号212325536980161

        另一类称为登记端口号,数值为1024~49151。它是供没有熟知端口号的应用程序使用的,使用这类端口号必须在LANA登记,以防止重复。

      • 客户端使用的端口号:数值为49152~65535。由于这类端口号仅在客户进程运行时才动态地选择,因此又称短暂端口号(也称临时端口)。通信结束后,刚用过的客户端口号就不复存在,从而这个端口号就可供其他客户进程以后使用。

    3. 套接字

      ​ 在网络中通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到IP地址即构成套接字Socket。套接字,实际上是一个通信端点,即

              套接字 
             
            
              S 
             
            
              o 
             
            
              c 
             
            
              k 
             
            
              e 
             
            
              t 
             
            
              = 
             
            
              ( 
             
            
              I 
             
            
              P 
             
            
              地址:端口号) 
             
            
           
             套接字Socket=(IP地址:端口号) 
            
           
         </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6944em;"></span><span class="mord cjk_fallback">套接字</span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mord mathnormal">oc</span><span style="margin-right: 0.0315em;" class="mord mathnormal">k</span><span class="mord mathnormal">e</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">(</span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span style="margin-right: 0.1389em;" class="mord mathnormal">P</span><span class="mord cjk_fallback">地址:端口号)</span></span></span></span></span></span><br> 它<strong>唯一地标识网络中的一台主机和其上的一个应用(进程)</strong>。</p> <p>在网络通信中,主机A发给主机B的报文段包含<strong>目的端口号和源端口号</strong>,源端口号是“返回地址”的一部分,即当B需要发回一个报文段给A时,B到A的报文段中的目的端口号便是A到B的报文段中的源端口号(完全的返回地址是A的P地址和源端口号)。</p> </li></ol> 
      

    面向连接服务:在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。通信结束后,应该释放这个连接。

    无连接服务:指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到“网络”中,让该信息的传递在网上尽力而为地往目的地传送。

    5.2 UDP协议
    5.2.1 UDP数据报
    1. UDP概述

      UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测

      UDP具有如下特点:

      • UDP是无连接的,减少开销和发送数据之前的时延。
      • UDP使用最大努力交付,即不保证可靠交付。
      • UDP是面向报文的,适合一次性传输少量数据的网络应用,
      • UDP无拥塞控制,适合很多实时应用。
      • 分组首部开销小。TCP有20B的首部开销,而UDP仅有8B的开销。
      • UDP支持一对一、一对多、多对一和多对多的交互通信。
    2. UDP的首部格式

      UDP数据报包含两部分:UDP首部和用户数据。UDP首部和用户数据。UDP首部有8B,由4个字段组成,每个字段的长度都是2B。

      image-20230821105819937

      • **源端口:**源端口号。在需要对方回信时选用,不需要时可用全0。
      • **目的端口:**目的端口号。这在终点交付报文时必须使用到。
      • **长度:**单位字节,UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部)。
      • **校验和:**检测UDP数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全0。

      ​ 当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程。

      image-20230821104949141

      ​ 如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。

    5.2.2 UDP校验

    ​ 在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部。只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报来计算的。伪首部既不向下传送又不向上递交,而只是为了计算校验和。

    image-20230821105350391

    ​ UDP校验和的计算方法和IP数据报首部校验和的计算方法相似。但不同的是,IP数据报的校验和只检验IP数据报的首部,但UDP的校验和则检查首部和数据部分

    检验过程

    • 发送方首先把全零放入校验和字段并添加伪首部,然后把UDP数据报视为许多16位的字串接起来。
    • 若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾填入一个全零字节(但此字节不发送)。
    • 然后按二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段,并发送。
    • 接收方把收到的UDP数据报加上伪首部(如果不为偶数个字节,那么还需要补上全零字节)后,按二进制反码求这些16位字的和。
    • 当无差错时其结果应为全1,否则就表明有差错出现,接收方就应该丢弃这个UDP数据报。

    计算UDP检验和的例子:

    image-20230821110108297

    二进制反码运算求和:将所有的字相加,如果相加过程中最高位产生了进位,就将进位加到最低位上,这叫做回卷。

    5.3 TCP协议
    5.3.1 TCP协议的特点

    ​ TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。

    • 主要特点如下:

      1)TCP是面向连接(虚连接)的传输层协议

      2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点

      3)TCP 提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序

      4)TCP提供全双工通信,两端都有发送缓存和接受缓存。

      发送缓存用来暂时存放以下数据:①发送应用程序传送给发送方TCP准备发送的数据;②TCP已发送但尚未收到确认的数据。

      接收缓存用来暂时存放以下数据:①按序到达但尚未被接收应用程序读取的数据;②不按序到达的数据。

      5)TCP是面向字节流的。虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

    5.3.2 TCP报文段

    ​ TCP传送的数据单元称为报文段。TCP报文段既可以用来运载数据,又可以用来建立连接释放连接应答

    ​ 一个TCP报文段分为首部和数据两部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中,其首部的前20B是固定的。TCP首部最短为20B,后面有4N字节是根据需要而增加的选项,长度为4B的整数倍。

    image-20230821112736537

    • 源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。

    • 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。

    • 确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。

    • 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。

    • 保留。占6位,保留为今后使用,但目前应置为0。

    • 控制位:

      • 紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送不用在缓存里排队,配合紧急指针字段使用。
      • 确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1。
      • 推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
      • 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。
      • 同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文。
      • 终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接
    • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。

      例如,设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的一方还有接收1000字节数据(字节序号为701~1700)的接收缓存空间。

    • 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6。

    • 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数(紧急数据在报文段数据的最前面)。

    • 选项:长度可变。最大报文段长度MSS、窗口扩大、时间戳、选择确认。

    • 填充:这是为了使整个首部长度是4B的整数倍。

    5.3.3 TCP连接管理

    ​ TCP是面向连接的协议,因此每个TCP连接都有三个阶段:连接建立、数据传送和连接释放。TCP连接的管理就是使运输连接的建立和释放都能正常进行。

    1. TCP连接的建立

      在TCP连接建立的过程中,要解决以下三个问题:

      • 1)要使每一方能够确知对方的存在。
      • 2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)。
      • 3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

      TCP连接的建立采用客户/服务器模式。主动发起连接建立的应用进程称为客户(Client),而被动等待连接建立的应用进程称为服务器(Server)。

      TCP连接的端口即为套接字(Socket)或插口,每条TCP连接唯一地被通信的两个端点(即两个套接字)确定。

      连接建立过程经历3个步骤,称为三次握手。

      image-20230821134234758

      连接建立前,A、B创建传输控制模块TCB,服务器进程处于LISTEN(收听)状态,等待客户的连接请求。

      • 1)客户机先向服务器发送一个连接请求报文段。它不含应用层数据,其首部中的SYN标志位=1,另外,客户机要随机选择一个起始序号seq=x。TCP客户进程进入SYN-SENT(同步已发送)状态

      • 2)服务器收到连接请求报文段后,如同意就向客户机发确认,并为该连接分配缓存和变量

        其中,SYN和ACK=1,确认号字段的值ack=x+1,并且服务器随机产生起始序号seq=y,确认报文段同样不包含应用层数据。TCP服务器进程进入SYN-RCVD(同步收到)状态

      • 3)当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。

        其中ACK标志位=1,序号字段seq=x+1,确认号字段ack=y+1,该报文段可以携带数据,如果不携带数据则不消耗序号。TCP客户进程进入ESTABLISHED(已建立连接)状态

      要A第三次确认,是为了防止己失效的连接请求报文段突然又传送到了B,因而产生错误。

      防止第一次发送的连接请求报文段滞后到达,A在接收到B的确认就开始传送数据,而B确以为建立了新的连接而无法接收,导致数据丢失。

      服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击

      SYN洪泛攻击的原理和过程如下:

      • 攻击者向服务器发送大量的SYN数据包,请求建立连接,但是故意伪造或随机生成源IP地址,使服务器无法回复。
      • 服务器收到SYN数据包后,回复SYN-ACK数据包,并为每个连接分配一个缓冲区,等待客户端的ACK数据包,进入SYN-RCVD状态。
      • 由于源IP地址是伪造或随机的,服务器无法收到客户端的ACK数据包,导致缓冲区被占用,无法处理其他的连接请求。
      • 当缓冲区满了后,服务器就无法接受新的连接请求,从而拒绝服务。

      解决办法:设置SYN cookie,即在回复SYN-ACK数据包时,不分配缓冲区,而是将一些信息编码在序列号中,等到收到ACK数据包时再解码恢复。

    2. TCP连接的释放

      参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)将被释放。TCP连接释放的过程通常称为四次握手。

      image-20230821141106766

      • 1)客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。FIN=1seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。TCP客户进程进入FIN-WAIT-1(终止等待1)状态

      • 2)服务器端回送一个确认报文段ACK=1seq=vack=u+1,客户到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。服务器进入CLOSE-WAIT(关闭等待)状态。客户收到后进入FIN-WAIT-2(终止等待2)状态

        但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭

      • 3)服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。FIN=1ACK=1seq=wack=u+1。服务器进入LAST-ACK(最后确认)状态

      • 4)客户端回送一个确认报文段ACK=1, seq=u+1, ack=w+1,客户进入进入到TIME-WAIT(时间等待)状态。再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭。客户机和服务器进入CLOSED(连接关闭)状态

        为什么A在TIME-WAIT状态必须等待2MSL的时间呢?

        • 第一,为了保证A发送的最后一个ACK报文段能够到达B。
        • 第二,防止“已失效的连接请求报文段”出现在本连接中。

      除时间等待计时器外,TCP还设有一个保活计时器(keepalive timer)。

      就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

    5.3.4 TCP可靠传输

    ​ TCP的任务是在IP层不可靠的、尽力而为服务的基础上建立一种可靠数据传输服务。TCP使用了校验、序号、确认和重传等机制来达到这一目的。

    可靠,指的是保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。

    1. 序号

      ​ TCP连接中传送的数据流中的每一个字节都编上一个序号序号字段的值则指的是本报文段所发送的数据的第一个字节的序号

      image-20230821144431181

      ​ TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。如图所示,假设A和B之间建立了一条TCP连接,A的发送缓存区中共有10B,序号从0开始标号,第一个报文包含第0~2个字节,则该TCP报文段的序号是0,第二个报文段的序号是3。

    2. 确认

      TCP首部的确认号期望收到对方的下一个报文段的数据的第一个字节的序号

      TCP默认使用累计确认,即TCP只确认数据流中至第一个丢失字节为止的字节

    3. 重传

      有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。

      • 超时重传

        TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到期但还没有收到确认,就要重传这一报文段。

        TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)

      • 冗余ACK(冗余确认)

        TCP规定每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。

        当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报丈段之后的报文段已经丢失。

        快速重传的例子:

        发送方已发送1,2,3,4,5报文段

        • 接收方收到1,返回给1的确认(确认号为2的第一个字节)
        • 接收方收到3,仍返回给1的确认(确认号为2的第一个字节)
        • 接收方收到4,仍返回给1的确认(确认号为2的第一个字节)
        • 接收方收到5,仍返回给1的确认(确认号为2的第一个字节)
        • 发送方收到3个对于报文段1的冗余ACK,认为2报文段丢失,重传2号报文段。
    5.3.5 TCP流量控制

    ​ TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性。TCP提供一种基于滑动窗口协议的流量控制机制。

    滑动窗口

    • 接收窗口rwnd:接收端维护,接收端当前的接收缓存大小
    • 拥塞窗口cwnd:发送端维护,发送端根据当前网络的拥塞程度而确定的窗口值
    • 发送窗口:由发送端维护,发送端在接收到下一个确认前能够发送的最大字节数。
    • 发送窗口=min(接收窗口,拥塞窗口)

    ​ 在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),

    发送方的发送窗口接收窗口rwnd和拥塞窗口cwnd的最小值。TCP的窗口单位是字节,不是报文段。

    image-20230821150436320

    ​ 如上图所示,设A向B发送数据。在连接建立时,B的接收窗口rwnd=400。接收方主机B进行了三次流量控制,这三个报文段都设置了ACK=1,只有在ACK=1时确认号字段才有意义。第一次把窗口减小到rwnd=300,第二次又减到rwnd=100,最后减到rwnd=0,即不允许发送方再发送数据。这使得发送方暂停发送的状态将持续到B重新发出一个新的窗口值为止。

    ​ 传输层和数据链路层的流量控制的区别是:

    • 传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。
    • 数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。
    5.3.6 TCP拥塞控制

    ​ 拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载,是全局性过程。出现拥塞时,端点并不了解拥塞发生的细节,对通信连接的端点来说,拥塞往往表现为通信时延的增加

          发送窗口的上限值 
         
        
          = 
         
        
          m 
         
        
          i 
         
        
          n 
         
        
          [ 
         
        
          r 
         
        
          w 
         
        
          n 
         
        
          d 
         
        
          , 
         
        
          c 
         
        
          w 
         
        
          n 
         
        
          d 
         
        
          ] 
         
        
       
         发送窗口的上限值=min[rwnd,cwnd] 
        
       
     </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">发送窗口的上限值</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathnormal">min</span><span class="mopen">[</span><span style="margin-right: 0.0278em;" class="mord mathnormal">r</span><span style="margin-right: 0.0269em;" class="mord mathnormal">w</span><span class="mord mathnormal">n</span><span class="mord mathnormal">d</span><span class="mord cjk_fallback">,</span><span class="mord mathnormal">c</span><span style="margin-right: 0.0269em;" class="mord mathnormal">w</span><span class="mord mathnormal">n</span><span class="mord mathnormal">d</span><span class="mclose">]</span></span></span></span></span></span><br> ​ 因特网建议标准定义了进行拥塞控制的4种算法:慢开始、拥塞避免、快重传和快恢复。</p> 
    

    1. 慢开始和拥塞避免

      • 慢开始

        1)先令拥塞窗口cwnd=1(即一个最大报文段长度MSS)。

        2)在每收到一个对新的报文段的确认后,将cwnd加1,即增大一个MSS(拥塞窗口加倍)。

        为了便于理解,图中的窗口单位不使用字节而使用报文段的个数

      • 拥塞避免

        1)发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,而不是加倍,使cwnd按线性规律缓慢增长(即加法增大)

        2)当出现一次超时(网络拥塞)时,则令慢开始门限ssthresh等于当前cwnd的一半(即乘法减小)

        根据cwnd的大小执行不同的算法,可归纳如下:

        • 当cwnd<ssthresh时,使用慢开始算法。
        • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
        • 当cwnd=ssthresh时,既可使用慢开始算法,又可使用拥塞避免算法(通常做法)。
      • 网络拥塞处理

        image-20230821160349885

        ① 执行慢开始算法,拥塞窗口cwnd置为1,每收到一个ACK,cwnd加1,即每个轮次拥塞窗口翻倍。

        ② 达到ssthresh初始值16,执行拥塞避免算法,每个轮次拥塞窗口加1。

        ③ 在cwnd达到24时,出现超时,发送方判断网络拥塞;调整门限ssthresh为12,cwnd置1,重新慢开始。当拥塞窗口到达12时,开始执行拥塞避免。

        ​ 当网络出现拥塞时,无论在什么阶段,只要发送方检测到超时事件的发生(没有按时收到确认。重传计时器超时),就要把慢开始门限ssthresh设置为出现拥塞时的发送方cwnd值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。

    2. 快重传和快恢复

      ​ 快重传和快恢复算法是对慢开始和拥塞避免算法的改进。

      • 快重传:收到3个重复的确认执行快重传算法。

      • 快恢复

        当发送端收到连续三个冗余ACK时,就执行“乘法减小"算法,把慢开始门限ssthresh设置为出现拥塞时发送方cwnd的一半。与慢开始(将拥塞窗口cwnd设置为1)不同之处是它把cwnd的值设置为慢开始门限ssthresh改变后的数值,然后开始执行拥塞避免算法(加法增大),使拥塞窗口缓慢地线性增大。

        image-20230821160740544

      在流量控制中,发送方发送数据的量由接收方决定,而在拥塞控制中,则由发送方自己通过检测网络状况来决定。实际上,慢开始、拥塞避免、快重传和快恢复几种算法是同时应用在拥塞控制机制中。

      四种算法使用的总结

      • 在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法;

      • 当发送方接收到冗余ACK时,采用快重传和快恢复算法。

    6 应用层

    6.1 网络应用模型
    6.1.1 客户/服务器模型

    ​ 在客户/服务器(Client/Server,C/S)模型中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求。

    image-20230821165048681

    1. 服务器:提供计算服务的设备

      特点:①永久提供服务;②永久性访问地址/域名

    2. 客户机:请求计算服务的主机。

      特点:

      • 1)与服务器通信,使用服务器提供的服务

      • 2)间歇性接入网络

      • 3)可能使用动态IP地址

      • 4)不与其他客户机直接通信

    3. 工作流程

      • 服务器处于接收请求的状态。
      • 客户机发出服务请求,并等待接收结果。
      • 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机。
    4. 客户/服务器模型的主要特点

      • 1)网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的,使它们不能随意存储/删除数据,或进行其他受限的网络活动。

        整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便

      • 2)客户机相互之间不直接通信。例如,在Wb应用中两个浏览器并不直接通信。

      • 3)可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数有限。

    5. 应用:Web、文件传输协议(FTP)、远程登录和电子邮件等。

    6.1.2 P2P模型

    ​ 在P2P模型中,各计算机没有固定的客户和服务器划分。相反,任意一对计算机一一称为对等方(Peer)直接相互通信。每个结点既作为客户访问其他结点的资源,也作为服务器提供资源给其他结点访问。

    image-20230821165041498

    1. P2P模型的特点

      • 不存在永远在线的服务器,每个主机既可以提供服务,也可以请求服务
      • 任意端系统/节点之间可以直接通讯,多个客户机之间可以直接共享文档
      • 节点间歇性接入网络,节点可能改变IP地址
      • 多个客户机之间可以直接共享文档
      • 可扩展性好
      • 网络健壮性强
    2. P2P模型缺点:

      在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。

    3. 应用:PPlive、Bittorrent和电驴等。

    6.2 域名系统(DNS)

    域名系统(Domain Name System,DNS)是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(www.baidu.com)转换为便于机器处理的IP地址。

    ​ DNS系统采用客户/服务器模型,其协议运行在UDP之上,使用53号端口

    ​ DNS分为3部分:层次域名空间、域名服务器和解析器。

    6.2.1 层次域名空间

    ​ 因特网采用层次树状结构的命名方法。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即域名(Domain Name)

    image-20230821165138228

    ​ “域”(domain)是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

    ​ 从语法上讲,每一个域名都由标号(label)序列组成,而各标号之间用点隔开

    1. 标号

      • 1)标号中的英文不区分大小写

      • 2)标号中除连字符"-"外不能使用其他的标点符号

      • 3)每一个标号不超过63个字符,多标号组成的完整域名最长不超过255个字符

      • 4)级别最低的域名写在最左边,而级别最高的顶级域名写在最右边

    2. 域名树

      image-20230821170927617

      • 根:域名树最上面的是根,但没有对应的名字。它用一个点(.)表示,也称为根域或根区。

      • 顶级域名(Top Level Domain,TLD)分为如下三大类:

        • 国家顶级域名:cn,us,uk

        • 通用顶级域名:com,net,org,gov,int,aero,museum,travel

        • 基础结构域名/反向域名:arpa

      • 二级域名:

        • 类别域名:ac,com,edu,gov,mil,net,org

        • 行政区域名:用于我国各省、自治区、直辖市bj,js

        • 自己注册的域名:cctv,google

        凡是在顶级域名com下注册的单位都获得了一个二级域名

      • 三级域名:www、mail

      域名树的树叶就是单台计算机的名字,它不能再继续往下划分子域了。

    6.2.2 域名服务器

    ​ 因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型。

    ​ 域名到IP地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的(或有权限的)范围称为区。每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。

    ​ 每个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器

    ​ DNS使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的DNS上。DNS层次结构如图所示。

    image-20230821172724959

    1. 根域名服务器

      根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。

      ​ 任何本地域名服务器,若无法解析一个域名,就先求助于根域名服务器。通常不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应找哪个顶级域名服务器进行查询

    2. 顶级域名服务器

      ​ 责管理在该顶级域名服务器注册的所有二级域名

      ​ 收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)

    3. 授权域名服务器(权限域名服务器)

      ​ 负责一个区的域名服务器。每台主机都必须在授权域名服务器处登记,授权域名服务器总是能够将其管辖的主机名转换为该主机的地址

    4. 本地域名服务器

      当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器

      每一个因特网服务提供者ISP(一个大学,甚至一个大学里的系)都可以拥有一个本地域名服务器。

    6.2.3 域名解析过程
    1. 定义

      正向解析:是指把域名映射成为IP地址的过程;

      反向解析:是指把IP地址映射成为域名的过程。

    2. 递归查询

      ​ 本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的[步骤③~⑥]。在步骤⑦中,本地域名服务器从根域名服务器得到了所需的IP地址,最后在步骤⑧中,本地域名服务器把查询结果告诉发起查询的主机。

      ​ 由于该方法给根域名服务造成的负载过大,所以在实际中几乎不使用。

      image-20230821173039730

    3. 递归与迭代相结合的查询

      主机向本地域名服务器的查询采用的是递归查询;本地域名服务器向根域名服务器的查询采用迭代查询。

      image-20230821173051789

      假定某客户机想获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用8个UDP报文):

      • ①客户机向其本地域名服务器发出DNS请求报文

      • ②本地域名服务器收到请求后,查询本地缓存,假设没有该记录,则以DNS客户的身份向根域名服务器发出解析请求,

      • ③根域名服务器收到请求后,判断该域名属于.com域,将对应的顶级域名服务器dns.com的IP地址返回给本地域名服务器

      • ④本地域名服务器向顶级域名服务器dns.com发出解析请求报文

      • ⑤顶级域名服务器dns.com收到请求后,判断该域名属于a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值