0%

计算机网络 · 参考目录
  • 互联网基本概念
  • 计算机网络分类
  • 计算机网络分层模型
    • 分层思想
    • 协议和服务
    • OSI 七层模型
    • TCP / IP 四层模型
  • 计算机网络性能指标
    • 速率
    • 带宽
    • 时延
    • 利用率
    • 往返时间
    • 丢包率
    • 吞吐量
  • 应用层
    • 作用和原理
    • 应用进程通信方式
      • 客户 / 服务器方式
      • P2P 对等方式
    • 常用协议
      • HTTP
      • HTTPS
      • DNS
      • FTP
      • DHCP
      • NTP
      • 邮件相关协议
    • CDN
  • 传输层
    • 作用和原理
    • 复用和分用
    • 常用协议
      • TCP
        • 连接建立与断开
        • 流量控制
        • 拥塞控制
        • 超时重传机制
        • 可靠传输实现
        • 报文首部格式
      • UDP
        • 报文结构
      • UDP 和 TCP 的对比及应用场景
  • 网络层
    • 路由器
    • 常用协议
      • IP 协议
        • 地址划分
        • IPV4
        • IPV6
        • 数据报首部格式
      • ICMP 协议
      • ARP / RARP 协议
      • NAT 协议
      • OSPF 协议
      • BGP 协议
    • 路由选择算法
    • VPN 技术
  • 数据链路层
    • 作用和原理
    • 封装数据帧
    • 差错控制
    • 可靠传输
    • MAC 地址
    • PPP 协议
  • 物理层(简单了解即可)
    • 作用和原理
    • 物理介质
    • 数据交换方式
    • 信道复用
  • 网络安全
    • 加密
    • 认证
    • 防火墙
    • 常见攻击及防范

概述

网络的基本概念

网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。

多个网络可以通过路由器互联起来,构成一个覆盖范围更大的网络,即互联网(Internet),或称互连网。因此,互联网是网络的网络。

因特网(Internet)是全球最大的互联网络,用户数以亿计,互连的网络数以百万计。因特网采用TCP/IP协议族作为通信的规则,其前身是美国的ARPANET。

按照覆盖范围,可以将计算机网络分为WAN(广域网)、MAN(城域网)、LAN(局域网)与PAN(个域网)。

Web(万维网,World Wide Web)是基于超文本(Hypertext)和HTTP协议的全球性分布式信息系统,由Tim Berners Lee于1989年提出,通过超链接将互联网上的资源(如文本、图像、视频等)组织成相互关联的网状结构,为用户提供图形化界面以浏览和交互信息。其核心技术包括HTML(定义页面结构)、URL(统一资源定位符)和浏览器(解析与呈现内容),现已成为互联网最主流的服务之一。

以太网(Ethernet)是常见的(有线介质)局域网(LAN)技术,采用CSMA/CD协议实现多设备共享信道通信,由Xerox、Intel和DEC公司于1980年代联合开发,支持10Mbps至万兆速率。其物理介质包括双绞线、同轴电缆等,拓扑结构从早期的总线型演进为星型(通过集线器或交换机连接),具有高可靠性和低成本的特点,逐步取代了令牌环等其他局域网技术。尽管标准以太网的数据链路层仅提供无确认、无回传的不可靠传输服务,但以太网所采用的CSMA/CD协议能够保证以太网在事实上其实是”可靠“的。

以太网属于OSI模型的物理层和数据链路层,而Web基于应用层协议(HTTP)实现。

宽带(Broadband)是通信技术中用于描述高频宽、高速率数据传输能力的术语,其核心特征是能够同时支持多频段信号传输,从而承载更高的数据吞吐量。与传统的窄带(Narrowband,如电话拨号的56kbps)相比,宽带通过频带宽度(Bandwidth)扩展、调制技术优化与多路复用技术(例如FDM、TDM、CDMA)等手段实现较强的性能。

网络的三种交换方式:

  1. 电路交换:在通信前建立专用物理连接(如电话线路),全程独占信道直至通信结束,实时性强但资源利用率低。
  2. 报文交换:以完整报文为单位进行“存储-转发”,无需预先建立连接但延迟大,适用于非实时批量通信(如电子邮件)与大文件传输。
  3. 分组交换:将数据拆分为固定长度的小分组独立传输,支持动态复用链路和按需重传,效率高但处理复杂度较高,适用于互联网等通用数据传输。分组交换平衡了效率与灵活性,已经成为现代数据网络的核心技术,尤其适应异构设备和突发流量。

计算机网络性能指标

常用的计算机网络性能指标共有8种:

  • 速率(Rate)
  • 带宽(Bandwidth)
  • 吞吐量(Throughput)
  • 时延(Latency)
  • 时延带宽积(Delay-Bandwidth Product)
  • 往返时间(Round-Trip Time,RTT)
  • 利用率(Utilization)
  • 丢包率(Packet Loss Rate)

接下来逐个解释。

1. 速率

速率也称比特率或数据率,是连接在计算机网络上的主机在数字信道上传送比特的(实际)速率,是衡量网络实际传输速度的最基础指标。

常用的速率单位有:

  • ,或记为
  • ,这里 表示“千”,即
  • ,这里
  • ,这里
  • ,这里

应区分计算机中的数据量单位、信息论中的信息量单位 ,这些单位按 倍增,而非速率单位中按 倍增。

例如现有一个大小为 待发送的数据块,网卡的发送速率为 ,要计算网卡发送完该数据块究竟需要多少时间,应按下述过程计算: 2. 带宽

在模拟信号的传统定义中,带宽是信号所包含的各种不同频率成分所占据的频率范围,基本单位为 ,常用单位有

在计算机网络中,带宽表示网络的通信线路理论上所能传送数据的能力,换言之,表示理想情况下单位时间内从网络的某一点到另一点所能通过的最高速率。网络带宽的的单位与速率相同。

3. 吞吐量

吞吐量表示在单位时间内通过某个网络、信道或接口的有效数据量。吞吐量常被用于对现实情况中网络的一种测量,以便知道实际上有多少数据能成功通过网络。吞吐量的的单位与速率相同。

吞吐量受到网络带宽或额定速率的限制,通常小于带宽,并且受延迟、丢包、网络拥塞等因素影响。例如,一个网络的带宽可能为 ,但可能一般情况下吞吐量只能达到

4. 时延

网络时延由发送时延、传播时延与处理时延三部分构成,有时也将处理时延进一步细分为排队时延与处理时延,本文不作区分,统称处理时延。时延的基本单位是秒()。

发送时延的计算公式为 ,即 分组长度(b) / 发送速率(b/s);传播时延的计算公式为 ,即 信道长度(m) / 电磁波传播速率(m/s)。处理时延受多方面因素影响,不便计算,通常直接对结果进行观测。

5. 时延带宽积

时延带宽积是传播时延与带宽的乘积,链路的时延带宽积也被称为以比特为单位的链路长度。时延带宽积表示若发送端连续发送数据,则当所发送的第一个比特即将抵达时,发送端已经发送比特数量。

6. 往返时间(RTT)

往返时间表示一次双向交互所需的时间。

7. 利用率

利用率分为信道利用率与网络利用率。信道利用率是指某信道有多少百分比的时间有数据通过,网络利用率是指全网络的信道利用率的加权平均。

根据排队论,信道的利用率越大,该信道引起的时延也将迅速增加,因此信道利用率并非越高越好。

如果用 表示网络空闲时的时延、用 表示网络的当前时延、用 表示利用率,则在理想情况下可以用下述公式简单表示 间的关系: 由上述公式可知,

  • 当网络利用率达到 时,时延将加倍;
  • 当网络利用率超过 时,时延增长率迅速上升,表现为时延急剧增大;
  • 当网络利用率接近 时,时延将趋近无穷大;

因此,部分ISP会控制自己的信道利用率不超过 ,如果超过 则进行扩容,增大线路的带宽。

与此同时,信道利用率也不应过低,因为过低的信道利用率这意味着通信资源存在显著浪费。应该使用若干机制,根据情况动态调整输入到网络中的通信量,使网络利用率保持在一个合理的范围内。

8. 丢包率

丢包率,或称为分组丢失率,指在一定时间范围内传输过程中丢失的分组数量与总分组数量的比率。丢包率具体可以被细分为接口丢包率、结点丢包率、链路丢包率、路径丢包率与网络丢包率等等。这是网络运维人员非常关心的一个性能指标,但用户一般意识不到发生了网络丢包。

主要是以下两种情况导致分组丢失:

  1. 分组在传输过程中出现误码,被结点丢弃;
  2. 分组到达一台队列已满(或将满)的分组交换机时被丢弃。

丢包率反映了网络的拥塞情况:

  • 无延迟时路径丢包率为
  • 轻度拥塞时路径丢包率一般为
  • 严重拥塞时路径丢包率一般为

计算机网络结构体系

国际标准化组织ISO于1977年成立专门机构,提出了开放系统互连基本参考模型OSI/RM,简称OSI。此前,也有许多公司提出自行制订的体系结构。

不过,OSI/RM只是一个抽象概念,基于OSI/RM于1983年形成开放系统互连基本参考模型的正式文件,即ISO 7498国际标准。

OSI体系模型中,计算机网络的体系结构为: OSI是法律上的国际标准,但实际上OSI标准失败了,现在得到广泛应用的是事实上的国际标准——非国际标准TCP/IP。


在TCP/IP体系模型中,计算机网络的体系结构为: TCP/IP协议中包含大量协议,称为TCP/IP协议族。一般用户主机的操作系统带有符合TCP/IP体系结构标准的TCP/IP协议族,路由器则只包含网际层与网络接口层。

IP over everything:IP协议互连不同的网络接口

Everything over IP:IP协议为各种互联网应用提供服务


五层原理体系结构将TCP/IP体系结构中的网络接口层参考ISO划分为了数据链路层与物理层,方便分析与研究。 使 由于TCP/IP协议栈的网络层使用网际协议IP,这是整个协议栈的核心协议,因此在TCP/IP协议栈中五层原理体系结构的网络层也常被称为网际层,对应TCP/IP体系结构中的网际层。

一个例子:在浏览器中输入网址后,首先产生应用层的HTTP报文(GET请求)。接着,运输层为报文添加TCP首部,使原报文成为TCP报文段,通过端口号区分应用进程并实现可靠传输。随后,网络层再为TCP报文段添加IP首部,使TCP报文段成为IP数据报,此时数据在网络层具备路由寻址能力。然后,数据链路层为IP数据报添加ETH首部与ETH尾部(假设网络N1为以太网),同时插入前导码(Preamble)和帧起始符(SFD),使IP数据报成为以太网帧,以便帧能被相应网络设备识别与校验。最后,物理层将帧转换为比特流,通过调制技术将数字信号转为电信号/光信号,数据进入物理介质传输。传输过程中,路由器需先解封装以太网帧获取IP数据报,检查目标IP地址后重新封装新帧进行转发。数据最终到达目标服务器(Web服务器),服务器通过逆向解封装过程提取原始HTTP报文,并根据报文内容生成响应。


以下是一些术语,尽管这些术语源于OSI七层协议体系结构,但这些术语均适用于另外两种体系结构。

实体(Entity):实体是任何可发送或接收信息的硬件或软件进程。

对等实体(Peer Entity):收发双方相同层次中的实体。正在通信中的两个浏览器属于对等实体,但浏览器与网卡不是对等实体。

协议(Protocol):控制两个对等实体进行逻辑通信的规则的集合。之所以是逻辑通信,是因为这种通信实际上并不存在,是为了研究的方便而假设的。例如,应用层使用HTTP、SMTP等协议进行通信,传输层主要使用TCP、UDP进行通信,网络层通过IP等协议进行通信,链路层可以使用传统以太网CSMA/CD进行通信,物理层可以使用传统以太网的曼彻斯特编码进行通信。

协议有三个要素:语法(Syntax)、语义(Semantics)与同步(Timing)。语法定义了所交换信息的格式,语义定义了通讯双方所要完成的操作,同步定义了收发双方的时序关系。

服务(Service):在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务(作为上一层逻辑通信的基础)。实现本层协议需要使用下一层所提供的服务,例如运输层的TCP、UDP协议依赖于网际层的IP服务。简而言之,协议是水平的,服务是垂直的。下层的协议对上层的协议是透明的,实体能享受相邻下层提供的服务,但并不知道实现该服务的具体协议。

服务访问点(Service Access Point,SAP):在同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型。例如,数据链路层的访问服务点是帧的“类型”字段,网络层的服务访问点是IP数据报首部中的“协议字段”,运输层的服务访问点是“端口号”。

服务原语(Service Primitive):上层使用下层所提供的服务需要通过与下层交换的一些命令,这些命令就是服务原语。

协议数据单元(rotocol Data Unit,PDU):对等层次之间传送的数据包称为该层的协议数据单元。例如,TCP协议对应的协议数据单元为TCP报文段,UDP协议对应的协议数据单元为UDP报文段。应用层对等实体逻辑通信的数据包一般称为应用报文。

服务数据单元(Service Data Unit,SDU):同一系统内层与层间交换的数据包称为服务数据单元。一个SDU可以被划分为多个PDU,多个SDU也可以被合并为一个PDU。

物理层

物理层概述

物理层考虑的是怎样才能在连接各种计算机传输媒体上传输数据比特流,为数据链路层屏蔽了各种传输媒体的差异,使数据链路层不必关心网络具体的传输媒体,只需要关注如何完成本层的协议。

物理层的主要任务:

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

传输媒体

物理层的传输媒体可分为导引型传输媒体与非导引型传输媒体两类。常见的导引型传输媒体有同轴电缆、双绞线、光纤与电力线,常见的非导引型传输媒体有无线电波、微波、红外线与可见光。

绞合线

绞合的作用是抵御部分来自外界的电磁波干扰,并减少相邻导线的电磁干扰。

绞合线类别 带宽 线缆特点 典型应用
3 16MHz 2对4芯双绞线 模拟电话,传统以太网
4 20MHz 4对8芯双绞线 传统令牌局域网
5 100MHz 较之4类线增加了绞合度
5E(超分类) 125MHz 较之5类线有更小的衰减 家用1GB/s的家庭局域网带宽
6 250MHz 较之5类线改善了串扰等问题 万兆局域网
7 600MHz 屏蔽双绞线技术

传输方式

按照同一时刻传输的比特数量,网络的传输方式可以分为串行传输与并行传输。

  • 数据在传输线路上传输是串行的。
  • 数据在计算机内部的传输则通常是并行的,例如CPU与内存间通过总线进行数据传输。

按照传输的字节是否同步,网络的传输方式可以被分为同步传输与(字节之间的)异步传输。

  • 同步传输中,数据以稳定、连续的比特流形式传输,字节间不存在间隔,接收端需要在每个比特信号的中间时刻进行检测、判别接收到的是比特0还是比特1,由于这一过程存在判别时刻的累积误差,因此需要时钟同步的方法。时钟同步的方法:外同步,在收发双方之间添加一条单独的时钟信号线;内同步,发送端将同步信号编码到发送数据中一同传输,例如曼彻斯特编码。
  • 异步传输中,数据以字节为独立的传输单位,字节间的时间间隔不固定,接收端只需要在每个字节的起始处对字节内的比特实现同步,为此通常需要在每个字节前后分别加上起始位与结束位。异步只存在于字节之间,字节中的每个比特仍需要同步,即各比特的持续时间应当相同。

按照数据传输的方向,网络的传输方式可以分为单工、半双工与全双工。

  • 单工:单向通信,例如无线电广播。

  • 半双工:双向交替通信,例如无线对讲机。

  • 全双工:双向同时通信,例如手机通话。

编码与调制

传输媒体与信道是两个概念。单工传输至少包含一个信道,半双工传输与全双工传输至少包含两个信道;如果使用信道复用技术,一个传输媒体可以包含多个信道。

信道的极限容量

当数字信号通过信道时会产生失真,信号波形失去了码元间的清晰界限,这种现象称为码间间干扰。

导致失真的主要因素有:

  • 码元传输速率
  • 信号传输距离
  • 噪声干扰
  • 传输媒体质量

综合Nyquist准则与Shannon公式来看,在信道带宽一定的情况下,要想提高信息的传输速率,就必须采用多元制调制,同时努力提高信道中的信噪比。

自Shannon公式发表后,各种新的信号处理与调制方法不断出现,其目的均是尽可能接近Shannon公式所给出的传输极限速率。

数据链路层

数据链路层概述

数据链路层要解决的三个重要问题分别是封装成帧、差错检测与可靠传输。

封装成帧

发送方:应用层将待发送的数据首先封装为应用层协议数据单元,交付给运输层。运输层再为其添加运输层协议首部,使之成为运输层协议数据单元,交付给网络层。网络层为其添加网络层协议首部,使之成为网络层协议数据单元,然后交付给数据链路层。数据链路层为其添加数据链路层协议首部——简称帧头,同时添加相应的帧尾。数据链路层为网络层协议数据单元添加帧头帧尾的这一操作即所谓封装成帧,从而支持在链路上传输数据。

差错检测

在帧的传送中,需要一些手段进行差错检测,检查在传输过程中是否出现了误码。拿以太网V2的MAC帧为例,通过在帧尾4字节的FCS(Frame Check Sequence)字段中写入检错码,接收方在接收帧后通过检错码与检错算法,就可以判断出帧在传输过程中是否出现误码。

可靠传输

接收方主机在接收到存在误码的帧后将丢弃该帧。如果数据链路层向上层提供的是不可靠服务,则不会有更多动作;如果数据链路层向上层提供的是可靠服务,则需要其他措施以保证接收方能够接收到存在误码的帧的正确副本。尽管误码不能完全避免,但若能够保证发送方发出的所有信息(而非具体数据)能被接收方全部收到,这就被称为可靠传输。

封装成帧

在前文数据链路层的概述中有提到,所谓封装成帧,就是数据链路层为上层交付的协议数据单元添加帧头(Header)与帧尾(Trailer或End Flag),使之称为帧(Frame)。

帧头与帧尾中包含了重要的控制信息,他们的作用之一是帧定界。例如,链路上传输的是比特流,是一串二进制的数据。接收方的数据链路层能够从物理层交付的比特流中提取出一个个帧,就是依赖于帧头与帧尾进行帧定界。

以前文中有展示的PPP帧为例,其帧头和帧尾各自包含一个长度为1字节的标志字段,均为0x7E,即二进制01111110。依据帧定界标志,接收方的数据链路层就能提取出帧。

规定帧定界标志是一种实现帧定界的方式,但并非每一种数据链路层协议的帧都包含有帧定界标志。例如,前文中有展示的以太网V2的MAC帧的帧头和帧尾就不包含帧定界标志。以太网V2的MAC帧的帧定界实现方式是在发送方物理层首先为其添加8字节的前导码,然后再转换为电信号并发送。前导码中,前7个字节为前同步码,用途为同步接收方的时钟,最后一个字节作为帧起始标记。由于以太网规定了帧间间隔时间为96比特时间,因此MAC帧无需帧结束定界符。

任何数据链路层都希望能够实现透明传输。所谓透明传输,是指数据链路层对上层交付的传输数据没有任何限制,就像数据链路层不存在一样。

非透明传输的例子:某面向字节的数据链路层在封装成帧的过程中于数据首尾分别插入帧定界标志,要求来自网络层的IP数据报内容不能含有该帧定界标志,否则接收方无法正确根据帧定界标志提取帧。这就是一个非透明传输的例子,因为该数据链路层对上层交付的传输数据存在限制:不能包含帧定界标志。

上例的一个解决方案是在发送帧前数据链路层对上层交付数据进行扫描,每扫描到数据中存在一个帧定界标志就在该帧定界标志前插入控制符0x1B(即ESC)作为转义符;考虑到转义符本身也可能被包含于数据之中,因此每扫描到数据中存在一个转义符,应该在转义符前再插入一个转义符,最后经过后续处理后发出。这样,接收方扫描到第一个帧定界标志时就能知道“噢,这是一个帧的开头,我应该从该帧定界标志起开始提取帧”,接着如果扫描到与控制符0x1B相连的帧定界标志时也能知道“看来这属于上层交付的协议数据单元,我应该把这整个内容视为帧内容数据的一部分”,当扫描到第一个不与控制符0x1B相连的帧定界标志时就能意识到“帧到这里就结束了,应当停止继续提取”。

以上解决方案就是面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。

对于面向比特的物理链路,则使用比特填充的方法实现透明传输。流程与上例大致相同,只不过考虑到面向比特的物理链路在传输数据时信道内只存在比特0与比特1,因此可以用更合适、更方便的方法实现透明传输,例如零比特填充法。假设帧的首尾以二进制01111110作为帧定界标志,则只需要保证帧的数据部分不存在01111110,因此可以在每扫描到帧的数据部分存在五个连续的比特1时就在其后方插入一个比特0(以破坏01111110的结构),接收方的数据链路层在由物理层交付的比特流中提取帧时只需要剔除掉帧的数据部分中每5个连续的比特1后的比特0,就可以提取出正确的数据。

为了提高帧的传输效率,应该尽可能让帧的数据部分更长一点。不过,考虑到差错控制的若干因素,每种数据链路层协议都规定了帧的数据部分的长度上限,称为最大传送单元(Maximum Transfer Unit,MTU)。

差错检测

在现实情况下,通信链路并不是理想的,比特在传输过程中可能产生差错,即比特1变成了比特0或比特0变成了比特1,这种现象被称为比特差错。在一段时间内,传输错误的比特占所传输的比特总数的比率称为误码率(Bit Error Rate,BER)。

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。以太网V2的MAC帧的帧尾包含了一个长4字节的帧检验序列FCS字段,点对点协议PPP的帧在帧尾也包含了一个长2字节的帧检验序列FCS字段,二者的作用都是支持接收方的数据链路层检查帧在传输过程中是否产生了误码。

以下介绍一些差错检测方法。

奇偶校验

在待发送的数据后添加1位奇偶校验位,使整个数据(包括添加的校验位)中比特1的个数为奇数或偶数,分别称为奇校验或偶校验。无论是奇校验还是偶校验,只要有奇数个位发生误码,那么比特1数量的奇偶性发生变化,此时能够检出误码;只要有偶数个位发生误码,那么比特1数量的奇偶性不会发生变化,此时不能检出误码——存在误码但不能检出的情况被称为漏检。

奇偶校验的漏检率非常高,数据链路层几乎不会采用该检测方法。

循环冗余校验

循环冗余校验(Cyclic Redundancy Check,CRC)是一种具有强检错能力的检错方法,漏检率极低。要使用CRC,则收发双方应约定好一个生成多项式 ,发送方基于待发送的数据和生成多项式计算出差错检测码(也称为冗余码),并将其添加到待传输数据后面一同传输,接收方则通过生成多项式计算收到的数据是否产生了误码。

被证明具有较好检错效果、低漏检率的常用生成多项式: 尽管以上多项式看似计算复杂,但其实很容易通过硬件电路实现。鉴于其非常好的检错能力,故CRC被广泛应用在数据链路层。此外,性质优良的生成多项式 存在着若干前提条件,例如多项式必须存在非零常数项,这些内容这里就不展开了。

发送方CRC的具体流程:首先进行预处理,在原始数据末尾添加与生成多项式最高次数相等的零(如多项式最高次为16则补16个比特0),形成新的被除数,接着进行模2除法,用生成多项式对应的二进制数作为除数,对预处理后的数据执行模2除法(位异或),得到余数作为冗余码(FCS),最后将计算出的冗余码附加到原始数据末尾,组成完整帧并发送。

接收方CRC的具体流程:接收时首先进行验证计算,使用相同的生成多项式对接收到的完整帧(含冗余码)再次进行模2除法,随后进行判断,若余数为零,判定数据无差错;若余数非零,则判定传输过程中出现误码并丢弃该帧。

应注意,检错码只能检测帧在运输过程中是否存在差错,但不能定位错误,无法纠正错误。要纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错,但由于纠错码的开销较大,在计算机网络中很少使用。

发现差错后,是通过检错重传的方式纠正传输中的差错还是仅丢弃检测到差错的帧,取决于数据链路层向上层提供的是可靠传输服务还是不可靠传输服务。

可靠传输服务

要实现可靠传输,就需要实现”发送端发送什么,接收端就收到什么“。

比特差错是传输差错中的一种。事实上,除了比特差错以外,传输差错还包括分组丢失、分组失序以及分组重复。只不过,后三者一般出现在数据链路层的上层,而比特差错往往出现在数据链路层。因此,以下主要研究三种数据链路层上针对比特差错的可靠传输服务:停止-等待协议(Stop-and-Wait,SW)、回退N帧协议(Go-Back-N,GBN)以及选择重传协议(Selective Repeat, SR)。

一般而言,可靠传输的实现比较复杂、开销较大,考虑到有线链路的误码率较低,通常不会要求数据链路层向上提供可靠传输服务。即使出现误码,也可以由其上层处理可靠传输问题,例如以太网。但无线链路易受干扰,有较高的误码率,因此这种情况下会要求数据链路层必须向上提供可靠传输服务,例如802.11无线局域网。

注:接下来将分析三种数据链路层上的可靠传输服务,但这些可靠传输实现机制的基本原理却并不局限于数据链路层,也能被应用到计算机网络体系结构的各层协议中。

停止-等待协议

停止-等待协议(Stop-and-Wait,SW)是一种十分简单的实现可靠传输服务的机制。记发送端希望传送的数据分组为DATA,发送端发出DATA后,由接收端接收并进行差错检测,发送端停止发送并等待接收方的确认分组,记为ACK。

如果接收端未检测出误码,则返回ACK。为了保证ACK总能够被正确传达至发送端、不至于使发送端一直等待ACK,需要在发送端发送DATA后启动超时计时器。若发送端在重传时间内收到了来自接收端的ACK,则表明本次DATA传输成功且未出现误码,发送端可以继续动作;若发送端在重传时间内未收到来自接收端的ACK,则发送端继续发送DATA,该动作称为超时重传。超时计时器的重传时间一般选为略大于从发送方到接收方的平均往返时间的值。

在这个过程中可能出现ACK丢失的情况,这时必然导致发送方超时重传。假设发送方第一次发送的DATA与超时重传发送的DATA均顺利传输至接收方,则接收方将无法分辨两份DATA究竟是不同的分组还是同一分组的重复传送。为了解决这个问题,可以为每个DATA编以序号。考虑到在停止-等待协议中,发送方每发送一个DATA就停止并等待,因此只需要用一个比特位编号区分本次发送的DATA是否为上次发送的DATA的重发:对超时重发的DATA采用相同的比特位编号,对相邻两次非超时重发的DATA采用相异的比特位编号。这样一来,接收方就可以通过编号区分由于ACK丢失而导致的无法分辨所接收到的两个未编号DATA是否为相同分组的超时重发。如果接收端所接收的前后两个DATA编号相同,则意味着ACK可能丢失或迟到——总之未在重传时间内抵达,因此其中一个DATA系超时重发的分组,需要丢弃其中一个,然后再次返回ACK;如果接收端所接收的前后两个DATA编号不同,则意味着ACK在重传时间内顺利抵达了发送方,两个未编号的DATA是不同的分组。

不难观察到,该过程中还可能出现ACK迟到的情况,这时也将导致发送方超时重传。重传后,假设发送方在超时重传后在重传时间内首次收到了第一个ACK,那么发送方将不再等待,继续发送新的分组,然后再次停止并等待。当发送方又一次接收到ACK时,将会出现一个重复确认的问题:此ACK究竟属于旧DATA的ACK(最初发送的DATA或超时重传的DATA),还是属于新DATA的ACK(最近一次发送的DATA)?容易想到,要解决该问题,可以对ACK也进行编号。对ACK编号的方式与对DATA编号的方式相同,在停止-等待协议中只需要用一位比特位编号即可:对相同编号的DATA(涉及超时重发的分组)返回相同编号的ACK,对相反编号的DATA返回相反编号的ACK。如果发送端所接收的前后两个ACK编号相同,则意味着接收方接收到了最初发送的DATA与超时重传的DATA,暂时还未收到属于最近一次发送的DATA的ACK,因此发送端应当继续等待;如果发送端所接收的前后两个ACK编号不同,则意味着接收方已经接收到了两个不同分组的DATA,发送端可以继续发送数据分组。

回到发送端第一次发出DATA后的情景,如果接收端检出了误码,则应丢弃存在误码的数据分组。尽管就算接收端什么也不做,在等待一定时间后发送方也将超时重传,但对于一些误码率较高的点对点链路,可以立即向发送方发送分组NAK以显式告知发送方数据分组存在误码,使发送方尽早回传。

对ACK编号的目的是为了解决ACK迟到的情况。由于数据链路层几乎不会出现ACK迟到的情况,因此在数据链路层实现停止-等待协议时可以不为ACK编号。

尽管超时计时器的重传时间推荐选为略大于从发送方到接收方的平均往返时间的值,但在数据链路层点对点的往返时间容易确定,可以准确地设定重传时间,而在运输层由于端到端的往返时间十分不稳定因此很难设定一个合适的重传时间。

优点:实现简单,资源消耗低,适合点对点信道。

缺点:信道利用率低,不适用于RTT远大于数据帧发送时延的信道,例如卫星链路。

回退N帧协议

回退N帧协议(Go-Back-N,GBN)的基础之一是流水线传输。由于停止-等待协议的信道利用率很低,如果出现超时重传,则利用率更加低。采用流水线传输可以解决这一问题,通过让发送方在收到来自接收方确认分组ACK之前连续发送多个数据分组DATA,大大提高信道利用率。

回退N帧协议利用流水线传输推广了停止-等待协议,通过发送窗口以限制发送方可连续发送数据分组的个数。

为区分发送窗口内的数据分组,发送方应对各数据分组循环编号。记发送窗口的尺寸为 ,编号所用的比特数量为 ,假设编号从 起始,那么 应满足 (当 退化为停止-等待协议)。编号是循环进行的,即编号值 的后继为 而非 。既然存在发送窗口,那么相应地也存在接收窗口,只不过在回退N帧协议中接收窗口尺寸 被设置为 。回退N帧协议与停止-等待协议是相同的流程框架,只不过发送方能够流水线传输、接收方能够累积确认——当然接收方也可以采取停止-等待协议中所使用的逐帧确认的机制,但在回退N帧协议中通常考虑累积确认。

累积确认:接收方通过发送带有最后一个按序到达数据分组的序号的确认分组ACK,统一确认此前所有数据的传输机制,减少确认次数并避免冗余重传。利用累积确认,回退N帧协议中的接收方不必对每个接收到的数据分组都返回确认分组ACK,而是根据一定的策略发送若干确认分组ACK。

在回退N帧协议中,什么时候会触发回退N帧呢?主要有以下四个场景:

  1. 数据帧丢失或检测到误码

    当接收方发现某帧(如第N号帧)因丢失或误码而无法解析时,会丢弃该帧及后续所有帧(即使后续帧本身正确),并重复发送最后一个正确接收的帧的ACK。部分实现中允许发送方在收到若干重复ACK时提前触发重传,无需等待超时。

  2. 确认帧ACK丢失

    若接收方发送的ACK在传输中丢失,发送方因超时未收到确认,会重传整个窗口内的全部未确认帧。

    例外:在累积确认机制下,非最大序号ACK的丢失不影响窗口滑动,无需重传。

  3. 触发超时重传

    发送方为每个窗口维护一个超时计时器,若在超时时间内未收到任何ACK,则触发重传所有未确认帧。

  4. 发送窗口尺寸 超出协议限制

    若发送窗口尺寸 超过最大允许值(即 ),接收方无法区分新旧数据帧,导致重复接收或混乱,此时必须回退重传。

    前三个场景在现实条件下是不可完全避免的,但该场景是本不应出现的错误情形,将导致接收方无法正确进行累积确认。

当且仅当未触发回退N帧、发送窗口内的所有数据分组顺利抵达接收方时,发送方的发送窗口才能够滑动,接着发送滑动后发送窗口内的新一批数据分组。

触发回退N帧后,发送方不需要在任何条件下都重发窗口内的全部数据分组,而只需要重发不能通过累计确认机制确认的数据分组(即丢失或出错的帧及其后续所有帧)——这就是回退N帧协议中“回退N帧”的由来。

优点:相比停止-等待协议大幅提升信道利用率,适合中等误码率环境;减小了接收方的资源开销,减小了对网络资源的占用。

缺点:不能向发送方及时反映出接收方已正确接收的数据分组信息,导致当通信质量差时,信道利用率可能比停止-等待协议还低。

选择重传协议

选择重传协议(Selective Repeat, SR)是对回退N帧协议的一种改进。在回退N帧协议中,由于接收窗口尺寸 ,因此接收方只能按序接收正确到达的数据分组,一个数据分组出现误码将导致其后续所有数据分组被丢弃——即使这些数据分组可能并不存在乱序或误码,因此对这部分数据分组的重传会导致通信资源的浪费。

为了解决这一问题,选择重传协议让接收窗口尺寸 大于 ,这使得接收方能够先根据编号收下失序到达但不存在乱码的数据分组,待缺失数据分组收齐后再一并送交上层。接收窗口尺寸应满足 (若 将导致接收方无法分辨新、旧数据分组),当 则退化为回退N帧协议,一般情况下令 即可。应注意,这样做就不再适用累积确认机制了,而只能进行逐帧确认。

选择重传协议是允许发送窗口与接收窗口部分滑动的,这里部分滑动的意思是基于最左侧分组的确认或接收触发窗口整体的滑动,区别于回退N帧协议中窗口只要滑动就一定滑动窗口尺寸的距离。对于发送方而言,只要能确保滑过的数据分组均被确认接收方已接收,发送窗口就可以滑动。对于接收方而言,只要能确保滑过的数据分组全部已正确接收,接收窗口就可以滑动。

其他的过程与另外两个协议就没有本质上的区别了,无外乎是发送方发送一批数据分组,接收方接收并检错(这里可能存在接收窗口的部分滑动)后,向发送方发送带有正确接收数据分组编号的确认分组,发送方收到确认分组后(这里可能存在发送窗口的部分滑动)再对未确认的数据分组进行超时重传。

优点:在高误码率环境下效率最高,仅重传错误帧,减少带宽浪费

缺点:实现复杂,需维护大量缓存和状态信息,接收窗口大小受限(通常

点对点协议

在开始之前,请注意区分以下概念:

  • SW、GBN与SR的主要内容是实现可靠传输的机制,并非专属于数据链路层的协议,他们的关注点在于如何实现可靠传输。
  • PPP则是完整的数据链路层协议,包含封装、认证、多协议支持等功能,可独立运行于物理层之上。PPP提供点对点链路的数据封装、透明传输、多协议支持(如IP、IPX)以及用户认证(如PAP/CHAP),而且默认不提供可靠传输服务,但可以结合SW、GBN与SR实现可靠传输服务。

点对点协议(Point-to-Point Protocal,PPP)是目前使用最广泛的数据链路层协议,现在已成为因特网的正式标准。PPP为点对点链路传输各种协议数据报提供了一个标准方法,能够在多种类型的点对点链路上运行,例如面向字节的异步链路与面向比特的同步链路。

目前绝大部分计算机用户“上网”都是连接到ISP并获取由ISP分配合法的IP地址实现的,而用户与ISP通信所使用的数据链路层协议通常正是PPP协议。PPP over Ethernet,即PPPoE,于1999年被提出。这是一种在以太网上运行的PPP协议,结合了以太网的高效性和PPP的用户管理功能,使得ISP能够通过DSL、电路调制调解器与以太网等宽带接入技术用以太网接口的形式为用户提供接入服务,允许通过以太网实现多用户共享同一物理链路的同时保留PPP的认证和IP分配功能。除了以太网之外,PPP也被广泛应用于广域网路由器之间的专用线路。

PPP并非单一的协议,其下包含链路控制协议(LCP)与若干网络控制协议(NCP)等子协议。

帧分为帧首、帧的数据与帧尾,PPP帧当然也遵从这一架构。

  • PPP帧的帧首:

    • Flag字段:值为0x7E,是PPP帧的定界符,长1字节
    • Address字段:值为0xFF,未定义实际意义,长1字节
    • Control字段:值为0x03,未定义实际意义,长1字节
    • Protocol字段:其值表明了帧的数据部分应由何协议处理,长2字节,
      • 值为0x0021时:帧的数据部分为IP数据报
      • 值为0xC021时:帧的数据部分为LCP分组
      • 值为0x8021时:帧的数据部分为NCP分组
  • PPP帧的数据部分:长度不应超过1500字节

    PPP实现透明传输的方法取决于所使用链路的类型,

    • 面向字节的异步链路:字节填充法,
      • 发送方将数据部分的0x7E转义为0x7D 0x5E两个字节
      • 发送方将数据部分的0x7D转义为0x7D 0x5D两个字节
      • 发送方将数据部分的ASCII控制字符(即小于0x20的字符)与0x20相加,再在其前插入0x7D
      • 接收方做相应逆处理
    • 面向比特的同步链路:比特填充法,Flag字段二进制值为01111110
      • 发送方通常由硬件实现,对数据部分每连续的五个比特1插入一个比特0
      • 接收方做相应逆处理
  • PPP帧的帧尾:

    • FCS(Frame Check Sequence):差错检测位,长2字节
    • Flag字段:值为0x7E,是PPP帧的定界符,长1字节

如前文所述,PPP默认不提供可靠传输服务,如果接收方收到的PPP帧未通过CRC检验(在默认情况下)仅仅会丢弃该帧。但PPP仍可以结合SW、GBN与SR等补充机制来实现可靠传输服务。

PPP总的来说可以分为三个组成部分:数据帧封装方法、链路控制协议与网络控制协议。

  1. 数据帧封装方法

    按照上文所描述的PPP帧结构进行封装成帧。

  2. 链路控制协议(LCP)

    链路控制协议用以建立、配置与测试数据链路的连接。

  3. 网络控制协议(NCP)

    PPP需要不同的网络控制协议以向上支持不同的网络层协议,例如TCP/IP中的IP协议、Novell NetWare网络操作系统中的IPX与Apple公司的Apple Talk。

PPP的典型工作状态如下图所示:

媒体接入控制

共享信道时需要考虑如何协调多个发送与接收站点对一个共享传输媒体的占用,这就是所谓的媒体接入控制(Medium Access Control,MAC),例如总线型局域网的场景。

多路复用技术是MAC协议的一种实现手段,其核心目标是通过共享物理信道资源提高传输效率,可被分为静态划分信道与动态划分信道两种实现方式。

静态划分信道

静态划分信道(Multiplexing)的核心是集中式资源分配,所有设备遵循预设规则使用信道资源,用户无法根据实时需求调整资源占用,其特点是高负载下高效率(资源分配固定且无冲突)、低负载下低效率(即使部分资源空闲也无法被其他用户动态占用),并且不存在冲突。

静态划分信道的主要实现技术包括频分多路复用(FDM)、时分多路复用(TDM)、波分多路复用(WDM)与码分多路复用(CDM)。

  • 频分多路复用(FDM)

    将总带宽划分为多个独立频段,每个用户独占固定频段进行通信。

  • 时分多路复用(TDM)

    将时间分割为等长的TDM帧,每个帧内划分固定时隙,用户轮流占用时隙传输数据。

  • 波分多路复用(WDM)

    光纤通信中的光频分复用,不同波长(频率)的光信号在同一光纤中独立传输。

  • 码分多路复用(CDM)

    为每个用户分配唯一正交码片序列,通过编码叠加信号实现多用户共享同一频段或时隙。

    码分多路复用技术通过码域正交性突破了传统静态划分技术的资源限制。即使多个用户同时发送信号,信道上的信号表现为多个信号的叠加,但即使信号在时域与频域上完全重叠,正交性也能保证接收端只提取目标用户的信号。

静态划分信道小结:

技术 复用维度 资源分配 典型场景 局限性
FDM 频域分割 固定频段 广播、有线电视 频谱利用率低,易受干扰
TDM 时域轮询 固定时隙 电话网络、光纤通信 轻负载时资源浪费
WDM 光波长分割 固定波长 光纤骨干网 设备成本高
CDM 码域正交覆盖 动态按需 移动通信、卫星导航 实现复杂,需严格同步

随机接入 · CSMA/CD协议

CSMA/CD,全称为Carrier Sense Multiple Access / Collision Detection,中文名为载波监听多址接入/碰撞检测,是一种针对有线介质的总线争用型MAC协议,遵从IEEE 802.3标准,也是半双工模式的传统以太网所使用的协议。注意,当代主流通用方案——现代全双工以太网已不再依赖CSMA/CD协议,因为现代以太网是基于交换机的,根本就不会发生碰撞。本小节中的以太网一词均指半双工模式的传统以太网。

  • 载波监听(Carrier Sense,CS)

    每个站点在发送帧以前首先检测总线上是否存在其他站点正在发送帧,所谓“先听后说”。具体而言,如果站点检测到总线已空闲至少96比特时间(发送96比特所花费的时间),则发送帧,否则继续等待。

  • 多址接入(Multiple Access,MA)

    多个站点连接在同一条总线上,竞争使用总线。

  • 碰撞检测(Collision Detection,CD)

    每个发送帧的站点在发送帧的同时检测碰撞,所谓“边听边说”。一旦发现总线上出现碰撞现象,立即停止发送,退避一段随机的时间后再次发送。

    注意,CSMA/CD协议规定冲突检测必须在帧发送过程中完成,即在帧完成发出以前发送帧的站点应该持续进行碰撞检测。这是因为CSMA/CD协议本身是不可靠传输协议,不支持确认以及重发,一旦帧在发出后出现了碰撞现象,帧的发送方是无从得知的,所以必须在完成发送前确保发送的帧不会遭遇碰撞,或者在发送完成时发送方能够确认该帧已遭遇碰撞。

    以太网采用的正是CSMA/CD协议,但加强了碰撞检测的概念。在以太网中,当发送帧的站点检测到碰撞后,除了立即停止发送以外,还会继续发送32比特或48比特的人为干扰信号(Jamming Signal,依据IEEE 802.3标准),以尽可能让其他的所有站点均能检测出碰撞。这种措施被称为强化碰撞。


CSMA/CD协议存在碰撞窗口的问题,碰撞窗口也被称为争用期。

争用期(Contention Period):如果不进行碰撞检测,那么每个站点在发送帧后的一小段时间内,所发送的帧都存在碰撞的可能性。这一小段时间具体为多久是不确定的,取决于另一个发送帧的站点到本站点的距离,但可以确定的是这小段时间不会超过总线的端到端往返传播时延(RTT)。争用期是这样一个时间段,在此期间内站点对介质的访问存在潜在的竞争,可以用公式 表示。

考虑下述CSMA/CD协议的应用场景:站点A需要发送一段数据,那么站点A首先会将数据封装成帧,完成帧的封装后检查总线是否已空闲至少96比特时间,如果不是则等待并持续检查(对于因特网而言还会同时发送32比特或48比特的人为干扰信号),如果是或等待期间检查发现总线已空闲至少96比特时间,则立即在总线上发送该帧。

由于以太网的数据链路层仅提供无确认、无重传的不可靠传输服务,因此若帧开始发送后站点A不进行任何动作,则站点A无从得知帧是否能够顺利抵达、是否将与其他帧发生碰撞。可是这又并非是不可能发生的情形,例如站点B与站点A同时发送帧,那么来自站点A的帧与来自站点B的帧率就很有可能发生碰撞。因此,自站点A开始发送数据为起点,还需要在争用期内持续检测是否存在碰撞现象,如果在整个争用期内均未检测到碰撞才能确认本次传输成功。

显然,以太网中发送帧的站点越多,RTT越长,导致争用期也”水涨船高“,发生碰撞的概率越大,所以共享式以太网不能连接过多的主机,并且使用的总线也不应过长。带宽为10Mbps的以太网规定争用期为51.2μs(512比特发送时间),理想情况下其最长总线长度为 但考虑到信号衰减等现实因素,规定其总线长度实际上不能超过2500m。


为什么带宽为10Mbps的以太网不去规定争用期为256比特发送时间或1024比特发送时间,而偏偏规定为512比特发送时间呢?这是因为以太网为了确保在最大传播延迟(争用期)内能够检测到碰撞,规定最小帧长为64字节。因此,争用期的设定是为了配合最小帧长,以保证碰撞检测的有效性。

首先讨论规定最小帧长的必要性与如何规定最小帧长。这里首先要强调一个背景知识:一个帧包含了若干比特,但发送站点只能串行发送帧内的比特,因此发送是一个需要若干比特时间的持续过程,而非瞬间完成的状态。

规定最小帧长是为了解决“晚期碰撞”问题,即在帧发送完成后仍可能发生的碰撞。这个情况很难完全避免,但只要能保证发送帧的站点在结束发送时能够知晓发送的帧是否遭遇碰撞,该问题即可迎刃而解:假设站点A正发送帧,那么帧应该足够长,才能确保所有其他站点都能够检测到站点A正在使用总线发送帧,从而使那些正在发送帧的其他站点停止发送,并且其他站点停止发送前的那些已发送的比特在到达站点A、被站点A检测到时,站点A应当正在发送帧,这样才能确保站点A知晓自己正在发送的帧遭遇了碰撞,从而立即停止发送该帧,等待一段随机的时间后再次发送。对于以太网而言,在停止发送帧后,还会发送若干比特的人为干扰信号。这样就可以基本保证发送的帧不会遭遇碰撞,或者发送方已知发生了碰撞,并且能够择期重发。

综上所述,可以用一句话简而言之地概况设定最小帧长的意义:确保发送时间覆盖争用期。

通过上述分析可知,对于带宽为10Mbps的以太网而言,其最小帧长的计算公式为 规定最小帧长还有两个好处:

  • 当发送方在争用期内没有检测到碰撞,换言之发送方已经发送了64字节但仍未检测到碰撞,那么该帧剩余的字节一定不会遭遇碰撞,因为已发送的字节将遍历剩余站点并抑制剩余站点的发送。

  • 当发送方检测到碰撞而停止发送帧时,已发送的内容在理论上不可能超过64字节,因此接收方可以仅根据帧的长度方便地判断其有效性。任何小于64字节的帧都被视为无效帧,接收方会直接将其丢弃,从而避免处理因碰撞或其他错误导致的无效数据。

如果需要发送的帧内数据量很小,则需要填充一些字节,使帧长不小于64字节。


CSMA/CD协议规定了最小帧长,同时也规定了最大帧长。规定最大帧长的目的是避免一个发送方发送过长的帧从而长时间占用信道。当然,早期网络设备的缓冲区容量有限,无法处理超长帧,这也是设计最大帧长的原因之一。


前文提到,如果站点在发送帧时检测到了碰撞,那么最后应当退避一段随机的时间后再次发送。这里给出CSMA/CD协议中退避与退避时间的具体实现——CSMA/CD协议的截断二进制指数退避算法(Truncated Binary Exponential Backoff)。


这里计算CSMA/CD协议的信道利用率。记帧发送成功所需时长为 ,在最极端情况下单程端到端的传播时延为 ,则争用期为 。在最好的设想下,如果各主机发送的帧均不会产生碰撞,总线一旦空闲达到96比特时间就立刻有主机发送帧,那么发送一帧占用总线时间 ,帧发送花费时间 ,所以计算得信道的极限利用率 。如果记 ,那么

可以看出,要提高以太网的信道利用率,则参数 应尽量大,这意味着 应尽量小,所以以太网端到端的距离不应过长;同时 应尽量大,所以以太网的帧长应尽量大。


以下为CSMA/CD协议的帧发送流程图:

以下为CSMA/CD协议的帧接收流程图:

随机接入 · CSMA/CA协议

CSMA/CA是为无线局域网设计的MAC协议,其中CA是Collision Aovidance的缩写,即碰撞避免。

CSMA/CA的目的是解决CSMA/CD在无线局域网中碰撞检查的尴尬局面。无线局域网也能载波监听(CS)与多址接入(MA)技术,但并不适合进行碰撞检测(CD),原因主要有:

  1. 无线信道传输条件特殊,信号强度的动态范围相当大,无线网卡接收到信号的强度往往是远远小于信号发送时强度的,例如可能相差百万倍,因此在无线网卡上实现碰撞检测对硬件设备的要求非常高。

  2. 即使硬件能够实现无线局域网上的碰撞检测,考虑到无线电波传播的特殊性,例如隐蔽站问题(Hidden Node Problem),进行碰撞检测的意义也并不明显。

基于以上原因,IEEE 802.3标准规定,该标准下无线局域网使用CSMA/CA协议,在CSMA的基础上新增碰撞避免(CA),而不再实现碰撞检测。

由于到避免所有碰撞是不可能的,而且无线信道误码率较高,因此IEEE 802.3标准还是用了数据链路层的停止-等待协议作为确认机制,确保数据能被正确接收。

IEEE 802.3标准对CSMA/CA协议定义了两种不同的媒体接入控制方式:

  • 分布式协调功能(Distribution Coordination Function,DCF)

    在DCF媒体接入控制方式下,不考虑中心控制站点,每个站点使用CSMA/MA协议争用信道以获取发送权,是IEEE 802.3标准中CSMA/CA协议的默认方式。

  • 点协调功能(Point Coordination Function,PCF)

    在PCF媒体接入控制方式下,使用集中控制的接入算法控制各站点数据的发送,一般在接入点(Access Point,AP)实现集中控制,是IEEE 802.3标准中CSMA/CA协议的可选方式。通常较少使用该方式。


IEEE 802.3标准规定了所有站点必须在持续检测到信道空闲一段指定的时间后才能发送帧,这段时间被称为帧间间隔(Interframe Space,IFS)。帧间间隔有长短之分,是长是短取决于要发送的帧的类型。

  • 高优先级帧发送前需要等待的时间应较短,从而优先获得发送权。
  • 低优先级帧发送前需要等待的时间应较长,并且如果一个低优先级帧还来得及发送,而其他站点的高优先级帧已发送至信道上,则信道处于忙碌状态,此时低优先级帧必须再推迟发送,从而避免碰撞。

常用的两种IFS:

  • 短帧间间隔(Short Interframe Space,SIFS)

    SIFS是最短的帧间间隔,时间长度为28μs,用以分隔同属一次对话的各帧。一个站点应当能够在一段SIFS时间内从发送方式切换至接收方式。

    使用SIFS的帧类型包括:ACK,CTS,过长的MAC帧分片后的数据帧,回答AP探寻的帧,PCF方式中AP发出的任何帧。

  • DCF帧间间隔(DCF Interframe Space,DIFS)

    DIFS比SIFS长的多,时间长度为128μs,在DCF方式中用于发送数据帧与管理帧。

CSMA/CA协议的工作原理图:


如上图所示,CSMA/CA协议中也存在退避算法的实现。那么在什么情况下不必使用退避算法、什么情况下必须使用退避算法呢?

  • 不使用退避算法:如果站点检测到信道处于空闲状态,同时所发送的数据帧不是在成功发送完上一个数据帧以后立即连续发送的,则不需要使用退避算法。
  • 以下情形必须使用退避算法:
    • 准备发送数据帧时,检测到信道处于忙碌状态;
    • 准备重传数据帧时;
    • 在成功发送完上一个数据帧后,准备连续发送下一个帧时。这样做的目的是避免一个站点长时间占用信道。

CSMA/CA协议的退避算法:


为了尽可能减少CSMA/CA协议中碰撞的概率并降低碰撞发送后带来的影响,IEEE 802.3标准采用了“信道预约”和“虚拟载波监听”两种机制。

信道预约机制(RTS/CTS)

在无线网络中,由于存在“隐蔽站”问题(即某些站点之间无法直接监听到彼此的信号),可能导致多个站点同时发送数据而产生碰撞。为了解决这一问题,CSMA/CA协议引入了信道预约机制,主要通过发送RTS(Request to Send)和CTS(Clear to Send)控制帧来实现。

具体流程如下:

  1. 发送RTS帧:当一个站点准备发送数据时,首先监听信道是否空闲;如果空闲,等待一个DIFS时间后,发送一个RTS帧给目标站点。该帧中包含了此次通信所需的时间信息。
  2. 接收CTS帧:目标站点在接收到RTS帧后,如果信道空闲,等待一个SIFS时间后,发送一个CTS帧作为应答,同样包含通信所需的时间信息。
  3. 数据传输:源站点在接收到CTS帧后,等待一个SIFS时间后,开始发送数据帧。
  4. 确认ACK(Acknowledgement):目标站点在成功接收到数据帧后,等待一个SIFS时间后,发送一个ACK帧,表示数据接收成功。

通过上述步骤,其他站点在监听到RTS或CTS帧后,会意识到信道将被占用,从而避免在此期间发送数据,减少了碰撞的可能性。

虚拟载波监听机制(Network Allocation Vector, NAV)

除了物理载波监听(即通过检测信道上的信号强度判断信道是否被占用)外,CSMA/CA协议还引入了虚拟载波监听机制,以进一步减少碰撞的发生。

虚拟载波监听是通过维护一个名为网络分配向量(Network Allocation Vector,NAV)的计时器来实现的。当一个站点接收到包含“持续时间”字段的帧(如RTS、CTS或数据帧)时,会根据该字段的值设置或更新自己的NAV。NAV表示信道将被占用的时间长度,在此期间,站点将认为信道忙碌,不会尝试发送数据。

这种机制使得即使站点没有直接监听到物理信号,也能通过解析帧中的“持续时间”字段来判断信道的使用情况,从而避免在信道被其他站点占用时发送数据,减少了由于“隐蔽站”问题导致的碰撞。

CSMA/CA协议通过结合信道预约机制和虚拟载波监听机制,有效地减少了无线通信中的数据碰撞,提高了网络的整体性能。信道预约通过RTS帧与CTS帧在通信前进行协调,避免了多个站点同时发送数据;虚拟载波监听则通过NAV计时器,使站点能够根据帧中的“持续时间”字段判断信道的占用情况,即使在无法直接监听到信号的情况下,也能避免发送数据,从而减少了碰撞的发生。

MAC地址、IP地址与ARP

MAC地址是以太网的MAC子层所使用的地址,MAC子层属于数据链路层,因此MAC地址是数据链路层中的地址。

IP协议是TCP/IP体系结构下网际层所使用的地址。

ARP协议是TCP/IP体系结构下网际层所使用的协议。当已知设备被分配的IP地址时,通过ARP协议即可通过该IP地址获取到设备的MAC地址。

应注意,IP地址与ARP协议是属于TCP/IP体系结构下的网际层,而非数据链路层,只是为方便讨论MAC地址,在本章中一并研究。


MAC地址

如果使用点对点信道的数据链路层,当然就不需要地址了,因为只有两个主机,“不是我,就是你”。

但是,对于使用广播信道的数据链路层而言则必须需要地址,否则无法区分各个主机,会出现“我究竟要发给谁?”与“究竟是谁发的?是发给我的吗?”这样的问题。

换句话说,当多个主机连接在同一个广播信道上时,要实现两个主机间的通信,则每个主机都必须有一个唯一标识,即数据链路层地址。同时,每个主机发送的帧中必须携带标识发送主机和接收主机的地址,每个主机收到帧后比对接收主机地址是否与本机地址相同,相同则接受帧,否则丢弃帧。这类地址是用于MAC(媒体接入控制)的,因此常被称为MAC地址。

MAC地址一般被固定存储在网络适配器(Network Interface Controller、Network Card,也称为网卡)的电可擦可编程只读存储器EEPROM中,所以MAC地址也称为硬件地址。应当注意,MAC地址是对网络上各接口的唯一标识,而非网络上各设备的唯一标识。

IEEE(电气和电子工程师协会)通过其注册管理机构(Registration Authority)分配MAC地址块,确保全球唯一性。每个制造商获得一个唯一的组织唯一标识符(OUI),即MAC地址的前24位。制造商在此基础上分配后续的 24 位,以生成完整的48位MAC地址(也称为EUI-48)。这种机制旨在确保全球范围内的唯一性。

尽管有上述机制,以下情况可能导致 MAC 地址的全球唯一性无法保证:

  1. MAC 地址随机化:为增强用户隐私,现代操作系统(如Android和iOS)在连接Wi-Fi网络时,会为每个网络生成随机的本地MAC地址。这些地址不含OUI,无法确保全球唯一性。
  2. 软件修改(MAC 地址欺骗):用户或软件可以通过修改驱动程序或系统设置,更改设备的MAC地址。这种修改可能导致多个设备使用相同的MAC地址,尤其是在虚拟化环境中。
  3. 制造商重复分配:在极少数情况下,制造商可能由于错误或管理不善,重复分配了相同的MAC地址,导致冲突。

综上所述,MAC地址并不总是全球唯一的。

有些时候MAC地址还被称为物理地址,例如在Windows操作系统中。然而,这并不意味着MAC地址属于网络体系结构中的物理层,这里“物理地址”中的“物理”是指硬件层面。

在现代x86架构计算机中,主板上装载的仅支持有线网络的网卡(如不带Wi-Fi功能的板载以太网卡,这类网卡通常为板载网卡)或仅支持无线网络的网卡(如Intel AX210无线网卡)通常各自仅拥有一个MAC地址,分别用于标识其有线或无线网络接口。同时集成无线Wi-Fi模块与以太网接口的网卡则通常具有两个独立的MAC地址,分别用于标识其有线和无线网络接口。交换机与路由器通常拥有更多的网络接口,单台设备上也就拥有更多的MAC地址。

现代智能手机通常配备多个网络接口,包括Wi-Fi和蓝牙模块,每个模块都有独立的MAC地址。事实上,为增强用户隐私,Android和iOS 等现代智能手机操作系统实现了MAC 地址随机化,为设备连接的每个 Wi-Fi 网络生成不同的 MAC 地址。蜂窝网络则使用IMEI(国际移动设备识别码)和IMSI(国际移动用户识别码,位于SIM芯片中)进行设备和用户的唯一标识,与MAC地址无关。


以采取IEEE 802.3标准局域网的MAC地址格式——EUI-48为例(EUI为Extended Unique Identifier的缩写,意为扩展的唯一标识符),该MAC地址由48个比特组成,即六个字节。其中,前三个字节是组织唯一标识符(Organizationally Unique Identifier,OUI),由生产网络设备的厂商向IEEE的注册管理机构申请;后三个字节为网络接口标识符,由获得OUI的厂商自行决定分配。

MAC地址的标准表示方法是每4个比特写为一个十六进制数,这样就有12个十六进制数,每两个十六进制数作为一组,组与组之间用短横线间隔,例如在Windows中就是这样展示MAC地址的。但也存在其他表示方法,例如在Linux、Android与iOS中就将短横线替换为了冒号。还有的软件将每四个十六进制数作为一组,每组间用小数点作为间隔。

EUI-48的目标寿命是100年——直到2080年,但鼓励提前采用EUI-64,这是一种由64比特组成的MAC地址。

在标准的 EUI-48(即 MAC 地址)格式中,每个地址由 6 个字节(Octet 0 至 Octet 5)组成,每个字节包含 8 位(bit)。在表示和传输这些位时,存在明确的编号和顺序规范。

位编号(Bit Numbering):在每个字节中,位从最高有效位(Most Significant Bit,MSB)到最低有效位(Least Significant Bit,LSB)编号为b7至b0。

传输顺序(Transmission Order):

  • 字节顺序:在网络传输中,首先发送地址的第一个字节(Octet 0),然后依次发送后续字节,直到第六个字节(Octet 5)。
  • 位顺序:在每个字节内,按照从最低有效位(b0)到最高有效位(b7)的顺序发送。

每个字节的比特标号从高位到低位定义为b7至b0,但发送时却从b0开始逐比特传输,造成该情况的原因主要是硬件电路在时序控制上更易实现低位先发(LSB-first)。


MAC地址中第一个字节的最低位(b0)取0时表示单播地址、取1时表示组播地址,次低位(b1)取0时表示该EUI时系全球管理、取1时表示该EUI时系本地管理。特别地,如果MAC地址的所有字节中的所有比特均为1,则表示广播地址。这里补充一下单播、组播以及广播的概念:

在以太网通信中,MAC帧的目的地址决定了数据的传输方式。根据目的MAC地址的类型,通信方式可分为单播(Unicast)、组播(Multicast)和广播(Broadcast)。

单播(Unicast)

定义:单播是指数据帧从一个源设备发送到一个特定的目的设备,即一对一的通信模式。

特征:

  • 目的MAC地址:唯一标识接收设备的MAC地址。
  • 地址格式:MAC地址的第一个字节的最低位(即第8位)为0,表示该地址为单播地址。
  • 通信方式:只有目的设备会接收并处理该帧,网络中的其他设备会忽略该帧。

示例:一台计算机向另一台计算机发送文件时,使用单播通信。

组播(Multicast)

定义:组播是指数据帧从一个源设备发送到一组特定的目的设备,即一对多的通信模式。组播也被译为多播。

特征:

  • 目的MAC地址:表示一个特定的组播组,只有加入该组的设备会接收并处理该帧。
  • 地址格式:MAC地址的第一个字节的最低位(即第8位)为1,表示该地址为组播地址。
  • 通信方式:源设备只需发送一份数据,网络设备会将其复制并转发给所有加入该组的设备。

示例:视频会议系统中,主讲人向多个参会者同时发送视频流时,使用组播通信。

广播(Broadcast)

定义:广播是一种特殊的组播形式,目的MAC地址为FF:FF:FF:FF:FF:FF,表示将数据发送给网络中的所有设备。

在不考虑误码等情况的理想状态下:

  • 如果主机要发送单播帧,则应在帧首部的目标地址字段中填入目标主机的MAC地址,源地址字段填入本机的MAC地址,继续封装成帧然后发送该帧。同一个广播信道上的主机都会收到该帧,但这些主机的网卡会对帧的目标主机字段进行校验,如果与本机MAC地址不匹配则丢弃该帧,否则接受该帧并将其交由上层处理。

  • 如果主机要发送组播帧,则应在帧首部的目标地址字段中填入目标组播MAC地址,源地址字段填入本机的MAC地址,继续封装成帧然后发送该帧。同一个广播信道上的主机都会收到该帧,这些主机的网卡将对帧的目标主机字段进行校验,判断该组播帧的目标组播MAC地址是否被包含于自己的组播组列表中,如果不包含则丢弃该帧,否则接受该帧并将其交由上层处理。

    为主机配置多播组列表进行私有应用时,不得使用共有标准多播地址。

  • 如果主机要发送广播帧,则应在帧首部的目标地址字段中填入目标主机的MAC地址,源地址字段填入广播地址,即FF:FF:FF:FF:FF:FF,继续封装成帧然后发送该帧。同一个广播信道上所有主机的网卡都应接受该帧并将其交由上层处理。


IP地址简介

这里只简略介绍IP地址的作用,IP地址的详细研究将在下一章网络层中给出。

IP地址是因特网上的主机与路由器所使用的地址,用于标识网络编号与主机编号。因此,IP地址能够区分不同的网络,但MAC地址不具备此功能。如果只是一个单独的内部网络、不需要接入因特网,那么只使用MAC地址区分各主机是可行的,但如果主机所在的网络需要接入因特网,则需要同时使用IP地址与MAC地址。

从网络体系结构的角度看,主机发送帧与接收帧过程中IP地址与MAC地址的关系如下图所示:

在数据包转发过程中,

  • 源IP地址与目的P地址保持不变;
  • 源MAC地址与目的MAC地址随链路或网络改变。

这样设计的目的见下一章网络层,如下图所示:


ARP

在IPv4以太网中,主机之间通过MAC地址(数据链路层地址)通信,而网络层使用IP地址标识设备。当IP数据包需要发送到目标主机时,必须通过目标主机的MAC地址完成最终投递。ARP(Address Resolution Protocol,地址解析协议)是一种网际层协议,其作用正是将目标IP地址解析为同一本地网段内的MAC地址。

特别注意,ARP本身只能在一段链路或一个网络上使用,不可跨网络使用。如果需要跨网络通信,即当目标IP位于其他网络时,主机会通过ARP获取默认网关的MAC地址,数据由网关路由进行转发。同时,本小节的讨论限定在IPv4,因为IPv6已不再采用ARP。

ARP的大体工作流程如下:

  1. 查询ARP缓存表

    每台主机或路由器均拥有本地ARP高速缓存表,发送方主机首先检查本地ARP缓存表(存储IP与MAC的映射关系),若存在目标IP对应的MAC地址,则直接发送数据。

  2. 广播ARP请求

    若缓存中无记录,发送方会向局域网封装ARP请求报文为一个独立的广播以太网帧并进行广播,询问IP地址目标主机的MAC地址。

    ARP请求报文包含本机IP地址、MAC地址以及目标主机的IP地址。

  3. 单播ARP响应

    只有IP匹配的目标主机会回复ARP请求包,IP不匹配的其他主机将丢弃该广播帧。目标主机的网卡收到广播帧后会将其上交上层处理,上层的ARP进程将解析ARP请求报文,发现询问的IP地址恰为本机IP地址,于是将ARP响应报文封装为一个独立的单播以太网帧并发送以告知请求主机有关自己的MAC地址。

    ARP响应报文包含本机的IP地址与MAC地址。

  4. 更新缓存并通信

    发送方收到将IP-MAC映射存入ARP缓存表(有效期通常为2-20分钟),后续通信直接使用缓存地址。

ARP报文长度为28字节,包含以下字段:

字段 说明
硬件类型(HTYPE) 网络类型(如以太网为1)
协议类型(PTYPE) 网络层协议(如IPv4为0x0800)
操作类型(OP) 1表示ARP请求报文,2表示ARP响应报文,3表示RARP请求报文,4表示RARP响应报文
发送方MAC/IP 源设备的MAC和IP地址
目标MAC/IP 目标设备的MAC和IP地址(请求包中目标MAC为全0,等待填充)

补充:ARP请求包:目标MAC地址为00:00:00:00:00:00,操作类型为1;RP响应包:填充目标MAC地址,操作类型为2。ARP缓存条目具有时效性,过期后需重新请求。用户可通过命令手工管理。

ARP高速缓存中每条记录保存IP地址、MAC地址与操作类型三个字段,其中类型分为动态动态与静态两种。

  • 动态:表示该记录由主机自动获取,生命周期默认为2分钟。设置生命周期的原因是IP地址与MAC地址的对应关系并非固定,例如目标主机若更换了网卡,IP地址通常不会因此改变,但MAC地址一定会发生变化。
  • 静态:表示该记录由用户手工配置,生命周期由操作系统决定,例如有可能在系统重启后删除。

ARP的一些扩展协议:

  • RARP(逆向ARP):根据MAC地址查询IP地址,用于无盘工作站启动时获取IP。
  • InARP(反向ARP):用于帧中继等网络,通过已知硬件地址解析协议地址。
  • 免费ARP(Gratuitous ARP):主机主动广播自身IP-MAC映射,用于IP冲突检测或更新其他主机的缓存。

ARP的安全风险与规避手段:

  • ARP欺骗(ARP Spoofing)

    攻击者伪造ARP响应包,将自身MAC地址绑定到他人IP地址,导致数据被劫持或监听(如中间人攻击)。

  • ARP缓存溢出

    通过发送大量虚假ARP请求耗尽设备缓存,引发拒绝服务(DoS)。

  • 防御措施

    • 静态绑定:通过命令手动配置IP-MAC映射。
    • 动态检测工具:使用ARP防火墙或网络监控工具实时拦截异常流量。

在IPv6中,ARP的功能被NDP(Neighbor Discovery Protocol,邻居发现协议)取代。NDP基于ICMPv6实现,除地址解析外,还支持路由器发现、地址自动配置等功能,并且通过组播优化效率,能够避免广播风暴。

集线器与交换机

集线器(HUB)

  • 定义:一种只在物理层工作的设备,本质是多端口中继器,对收到的信号进行放大与转发,用于连接多台计算机形成共享式以太网,是早期以太网的互联设备。一般集线器有且仅有少量的容错能力与网络管理功能,例如断开因出现故障而不断发送帧的网卡的连线,从而使整个以太网仍能正常工作。

    使用集线器的以太网在逻辑上仍然是一个总线型网络,其每个接口仅简单地转发比特,不进行碰撞检测,因此各站仍共享总线资源,常使用CSMA/CD协议。

  • 传输方式:采用广播机制。例如,当主机A向主机B发送数据时,集线器会将数据复制到所有端口,仅目标主机B接收,其他主机丢弃数据。这种机制导致

    • 带宽共享:所有设备竞争同一信道,实际可用带宽为总带宽/设备数。
    • 冲突频发:多设备同时发送数据时需依赖CSMA/CD协议检测冲突并重传。
  • 核心特性:

    • 广播传输:所有端口共享同一信道,数据帧会被发送到所有连接设备。
    • 半双工模式:同一时刻只能单向传输数据,易引发冲突。
    • 无智能学习能力:无法识别目标MAC地址,依赖CSMA/CD协议处理冲突。
    • 作用域:使用集线器拓展以太网时,同时扩大了广播域与冲突域。
  • 带宽利用率:所有设备共享总带宽(如10Mbps集线器连接5台设备,每台平均带宽仅2Mbps)。

交换机(Switch)

  • 定义:一种即插即用的数据链路层设备,但涉及物理层,基于MAC地址实现数据帧的定向转发。三层交换机还集成了路由功能,支持IP地址转发与子网互联,因此还额外涉及到网络层。

  • 传输方式:存在存储转发(Store-and-Forward)与直通转发(Cut-Through)两种方式,

    1. 存储转发:交换机首先将整个数据帧(包括帧头、载荷和帧校验序列FCS)缓存到端口的内存缓冲区中;接着检查帧的完整性(如CRC校验),若发现错误(如FCS不匹配),则直接丢弃该帧,避免传输无效数据;最后确认帧无误后,查询MAC地址表确定目标端口,再转发帧。
      • 严格错误检测:通过完整接收数据帧并执行CRC校验,确保仅转发无错误帧,避免网络传输无效数据。
      • 缓存与速率适配:支持不同速率端口的协同工作(如将10Mbps低速包缓存后通过100Mbps端口转发),解决异构网络环境带宽差异问题。
      • 高级功能支持:因缓存完整帧,可执行深度包检测(DPI)、QoS优先级标记、VLAN标签处理等复杂操作。
      • 较高交换时延:延迟与帧长度成正比(例如1500字节帧的延迟远高于64字节帧),且需经历串并转换与完整校验流程。
      • 缓存依赖:需较大的端口缓冲区(如64KB)存储完整帧,可能导致高负载时缓冲区溢出风险。
    2. 直通转发:交换机采用基于硬件的交叉矩阵,在读取帧的目标MAC地址(前6字节)后立即开始转发,无需等待整个帧接收完成。
      • 无差错校验:跳过CRC校验,即使帧后续部分存在错误,仍会继续传输。
      • 极低交换时延:转发决策在收到目标MAC地址后即刻做出,延迟固定(与帧长度无关)。

    两种传输方式存在一些共有的特性:

    • MAC地址表(帧交换表)学习:通过记录源MAC地址与端口的映射关系,建立动态转发表。MAC地址表的学习是通过自学习算法自动、逐渐建立起来的。
    • 定向转发:若目标MAC地址存在于表中,数据仅发送至对应端口;若未知则泛洪(Flooding)至除帧进入交换机的接口以外的其他所有端口。
    • 端口带宽独立分配:每个端口作为独立冲突域,在全双工模式下设备独占端口带宽(如1Gbps端口双向各1Gbps)。交换机的数据转发依赖MAC地址表精准单播或广播泛洪,通过内部交换矩阵实现多端口并行通信。在背板带宽充足的条件下,设备间传输路径相互独立,单设备带宽不会因网络规模扩大而降低;若多设备同时向同一目标端口发送数据,目标端口带宽可能成为瓶颈,但源端口带宽仍独立保留。此架构避免了共享信道竞争,但整体性能受限于交换芯片容量与队列调度机制。
    • 冲突域隔离:每个端口为一个独立冲突域,多设备可并行通信。
  • 核心特性:

    • 单播/组播定向转发:通过MAC地址表精准定位目标端口,避免广播风暴。

    • 全双工模式:支持端口同时收发数据,消除冲突域。

    • 带宽独占性:每个端口拥有独立带宽,总吞吐量为各端口带宽之和。

    • 作用域:使用交换机拓展以太网时,默认情况下只扩大广播域,不会扩大冲突域,这是因为交换机的每个接口都是一个独立的冲突域,能够对冲突域进行隔离。

      利用VLAN(虚拟局域网)技术可以进一步优化广播域管理,将物理广播域划分为多个逻辑广播域,限制广播流量传播范围。

  • 带宽利用率:每端口独占带宽(如10/100Mbps交换机,每个端口可独立以100Mbps速率传输)。


这里讨论以太网交换机自学习与转发帧的流程。为简化讨论,这里假设各主机已知网络中其他各个主机的MAC地址,不需要使用ARP。

初始时,发送方主机向一台交换机的接口发送帧,希望该交换机将该帧转发给接收方主机。该交换机首先会进行登记,将发送方主机的源MAC地址与接收到帧的接口号作为一条记录写入帧交换表中,这一过程就是交换机的自学习。接着该交换机尝试在帧交换表中查询接收方主机的MAC地址,但由于此时帧交换表中只存在一条刚刚才通过自学习得到的发送方主机的记录,因此无法查到接收方主机的MAC地址,于是将该帧泛洪至除帧进入交换机的接口以外的其他所有端口。

如果该交换机的一个接口还连接了另一台交换机的接口,那么在泛洪时也会将该帧泛洪至另一台交换机。另一台交换机收到帧后,同样会进行自学习,将发送方主机的源MAC地址与本交换机接收到帧的接口号作为一条记录写入帧交换表中。如果同样无法在帧交换表中查询到接收方主机的MAC地址,则再次进行泛洪。

当接收方主机的MAC地址存在于帧交换表中,交换机就能根据MAC地址查到应该向哪一个接口定向转发帧。接收方主机不一定直接与本交换机相连,但交换机能够通过链的方式逐渐将帧转发至接收方主机——形象地说,这是因为在自学习的过程中交换机记住了帧从何而来,那么在转发时帧也将到那里去。

如果帧交换表中多个MAC地址对应了同一个接口,例如多个主机通过集线器相连、该集线器再连接到交换机的某接口上,那么当帧从这些MAC地址而来并且仍到这些MAC地址而去时,交换机将丢弃该帧,因为同一链路上的主机可以直接通信,并不需要由交换机再转发一次。

与ARP相同,帧交换表中的各记录同样具有生命周期,此举是考虑到MAC地址与交换机接口的对应关系不是亘古不变的。


这里讨论STP(Spanning Tree Protocol,生成树协议)。为什么我们需要STP呢?因为上文描述的流程其实是存在问题的,对于链式相连的交换机情景是成立的,但没有考虑存在网络环路时的严重后果。

为了提升以太网的可靠性,我们需要一定的冗余链路,例如在一个存在三台交换机的小型网络中将交换机两两相连,这样即使其中一台交换机与另一台交换机的连接因为某种原因断开了,整个网络中的所有主机仍能进行通信。但如果不加处理,冗余的链路将很容易致使形成网络环路,这将带来以下灾难性的问题:

  • 广播风暴(Broadcast Storm)

    广播风暴是指在计算机网络中,广播帧在网络设备(如交换机、路由器)之间不断转发,形成一个不断增大的广播数据流。这种现象常常导致网络带宽的极度消耗,造成网络性能下降,甚至导致设备崩溃或网络瘫痪;同时主机收到重复的广播帧,大量消耗主机资源。

    网络中存在环路是广播风暴的主要成因之一,例如一个有三个路由器的小型网络中,路由器A首先通过广播将帧转发至路由器B与路由器C,路由器B将其转发给路由器C、路由器C将其转发给路由器B……帧将在各交换机间反复转发,并且存在两条方向相反的转发链。

  • 帧交换表震荡(MAC Address Table Flapping)

    帧交换表震荡是广播风暴的影响之一,是指交换机的MAC地址表中某个MAC地址在短时间内频繁地在不同端口之间切换,导致交换机无法确定该MAC地址的实际位置,从而影响数据帧的正确转发。

    仍以三个路由器的小型网络为例,路由器A的接口首先收到直接来自发送方主机的帧,这时在帧交换表中的登记是正确的,但发生广播风暴后路由器A不断从路由器B与路由器C再次收到该帧,于是路由器A不断更新帧交换表中的记录,但无论如何更新都只是错误的结果。

STP的作用就是确保网络在逻辑拓扑结构上是无环路的树型。

虚拟局域网

默认情况下,使用以太网交换机将隔离冲突域、扩大广播域。随着交换式以太网规模的增加,广播域也随之增大,而一个巨大的广播域会导致广播时大大增加网络和主机的资源开销,并提升管理与维护的难度。目前许多协议栈仍会频繁使用到广播,因此必须尽量避免过大的广播域。

拆分广播域可以达到在不改变原有物理链路的前提下减小广播域范围的目的,通常考虑两种方式:使用网络层设备路由器或基于交换机的VLAN(Virtual Local Area Network,虚拟局域网)。由于路由器相对昂贵,而交换机成本较低,因此VLAN是一个不错的选择。

网络层

网络层概述

网络的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。如果各个不同的网络只需要在其内部进行通信,那么实现物理层与数据链路层就可以了;但如果希望将各个不同的网络互连起来、形成更大的互联网,就需要网络层互连设备路由器。

网络层要关注的问题是:

  • 向运输层提供可靠传输服务还是不可靠传输服务;
  • 如何解决网络层寻址问题;
  • 路由选择的问题。

网络层提供两种服务:面向连接的虚电路服务与无连接的数据报服务。

面向连接的虚电路服务的可靠通信由网络自身保证,而不是由用户主机保证。在通信前,必须首先建立名为虚电路(Virtual Circuit)的网络层连接,通信双方沿着已建立的虚电路发送分组。虚电路是一条逻辑上的连接,分组应沿着这条逻辑连接按照存储转发的方式传送,并没有建立一条物理连接,此处区别于采用电路交换的电话通信。目的主机的地址仅在连接建立阶段使用,之后的每个分组的首部只需要携带一条虚电路的编号即可。如果在采取这种通信方式的同时使用可靠传输的网络协议,则可以使所发送的分组最终均能够无差错且按序、不丢失、不重复地正确抵达接收方。通信结束后,需要释放之前所建立的虚电路。

许多广域分组交换网络都使用面向连接的虚电路服务,但因特网采用的则是无连接的数据报服务。相比面向连接的虚电路服务,无连接的数据报服务十分显著的一个特征是可靠通信由用户主机保证,而非由网络自身保证。当两台主机通信时,网络层之间不需要建立连接,每个分组都可以经由不同的路由传送,因此每个分组的首部均必须携带目的主机的完整地址。这种通信方式所传送的分组可能误码、丢失、重复或失序。但正因为网络本身不提供端到端的可靠传输服务,所以网络中的路由器不需要很复杂的实现,相比于电信网的交换机价格十分低廉。

简而言之概况因特网采用无连接的数据报服务的设计哲学:将负责的网络处理功能置于因特网的边缘(指用户主机和其内部的运输层),而将相对简单但应尽力而为的分组交付功能置于因特网的核心。

IPv4地址概述