目录

  • 第一章 绪论
    • 1.1 计算机网络概述
      • 什么是计算机网络
      • 计算机网络的分类
      • 计算机网络标准
      • 计算机网络的发展
    • 1.2 计算机网络的性能和体系结构
      • 计算机网络性能
        • 比特率
        • 带宽
        • 时延
        • 时延带宽积
        • 信道利用率
        • 网络利用率
      • 计算机体系结构
        • 物理层
        • 数据链路层
        • 网络层
        • 传输层
        • 会话层
        • 表示层
        • 应用层
        • TCP/IP协议
  • 第二章 物理层和数据通信基础
    • 2.1 数据通信基础知识
      • 物理层基本概念
      • 什么是数据通信
      • 一些概念
      • 数据传输方式
      • 数字信号常用的编码方式
      • 限制码元在信道上的传输速率的原因
      • 奈氏准则和香农公式的区别
    • 2.2 常见网络传输介质
      • 导引型传输介质
        • 双绞线
        • 同轴电缆
        • 光纤
      • 非导引型传输介质
    • 2.3 信道的复用技术
      • 频分复用
      • 时分复用
      • 波分复用
      • 码分复用
        • 例题
    • 2.4 宽带接入技术
  • 第三章 数据链路层和局域网技术
    • 3.1 数据链路层功能
    • 3.2 点到点信道的数据链路
      • PPP协议的特点
      • PPP协议的帧格式
      • PPP协议的工作状态
    • 3.3 广播信道的数据链路
      • 局域网的数据链路层
      • CSMA/CD协议
      • 使用集线器的星型拓扑
      • 以太网的信道利用率
      • 以太网的MAC层
    • 3.4 高速以太网
      • 100BASE-T 以太网
      • 吉比特以太网
      • 10吉比特以太网
      • 宽带接入
    • 3.5 扩展以太网
      • 在物理层扩展以太网
      • 在数据链路层扩展以太网
    • 3.6 VLAN(虚拟局域网)
  • 第四章 网络层与网络互连技术
    • 4.1 分类的IP地址
    • 4.2 ARP
    • 4.3 IP数据报格式
    • 4.4 ICMP
    • 4.5 划分子网
    • 4.6 构造超网
    • 4.7 路由器
    • 4.8 RIP
    • 4.9 OSPF
    • 4.10 外部网关协议BGP
    • 4.11 VPN和NAT
  • 第五章 传输层
    • 5.1 传输层概述
      • 进程之间的通信
      • 网络层与传输层的区别
      • 传输层的两个主要协议
      • 传输层的端口
      • TCP/IP传输层端口
    • 5.2 UDP
      • UDP需要实现的功能
      • UDP提供的服务
      • UDP适合哪些应用
      • UDP协议的特点
      • UDP基于端口的分用
      • UDP报文的首部格式
    • 5.3 TCP概述
      • TCP最主要的特点
      • TCP面向流的概念
      • TCP的连接
      • Socket不同的含义
    • 5.4 TCP报文格式
      • TCP报文段的首部格式
      • 为什么要规定MSS
      • 其他选项
    • 5.5 可靠传输的工作原理
      • 理想的传输条件特点
      • 停止等待的协议
      • 自动重传请求ARQ
      • 信道利用率
      • 流水线传输
      • 连续ARQ协议
      • TCP可靠通信的具体实现
    • 5.6 TCP可靠传输的实现
      • 以字节为单位的滑动窗口
      • 发送缓存
      • 发送缓存与接收缓存的作用
      • 接收方发送确认
      • 超时重传时间的选择
      • 如何设置超时值
      • 加权平均往返时间
      • 超时重传时间RTO
      • TCP确认的二义性
      • Karn算法
      • 修正的Karn算法
      • 选择确认SACK
      • RFC 2018的规定
    • 5.7 TCP的流量控制
      • 利用滑动窗口实现流量控制
      • 零窗口特例下死锁的解决
      • TCP的传输效率
      • 发送方糊涂窗口综合征
      • Nagle算法
      • 接收方糊涂窗口综合征
      • TCP流量控制小结
    • 5.8 TCP的拥塞控制
      • 拥塞控制的一般原理
      • 网络拥塞产生的后果及原因
      • 拥塞控制所起的作用
      • 开环控制和闭环控制
      • 监测网络拥塞的指标
      • TCP的拥塞控制方法
      • 网络拥塞的判断依据
      • TCP拥塞控制算法
      • 拥塞窗口的调节策略:AIMD
      • TCP拥塞控制流程图
      • 发送窗口的上限值
    • 5.9 TCP的传输连接管理
      • 传输连接的三个阶段
      • 连接建立前的准备
      • TCP的三次握手

第一章 绪论

1.1 计算机网络概述

什么是计算机网络

计算机网络就是将分布在不同地理位置上,具有独立工作能力的计算机、终端设备及其附属设备用通信设备和通信线路连接起来,并配置网络网线和通信协议以实现数据的传输和资源共享的系统就叫做计算机网络。

计算机网络的分类
  • 按照传输介质,我们把计算机网络分为有线网和无线网
  • 按照经营方式,分为公用网络和专用网络,比如互联网和某银行的内部网络系统
  • 按照服务类型,分为电信网,有线电视网络和计算机网络
  • 按照网络地域规模,分为个域网,局域网,城域网,广域网
  • 按照拓扑结构,分为总线型网络,星型网络,环形网络,树型网络和网状网络
  • 按照资源管理,分为对等网络(QQ)和客户服务器网络(电子邮件系统)
计算机网络标准

所有的互联网设备都遵守RFC才能进行网络的互通,所以RFC是不自称的实际标准

计算机网络的发展
  • 第一阶段:从单个ARPANET向互联网发展(互联网的前身是ARPANET)
  • 第二阶段:为了解决互联网上数据流急剧增长后如何进行更快速的分组转发,更加有效地利用网络资源,互联网交换点IXP应运而生(允许两个网络直接相连并交换分组数据,不需要第三个网络充当中转站)
  • 第三阶段:2007年美国苹果公司推出iphone手机,2008年谷歌公司推出安卓手机系统,由此互联网发展进入移动互联阶段

1.2 计算机网络的性能和体系结构

计算机网络性能
比特率

是主机在数字信道上传输数据的速率,单位是bit/s

带宽

是指网络中某通道传输数据的能力,单位时间内网络中某信道所能通过的最高数据率,单位是bit/s

时延

指数据从网络中的一端到网络中的另一端所需要的时间

  • 传输时延:是数据从节点传输到传输媒体所需要的时间,所以传输时延又称为发送时延
  • 传播时延:是电磁波在信道中需要传播一定距离而花费的时间
  • 处理时延:是指主机或路由器在收到分组为处理分组(如解析部首,提取数据,差错检验或查找路由)所花费的时间
  • 排队时延:分组在路由器输入输出队列中排队等待处理所经历的时间
  • 往返时延(RTT):是指从发送方发送数据开始到发送方接到来自接收方的确认经历的总时间 ,可以利用这个指标来判断网络的通断性,测试网络时延,计算数据包丢失率等
时延带宽积

是传播时延和带宽的乘积,若发送端连续发送数据,则当发送的第一个比特即将到达终点时,发送端就已经发送了时延带宽积个比特

信道利用率

指出某信道有百分之几的时间是被利用的

网络利用率

是全网络信道利用率的加权平均值

网络的利用率越大,网络所产生的时延也越大

计算机体系结构

是网络层次结构模型与各层协议的集合 。

网络体系只是对计算机网络应该实现的功能进行精确的定义,而这些功能应该用什么样的软件和硬件去完成只是实现问题

层次:是网络层次结构中的基本组成部分

实体:是每层中实现该层功能的软件或硬件,也实现与另一个系统中同等实体通信的协议

同等实体:互相通信的一对节点在同一层中相应的实体

协议:计算机网络为进行数据交换需要建立的规则、标准和约定

  • 在某一具体的层次中指导实体之间通信的规则
  • 在n层中为实现n层的服务实体应如何与另一层中的同等实体继续信息的交换
  • 定义了所交换信息的格式
  • 语义规则:定义了发送者和接收者必须完成的操作

SAP:即Service Access Point,是上层访问下层所提供服务的点。在计算机体系结构中,下层是为相邻上层提供服务的,而下层对它的所有上层都是透明的。

如果进程A要与进程B进行联系,进程A首先通过主机A的操作系统调用实现应用层的软件应用模块,应用层模块将主机A的数据传输到表示层,表示层再向会话层传输直至物理层,物理层通过连接主机A和路由器A的传输介质,将表示数据的比特序列传输到路由器A的物理层,物理层接收到主机A的数据后交由链路层检查数据是否传输错误,如果没有错误路由器A则将数据传送给网络层,通过下一步判断要将数据传送给哪一个路由器,如果传送的是路由器B,那么路由器B通过同样的方法将数据传送回主机B,主机B将数据从物理层依次向上传输到应用层,再从应用层传送到进程B,这样就通过计算机网络完成了一次数据交换。

物理层

产生并监测电压中带有数据的电气信号或者对应的光学、电磁信号,物理层传递电气信号的载体被称为位流或比特流

数据链路层

位于OSI模型的第二层,主要作用是把网络层接收到的数据分割成物理层可以传输的帧,直接控制着网络层和物理层的通信

网络层

位于OSI模型的第三层,主要负责将分组从原端传递到目的端,这可能要跨越多个网络

传输层

负责将报文准确、可靠、顺序地进行原端到数据端的传输

会话层

在网络中不同用户之间建立和维护通信信道,重复两个节点之间的会话,决定通信是否被中断以及中断时从何处重新发送

表示层

为开放系统的两个数据之间提供格式变换服务,使应用层理解所交换数据的意义

应用层

直接面对用户进程,主要功能是为应用系统提供能访问OSI系统的接口和服务

目前我们实际采用的计算机网络系统是TCP/IP协议

TCP/IP协议
  • 开放的协议标准
  • 独立于特定的计算机硬件和操作系统
  • 独立于特定的网络系统,可以运行在局域网、广域网,适用于网络互连
  • 所有运行TCP/IP协议的设备都具有唯一的网络地址
  • 标准的应用层协议可以提供多种网络服务

我们所学的是5层模型

第二章 物理层和数据通信基础

2.1 数据通信基础知识

物理层基本概念

物理层并不是连接计算机的具体物理设备,也不是负责信号传输的具体物理媒体

数据链路层将数据比特流传送给物理层,物理层将比特流按照传输媒体的需要进行编码,信号通过传输媒体传输到下一个节点的物理层,为数据链路层提供一个统一的数据传输服务。

物理层的主要任务就是确定与传输媒体的接口的一些特性

  • 机械特性(物理特性):指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等。

  • 电气特性:指明在接口电缆的各条线上出现的电压的范围

  • 功能特性:指明某条线上出现的某一电平的电压的意义

    用来定义接线器每一引脚的作用,可以理解为物理设备每一个装置的作用是什么

  • 过程特性:知名对于不同功能的各种可能时间的出现顺序

什么是数据通信

数据通信是指由源点产生的数据流按照一定的通信协议在信道中传送到终点的过程,数据通信以数据传输为基础,包括数据传输和数据交换以及传输前后的数据处理

源系统:

  • 源点:源系统中的源点是生成数据的设备,如计算机输出的数字比特流,源点生成的数据要通过发送器编码后才能在传输系统中进行传输。
  • 发送器:典型的发送器是调制器,它将计算机输出的数字比特流转化成可在电话线上传输的模拟信号。
  • 传输系统:指传输线或网络系统

目的系统:

  • 接收器:用来接收来自传输系统的信号,并将其转化成终点可处理的信息,典型的接收器是解调器,它把来自传输线上的模拟信号进行解调,还原出发送端发送的数字比特流
  • 终点:获取来自接收器数据的设备
一些概念
  • 数据:是消息的一种表示形式,是传达某种意义或信息的实体。通信系统中,数据有数字数据和模拟数据
  • 信号:是消息的载体,比如电信号、光信号等等。在通信系统中,消息是通过电信号来传递的,通信系统中的电信号分为数字信号和模拟信号
  • 模拟信号:物理量的变化在时间上和幅度上都是连续的,把表示模拟量的信号称为模拟信号,声音、温度、速度等都是模拟信号
  • 数字信号:物理量的变化在时间上和数值(幅度)上都是不连续(或称为离散)的,把表示数字量的信号称为数字信号

无论是模拟数据还是数字数据,都可以编码成模拟信号或者数字信号,我们选择何种编码方式取决于可能提供的传输媒体和通信设施

  • 码元:当用某时域的波形表示数字信号时,所代表的不同离散数值的基本波形称之为码元。码元所携带的信息量是不固定的,由调制方式和编码方式来决定。n进制,就有n种码元,1个码元携带log2(n)位二进制数,一个码元就是一个脉冲信号
数据传输方式
  • 按照传输数据的时空顺序

    并行传输:数据在同个信道上同时传输的方式,适用于要求速率高的短距离数据传输,计算机内部便采用此种方式。

    串行传输:数据在信道上按位次传输的方式,适用于远距离数据传输

  • 按照收、发端实现同步的方式

    异步传输:被传输的每一个字符一般都附加有一个起始位和一个停止位,异步传输的发送器和接收器的时钟不是同步的

    同步传输:按位进行传送,数据块以帧作为整体传输,每一帧建立同步标志,建立帧同步,通步传输的发送器和接收器的时钟是同步的

  • 按照传输过程中是否搬移频谱

    基带传输:不搬移基带信号频谱的传输方式,最简单最基本的传输方式,低电平表示0,高电平表示1

    频带传输:利用调制解调器搬移信号频谱的传输方式,搬移频谱的目的是为了适应信道的频率特性

数字信号常用的编码方式

  • 不归零制编码:高电平表示1,低电平表示0,容易产生传播错误
  • 归零制编码:每一跳都有变化,上升位1,下降位0
  • 曼彻斯特编码:每一位中间都有一跳变化,从低跳到高表示0,从高跳到低表示1,这种编码方式每位中间的跳变既可表示数据,又可作为时钟,能够自同步
  • 差分曼彻斯特编码:每一位中间都有一跳变化,每一位开始时有跳变表示0,无跳变表示1,位前跳变表示数据,位中跳变表示时钟,这种编码方式即可做到数据分离又便于提取
限制码元在信道上的传输速率的原因
  1. 信道能够通过的频率范围

    信号中有很多高频分量往往不能够通过信道

    奈氏准则:是1924年奈奎斯特推导出的准则,是指在假定的理想条件下,为了避免码间串扰,码元的传输速率的上限值。

    公式: C=2WlogM (W是带宽,M是码元数,C是速率)

  2. 信噪比

    实质: 正常声音信号与信号噪声信号比值

    公式:(dB)= 10 * log10(S/N) (dB)

    香农公式: C=W log2(1+S/N)

    是香农(Shannon)提出并严格证明的“在被高斯白噪声干扰的信道中,计算最大信息传送速率C公式。W是信道带宽(赫兹),S是信道内所传信号的平均功率(瓦),N是信道内部的高斯噪声功率(瓦)。

    当规定的信道容量超过香农公式的信道速率时,误码率大大提高。

奈氏准则和香农公式的区别

奈氏准则指出,码元传输速率是受限的,针对的是波特率,且是在理想状态下提出的;香农定理则给出了信息传输速率的极限,是针对比特率的,且是带宽受限且有高斯白噪声干扰的信道极限 。也就是说,奈氏准则认为码元编码足够好,就不会限制信息传输速率,而香农定理认为信息传输速率是有极限的。

2.2 常见网络传输介质

传输介质是指发送器和接收器之间的物理通路,可以分为两大类

  • 导引型传输介质:电磁波被导向沿着某一媒体传播,包括双绞线、同轴电缆、电力线和光纤等
  • 非导引型传输介质:电磁波在大气层外层空间或海洋中进行的无线传播,包括短波,地面微波,卫星微波以及光波传输等
导引型传输介质
双绞线

双绞线是目前以太网中使用频率较高的一种传输介质,它是将具有绝缘保护层的两根铜导线按一定密度绞缠在一起形成的线。多根这样的线再绞合成电缆状,绞合密度,纽绞方向和绝缘材料等就成为了影响双绞线特性阻抗的因素。

双绞线适用于模拟传输或数据传输,传输距离一般为几到几十公里。

  • UTP:非屏蔽双绞线,家庭中使用频率最高的线材,主要用于传输带宽在250HZ以下,没有特殊性能要求的普通网络系统
  • FTP:用铝箔屏蔽的双绞线,这种线缆支持带宽能力强并且具备一定的抗干扰能力,能够减小信号衰减,此外最明显的特性是采用可回收的低烟材料,环保型强
  • STP:是指独立屏蔽双绞线。该双绞线外有一层铝箔层,并且每对线都有单独铝箔屏蔽层,能够减小信号衰减,每4对线合并后外部还包裹着一层金属编织网屏蔽,STP网线主要适用于高速网络或者高保密要求的场所传输
  • SFTP:双屏蔽双绞线,在STP铝箔层的基础上增设了编织网,通常采用铝镁丝或镀锌铜材料,外层采用PVC材料,相对STP有两层屏蔽层,以及屏蔽层之间多了绝缘隔离结构,屏蔽环境磁场,抗干扰能力更强,内部信号衰减程度更低,适用于特殊环境的专业工程布线中

双绞线的接口线序标准包括568A和568B两种。

无论使用哪种类别的双绞线,衰减都随频率的升高而增大。使用更粗的导线可以减少衰减,却增加了导线的重量和价格。

同轴电缆

有寿命长、容量大、传输稳定、外界干扰小和维护方便等优点,按内外导体尺寸不同分为中小微三种规格,按特性抗阻的不同分为50欧姆的基带同轴电缆和75欧姆的宽带同轴电缆,基带同轴用来传送基带信号,距离可达1000米,传输速率为10Mbps,宽带同轴是有线电视的标准传输电缆,传送频分复用的宽带信号,信号频率可高达300-400MHZ,距离可达100km。

局域网发展初期广泛应用基带同轴,现在宽带同轴只要用于有线电视网

光纤

是一种新型的光波导,实际应用中有三种光纤

  • 单模光纤

    光线的直径减小到只有几个光波长的量级,可以使光线一直向前传播,不会产生多次反射,带宽极宽,适用于大容量远距离传输

  • 多模光纤

    可以存在多条不同角度入射的光线在一条光纤中传输,适合近距离传输

光纤的优点:

  • 通信容量大
  • 传输损耗小,中继距离长
  • 抗雷电和电磁干扰性能好
  • 无串音干扰,保密性好
  • 体积小,重量轻
非导引型传输介质
  1. 微波中继站

    多路复用、射频工作和中继接力是地面微波传输的三个基本的特点,远距离传输则采用中继方式。两中继站之间的距离一般在40-60km

  2. 短波传输(无线电波)

    短波可沿地球表面以地波形式传播数百千米

  3. 卫星通信

    卫星通信采用微波波段,俗称卫星微波,利用人造地球卫星作为中继站来转发电磁波,从而实现两个或多个地球站之间的通信,分为同步卫星通信和移动卫星通信。

2.3 信道的复用技术

复用:把一个物理信道按一定机制划分为互不相干扰影响的逻辑信道,每个逻辑信道各自为一个通信过程服务,每个逻辑信道均占用物理信道的通信容量

(a)采用单独信道,利用率比较低,(b)采用共享信道的方式,在信道入口处A1,B1,C1按照一定的策略把业务复用到同一条信道上,到了信道的出口进行解复用,分发给A1,B1和C1

频分复用

整个带宽被分成了n个频带,可以分配给不同的用户,这些用户可以同时进行通信。

频分复用在无线通信中有着广泛的应用,如上图所示,可以在一个信道中传送三种信号。

在同样的时间,占用不同的带宽资源

这里的带宽是频率带宽,而不是数据的发送速率

时分复用

将时间划分为一段段等长的时分复用帧,我们也称之为TDM帧。每一个时分复用的用户在每一个TDM帧中占用固定序号的时隙,而且每一个用户占用的时隙是周期性地出现,这个周期就是TDM帧的长度。我们把TDM信号也称为等时信号。

不同的时间,占用同样的频带宽度

但是时分复用存在传输时延和利用率不高的问题,所以采用动态时分复用

波分复用

就是光的频分复用,是用一根光纤来同时传输的光的多载波信号,光波的分复用一般采用光的复用器和分用器分别置于光纤的两端,实现不同光波的耦合和分离。在发送端通过复用器将不同光波耦合在一起,在传输过程中光信号会不断减弱,需要通过光放大器对光信号进行放大,在接收端通过分用器对光信号进行分离。

码分复用

是利用码序列相关性实现的多址通信,基本思想是靠不同的地址码来区分的地址,用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰,这种系统发送的信号有很强的抗干扰能力。

码片:在码分多址中,每一个比特时间划分为m个短的间隔,我们把它称为码片

每个站被指派一个唯一的m比特的码片序列,比如发送比特1,则发送自己的m比特的码片序列,如发送比特0,则发送该码片序列的二进制反码,每个站分配的码片序列不仅必须各不相同,而且还必须互相正交(规格化内积为0)

在CDMA中是使用42位的伪随机码,重复的可能性为4.4万亿分之一。

在图中我们可以看到,S站和T站都要发送110三个比特,分别使用自己的码片进行编码后,把信号发送出去,在接收端收到的是S和T发送信号的叠加,接收端是用S站码片对收到信号的各个分量进行规格化内积,对S站发送的信号解码得到110,而对T站解码得到的是噪声信号。

所以如果要计算某站发送为1还是0,计算方法为将接收站信号与该站码片序列进行规格化内积,并乘以码片序列数分之一,得到为1则发出信号为1,得到为-1则发出信号为0,得到为0则没有发送

例题

共有四个站进行码分多址CDMA通信。四个站的码片分别为 A:(-1 -1 -1 +1 +1 -1 +1 +1) B:(-1 -1 +1 -1 +1 +1 +1 -1) C:(-1 +1 -1 +1 +1 +1 -1 -1) D:(-1 +1 -1 -1 -1 -1 +1 -1 ) 现收到这样的码片序列:(-1 +1 -3 +1 -1 -3 +1 +1)问哪个站发送数据了?发送数据的站发送的1还是0?

A:1-1+3+1-1+3+1+1=8

B:1-1-3-1-1-3+1-1=-8

C:1+1+3+1-1-3-1-1=0

D:1+1+3-1+1+3+1-1=8

故A点发送的是1,B点发送的是0,C点没有发送,D点发送的是1.

2.4 宽带接入技术

用户要连接到互联网,必须先连接到某个网络服务商,在互联网初期用户大多是利用电话线,通过调制解调器连接到服务商。为了提高用户的上网速率,近年来已经有多种宽带技术进入到用户的家庭,从宽带接入的媒体来看可以划分为两大类:有线带宽接入和无线带宽接入。

  • 有线带宽接入

    有线网络接入技术包括光纤到户FTPH,以太网同轴电缆,双绞线的DSL以及古老的拨号上网

  • 无线带宽接入

    WIFI、4G、5G以及卫星广域覆盖

接入场景包括家庭接入网、机构(学校、公司等)以及移动接入网络

  • DSL

    数字用户线DSL中典型的有ADSL,也就是非对称的数字用户线路,它在电话线上产生三个信息通信,一个高速下行通道,用于用户下载信息,一个中速双工通道,一个普通的老式电话服务通道,并且这三个通道可以同时工作。非对称性是指它的上下行速率不对称:24-52Mbps的下行速率以及3.5-16Mbps的上行速率。目前这种方式在我国使用的比较少,我国已广泛升级为FTTH方式,但在国外出于对老旧房屋保护的原因,仍存在DSL和同轴电缆接入。

  • HFC

    混合光纤同轴电缆(HFC)是一种结合光纤与同轴电缆的宽带接入网,是一种以频分复用为基础,综合应用数字传输技术、光纤和同轴电缆技术的智能宽带接入网,是有线电视和电话网结合的产物。从接入用户的角度看,它经过双向改造有线电视网,但从整体上看,它是以同轴电缆网络为最终接入部分的宽带网络系统,这种接入方式在我国并没有大范围的普及。

  • FTTH

    是我国和大多数前进地区采取的接入方式,分为有源光纤网络(AON)和无源光纤网络(PON),现在广泛使用的是PON,iusye’ju不需要配置电源,易于维护。

第三章 数据链路层和局域网技术

3.1 数据链路层功能

图中可以看出H1到H2所经过的网络是可以多种的,从协议层上来看数据的流动如下面的图,仅从数据链路层帧的流动是水平方向的.

链路:是一条无源的点到点的物理线路段,中间没有任何其他的交换节点。而一条链路只是一条路径的组成部分。

数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

也有人把链路分为物理链路和逻辑链路,物理链路就是上面所说的链路,逻辑链路就是上面所说的数据链路,是物理链路加上一些协议。

数据链路层传送的数据单位是帧

常常两个对等的数据链路层之间画出一个数字管道,而在这条数字管道之内传送的数据单位是帧。

数据链路层协议:

  1. 封装成帧

    就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,确定帧的界限。首部和尾部的一个重要作用就是进行帧定界。

当数据是由可打印的ACSLL码构成的文本文件时,帧定界可以使用特殊的帧定界符。控制字符SOH放在帧的最前面,表示帧的开始,另一个控制字符EOT表示帧的结束。

为了使接收方能够准确区别出一帧的开始和结束,就要实现帧同步,而实现帧同步通常有以下几种方法:

  • 字节计数法

    以一个特殊字符表征一帧的开始(如SOH控制字符),并有一个专门字段来标明一帧的字节数。可以从特殊字符区别帧的开始,并通过专门字段获知该帧的字节数,从而确定帧的终止位置,采用这种帧同步的方法不会引起数据信息与其他控制信息的混淆。

  • 字符填充法

 使用特定字符鉴定一帧的起始与终止,为了不使信息域中产生与特定字符相同的字符,可在特定字符前填充一个转义字符如ESC加以区别,从而达到数据的透明。由于这种方法的特定字符依赖于所采用的字符编码集,故兼容性较差。
  • 比特填充法

    用一组特定的比特组合标志一帧的起始与终止。具体方法是在帧的传输起始标志和结束标志之间每当出现5个连续的1之后发送器就会插入一个附加的0,一旦有5个1模式出现就会检查第6个比特,若为0该比特将被删除,若为1且第七个比特为0那么这个组合被认为是标志字段,若第六位和七位都为1,则此时处于异常的终止状态。

  • 违法编码法

    曼彻斯特编码和差分曼彻斯特编码属于违法编码法。不需要任何的填充技术便能实现数据的透明,但它只适用于采用冗余编码的特殊编码环境。

  1. 透明传输

如果数据中某个字节的二进制代码恰好和SOH或者EOT一样,数据链路层就会错误地找到帧的边界。解决透明传输可以采用字节填充

发送端的数据链路层在数据中出现控制字符SOH或EOT前面插入一个转义字符ESC,接收端的数据链路在将数据送往网络层之前删除插入的转义字符,如果转义字符也出现在数据当中,那么应当在转义字符前面插入一个ESC,当接收端收到连续的两个转义字符时就删除前面的一个。

  1. 差错检测

    在传输过程中可能会产生比特差错,1可能变成0,0也可能变成1,为了保证数据传输的可靠性,在计算机传输数据时必须进行各种差错检测的措施。

    ==差错控制是数据链路层的主要功能之一,但不是数据链路层所持有的功能。==在网络层和传输层也都有差错控制能力,只是差错控制的对象不同。

    数据链路层的差错控制是保证相邻节点之间的传输差错控制在允许的最小范围之内。在数据链路层传输的帧中,广泛使用了循环冗余检验(CRC)

在发送端先把数据划分为组,假定每个组有k个比特,假设待传输的一组数据M为101001,我们再在M后添加供差错检测用的n位冗余码一起发送,在M后添加n位0,得到K+N位的数,除以事先选定好的n+1位的除数P,得出的商是Q,余数是R,R是n位。将余数R作为冗余码拼接在数据M后面发送出去,也就是一共有k+n位数据。在数据后面添加上的冗余码称作帧检验序列FCS。

循环冗余检验CRC和帧检验序列FCS并不等同

CRC是一种常用的检错方法,而FCS是添加在数据后面的冗余码。

把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数R,若R为0则传输过程无差错,接受帧,若R不为0则丢弃帧。

但这种方法并不能确定是哪一个或者哪几个比特出现了错误。

CRC只能做到无差错接受

模2运算:异或运算,相同为0,不同为1

3.2 点到点信道的数据链路

PPP协议的特点

对于点对点的链路,目前使用最广泛的链路层协议是点对点协议——PPP协议。PPP是1994年正式成为因特网的标准协议,用户使用拨号电话线接入互联网时,用户计算机和RSP进行通信时所使用的数据链路层协议就是PPP协议。

PPP是一个面向连接的协议,它使得第二层链路能与多种物理层连接,它支持同步和异步电路,也能在半双工和全双工模式下工作,它允许任意类型的网络数据通过PPP协议连接发送。

PPP协议是目前最广泛的广域网协议。

  • 能够控制数据链路的建立
  • 能够对IP地址进行分配和使用
  • 能够同时采用多种网络层协议
  • 能够配置和测试数据链路
  • 能够进行错误检测
  • 有协商选项(对网络层地址和压缩等进行协商)

PPP协议由三个部分组成:

(1)一个将IP数据报封装到串行链路的方法。该方法支持异步、同步链路。需要注意PPP帧当中的IP数据报的长度受到MTU的限制。

(2)链路控制协议LCP。它用来限制、配置和测试数据链路层连接。

(3)网络控制协议NCP。用来支持不同的网络层协议。

PPP协议采用高级数据链路控制协议作为点到点的串行链路上封装数据报的基本方法,采用链路控制协议LCP启动线路测试任选功能的协商后即关闭链接,采用网络控制协议NCP建立和配置不同的网络层协议。PPP协议允许采用多种不同的网络层协议,如IP、IPX协议等,PPP使用NCP对多种协议进行封装。

PPP协议的帧格式

PPP协议帧首部和尾部分别为4个字段和2个字段。标志字段F为0X7E,地址字段A为0XFF,地址字段实际上并不起作用,控制字段C通常设置为0X03。PPP有一个两字节的协议字段,其数值不同后面的信息字段表示不同。PPP是面向字节的,所有的PPP帧长度都是整数个字节。

  • PPP协议用在同步传输链路时,规定采用硬件来完成比特填充。

    PPP协议采用零比特填充方法,在发送端只要发现信息字段中有5个连续的1就自动填充一个0,接收端每当发现5个连续的1就把后面的一个0删除。

  • PPP协议用在异步传输链路时,使用一种特殊的字节填充法。

    将信息字段中出现的0X7E字节都转变为两字节的序列(0X7D,0X5E),0X7D字节转变为(0X7D,0X5D),如果控制字符中出现数值小于0X20的字符,在该字符前面加入一个0X7D字节,同时改变该字符编码,接收端需要进行逆转换来获取原有的信息。

PPP协议的工作状态

当用户拨号接入RSP时,路由器的调制解调器对拨号做出确认并建立一条从用户个人电脑到RSP的物理连接,PC机向路由器发送一系列的LCP分组,这些分组及其响应选择一些PPP参数并进行网络层的配置。NCP给新接入的PC机分配一个临时的IP地址,使得PC能成为因特网上的一个有IP地址的主机。通信完毕后,NCP释放网络层连接,收回原来分配出去的IP地址,接着LCP释放数据链路层的连接,最后释放的是物理层的连接。可见,PPP协议已经不是纯粹的数据链路层协议,它还包含了物理层和网络层的内容。

PPP提供了建议、配置、维护和终止点到点连接的方法,从开始发起呼叫到最后通信完成后释放链路,PPP的工作可以分为以下四个阶段:

  • 链路的建立和配置协调

    通信的发起方发送LCP帧来配置和检测数据链路,主要用于协商选择将要采用的PPP参数,包括身份验证等

  • 链路质量检测

    在链路建立、协调之后这一阶段是可以选择的

  • 网络层协议配置协调

    通信的发起方发送NCP帧以选择并配置网络层协议,配置完成后,通信双方可以发送各自的网络层协议数据报

  • 关闭链路

    通信链路将一直保持到LCP或NCP关闭链路或发生一些未卜时间(空闲时间超长、用户干预、链路故障等)

3.3 广播信道的数据链路

局域网的数据链路层

局域网主要特点:网络为一个单位所拥有、有限的地理范围和站点数目。

局域网主要优点:具有广播功能、从一个站点可以很方便地访问全网,局域网的主机可以共享连接在局域网上的硬件和软件资源,便于系统的扩展和逐渐地演变,各设备的位置可以灵活地调整和改变,提高了系统的各种性能。

常见局域网的拓扑结构有星形结构,总线型结构和环形结构。

以太网是一种星形局域网,现在大部分局域网都是以太网。

Ethernet V2是世界上第一个局域网产品的规约,诞生于1982年。

IEEE 802.3是第一个IEEE地以太网标准,诞生于1983年。

因为V2与802.3有很小的差别,所以可以将802.3局域网简称为以太网,严格说来以太网应该是指符合Ethernet V2标准的局域网。

为了使数据链路层能更好地适应局域网标准,将局域网的数据链路层拆分成两个子层:逻辑链路控制LLC子层媒体接入控制MAC子层

与接入到传输媒体有关的内容都放到MAC子层,而LLC子层则与传输媒体无关,不管采用何种协议的局域网,对LLC子层来说都是透明的,由于常用的是V2以太网,因此现在LLC子层作用已经不大,很多厂商适配器上只装有MAC协议,没有LLC协议。

网络接口板又称为通信适配器或网络接口卡或网卡,计算机通过适配器和局域网进行通信。适配器的重要功能有:

  • 进行串行/并行转换
  • 对数据进行缓存
  • 在计算机的操作系统安装设备驱动程序
  • 实现以太网协议

最初的以太网是将许多计算机都连接到一根总线上,当初认为这样的方法既简单又可靠,因为线上没有有源器件,以太网采用广播的形式发送。

为了通信方便,以太网采取了两种重要的措施:

(1)采用较为灵活的无连接的工作方式:不必先建立连接就可以直接发送数据,对发送的数据帧不进行编号,也不要求对方发回确认。以太网提供的是不可靠的交付,即最大努力的交付。当收到差错帧就丢弃,其他什么也不做,而差错的纠正由高层来决定。

(2)以太网发送的数据都使用曼彻斯特编码。缺点是工作时频带宽度比原始信道增加了一倍。

CSMA/CD协议

含义:载波监听、多点接入、碰撞检测

载波监听:每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有则暂时不要发送数据,以免发生碰撞。

多点接入:许多计算机以这种方式连接在一根总线上

碰撞检测:计算机边发送数据边检测信道上的信号电压。当几个站同时在信道上发送数据时,总线上的信号摆动值将会增大,当一个站检测到的信号电压超过一定的值时,就认为总线上至少有两个站在同时发送数据,表明产生了碰撞。每一个正在发送数据的站一旦发现总线上发生了碰撞就要立即停止发送,然后等待一段随机的时间再次发送.

争用期:以太网的端到端往返时延2τ 称为争用期或碰撞窗口。

争用期的长度:在10Mbit/s的以太网中,取51.2μ s为争用期的长度。

退避时间:发生碰撞的站在停止发送数据后要推迟一个随机时间才能再次发送数据,减小重传时发送冲突的概率,这个基本退避时间取为争用期2τ.

最短有效帧长:以太网规定最短有效帧长为64字节。凡是小于64字节的帧都是由于异常冲突中止的无效帧。

强化碰撞:发送数据的站一旦发现发生碰撞时立即停止发送数据,再继续发送若干比特为干扰信号,以便让所有用户都知道信道上发生了碰撞。

帧间最小间隔:一个站在检测到总线开始空闲后还要等待9.6μ s才能再次发送数据。

使用CSMA/CD的以太网不能进行全双工通信,只能进行 半双工通信。

使用集线器的星型拓扑

在星型中加入了一个十分可靠的设备叫做集线器。

使用集线器的以太网在逻辑上仍然是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。集线器很像一个多接口的转发器,它工作在物理层,每个端口仅转发比特不检测碰撞。

以太网的信道利用率

一个站在发送帧时出现了碰撞,经过一个争用期2τ之后可能又出现了碰撞,这样经过若干个争用期后这个站发送成功了,成功发送一个帧需要占用的时间为T0+n*2τ,比这个帧发送成功要多n个端到端时延。

n= Min[重传次数,10]

以太网的MAC层

局域网中硬件地址又称为局域网地址或MAC地址,IE802标准规定MAC地址字段可以采用6字节,48位,其中前三个字节称为组织唯一标识符,后三个字节由厂商自行指配,称为扩展唯一标识符,必须保证生产出的适配器没有重复的地址。

MAC帧格式有两种标准:DIX Etherent标准和IEEE的802.3标准。最常用的帧格式是以太网V2的标准

目的地址字段:6字节

源地址字段:6字节

类型字段:2字节,用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。

数据字段:16-1500字节,当数据字段的长度小于16字节时,应在数据字段的后面加入整数字节的填充字段,以确保以太网的MAC帧长不小于61字节

FCS(校验)字段:4字节

以太网V2的MAC帧格式在前面插入了8个字节,其中7个字节为前同步码,用来实现比特同步,1个字节为帧开始定界符,现在市场上流行的都是V2以太网MAC帧。

3.4 高速以太网

高速以太网通常是速率达到或超过100Mbit/s的以太网

100BASE-T 以太网

是在双绞线上传送100Mbit/s基带信号的星形拓扑以太网,仍使用IEEE 802.3的CSMA/CD协议。

100BASE-T 以太网又称为快速以太网,可以在全双工方式下工作而无冲突发生(全双工工作时不使用CSMA/CD协议),保持最短帧长不变,争用期从51.2μ s降到5.12μ s,帧间时间间隔从原来的9.6μ s转变为0.96μ s.

吉比特以太网

允许在1Dbit/s下以全双工和半双工两种方式工作。

在半双工方式下使用CSMA/CD协议,全双工方式下不使用

吉比特以太网工作在半双工方式时,就必须进行碰撞检测,为了保证64字节最小帧长度和100米的网段最大长度,吉比特以太网增加了两个功能

  • 载波延伸

当MAC帧字节不足512时就用一些特殊字符填充在帧的后面,使MAC帧的字节长度增大到512字节。接收端在收到以太网的MAC帧后,要将所填充的字符删除之后才向高层交付

  • 分组突发

当很多短帧要发送时,第一个短帧要用短波延伸的方法进行填充,随后的短帧可以一个接一个地发送,只需留有必要的帧间最小间隔就可以,这样就形成了一串分组突发 ,直到达到1500字节或稍微多一些字节为止

当吉比特以太网工作在全双工方式时,不适用载波延伸和分组突发

10吉比特以太网

10吉比特以太网并非把吉比特以太网速率简单提高到十倍,它的帧格式与10Mbit/s、100Mbit/s和1Gbit/s以太网的帧格式完全相同,也保留了802.3标准规定的以太网最小和最大帧长。

使用光纤为传输媒体

只工作在全双工方式

在10GE之后又制定了40GE/100GE的标准,都是只能工作在全双工方式下。

以太网的工作范围已经从局域网扩大到城域网和广域网,从而实现了端到端的以太网传输,这种工作方式的好处有:

  • 技术成熟
  • 互操作性好
  • 价格便宜
  • 采用统一的以太网格式,简化了操作和管理

以太网从10Mbit/s到100Gbit/s的演进证明了以太网的以下优点:

  • 可扩展性
  • 灵活性
  • 稳健性
  • 易于安装
宽带接入

IE在2001年初成立了802.3工作组,专门研究高速以太网的宽带接入技术问题

以太网宽带接入特点:

  • 提供双向的宽带通信
  • 灵活地进行宽带升级
  • 实现端到端的以太网传输,中间不需要帧格式的转换,提高了数据的传输效率,降低了传输的成本
  • 不支持用户身份鉴别

PPPoE(PPP OVER Ethernet):在以太网上运行PPP“,它把PPP协议与以太网协议结合起来,把PPP帧再封装到以太网中来传输。

我们现在的光纤接入FTTPX就是使用PPPoE的方式

3.5 扩展以太网

在物理层扩展以太网

在物理层扩展以太网可以使用光纤扩展和集线器扩展,使用一对光纤和一对光纤调制解调器很容易使主机和几公里以内的集线器相连接,同时使用多个集线器可以练成更大的多级星型结构的以太网,比如一个学院三个系,各有一个10base-T的以太网,可以通过一个主干集线器把各系的以太网连接起来成为一个更大的以太网,使用集线器扩展以太网可以使原来属于不同碰撞域上的计算机能够进行跨碰撞域的通信,扩大了以太网覆盖的地理范围。

在数据链路层扩展以太网

早期数据链路层使用网桥,现在使用以太网交换机来扩展以太网。

网桥是根据MAC的目的地址对收到的帧进行转发和过滤。网桥可以使各个网段成为隔离开的碰撞域。

集线器和交换机的区别

交换式集线器常称为以太网交换机或第二层交换机,强调这种交换机工作在数据链路层。集线器是在线路上简单地连接所有用电线,从而达到共享总线的目的。逻辑上等于单根电缆的经典以太网,所有不能增加容量,所有的栈共用同一个冲突域。

交换式以太网核心是交换机,它包含了一块连接所有端口的高速配板,交换机只把帧输出到该帧想去的端口就可以了,每个端口都有自己独立的冲突域。

交换机的性能优于集线器,可以同时发送多个帧,考虑到不同数据帧可能在同一时间到达同一个输出端口,交换机必须有缓存以便储存排队序列,直到数据帧被传输到输出端口。

以太网交换机实质上就是一个多接口的网桥,每个接口都直接与主机或另一个以太网交换机相连,并且一般工作在全双工的方式下。

以太网交换机具有并行性,它能同时连接多对接口,多对主机能够同时通信,相互通信的主机都是独栈传输媒体,无碰撞地传输数据。

以太网交换机的接口有存储器,能在输出端口繁忙的时候对到来的帧进行缓存。

以太网交换机也是一种即插即用的设备,内部的地址表是通过自学习的算法自动建立起来的。以太网交换机还使用了专用的结构芯片,用硬件来转发,其转发速率要比用软件转发的网桥快很多。

以太网交换机的优点

  • 用户独享带宽,增加了总容量。例如,对于普通10Mbit/s的共享式以太网,若共有n个用户,则每个用户占有的带宽只有每个带宽的1/n,使用以太网交换机时,虽然每个接口到主机的带宽还是10Mbit/s,但由于一个用户通信时是独占而不是和其他用户共享传输媒体的带宽,所有对于拥有n个接口的交换机,它的总容量变为n倍的10Mbit/s
  • 从共享总线以太网转到交换式以太网时,所有接入设备不需要做任何改动,以太网交换机一般都有多种速率的接口,方便了不同种类的用户。

以太网交换机的交换方式

  • 存储转发方式

    把整个数据帧先缓存后再处理

  • 直通方式

  • 从接受数据帧看开始就立即根据数据真的目的MAC地址进行转发,从而提高了帧的转发速度,缺点是不检查差错,就直接将帧转发出去,有可能将一些无效的帧也转发出去

以太网交换机的自学习功能

以太网交换机通过自学习算法自动维护交换表

交换机自动维护时交换表刚开始是空白的,如图A先向B站发送一个帧,从接口1进入到交换机,交换机收到后先查找它的交换表,如果没有查找到从哪个接口应该转发出这个帧,那么交换机就把这个原地址A和接口1写入交换表中,并向除接口1以外的所有接口去广播这个帧,而C站和D站因为目的地址不一样就丢弃这个帧,只有B站收下这个目的地址正确的帧,这个过程也称之为过滤。从新写入交换表中的A和1可以看出以后不管哪一个接口收到帧只要它的目的地址是A,就应当把它收到的帧从接口1转发出去,B站通过接口3向A站发送一帧,交换机查找发送表发现有A,表明应当从接口1进行转发,于是就把这个帧传送到接口1转发给A,交换表这时新增加一个项目B,3,表明如果以后有发送给B站的帧应当从接口3转发出去,经过一段时间后只要主机C和D也向其他主机发送帧,交换机就会把要发送到C或D的2和4也写入到表中。考虑到有时要在交换机的接口更换主机,或者主机要更换它的网络适配器,这就需要更换交换表中的项目,所以在交换表中每个项目都设定一个有效时间,过期的项目就将被自动删除。

为了防止交换机之间一直兜圈子浪费资源,IE 802.ID标准制定了一个生成树协议STP。不改变网络的实际拓扑结构,但在逻辑上切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构。

3.6 VLAN(虚拟局域网)

虚拟局域网是局域网给用户提供的一种服务,并不是一种新型局域网。

虚拟局域网简称VLAN,是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求,每一个VLAN的帧都有一个明确的标识符指明发送这个帧的计算机是属于哪一个VLAN,概括地说VLAN是将一个物理交换机通过配置变成多个逻辑上的交换机,每一个逻辑交换机连接一个局域网。

VLAN的特点

  • 是基于逻辑的分组。在同一VLAN内和真实局域网相同
  • 不受物理位置限制
  • 不同VLAN不同网段的用户需要借助三层设备通信
  • 减少节点在网络中移动的管理代价

VLAN具有的功能

  • 控制网络广播、提高网络性能

  • 分隔网段、确保网络安全

  • 简化网络管理、提高组网灵活性

当B1向工作组成员发送信息时,工作站V2和V3都会收到B1的消息,B1发送数据时尽管和A1,A2和C1在同一条交换线上,但它们都不会受到B1发送的广播信息,由此可见虚拟局域网限制了广播信息的站数,使得网络不会因为传播过多的网络信息引起广播风暴。

虚拟局域网使用的以太网帧格式

虚拟局域网允许在以太网的帧格式中插入一个四字节标识符,称为VLAN标记,用来指明发送该帧的计算机属于哪一个局域网。插入VLAN标记得出的帧又称为802.1Q帧,以太网MAC帧最大帧长也由原来的1518字节变为1522字节。

创建新的VLAN可以通过几种方式。

通过端口来创建。通过手工的方式我们可以将端口直接加入到新的VLAN中。但是随着网络规模的扩大,交换机接口经常不够用的情况可以实现多台交换机同VLAN的通信。

交换机有两种端口,分别为Trunk端口和Access端口。Access端口只属于一个VLAN,它发送的帧没有VLAN标签,一般用来连接计算机的端口。而Trunk端口可以允许接多个VLAN通过,它发送的帧有VLAN标签,一般用于交换机之间连接的端口。

基于端口的VLAN遵循Port-VLAN原理,通过查找MAC地址表交换机对发往不同VLAN的数据不进行转发。比如A、C在VLAN1,B在VLAN2,A站只能向C站转发数据,不能向B站转发。

802.1Q帧传送时对用户完全是透明的,Trunk端口上默认会转发交换机上存在的所有VLAN数据。Trunk在转发数据前,会在数据上打开一个Tag标签,在到达另一个交换机之后再剥去此标签。

第四章 网络层与网络互连技术

网络层应该提供什么样的服务呢?有两种观点,一种观点借助电信网的成功经验,由网络负责可靠交付,两端设备功能则可以很简单,通信前先建立虚电路保证双方通信所需要的一切访问资源,再使用可靠的网络协议就可以使所发送的分组无差错、按需到达终点,不丢失,不重复。另一种观点是网络层只向上提供简单灵活的,尽最大努力交付的数据包服务,路由器功能比较简单,价格低廉,每个分组都独立发送,与其前后的分组无关,传送的分组可能丢失、出错、重复和失去,也不保证分组传送的时限,如果出错则由传输层负责。

网际协议IP是TCP/IP协议中最重要的协议之一,与IP协议配套使用的还有4个协议,地址解析协议ARP,网际控制报文协议ICMP,网际组管理协议IGMP和反向地址解析协议RARP,其中RARP用到的很少。

整个TCP/IP协议族呈现沙漏计时器形状,有Everything over IP和 IP over Everything的说法

  • Everything over IP:IP可为各式各样的应用程序提供服务
  • IP over Everything:IP协议可以应用到各式各样的网络上

4.1 分类的IP地址

在IP协议中IP地址是一个十分重要的概念。

IP地址就是给每个互联网网络设备分配一个唯一的32位的标识符,由互联网名字和数字分配机构进行分配。

IP地址经过了三个阶段:

  • 分类的IP地址:最基本的编址方法其标准在1981年通过
  • 子网划分:对最基本编址的改进,其标准在1985年通过
  • 构造超网:这是比较新的无编址构造方法,1993年提出后很快就得到了推广应用

每类地址严格意义上是ABC三类,都有两个固定长度的字段组成,第一个字段是网络号,它标志主机所连接到的网络,另一个字段则是主机号,它标志该主机。网络号和主机号共32位,主机号在高网络范围内是唯一的。

IP地址共分为ABCDE五类

  • A类地址:网络号占8位,第一位为0,取值范围为1-126,主机号占24位
  • B类地址:网络号占16位,前两位为10,取值范围为128.1-191.255,主机号占16位
  • C类地址:网络号占24位,前三位为110,取值范围为192.0.1-223.255.255,主机号占8位
  • D类地址:前四位为1110,取值范围为224.0.0.0-239.255.255.255,为多播地址,比如网络直播时所有主机的地址都是多播地址
  • E类地址:前四位为1111,取值范围为240.0.0.-255.255.255.255,保留为以后使用

32位二进制的IP地址不容易记忆,为此我们采用点分十进制记法,每8位一组转换为对应的十进制,十进制数之间加点,提高可读性。

根据IP地址的定义我们可以计算出ABC类地址的网络数以及每个网络中的最大主机数。

  • A类地址最大的可指派网络数为27-2,-2的原因是除去0以及回环地址127,去头去尾,每个网络中的最大主机数为224 -2,减2的原因是全0的主机号表示网络号,全1的主机号表示该网络的广播号

  • B类地址中最大的网络数为214 ,每个网络中最大的主机数为216 -2,减2原因同上。

  • C类地址中最大网络数为221 ,每个网络中的最大主机数为28 -2,减2原因同上。

我们可以看出ABC类每个网络的最大主机数过多,因此就出现了后续的子网划分。

分辨ABC类地址:看第一个十进制数,1-126为A类地址,128-191为B类地址,192-223则为C类地址。

有些特殊的IP地址不分配给设备。

  • 网络号和主机号全0的,源地址可以使用,目的地址不可以使用,它表示在本网络的本主机
  • 网络号为0,主机号正常的,源地址可以使用,目的地址不可以使用,它表示在本网络的某台主机
  • 网络号和主机号全1的地址,源地址不可以使用,目的地址可以使用,它表示只在本网络上进行广播(路由器不会进行转发)
  • 网络号正常,主机号全1的,源地址不可以使用,目的地址可以使用,表示对这个网络上的所有主机进行广播
  • 网络号为127,主机号为非全0或全1的任何书,源地址和目的地址都可以使用,但是它是用来本地软件环回测试的

4.2 ARP

ARP协议能够根据IP地址(网络层)解析出MAC地址(数据链路层)。

网络层及以上使用IP地址,链路层及以下使用MAC地址(硬件地址)

IP地址放在IP数据包的首部,而硬件地址则放在MAC帧的首部。

主机H1和H2通信,中间经过两台路由器R1和R2,在整个通信过程中IP地址以及MAC地址如表所示

源IP地址和目的IP地址一直不变,源MAC地址和目的MAC地址一直发生变化,MAC地址是怎么得到的呢?这就要用到ARP协议

地址解析协议ARP:根据IP地址,解析出在数据链路层使用的MAC地址,因此ARP位于IP协议的下面

  • 不管网络层采用什么协议,在实际链路上传送数据帧时,最终必须使用MAC地址。、
  • 每一台主机或路由器都设有一个ARP高速缓存,存储局域网上的各设备IP地址与MAC地址的映射关系

当主机A想要向本局域网上的某个主机B发送IP数据包时,就先在其ARP缓存中查看有无主机B的IP地址。有就将此MAC地址写入帧,将该帧发往此MAC地址,没有就广播发送一个ARP请求分组,收到ARP相应分组后,将映射写入ARP高速缓存,并将MAC地址写入帧,将此帧发往MAC地址。

ARP请求分组(广播方式发送)包括:

  • 发送方MAC地址
  • 发送方IP地址
  • 全0的目标方MAC地址
  • 目标方IP地址

路由器不转发ARP广播,也就是说ARP只解析在同网段上设备的MAC地址,如果目标地址与发送地址不在同一个网段,发送方收到的将是该网段路由器的MAC地址。

ARP响应分组(单播方式发送)包括:

  • 发送方MAC地址
  • 发送方IP地址
  • 目标方MAC地址
  • 目标方IP地址

ARP高速缓存表

  • 发送请求时捎带自己的映射关系
  • 收到请求后存储自己的映射关系
  • 设有生存时间,以及时更新
  • ARP解析是自动进行的,此过程对用户透明

ARP注意事项

  • 当源MAC地址和目的1MAC地址在同一个网络时,直接解析目的设备的MAC地址
  • 不在同一个网络时,ARP解析出源主机的网关的MAC地址,把分组发送给网关(即路由器),网关再把分组转发给下一跳。

为什么不直接使用MAC地址进行通信?

  • 各式各样的网络使用不同的MAC地址,要使这些网络能够通信必须进行非常复杂的MAC地址转换功能,不现实
  • IP地址能够解决这个复杂的问题。连接到互联网的主机只需要各自拥有唯一的IP地址通信就像连接到同一个网络上那样简单方便,因为解析过程是透明的。

RARP:实现MAC地址到IP地址的转换,除了网上的无盘工作站,通常很少使用,必须设置一个RARP服务器。网管事先将映射关系写入RARP服务器的数据库中,与ARP相同,RARP请求包采用广播方式,响应包采用单播方式。

pc机发送ARP响应时,不需要先收到ARP请求报文,任何一台计算机都可以在局域网上发送自己是IP_A和MAC_A的对应者,因此就出现了ARP攻击。

ARP攻击:

  • ARP欺骗。攻击者向其他主机发出响应,告知了错误的MAC地址,导致ARP表刷新,形成错误的映射关系。
  • ARP流量攻击。利用攻击软件,发送大量ARP的请求和响应,报文中的IP地址和MAC地址均为伪造,随即填入,大量的广播流量会导致网络拥塞。

4.3 IP数据报格式

数据帧包含帧首,数据和帧尾,一个IP数据报由首部和数据两部分组成,没有尾,发送时先发送首部,再发送数据。

首部包括固定部分和可选字段,固定部分的长度为20字节,是所有IP数据包必有的,固定部分的后面是一些可选字段,1-40字节,长度可变,但必须为4字节的整数位,所有可能有填充部分。

  • 首部的第一个字段是版本号,占4位,指IP协议的版本,目前版本号为4(IPV4)

  • 第二个字段为首部长度,占4位,可表示的最大数值是15(单位是4字节),因此首部长度的最大值是60字节。

  • 区分服务占8位,用来获得更好的服务。只有在使用区分服务时,这个字段才起作用,一般情况下不使用这个字段。

  • 总长度占16位,指首部和数据长度之和,单位为字节,最大长度为65535字节,但是不能超过MTU,否则要分片。

  • 标识占16位,是一个计数器,用来产生IP数据包的标识。

  • 标志占3位,只有前两位由意义。最低位是MF,取值为1表示后面”还有分片“,取值为0表示最后一个分片,中间位是DF,只有DF取0才允许分片

  • 片偏移占13位,指出较长的分组在分片后某片在原分组中的相对位置,以8个字节为单位。

  • 生存时间占8位,记为TTL,指示数据报在网络中可通过的路由器数的最大值即最大多少跳。假设初始TTL为3,经过一个路由器就会被减1,当TTL为0时这个IP数据报就会被Internet处理掉。

  • 协议占8位,指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给对应的处理过程。

    IP数据包可以封装多种协议PDU,可以是网络层的ICMP,IGMP以及OSPF,也可以是传输层的TCP和UDP,根据协议号进行区分。

  • 首部检验和占16位,只检验数据包的首部,不检验数据部分,不采用CRC而采用简单的计算方法。

  • 源地址和目的地址都是IP地址,各占4字节

  • IP首部的可变部分是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富,取决于所选择的项目。多个选项拼接,中间无需分隔符,用全0的填充段补齐为4字节的整数倍。增加首部的可变部分是为了增加IP数据报的功能,增加了路由器处理数据包的开销,实际上这些选项很少被使用。

4.4 ICMP

网际控制协议ICMP可以报告IP数据包传输过程中的差错。

为了更高效地转发IP数据包,提高交付成功的机会,在网际层使用了ICMP,是互联网的标准协议,允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP报文封装在IP数据报中,但它并不是高层协议,与IP协议都位于网络层。

ICMP报文的格式:

  • 前4个字节都一样,第一个字段为类型,占1一个字节,第二个字段为代码。占1个字节,第三个字段为检验和占2个字节,后续为ICMP的数据部分,其长度取决于类型

ICMP报文的种类

  • 差错报告报文

当路由器收到TTL为0的报文时,丢弃此报文,并向原点发送超时报文。

参数问题:收到的数据包首段中的数据出现错误,弃此报文,并向原点发送参数问题报文。

路由发送改变路由报文给源点主机,让主机知道下次应该发送报文给另外的路由器。

  • ICMP的前8个字节,包括类型,代码,校验和以及后续的四个字节,其次是出错IP报文的20个字节,然后再提取IP报文的后续8个字节,是为了得到传输层传输口或UDP的端口号以及TCP报文的序号以便汇报给上层。
  • 整个ICMP报文作为IP的数据字段装入IP报文中,发送给源点。

并不是所有的出错报文都通知到源点,对于以下几种情况就不再发送

  • ICMP差错报告报文。

  • 第一个分片的数据报片的所有后续数据报片

  • 具有多播地址D类的数据报

  • 具有特殊地址的数据报

  • 询问报文

ICMP的应用

  1. 分组网间探测Ping

    用来测试两台主机或者路由器之间的连通性。

    基于ICMP询问报文中的回送请求和回送应答报文。

    是应用层直接使用网络层ICMP的例子,没有通过传输层。

    • ping[-t]target_name:不断向目标主机发送回送请求报文,直到用户中断
    • ping[-n count]target_name:由count指定Ping多少次,缺省值(默认值的计算机术语)为4
    • ping[-l size]target_name:数据包大小,默认为32字节,最大值是65,527
    • ping[-w timeout]target_name:指定超时时间间隔,单位为毫秒,默认为4000毫秒
    • target:指定要ping的远程计算机,可以是域名,也可以是IP地址

    测试本机与新浪邮件服务的连通性,所有参数都采用默认值

ICMP与IP协议的关系

192.168.1.10发送请求给192.168.1.20,因为请求报文中无任何实际有意义的数据,通常用abcd等填充,假定标识符为0200,序号为0100,类型值为08,代码为00,校验码为十六进制的4a5c,这些构成ICMP报文,作为IP报文的数据

IP报文中的协议字段取值为01,表示封装的数据为ICMP报文,源地址为192.168.1.10对应的十六进制c0a8010a,目标IP地址为192.168.1.20对应的十六进制c0a80114。

192.168.1.10向192.168.1.20发送应答报文,报文内容与请求报文基本一致,类型值修改为00,校验值也发生了变化

IP报文中的目标地址与源地址互换。

  1. Traceroute/Tracert(追踪从源点到终点的路由)

    在Windows中该命令是tracert,UNIX或路由器中为raceroute。利用IP数据包中的TTL字段和ICMP超时差错报告报文,源点发送的第一个UDP报文TTL值为1,到达第一台路由后将其减1,减为0后第一台路由器将此报文丢弃,并向源点发送超时报告报文,这样就得到了第一台路由器的地址,这样一直继续下去得到剩下所有路由器的地址,当最后一个数据包到达目的主机时,数据报的TTL的为1,主机不转发数据报,也不把TTL减一。但是由于IP数据包中封装的是无法正常交付的UDP数据报,使用了非法的端口号,主机须向源主机发送ICMP终点不可达差错报文,我们就得到了目的主机的IP地址,于是我们就得到了从源点到终点的路径。

    • tracert[-d]traget_name:不解析目标主机的名称

    • tracert[-h]traget_name:指定搜索到目标地址的最大跳数,默认30

    • tracert[-j]traget_name:与主机列表一起的松散源路由

    • tracert[-w]traget_name:指定超时时间间隔,默认单位是毫秒,默认5秒

4.5 划分子网

划分子网的基本思路:从主机号的高位中连续借用若干个子位作为子网号,而主机号也就相应减少了若干个位,这样IP地址就从两级变成了三级。

从主机中借用几位来划分子网呢?我们使用子网掩码来作为标识。

子网掩码是一个非常重要的概念,网络号和子网号对应的部分取1,主机号对应的部分取0

(IP地址)AND(子网掩码)=网络地址

子网掩码中掩的作用是把主机号掩掉。

默认子网掩码

如果ABC类地址没有划分,我们就称为默认子网掩码。

A类默认:8个1和24个0

B类默认:16个1和16个0

C类默认:24个1和8个0

子网划分方法

  • 固定长度子网

    所有子网的子网掩码都是相同的

    B类地址的子网划分

子网号的位数没有15和16这两种情况。

子网号不能占15位,因为此时主机号只剩下1位,主机号只能取0和1这两种特殊情况,子网号也不能占16位,此时就没有主机号了。

不同的子网掩码可能会得到相同的网络地址,但不同的子网掩码的效果是不同的。

等长子网划分方法

  • 确定子网数

  • 根据子网数和获得的IP地址控件确定子网掩码

  • 确定每个子网的网络地址(主机号全0)主机地址范围 广播地址(主机号全1)

  • 为每台主机分配地址

  • 确定范围
    开始的时候子网位数都为0,子网号从0开始往上递增,直至所有的子网位数都为1,计算十进制网络号和广播号时注意后面的主机号全为0或全为1。

  • 变长子网(VLSM)

    所有子网的子网掩码不一定相同,产生不同大小的子网,能够高效分配IP地址。

    例题

    假定已经将172.16.0.0/16进行了子网划分,其中国有一个子网为172.16.32.0/20,现欲将该子网继续划分,要求每个网段50台主机。

    解题步骤:确定主机位:2^N-2>=50得到主机位,得到主机号为6位,新子网号为6位。

虽然划分子网增加了灵活性,减少了地址浪费,但是也减少了能够连接在网络上的主机总数。

4.6 构造超网

虽然划分子网提高了对IP地址的使用,但是还是存在一些问题。

  • B类地址在1994年3月全部分配完毕
  • 主干网上的路由表中的项目数急剧增长
  • 整个IPV4的地址空间最终将全部耗尽

所以采取了一种无分类编址方法,也称为无分类域间路由CIDR,构造超网。

CIDR的特点:

  • 更有效分配IPV4地址
  • 使用网络前缀
  • CIDR地址块

CIDR地址块中的所有网络聚合起来称为路由聚合。

聚合后,一条路由可以代表多条,缩小了路由表。

路由聚合有利于减少路由器之间的信息交换,提高了互联网的性能。

路由聚合也称为构造超网

CIDR虽然不使用子网了,但仍然使用”掩码“。

CIDR记法的其他形式

10.0.0.0/10可以简写为10/10,把点分十进制中地位连续的0省略。

网络前缀的后面加一个星号*的表示方法。

如0000101000*,在星号 * 之前是网络前缀,而星号 *表示IP地址中的主机号,可以是任意合法值。

常用到的CIDR地址块

网络前缀越短,其包含的网络数就越多。

第一个为例:

包含的地址数:2^(32-13),2 ^9/2 ^16=2 ^3个B类地址,2 ^19/2 ^8=2 ^11个C类地址

构造超网

划分子网会使网络前缀变成,构造超网使得网络前缀变短。

这四个地址,前23位都是相同的,所以聚合时前23位都不变,后9位都设为0,得到聚合后的地址为206.0.68.0/23

使用CIDR时,路由表中的每个项目都由网络前缀和下一跳地址组成,在查找路由表时可能会得到不止一个匹配结果。

我们应当从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配。

网络前缀越长,其地址块就越小,路由就越具体。

将目的IP地址和掩码地址转化为二进制,按位相与,结果与目标网络地址相匹配

两个都比较匹配,应该选择两个匹配地址中更具体的一个,即选择最长前缀的地址。

RFC建议

整个世界被分为四个地区,每个地区拥有一段连续的CIDR地址块,这样就可以大大压缩路由表中的项目数。

然而在CIDR提出之前,IP地址的分配与地理位置并没有建立联系,而且将已分配的IP地址回收分配非常困难,因此此方案并未实际实施。

4.7 路由器

交换机:链路层,只对局域网中的帧进行转发

路由器:网络层,用来连接不同的网络,选择最佳路由,提高通信速度

路由器包含两部分:路由选择和分组转发

路由选择部分也叫控制部分,其核心构件是路由选择处理机,任务是根据路由协议构造路由表,同时经常或定期和相邻路由器交换路由信息而不断更新和维护路由表。

分组转发由三部分组成:

  • 一组输入端口
  • 一组输出端口
  • 交换结构

从某个输入端口输入转发表,将分组转发表转发到合适的输出端口,从而转发给下一跳路由器。

转发:基于转发表,将IP数据报从端口转发出去,仅涉及一个路由器。

路由选择:按照分布式算法,根据从相邻路由得到网络拓扑的变化情况,动态改变路由并构造完整的路由表。

路由表基于路由选择算法,而转发表基于路由表,二者采用不同的数据结构,一般我们并不区别。

虽然我们说路由器属于网络层的设备,但其实输入输出端口还涉及物理层和链路层。

输入端口从线路的物理层接收到分组,数据链路层剥去帧首和帧尾,将分组送到网络层的队列中排队等待处理。

分组有两种情况:

  • 路由器间的路由信息,将分组送交路由选择控制机,用来更新和维护路由表。
  • 数据分组,按照分组选择中的目的地址查找转发表,经过交换结构最终到达合适的输出端口。

输入端口设有缓冲区,对数据分组进行查找和转发,是路由器中最重要的功能。

输出端口也设有缓冲区,当分组进入速率大于路由器处理队列速率时,来不及发送的分组就暂存在这个队列中。链路层加上帧首和帧尾,交给物理层后发送到外面的线路。

分组丢弃的原因

  • 路由器中找不到合适的路由
  • 处理速率低,存储空间减为0,缓冲区溢出,丢弃后续分组。

交换结构把数据从一个输入端口转发到某个合适的输出端口,交换结构是交换机的关键构件,常用方式有三种:

  • 通过存储器

当输入端口收到一个分组时,就用中断的方式通知路由选择处理机将分组从输入端口复制到存储器中,路由选择处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适输出端口的缓存中,实际用的并不多。

  • 通过总线

数据报通过输入端口通过共享总线直接传送到合适的输出端口,不需要路由选择处理机的干预,因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽受总线的限制。

  • 通过网络

它有2n条总线,可以使n个输入端口和n个输出端口相连,当输入端口收到一个分组时,就将它发送到与该输入端口连接的水平总线上,若通向所要转发的输出端口的垂直总线是空闲的,则在这个结点将水平总线和垂直总线连通,然后将该分组转发到这个输出端口,但若这个垂直总线已被占用,则后到达的分组就会被阻塞,必须在输入端口排队,后来采用ASIC硬件来实现,并采用了共享内存的方式解决了内部交换的问题,目前路由器都采用这种交换方式。

4.8 RIP

路由器的作用就是路由选择,那么什么是最佳路由?首先明确一点,不存在绝对的最佳路由算法,所谓最佳只能是尽可能接近理想的算法。

路由选择是个非常复杂的问题:

  • 它是网络所有节点共同协调工作的结果
  • 网络环境往往是不断变化的,这种变化有时无法预知

从路由算法的自适应性考虑:

  • 静态路由选择

    非自适应路由选择,简单,开销较小,不能及时适应网络状态的变化,适用于小型、简单的网络。

  • 动态路由选择

    自适应路由选择,较好地适应网络状态的变化,实现起来复杂,开销较大,适用于大型、复杂的网络。

互联网采用自适应的分层次的分布式的路由选择协议

  • 互联网规模非常大,如果让所有的路由器知道应如何到达,路由表将非常大,同时路由器之间交换信息所需的带宽也会使路由器的通信链路饱和。
  • 很多单位在连接到互联网的同时不希望网络拓扑结构及网络协议为外部所知道。

自治系统AS

AS间的1路由使用AS间的网络协议。

AS内的路由选择叫做内部网关协议,如RIP和OSPF

AS间的路由选择叫做外部网关协议,如IBGP-4

RIP

是分布式、基于距离的向量,是互联网的标准协议,简单却很少应用,几近淘汰。

每个路由器都要维护从自己到每个目的网络的最短距离,及距离向量。

最短距离

  • 从一个路由器到直连网络的距离定义为0
  • 从一个路由器到非直连网络的距离定义为所经过的路由器数
  • 距离也称为跳数,每经过一个路由器,跳数就加1
  • RIP规定一条路径最多只能包含15台路由器,16跳就不可达,因此只适用于小型网络。
  • RIP不能在两个网络之间同时使用多条路由,无法实现负载均衡
  • 选择一条具有最少路由器的路由,哪怕还存在另一条高速、低时延但路由器较多的路由

RIP协议的三个要点

  • 仅和相邻路由器交换信息
  • 交换的信息是本路由器知道的全部信息,即自己的整张路由表
  • 按固定的时间间隔交换路由信息,例如每隔30s
  • 当网络拓扑发生变化时,路由器也即时向相邻路由器通告拓扑变化后的路由信息

路由表的建立过程

  • 路由器在刚开始工作时,路由表是空的,只知道到直连网络的距离为0
  • 每个路由器也只和数目非常有限的相邻路由交换并更新路由信息
  • 经过若干次更新后,所有路由器都知道到达本AS内所有网络的最短距离和下一跳网络的地址
  • RIP协议收敛过程较快。收敛就是在AS所有路由器中都得到正确信息的过程

距离向量算法路由表的更新过程

没有则加入,下一跳更新则替换,下一跳不同有两种情况,跳数变小则替换,跳数相同或不变则不变。

  1. 路由器收到相邻路由器X的RIP报文,先修改此报文中的所有项目,把下一跳的字段地址都改为x,并把所有距离字段的值加1,最终路由项目有三个关键数据,目的网络N,距离d,下一跳路由器x。

  2. 对修改后的RIP报文的每一个项目重复以下步骤:

    若目的网络不在路由表中,则把该项目加到路由表中,否则若下一跳字段给出路由器的地址相同,则用收到的项目替换原路由表中的项目,无论距离变大还是变小,否则若收到的项目中的距离小于路由表中的距离,则进行更新,否则什么也不做,保留路由表中的原有信息。

  3. 若3分钟还没有收到相邻路由器的路由表,则将此相邻路由器连接的网络记为不可达,即将距离置为16。

RIPv2的报文格式

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

  • 首部占4个字节,命令字段指出报文的意义。1表示请求路由信息,2表示响应或路由更新报文,版本字段指出RIP的版本是1还是2,后续部分置为0.
  • 路由部分由若干条路由信息组成,每条路由信息占用20字节,地址族标志字段用来表示标志所使用的地址协议,IP地址为2,路由标记号填入AS号,因为有可能收到AS外的信息。在后面指出网络地址,该网络的子网掩码,下一跳的路由器地址以及到此网络的距离。

一个RIP报文最多可以包含25个路由,IP报文中数据最大长度为512字节,减去UDP首部的8字节和RIP首部的4字节,剩余500字节,500/20=25,因此RIP最大报文长度为4+20*25=504字节,如超过必须再用一个RIP报文传送。

RIPv2具有简单的鉴别功能,将原来写入第一个路由信息的位置用作鉴别,此时地址符标识符全1,而路由标记写入鉴别类型,余下16字节为鉴别数据,在鉴别数据之后才写入路由信息,但这时最多只能放入24条路由信息。

RIP协议特点

好消息传的快,坏消息传的慢。

优点:实现简单,开销较小

缺点:

(1)限制了网络规模

(2)路由器之间交换完整的路由表,随着网络规模的扩大开销也就增加

(3)坏消息传播的慢,更新过程的收敛时间过长。

4.9 OSPF

是为克服RIP的缺点开发的,它的原理简单但是实现起来较复杂。

  • 开放表明该协议不受某厂商控制,而是公开发表的。
  • 最短路径优先使用了最短路径算法SPF,注意SPF只是一个协议的名字,并不表明其他协议不是最短路径优先。
  • 采用分布式链路状态协议

协议三要点

  • 刚开始向本AS中所有路由器洪泛发送信息,发送的信息是与本路由器相邻的路由器的链路状态,但这只是路由器知道的部分信息
  • 链路状态:本路由器都和哪些路由器相连以及该链路的度量,度量值与费用、距离、时延和带宽等相关。
  • 后续只有当链路状态发生变化时,才用洪泛法向所有路由器发送信息。

由于各路由器之间频繁地交换链路状态信息,所有的路由器最终都能建立一个链路状态数据库,即全网的拓扑结构图,它在全网范围内是一致的。

OSPF的链路数据库能较快地进行更新,使各个路由器能及时更新其路由表。

OSPF的更新过程收敛快是其重要优点。

为了使OSPF能应用于规模很大的网络,OSPF将一个AS划分为若干更小的范围叫做区域,每个区域都有32位的区域标识符,区域也不能太大,在一个区域的路由器最好不要超过200个。

OSPF使用层次结构进行区域划分,与其他AS区域相邻的区域称为主干区域,其标识符为4个0,用来连通其他的非主干区域。

为什么要划分区域呢?将洪泛法交换链路信息的范围局限于每个区域,而不是整个AS,大大减少了整个网络上的通信量。在一个区域内部的路由器只需要知道本区域的完整网络拓扑,而不需要知道其他区域的网络拓扑。

根据路由器所处位置的不同,将位于主干区域的路由器叫做主干路由器,如图中的R3-R7,将同时位于两个区域的路由器叫做区域边界路由器,如R3,R4和R7,将与其他AS连接的路由器叫做AS边界路由器,如R6。

OSPF不用UDP而是直接用IP数据报传送,首部协议字段值为89。OSPF构成的数据报很短,这样做可以减少路由信息的通信量,同时不必将长的数据报进行分片。

OSPF分组格式

版本目前为2,类型是5种类型中的一种,分组长度包含首部在内以字节为单位,路由器标识符是本路由器接口的IP地址,区域标识符是分组所属区域的标识符,检验和检验分组中的差错,鉴别类型有2种,取0无须鉴别,取1需要鉴别,鉴别区鉴别类型为0时填入0,鉴别类型为1时填入8个字符的口令。

OSPF的其他特点:

  • 对不同的业务可计算出不同的路由
  • 可以实现负载均衡
  • 分组具有鉴别功能,保证了信息的安全性
  • 每一个链路状态都有一个32位的序号,序号越大状态就越新。

OSPF的五类分组

  • 类型1,问候分组。发现和维持连接站点的可达性。
  • 类型2,数据库描述分组。向邻居站点发送自己的链路状态数据库中项目的摘要信息
  • 类型3,链路状态请求分组。向对方请求发送某些链路状态项目的详细信息。
  • 类型4,链路状态更新分组。用洪泛法向全网更新链路状态,是OSPF最核心最复杂的部分。
  • 类型5,链路状态确认分组。对链路更新分组的确认。

OSPF基本操作

首先,R1和R2使用问候分组确认邻居关系,然后R1和R2互相发送数据库描述分组,假定R1的数据库中有一些项目不在R2发送的数据库描述分组中,R1就向R2发送某些链路请求分组,R2向R1发送其请求对应的相应信息,即链路状态更新分组,R1收到后向R2发送链路状态更新确认分组。

OSPF使用可靠的洪泛法发送更新分组

OSPF的其他特点:

  • 每30分钟刷新数据库中的链路状态
  • 当互联网规模很大时,OSPF比RIP好得多
  • 没有“坏消息传得慢”的问题

4.10 外部网关协议BGP

对于AS之间的路径要寻找最佳路由不现实,一条路径通过几个不同的AS时,对这样的路径计算代价也不现实,比较合理的做法就是在AS之间交换可达性信息。

AS之间的协议必须考虑有关策略,包括政治安全或经济方面,寻找一条能够到达目的网络且比较好的路由,即不兜圈子而并非寻找一条最佳路由,因此选择路径向量路由选择协议。

每一个AS至少有一台路由器作为BGP发言人,两个BGP发言人通过一个共享网络连接在一起,BGP发言人往往就是BGP边界路由器,但也可以不是。

BGP发言人与AS之间的关系

发言人之间建立TCP连接以此交换路由信息,路由的增加和撤销以及报告出错等情况。TCP连接能够提供给可靠的服务,也简化了路由选择协议。两个BGP发言人彼此成为对方的邻站或对等站。

BGP可达网络要交换的信息就是就是要到达某个网所要经过的一系列AS,当BGP发言人互相交换了可达性信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找到到达各AS的较好路由,一般是树形结构,不存在回路。

BGP协议的特点

  • BGP交换信息的节点数量是AS数的量级,比AS中的网络数小很多。
  • 每个AS中的BGP发言人数目很少,使AS间的路由选择不会过分复杂。
  • BGP发言人需检查其他BGP发言人发来的路径通知中本AS是否已在其中,若在其中则此条路由将被丢弃或忽略
  • 在BGP刚刚运行时,BGP的邻站交换整张BGP路由表
  • 以后只需要在发生变化时更新发生变化的部分,节省网络带宽,减小路由器的开销。

BGP-4使用的报文

  • 打开报文,用来和邻站建立关系

  • 更新报文,用来发送某一路由的信息,并列出要撤销的多条路由

  • 保活报文,确认打开报文,周期性地证实邻站关系

  • 通知报文,发送检测到的差错

RIP基于UDP,OSPF基于IP,BGP基于TCP

  • RIP只和邻站交换信息,UDP虽然不可靠,但开销小,周期性克服UDP不可靠的缺点。
  • OSPF使用可靠的洪泛法,直接使用IP,灵活性小,开销小
  • BGP交换整个路由表和更新信息,TCP确保可靠,无需周期性。

4.11 VPN和NAT

一个公司和分支机构如果不在同一个地方该如何通信呢?一个员工在外地如何连接工作单位呢?

本地地址:仅在机构内部使用的IP地址,可由本机构自行分配,无需向互联网的管理机构申请,一般指私网地址,有三类:

  • A类地址:10.0.0.0到10.255.255.255及10.0.0.0/8
  • B类地址:172.16.0.0到172.31.255.255及172.16.0.0/12
  • C类地址:192.168.0.0到192.168.255.255及192.168.0.0/16

全球地址:全球唯一的IP地址,必须向互联网的管理机构申请,一般指公网地址。

IP地址紧缺,一个机构所能申请到的IP地址数往往小于本机构所拥有的主机数,考虑到互联网并不安全,一个机构内也不需要把所有的主机接入互联网。专用地址只能用作本地地址,而不能用作全球地址,路由器对目的地址是专用地址的数据报一律不进行转发。

VPN

采用专用IP地址的互连网络称做专用互联网,简称专用网。

利用互联网作为本机构各专用网之间的通信载体,又称为虚拟专用网VPN,该网络是为本机构的主机进行本机构的通信,不是用于和网络外非本机构的主机通信。

VPN中的虚拟是并没有使用通信专线,但是效果上和真正的专用网一样。

VPN构建

  • 有保密需求,数据必须加密
  • 专门的硬件和软件

用隧道技术实现VPN

部门A和部门B距离很远,比如跨市跨省甚至跨国家,内部都使用A类私网地址,现在A部门的主机X要和B部门的主机Y通信,两部门之间通过搭建隧道实现数据的加密。X的私网地址10.1.0.1在进入隧道前需要将其转化为公网地址125.1.2.3,X要访问主机Y,但其目的地址并不是私网地址10.2.0.3,而是公网地址194.4.5.6,也就是说隧道内的源地址和目标地址都是公网地址,数据通过隧道后到达B网络,再将公网地址194.4.5.6转换为私网地址10.2.0.3,从而实现两个专用网之间的通信。

内联网和外联网

由部门A和B所构成的内部网络所构成的VPN称为内联网,表示部门A和B都是在一个机构的内部,一个机构和某些外部机构共同建立的VPN称为外联网。

远程接入VPN

某个流动员工需要远程接入VPN访问公司网络:该员工接入互联网,基于VPN软件在员工的PC机和公司的主机之间建立VPN隧道,通信内容是加密的,感觉好像在使用公司内部的本地网络。

NAT

要将私网地址和公网地址转换,这种地址转换就叫做网络地址转换NAT,需要在将专用网连接的互联网的路由器上安装NAT软件,该路由器就叫做NAT路由器,它至少有一个公网IP地址,所有使用私网地址的主机和外界通信时都要在NAT路由器上将私网地址转换为公网地址,当互联网回应后必须将公网地址转换为私网地址才能找到内部某主机。

在内外主机通信时,NAT路由器共发生了两次地址转换。

  1. 离开专用网时:替换源地址,将私网地址替换为公网地址

  2. 进入专用网时:替换目的地址,将公网地址替换为私网地址

NAT转换分类

  • 静态转换:某个私网IP地址只转换为某个公网IP地址,是一成不变的,一对一,服务器采用该方式
  • 动态转换:IP地址对是随机的,是不确定的,所有合法的私网IP地址均可随机转换为合法的IP地址,属于多对多的关系。如果IP地址略少于VPN内部主机数量时,可以采用动态转换的方式,但VPN内部主机不能同时连接互联网,一般主机采用该方式
  • NAPT/PAT:为了更加有效利用公网IP地址,我们可以利用传输层的端口号,内部网络的有线主机均可共享一个合法的公网IP地址。

PAT最大限度地节约IP地址,又可隐藏网络内部的所有主机,有效避免网络攻击。

目前网络中应用最多的就是PAT(普通设备)和静态转换(服务器)

第五章 传输层

5.1 传输层概述

传输层架构在网络层形成的服务之上,把数据传输服务从两台计算机之间扩展到两台计算机上的进程之间,网络层提供尽力而为的服务,而传输层是有所为有所不为。

传输层提供进程之间本地通信的抽象模式,即运行在不同终端上的应用进程仿佛是直接连接在一起的。

进程之间的通信

传输层介乎于应用层和网络层之间,向上为应用层提供通信服务,属于面向通信部份的最高层,同时也是用户功能中的最低层,当网络边缘的两个主机使用网络核心部分的功能进行端到端的通信时,只有位于网络边缘的协议栈才有传输层,也就是说网络核心部分的路由器在转发分组时只用了下三层的功能。

严格来讲,两台主机进行通信就是两台主机中运行的进程相互通信,从传输层的角度看,通信的真正端点其实并不是主机本身,而是主机中的进程。

网络层与传输层的区别

网络层是为主机之间提供逻辑通信,通信所用到的关键参数是IP地址,包括源地址和目标地址,而传输层是为应用进程之间提供端到端的逻辑通信,其所需要的关键参数除了IP地址外还需要传输协议及端口号。

而传输层的作用体现在一台主机中经常会有多个应用进程同时分别和另一台主机中的多个应用进程进行通信,这种情况下传输层有一个很重要的功能:复用和分用。

复用是指在发生方不同的应用进程都可以使用同一传输协议,通过增加适当的首部传送数据,分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程,另外传输层对接收到的报文进行差错检测,在网络层的IP数据报首部中存在着校验和字段,但其只对首部的差错进行校验,不会对报文本身内容进行校验。根据应用层的不同需求,传输层需要有两种不同的协议:面向连接的TCP和无连接的UDP。

传输层可以为高层用户建立一条端到端的逻辑通信信道,上层协议不同信道也有很大的差别。当传输层采用TCP协议时,逻辑信道采用全双工可靠信道,当使用无连接的协议时,逻辑信道采用不可靠信道。

传输层的两个主要协议
  • 用户数据报协议UDP:传送单位是UDP报文或用户数据报,是一种无连接协议,可提供进程到进程之间的报文交付或报文检错
  • 传输控制协议TCP:传送单位是TCP报文段,面向连接的协议,不提供广播或多播服务,因为要提供可靠的传输服务因此增加了许多开销
传输层的端口
  • 硬件端口:路由器或交换机上的端口
  • 软件端口:在协议栈层间的抽象的协议端口

端口号只具有本地意义,即端口号只是为了标记本计算机应用的进程,在互联网中不同计算机的端口号是不互相关联的。两个计算机要互相通信,不仅要知道对方的IP地址(为了找到计算机),还要知道对方计算机的端口号,这样就可以找到对方计算机中的应用进程。

TCP/IP传输层端口
  • 服务器使用的端口号

    包括熟知端口,也就是系统的端口号,数值通常为0-1023,还有登记端口,数值通常为1024-49151,为没有数值端口号的程序使用,使用这个端口号必须在IANA登记,以防止端口重复使用

  • 客户端使用的端口号

    又称为短暂端口号,数值在49152-65535,留给客户进程选择暂时使用,该端口属于动态端口范围,没有端口可以被正式地注册占用,当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号,通信结束后这个端口号可提供其他客户以后使用

常用的熟知端口:

5.2 UDP

UDP需要实现的功能

UDP只在IP的数据服务基础上增加了很少的一点功能——复用和分用的功能,报文和差错检错的功能

UDP提供的服务

UDP在网络服务的基础上提供进程到进程的报文交付服务以及可选的完整检查性服务

UDP适合哪些应用

能容忍丢包但对延迟敏感的应用,以单次响应为主的应用

UDP协议的特点
  • UDP是无连接的

    发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延

  • UDP使用尽最大努力交付

    不保证可靠交付,因此主机不需要维持复杂的连接状态表

  • UDP是面向报文的

    UDP对应用层下来的报文既不合并,也不拆分,而是保留这些报文的边界,UDP以此交付一个完整的报文

  • UDP没有拥塞控制

    网络出现拥塞不会使源主机发送速率降低

  • UDP支持多种交互通信方式:一对多,多对一

  • UDP首部开销小

UDP对应用层的报文只添加UDP首部便向下交付,一次交付一个报文,当接收方收到到网络层的报文后,除去首部向上交付,一次交付一个报文,应用程序必须选择合适大小的报文,若报文太长UDP把它交付给IP层,IP层再传输时可能要进行分片,这会降低IP层的传输效率。

UDP基于端口的分用

当传输层从IP层收到UDP数据报时,就根据首部的目的端口把UDP数据报分别转向相应端口,上交到最终的终点,如果接收方UDP收到的目的端口不正确,就丢弃该报文,并由ICMP发送端口不可达的差错报文给发送方。

UDP报文的首部格式

UDP报文有两个字段,首部字段有8个字节,共有四个字段组成,每个字段都是两个字节,UDP报文的报头是携带协议所处理需要的信息,载荷部分是携带上层的数据,对应用于复用和分用的字段是源端口号和目的端口号,用于检测报文错误的字段包括了报文总长度及校验和。

UDP校验和字段的作用:对传输的报文段进行检错。

在计算校验和的时候,把UDP用户数据报之前的12个字节作为伪首部,临时把伪首部和UDP用户数据报连接在一起,仅仅是为了计算校验和。伪首部其实是IP报文首部的一部分,包括源IP地址,目的IP地址,1字节的全0字段,协议字段数值为17,及UDP的长度字段。

5.3 TCP概述

TCP最主要的特点
  • TCP是面向连接的传输层协议,会有连接的建立与释放的过程
  • 每一条TCP连接只能由两个端点,也就是一对一的
  • TCP提供可靠交付的服务,流水线式发送,无差错,无丢失,不重复且能够按序到达
  • TCP提供全双工通信的方式,两端都设有发送和接收缓存且实现流量控制
  • TCP是面向字节流的。TCP中的流指的是流入或流出进程的字节序列。面向流的含义是虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用层交下来的数据看成仅仅是一串无节奏的字节流
TCP面向流的概念

TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发送的数据块大小具有一一对应的关系,但接收方应用程序收到的字节流必须是和发送方应用程序发出的字节流完全一样,TCP不关心应用进程一次把多长的报文发送到TCP的缓存中,而TCP对连续的字节流根据当前网络环境因素进行分段,形成TCP报文段实现数据传输。TCP的连接是一条虚连接,而不是一条真正的物理连接,TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节,而UDP发送的报文段是完全由应用进程所确定的。TCP可把太长的数据块分段再传送,也可等待足够多的字节构成报文段再发送。

TCP的连接

TCP把连接作为最基本的抽象,每一条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端口被称作套接字或插口,把端口号拼接到IP地址就构成了套接字。

每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

TCP连接就是由协议软件所提供的一种抽象,TCP连接的端点是个很抽象的套接字:

套接字 socket = (IP地址:端口号)

TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}

Socket不同的含义
  • 应用编程接口API
  • socket API中的一个函数名
  • 调用socket函数的端点称为socket
  • 调用socket函数时其返回值
  • 在操作系统内核中socket实现的概念

以上均与本节所提及的套接字不同

5.4 TCP报文格式

TCP报文段的首部格式

图中每行是4个字节,32位,TCP是面向字节流的,但TCP传输的单位却是报文段,一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。

TCP报文段中前20个字节是固定的,后面有4*n个字节是根据需要而增加的选项字段,n是个整数,最长是40个字节,因此TCP首部的长度是20-40个字节之间。

  • 第一行是源端口和目的端口字段,各占2个字节。端口是传输层和应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。
  • 第二行是序号字段,占4个字节。TCP连接中传输的数据流每一个字节都编上了序号,序号字段的值实际是指的本报文段中所发送的数据的第一个字节的序号
  • 第三行是确认号字段,占4个字节。是期望收到对方的报文段数据的第一个字节序号。
  • 数据偏移字段,即首部长度,它占了四位,指出了TCP报文段的数据起始处距离TCP报文段的起始处有多远,数据偏移的单位是32位字。以4字节长的字为计算单位,最大的数值是60字节
  • 保留字段,占6位,保留位今后使用,目前都把它设置为0
  • 紧急标志URG,当URG=1时,表明紧急指针字段有效,它高速系统此报文段中有紧急数据,应尽快传送,相当于是一个高优先级的数据
  • 确认标志ACK,只有当ACK=1,确认号字段才有用,当ACK=0时确认号无效
  • 推送标志PSH,接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,不再等到整个缓存填满了再向上交付
  • 复位标志RST,当RST=1时表明TCP连接中出现了严重的差错,如主机崩溃或其他的原因,此时必须释放连接然后再重新建立连接
  • 同步标志SYN,SYN=1表示这是一个连接请求或连接接受报文,与ACK标志配合实现
  • 终止标志FIN,它是用来释放一个连接的,FIN=1表明此报文段中的发送数据已经发送完毕并要求释放传输连接
  • 窗口字段占了2个字节,作为接收方让发送方设置发送窗口的依据,单位为字节,窗口指经常在动态变化着,此字段明确指出现在允许对方发送的数据量
  • 检验和字段占两个字节,检验范围为首部和数据两个部分,在计算检验和时要在TCP报文段前加上12位伪首部
  • 紧急指针字段占16位,指出在本报文段中紧急数据有多少个字节,紧急数据放在本报文段的最前端,它只当URG=1时才有效
  • 选项字段长度可调,最长40个字节,TCP最初只规定了一种选项,即最大报文段长度MSS,MSS告诉对方TCP我的缓存所能接受的报文的最长字段是MSS个字节,而MSS是TCP报文段中的数据字段的最大长度,数据字段加上TCP首部等于整个TCP的报文段,所以MSS的长度是TCP报文长度减去首部长度。
  • 填充字段,为了使整个首部长度为4的整数倍
为什么要规定MSS

设置合理的MSS数值,可以提高网络利用率,减小额外开销,在建立连接时,双方都把自己能够支持的MSS写入字段,传送数据时就以此为准,两个方向可以采用不同的MSS,MSS的默认值是536字节,即所有互联网都能够接受的长度是536+20即556个字节。MSS的选择应尽可能大些,只要在IP层传输时不需要再分片就行。

其他选项
  • 窗口扩大选项,占3字节,其中有一个字节表示移位值S,新的窗口值等于TCP首部的窗口位数增大到16+S,相当于把窗口值向左移动S位后获得的窗口值,移位值允许使用的最大值是14,窗口的最大数值可以增大到230-1
  • 时间戳选项占10字节,其中最主要的字段是时间戳值字段(4字节)和时间戳回送回答字段(4字节),它们通常是用来计算往返时间RTT和用来处理TCP序号超过22的情况,防止序号绕回这种情况
  • 选项确认选项

5.5 可靠传输的工作原理

理想的传输条件特点
  • 传输信道无差错
  • 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据
停止等待的协议

每发送完一个分组就停止发送,等待对方的确认,当收到确认后再发送下一个分组。全双工通信的双方既是发送方又是接收方,为了讨论问题的方便,我们在后面仅考虑A发送数据,B接受数据并发送确认,因此A叫做发送方,B叫做接收方,我们分情况来讨论。

  1. 无差错情况

A向B发送数据M1,B确认收到后A继续发送M2

  1. 出现差错

B检测M1时检测到差错,就直接丢弃M1,其他什么都不做,也不会通知A收到了有差错的分组;如果M1在传输过程中丢失了,B当然什么也不知道,就什么都不做。

A为每一个已发送的分组都设置了一个超时计时器,A只要在超时计时器到期之前收到了相关的确认就撤销该超时计时器,继续发送下一个分组M2,反之则超时重传M1.

  1. 确认丢失和确认收到

A向B发送M1,B也收到了M1,但是B向A发送的确认收到丢失了,A并不能确定是自己没有将M1传给B还是B没有将确认报文传给自己,于是选择了重传,B此时收到再次发送来的M1要做两个动作,一个是丢弃这个重新发送过来的M1,并不把它交付给上层,二是再次向A发送确认报文表明自己接收到了M1报文。

B向A发送的确认报文迟到了,A仍然与确认丢失的情况一样对M1进行重传,此时B对重新发送的M1进行丢弃,并重新发送确认报文。

在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发,分组和确认分组都必须要进行编号。超时计时器的重传时间应当比数据在分组传输的平均往返时间RTT要更长一些。

自动重传请求ARQ

通常A最终总是可以收到对所有发出的分组的确认,如果A总是重传分组却收不到确认就表明通信线路质量太差,不能进行通信。

使用确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信,而这种可靠传输协议常称为自动重传请求ARQ,意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。

信道利用率

TD是发送分组所需要的时间,等于分组长度除以数据率,TA是B发送确认分组所需要的时间,RTT是往返时间,停止等待协议的优点是简单,缺点是利用率太低。

流水线传输

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输,如图所示,流水线传输就是发送方连续发送多个分组,不必每发完一个分组就停下来等接收方确认,这样可使信道上一直有数据不间断地传送,这样可以获得很高的信道利用率。

连续ARQ协议

发送方维持的发送窗口意义在于位于发送窗口内的分组都可连续地发送出去,而不需要等待对方的确认,这样信道利用率就提高了。

连续ARQ协议规定发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置

接收方一般采用累计确认的方式,即不必对收到的分组逐个发送确认,而是对按需到达的最后一个分组发送确认,这样就表示到这个分组为止的所有分组都正确收到了。它的优点是确认丢失,即使确认丢失也不必重传,缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息,如果发送方发送了前五个分组,而中间的第三个分组丢失了,这时接收方只能对前两个分组发出确认,发送方无法知道后面三个分组的下落,只好把后面的三个分组都再重传一次,这就叫==Go-back-N(回退N),表示需要再退回来重传已发送的N个分组,可见当通信质量不好的时候连续ARQ协议会带来负面的影响。

TCP可靠通信的具体实现

TCP连接的每一端都必须要设置两个窗口,一个发送窗口和一个接收窗口,TCP的可靠传输机制是用字节的序号来进行控制的,TCP所有的序号都是基于序号的,TCP两端的四个窗口是动态变化的,TCP的往返时间RTT也不是固定不变的,需要算法来估算合理的重传时间。

5.6 TCP可靠传输的实现

以字节为单位的滑动窗口

如图,假定A收到了B发来的确认报文段,其中窗口是20字节,而确认号是31,这表明B期望收到的下一个序号是31,而序号30之前的数据已经收到,根据这两个数据,A就构造出了自己的发送窗口。发送窗口表示在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去,这个数值是20个字节,但在未收到确认之前着这20个字节都必须要暂时保留,以便在超时重传时使用,发送窗口里面的序号表示允许发送的序号,窗口越大发送方就能在得到对方确认前连续发送更多的数据,从而获得更高的传输效率。TCP标准强烈不赞成发送窗口前沿或向后收缩

A发送了11个字节的数据,没有收到任何确认信息,图中的指针P3-P2等于允许发送但尚未发送的字节数,又称可用窗口,p3-p1等于A的发送窗口,又称通知窗口,p2-p1等于已发送但尚未收到确认的字节数,A的发送窗口位置不变。

B的接收窗口中32,33没有按序到达,接收窗口内31-50是允许接收的序号,确认报文段的序号只能是31.

A收到新的确认号34,发送窗口向前滑动,指针P2不变,可用窗口增大为42-53,B的接收窗口37,38,40没有按序到达,只能暂存于接收窗口内.

A继续发送序号42-53,此时P2与P3指针重合,还未收到B的确认,可用窗口减为0,停止发送,纸质收到B的确认,否则启用超时重传,如A收到的确认序号落在窗口内,那么A就可以使窗口继续向前滑动并发送新的数据

发送缓存

缓存空间和序号空间都是有限的,并且都是循环使用的。

发送方的应用进程把字节流写入TCP的发送缓存,发送窗口通常只是发送缓存的一部分,发送缓存和发送窗口的后沿都是重合的,发送应用程序必须控制写入缓存的速率,否则可能造成缓存溢出

对于接收缓存,接收方的应用进程从TCP的接受缓存中读取字节流,收到检测有差错的分组就会被丢弃掉,接受应用程序如若未能来得及读取收到的数据,接收缓存就会被填满,就无法接受新的数据。反之,应用程序能够及时从接收缓存中读取收到的数据,接收窗口就会增大,但不能超过接收缓存的大小。

发送缓存与接收缓存的作用

在发送缓存里,暂存的信息是:

  • 发送应用程序传送给发送方TCP准备发送的数据
  • TCP已发出但尚未收到确认的数据

在接收缓存中,暂存的信息是:

  • 按序到达的但尚未被接受应用程序读取的数据
  • 没有按序到达的数据

注意事项:

  1. A的发送窗口并不总是和B的接收窗口一样大,因为它有一定时间的滞后
  2. TCP标准没有规定对不按序到达的数据如何处理,通常的处理方法是先临时储存在接收窗口中,等到字节流中所缺少的字节到达后再按序交付给上层的应用进程
  3. TCP要求接收方必须要有累计确认的功能,这样可以减少传输开销
接收方发送确认

接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息捎带上,但需注意两点:

  • 接收方不应过分推迟发送确认,都则会造成发送方不必要的重传,确认推迟时间不能超过0.5s
  • 稍待确认实际上并不经常发生,因为大多数应用程序很少在两个方向上发送数据
超时重传时间的选择

TCP每发送一个报文段就对这报文段设置一次计数器,只要计时器时间到且没有收到确认就要重传这一报文段

如何设置超时值

若超时值太小就会造成不必要的重传,若超时值太大丢包恢复的时间又太长,直观上超时值应大于RTT,但RTT是变化的,而且往返时间的方差很大。由于TCP下层是互联网的环境,IP数据报的路由变化很大,因此传输层的往返时间RTT也会很大,所以我们要先对RTT进行估计。

RTT是变化的,需要实际测量某一个报文段的往返时间,也就是样本RTT。由于样本RTT波动很大,所以计算平均值更有意义。

TCP采用了一种自适用的算法,它记录一个报文段所发出的时间以及收到相应确认的时间,这两个时间之差就是报文往返时间RTT。

加权平均往返时间

TCP保留了RTT的加权平均往返时间RTTs,也称平滑的往返时间。第一次测到RTT样本时,RTTs的值就取为所测量到的RTT样本值,以后每测到一个RTT样本就按照公式重新计算一个RTTs。

在公式中α是在0到1之间,若α接近于0则表示RTT值更新较慢,若α接近于1则表示RTT值更新较快,推荐α的数值是八分之一,也就是0.125

超时重传时间RTO

RTO应该略大于上面所得出的加权平均往返时间,RTTd是RDD的偏差的加权平均值。

第一次测量时,RTT值取为到RTT样本值的一半,在以后的测量中使用以下公式计算加权平均的RTTd

这里的β是一个小于1的系数,推荐值是四分之一即0.25

TCP确认的二义性

考虑到可靠传输需要确认机制及RTT的测量,这又引出了TCP确认的二义性

发送方发送了报文段1没有收到确认报文,于是又发送了报文段2,此时收到了确认报文,但是无法辨别是发送给1还是给2的确认,这根本原因是TCP报文段使用了与原报文段相同的序号

Karn算法

当TCP重传一个报文段时,停止测量本次RTT样本,这样得出的加权平均平均往返时间RTTS和超时重传时间RTO比较准确。

但是当出现报文段的时延突然增大了很多的极端情况怎么办呢?根据Karn算法超时重传时间没有办法得到及时的更新,于是对Karn算法进行了修正

修正的Karn算法

报文段每重传一次就把RTO的值增大γ倍,系数γ的典型值是2,当不再发生报文段的重传时才根据报文段的往返时延更新平均往返时延RTT和超时重传时间RTO的数值

选择确认SACK

若收到的报文无差错只是未按照序号到达,中间还缺少一些序号的数组,那么能否设法传送缺少的数据而不传送已经到达接收方的数据呢?答案是可以的。

接收到的字节流序号不连续的情况下,TCP的接收方在接受对方发过来的数据字节流的序号发生了不连续的状态,结果就形成了一些不连续的字节块,前后不连续的每一个字节块都有两个边界,左边界和有边界。

第一个字节块的左边界L1等于1501,但是右边界R1却等于3001,左边界指出字节块第一个字节的序号,但右边界减一才是最后一个字节的序号,第二个字节块的左边界L2等于3501,但是右边界R2却等于4501,接收方收到了前面的字节流不连续的两个字节块,如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据。

RFC 2018的规定

在使用选择确认前,收发双方必须在建立TCP连接时,在TCP首部的选项中加上“允许SACK”的选项。

原首部中的“确认号字段”留用,以后在TCP报文段的首部中都增加了SACK选项,确认收到的不连续的字节块的边界。

首部选项的长度最多只能有40个字节,一个字节块的两个边界就要用到4*2=8个字节,因此在选项字段中最多只能指明4个字节块的边界信息,另外需要两个字节,一个字节指明是SACK选项,一个字节指明此选项占用的字节数。

5.7 TCP的流量控制

通常我们希望数据传输的快一些并且接收方能够来得及接受从而避免丢失,流量控制就是TCP发送端通过调节发送速率不会造成接收端缓存溢出也不会使得网络拥塞。

利用滑动窗口实现流量控制

A向B传送数据,在连接建立时,B告诉A我的接收窗口rwnd=400,A的发送窗口是100,A连续发送两个100的数据都正常确认了,201-300丢失了,此时B确认了201以前的报文并修改了接收窗口为300,A继续分两次发送了301-500,因为201-300丢失所以需要超时重传,此时B的接收窗口已满,B确认了501之前的信息后再次调整接收窗口为100,A再次发送501-600,B确认此次传输接收窗口置0,本次传输中B三次调整接收窗口大小。

零窗口特例下死锁的解决

B向A发送了0窗口的报文段后,B释放了部分接收缓存的空间,并且重新向A发送了rwnd=400的报文段,但此报文丢失而A并不知道,AB双方此时就互相等待对方的信息,陷入了一个死锁的状态。

为了解决这个问题,TCP为每一个连接设置有一个持续计时器,只要TCP连接一方收到了对方的零窗口通知就启动该持续计时器,若持续计时器设置的时间到期就发送一个零窗口的探测报文段,仅携带了一个字节的数据,而对方就在确认这个探测报文段的时候给出了当前的窗口值,若窗口仍然是0,则收到这个报文的一方就重新设置持续计时器,若窗口不是0则死锁的僵局就此打破。

TCP的传输效率

有三种机制控制TCP报文段发送时机

  • 第一种机制是TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的1数据达到MSS字节时,就组装成一个TCP报文段发送出去。
  • 第二种进制是由发送方的应用进程指明要求发送报文段,即TCP支持的推送操作
  • 第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去
发送方糊涂窗口综合征

发送方TCP每次收到一字节的数据后就发送。

这样,发送一个字节需要形成41字节长的IP数据报。若接收方确认,并且发送方要求回送这一字节,就需传送总长度为162字节共4个报文段,效率很低。

解决办法:使用Nagle算法

Nagle算法

若发送应用进程,把要发送的数据逐个送入到TCP的发送缓存,则发送方就把第一个字节先发送出去,把后面到达的数据都缓存起来;当发送方收到对第一个字节的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存;只有在收到对前一个报文段的确认后,才继续发送下一个报文段;当数据发送较快而网络速率较慢时,用这样的方法可明显减少所用网络带宽;当到达的数据已到达发送窗口一半或报文段最大值时就立即发送一个报文段,这样可以提高网络的吞吐量。

接收方糊涂窗口综合征

当接收方的TCP缓冲区已满,接收方会向发送方发送窗口大小为0的报文。

若此时接收方的应用进程以交互方式每次只读取一个字节,于是接收方又发送窗口大小为一个字节的更新报文,发送方应邀发送一个字节大小的更新报文(IP数据报是41字节长),于是接收窗口又满了,如此循环往复。

解决方法:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一般空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知“当前的窗口大小”,同时发送方也不要发送太小的报文段。

TCP流量控制小结

TCP接收端:

  • 使用显式的窗口通告,告知发送方可用的缓存空间大小。
  • 在接收窗口较小时,推迟发送确认。
  • 仅当接收窗口显著增加时,通告新的窗口大小。

TCP发送端:

  • 使用Nagle算法确定发送时机
  • 使用接收窗口限制发送的数据量,已发送未确认的字节数不超过接收窗口的大小

5.8 TCP的拥塞控制

网络拥塞的现象实际上是短时网络中的分组太多,网络带宽不足,解决的措施是减少分组进入网络。

拥塞控制的一般原理

流量控制是限制发送速度,使之不超过接收端的处理能力,也就是接收端控制发送端,而拥塞控制是限制发送速度,使之不超过网络的处理能力,是一个全局性的问题。

网络拥塞产生的后果及原因

网络拥塞会造成:丢包(路由器缓存溢出)、分组延迟增大(链路接近满载)

大量的网络资源用于:重传丢失的分组、不必要地重传延迟过大的分组,转发最终被丢弃的分组

这样会使得网络的负荷很重,流量很大但网络吞吐量却很低,有效流量很少,根本原因是系统对资源的需求总和大于可用的资源

拥塞控制所起的作用

横坐标是输入负载,纵坐标是吞吐量,理想的拥塞控制是在吞吐量达到饱和前曲线以45°斜率的线性增长至饱和水平线,而实际上是随着负载的增加,网络吞吐量的增长率逐渐减小,已进入了轻度拥塞状态,继续增加负载网络吞吐量反而会下降,此时网络拥塞了,负载增加到一定程度,网络吞吐量会降为0,此时为死锁状态,实际拥塞控制曲线基本介乎于理想拥塞控制和无拥塞控制的曲线之间。

实践证明,拥塞控制是很难设计的,因为它是一个动态的问题。

丢包是网络拥塞的征兆,不是引起拥塞的原因

开环控制和闭环控制

开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。

闭环控制方法是基于反馈环路的概念,有以下三种措施:

  • 监测网络系统,以便监测到拥塞在何时何处发生

  • 将拥塞发生的信息传送到可采用行动的地方

  • 调整网络系统的运行,以解决出现的问题

    监测网络拥塞的指标
    • 由于缺少缓存空间而被丢弃的分组的百分比
    • 平均队列长度
    • 超时重传的分组数
    • 平均分组时延
    • 分组时延的标准差

    上述这些指标的上升都标志着拥塞的增长

方法一监测拥塞发生时通知拥塞发生的分组客观上增加了网络的流量,同样会使网络更加拥塞;方法二在转发分组中增加相应的字段表示网络拥塞状态或周期性地发出探测分组

TCP的拥塞控制方法

TCP采用基于窗口的方法进行拥塞控制,该方法属于闭环控制方法。

TCP发送方维持一个拥塞窗口CWND,拥塞窗口的大小取决于网络的拥塞程度,网络通畅就增大拥塞窗口,提高网络利用率,当网络拥塞时减小拥塞窗口,缓解网络的压力。发送端利用拥塞窗口根据自己感知的网络拥塞程度来调整发送的数据量,所以发送窗口的大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况。

网络拥塞的判断依据

发送方利用丢包时间来感知拥塞,拥塞造成了丢包和分组延迟的增大,这两种情况对于发送端来说都是丢包,丢包事件反映在重传计时器超时或发送端接收到3个重复的确认信号ACK。

发送方通常使用拥塞窗口来限制已发送未确认的数据量,当感知到网络拥塞后,发送方通常是由CWND来随发送方感知的网络拥塞程度进行调整

TCP拥塞控制算法
  • 慢开始(slow-start)

    算法的思路:在新建连接上指数级增大cwnd,直至检测到丢包,此时会终止慢开始的阶段。它是希望通过迅速增大cwnd至可用的发送速率

    原有的规定是先把初始的拥塞窗口的cwnd值设为1至2个发送窗口的最大报文段SMSS,新规则是把初始的拥塞窗口cwnd值设置为不超过2-4个SMSS的数值,防止拥塞窗口cwnd增长过大引起网络拥塞,我们还需要设置一个状态变量慢开始门限ssthresh。

拥塞窗口CWND它的控制方法是在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值,其中N是原先未被确认的但现在刚确认的报文段的字节数,所以当N小于SMSS的时候,拥塞窗口每次的增加量要小于SMSS。用这样的方法逐渐增大发送方的拥塞窗口,可以使分组注入到网络的速率更加合理。

发送方每收到一个对新报文段的确认(重传不计算在内),就使得cwnd加1,此处的1是一个单位也就是一个报文段,每经过一个RTT将cwnd加倍。

为了防止拥塞窗口cwnd增长过快,还要再设置慢开始门限状态变量ssthresh,它的用法如下:

  • 当cwnd<ssthresh时,使用慢开始算法

  • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法

  • 当cwnd=ssthresh时,既可使用慢开始算法,也可以使用拥塞避免算法

  • 拥塞避免(congestion avoidance)

    思路:让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,使拥塞窗口cwnd按线性规律缓慢增长。

    在拥塞避免阶段就有“加法增大”的特点,比慢开始算法的拥塞窗口增长速率缓慢得多。

  • 在网络拥塞时的处理:

    只要发送方判断网络出现拥塞(重传定时器超时):

    • ssthresh=max(cwnd/2,2)
    • cwnd=1
    • 执行慢开始算法
  • 慢开始和拥塞避免算法的实现举例

初始cwnd=1,在cwnd<ssthresh的情况下,每经过一个伦茨cwnd就指数增长一次,直到cwnd=ssthresh时,实施拥塞避免算法,cwnd呈线性增长,随着传输轮次的增长每次自增1,当网络拥塞时cwnd变为1,ssthresh降为8,重新一阶段与二阶段,当收到连续三个ACK时,进行快重传算法。

  • 快重传(fast retransmit)

    快重传算法可以让发送方尽早直到发生了个别报文段的丢失。

    快重传算法并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

    快重传算法首先要求接收方不要等到自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失去的报文段也要立即发出对已收到的报文段的重复确认,发送方只要一连收到三个重复的确认,就知道接收方确实没有收到报文段,因而应当立即进行重传也就是快重传,这样就不会出现超时,发送方也不会误认为网络拥塞。

  • 快恢复(fast recovery)

    当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法FR算法:

    • 慢开始门限ssthresh=当前拥塞窗口cwnd/2
    • 新拥塞窗口cwnd=慢开始门限ssthresh
    • 开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大

如图四收到了3个ACK确认,此时执行快恢复算法。

拥塞窗口的调节策略:AIMD

AI指的是加法增大,若无丢包,每经过一个RTT将cwnd增大一个MSS,直到检测到丢包,目的是缓慢增大发送速率。MD指的是乘法减小,发送发检测超时或三个重复确认时,把门限值设为当前拥塞窗口的一半,目的是迅速减小发送速率从,缓解网络压力。

TCP拥塞控制流程图

发送窗口的上限值

发送窗口的上限值应取为接收方窗口rwnd和拥塞窗口cwnd中较小的一个。

5.9 TCP的传输连接管理

传输连接的三个阶段
  • 连接建立(握手)
  • 数据传送
  • 连接释放(放手)
连接建立前的准备
  1. 要使每一方确知对方的存在
  2. 要允许双方协商一些参数
  3. 能够对传输实体的资源进行分配

TCP连接建立采用客户服务器方式,主动发起连接建立的进程叫做客户,被动连接的进程叫做客户

TCP的三次握手

计算机网络合集(除应用层之外)相关推荐

  1. CC2530,zigbee,协议栈,代码集(应用层,硬件层)

    APP(应用层) OSAL_SampleApp.c #include "ZComDef.h" #include "hal_drivers.h" #include ...

  2. 【网络】吐血整理-Java网络合集

    文章目录 网络: 初始序列号的作用 输入一个URL的路径 epoll和select(IO多路复用的方式) http协议如何解决粘包拆包问题 HTTPS 1.SSL / TLS 以及 SSL / TLS ...

  3. GAN生成对抗网络合集(七):cycleGAN—循环损失的提出 / starGAN

    cycleGAN源文:https://arxiv.org/abs/1703.10593 cycleGAN笔者实践代码:https://github.com/leehomyc/cyclegan-1 -- ...

  4. NLP学习D3-TF2chap3-4总结和代码实现(八股框架+CNN网络合集)+多线程

    今天早上3点就醒了,在床上读了一会原著,忍不住又看了一遍chap6的视频,后来到自习室继续看,对RNN\LSTM\GRU有了更深入的理解.吃完饭以后想着把BP再看下,毕竟这很基础.今天有时间再去回看下 ...

  5. GAN生成对抗网络合集(三):InfoGAN和ACGAN-指定类别生成模拟样本的GAN(附代码)

    1 InfoGAN-带有隐含信息的GAN InfoGAN是一种把信息论与GAN相融合的神经网络,能够使网络具有信息解读功能.        GAN的生成器在构建样本时使用了任意的噪声向量x',并从低维 ...

  6. 算法偏见是什么_处理人工智能的偏见如何使算法公平公正

    算法偏见是什么 算法在AI中扮演什么角色? (What Role do Algorithms Play in AI?) As artificial intelligence becomes more ...

  7. 【计算机网络】知识点总结

    文章目录 1 概述 1.1 计算机网络的类别 1.1.1 计算机网络的定义 1.1.2 计算机网络的分类 1.1.2.1 不同的作用范围 1.1.2.2 不同的网络使用者 1.1.2.3 把用户接入因 ...

  8. MongoDB--- 客户端操作 与 复制集

    1.MongoDB执行js脚本 作为一个数据库,MongoDB有一个很大的优势-它使用js管理数据库,所以也能够使用js脚本进行复杂 的管理. mongodb 的shell是javascript实现的 ...

  9. 分布式技术原理(九):分布式体系结构之集中式结构

    分布式体系结构之集中式结构 云这个话题对我们来说已经非常熟悉了.可以说,云在我们的生活中无处不在,比如我们平时看的视频通常就是放在云上的.当我们要播放一段视频时,请求会先转发到云上,从云上下载数据到本 ...

最新文章

  1. java并发编程之美-阅读记录3
  2. LeetCode OJ 147. Insertion Sort List
  3. LeetCode MySQL 1045. 买下所有产品的客户
  4. 云服务器太卡,云服务器解决io过高导致的命令卡顿
  5. Spring课程 Spring入门篇 总结
  6. freetype 2.11.0必须使用VS2012编译
  7. 长安大学微型计算机原理与接口技术答案,长安大学微机原理与接口技术AB卷试题与答案.doc...
  8. navicat的注册码
  9. Spring Boot 实现在线Web SSH( Java Web版本的Xsehll)
  10. 利用Python进行博客图片压缩
  11. 入门C语言编程植树问题,亏损率的公式—(-圆位置排序c程序-数学-封巧及同学
  12. 肖特基和快恢复二极管区别
  13. h5应用数据加密_H5+应用打包JS没有加密混淆
  14. 2016小米实习生面试心得
  15. 电视android停止运行怎么操作,智能电视提示应用停止运行怎么办,这几种解决办法最实用...
  16. Linux内核源代码获取教程
  17. 多线程下载图片并压缩
  18. matlab 摄氏度符号怎么打,MATLAB中如何打角标和希腊字母 | 学步园
  19. crontab无法执行定时任务的问题:/var/spool/cron/#tmp.root.XXXXEzRLBb: Permission denied
  20. 调用百度地图获取路线,修改覆盖物样式

热门文章

  1. 表妹也录取了计算机专业,作为过来人要给她领好路!
  2. 读书《你能写出好故事:写作的诀窍、大脑的奥秘、认知的陷阱》
  3. cache tier 分级缓存
  4. Golang可视化工具——go-callvis
  5. 电商订单批量导入API接口功能
  6. firewalld防火墙配置IP伪装和端口转发
  7. Linux中cat、more、less、head、tail的区别
  8. 九城加设网游防沉迷 3千名玩家声称罢玩魔兽
  9. 兆骑科创创业大赛,线上直播路演,高层次人才引进服务平台
  10. Maven-POM.xml