抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

CodingStudio

努力进步

引言

  • 《计算机网络|自顶向下方法|第七版》学习笔记

1. 计算机网络和因特网

1.1 什么是因特网

1.1.1 具体构成描述

  • 节点:
    • 主机及其上运行的应用程序
    • 路由器,交换机等网络交换设备
  • :通信链路
    • 接入网链路:主机连接到互联网的链路
    • 主干链路:路由器间的链路
  • 主机端系统
    • 端系统通过通信链路分组交换机连接到一起
    • 不同的链路能够以不同的速率传输数据,链路的传输速率以**比特/秒(bit/s,bps)**度量
    • 分组:当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节
    • 分组交换机:转发分组
      • 分组交换机包括:路由器链路层交换机
      • 链路层交换机通常用于接入网中,而路由器通常用于网络核心中
  • 端系统,分组交换机和其他因特网部件需要运行一系列协议
    • TCP/IP为因特网的主要协议
    • Internet标准
      • RFC:IETF的标准文档
      • IETF:因特网工程任务组

1.1.2 服务描述

  • 分布式应用程序:应用程序涉及多个相互交换数据的端系统
    • 因特网应用程序运行在端系统上,即它们并不运行在网络核心中的分组交换机中
    • 尽管分组交换机能够加速端系统之间的数据交换,但它们并不在意作为数据的源或宿的应用
  • 与因特网相连的端系统提供了一个套接字接口,该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式

1.1.3 什么是协议

  • 协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接收或其他事件方面所采取的动作

1.2 网络边缘

  • 通常把与因特网相连的计算机和其他设备称为端系统
    • 位于网络的边缘,故称为端系统
    • 划分为:客户和服务器两大类
  • 接入网:是指将端系统屋里连接到其边缘路由器的网络
    • 边缘路由器:是指端系统到任何其他远程端系统的路径上的第一台路由器
  • 采用网络设施的面向连接服务:TCP——传输控制协议
  • 采用基础设施的无连接服务:UDP——用户数据报协议

1.3 网络核心

1.3.1 分组交换

  • 在各种网络应用中,端系统彼此交换报文
  • 为了系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组
  • 在源和目的地之间,每个分组都通过通信链路和分组交换机(路由器或链路层交换机)传送
  • 分组以等于该链路最大传输速率的速度传输通过通信链路
  • 1 存储转发传输
    • 多数分组交换机在链路的输入端使用存储转发传输机制
    • 存储转发传输是指在交换机能够开始向输出链路传输该分组的第一个比特之前,必须接受到整个分组
    • 通过由N条速率均为R的链路组成的路径,从源到目的地发送一个分组,端到端时延为d端到端=NLRd_{端到端} = N \frac{L}{R}
  • 2 排队时延和分组丢失
    • 对于每条相连的链路,该分组交换机具有一个输出缓存(输出队列),用于存储路由器准备发往那条链路的分组,除了存储转发时延之外,分组还需要承受输出缓存的排队时延
    • 缓存空间的大小有限,一个到达分组可能发现该缓存已被完全充满,此情况下会出现丢包,到达的分组或已经排队的分组之一会被丢弃
  • 3 转发表和路由选择协议
    • 路由器从相连的一条通信链路得到分组,然后向相连的另一条通信链路转发该分组
    • 在因特网中,每个端系统都具有IP地址,当源主机向目的端系统发送分组时,源在该分组的首部包含了目的地的IP地址.当一个分组到达网络中的路由器时,路由器会检查该分组的目的地址的一部分,并向一台相邻的路由器转发该分组.每台路由器都有一个转发表,用于将目的地址映射成输出链路.当某分组到达一台路由器时,路由器会检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路,路由器将分组导向该出链路

1.3.2 电路交换

  • 通过网络链路和交换机移动数据有两种基本方法:电路交换分组交换
  • 在电路交换网络中,在端系统间通信会话期间,预留了端系统沿路径通信所需要的资源,在分组交换网络中,这些资源不需要预留
  • 端到端连接:网络在两台主机之间创建的一条专用连接
  • 电路交换网络中的复用:链路中的电路时通过频分复用或时分复用来实现的

1.3.3 网络的网络

  • 网络结构1,用单一的全球传输ISP互联所有接入ISP
  • 网络结构2,由数十万接入ISP和多个全球传输ISP组成
    • 是一种两层的等级结构,其中全球传输供应商位于顶层,而接入ISP位于底层
  • 网络结构3,多等级结构
  • 在等级化网络结构3上增加存在点(PoP),多宿,对等和因特网交换点就与今天的因特网相似
    • PoP存在于等级结构的所有层次,但底层等级除外,一个PoP只是提供商网络中的一台或多台路由器群组
    • 任何ISP(除了第一层)可以选择多宿,即可以与两个或更多提供商ISP连接
    • 位于相同等级结构层次的邻近一对ISP能都对等,能直接将网络连在一起,使它们之间的所有流量经直接连接而不是通过上游的中间ISP传输
    • 沿着相同线路,第三方公司能创建一个因特网交换点(IXP),IXP是一个因特网汇合点,多个ISP在IXP一起对等
    • 网络结构4:由接入ISP,区域ISP,第一层ISP,PoP,多宿,对等和IXP组成
  • 网络结构5:在网络结构4顶部增加内容提供商网络

1.4 分组交换网中的时延,丢包和吞吐量

1.4.1 分组交换网中的时延概念

  • 时延包括:节点处理时延,排队时延,传输时延传播时延
    • 时延总体累加起来是节点总时延
    • 处理时延
      • 检查分组首部和决定分组导向何处所需要的时间是处理时延的一部分,还包括其他因素
    • 排队时延
      • 在队列中,当分组在链路上等待传输时,经受排队时延
      • 一个特定分组的排队时延却决于先期到达的正在排队等待向链路传输的分组数量
    • 传输时延
      • 假定分组以先到线服务方式传输,用L比特表示该分组的长度,用R bps表示从路由器A到路由器B的链路传输速率,传输时延是L/RL/R
    • 传播时延
      • 从链路的起点到路由器B传播所需要的时间是传播时延,该传播时延等于两台路由器之间的距离除以传播速率d/sd/s
      • 该比特以该链路的传播速率传播.传播速率取决于链路的物体媒体
  • 传输时延和传播时延的比较
    • 传输时延是路由器推出该分组所需要的时间,是分组长度和链路传播速率的函数,与两路由器之间的距离无关
    • 传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间,是两台路由器之间距离函数,与分组长足或链路传输速率无关
  • 处理时延通常是微不足道的,但对路由器的最大吞吐量有影响,最大吞吐量是一台路由器能够转发分组的最大速率

1.4.2 排队时延和丢包

  • 令a表示分组到达队列的平均速率,R为传输速率,假定所有分组都是L比特组成的,则比特到达队列的平均速率为LabpsLa bps,流量强度为La/RLa/R,若流量强度大于1则比特到达队列的平均速率超过从该队列传输出去的速率
  • 设计系统时流量强度不能大于1
  • 丢包
    • 由于路由器没有地方存储信道的分组,路由器将丢弃该分组
    • 一个节点的性能场不仅根据时延来度量,而且根据丢包的概率来度量

1.4.3 端到端时延

  • 端到端时延
    • dendend=N(dproc+dtrans+dprop),dtrans=L/Rd_{end-end} = N(d_{proc}+d_{trans}+d_{prop}), d_{trans}=L/R

1.4.4 计算机网络中的吞吐量

  • 在任何时间瞬间的瞬时吞吐量是主机接受到文件的速率
  • 若文件由F比特组成,主机接受到所有F比特用去T秒,则文件传输的平均吞吐量F/TbpsF/T bps
  • 令服务器的与路由器之间的链路速率为RsR_s,路由器与客户之间的速率为RcR_c,对于简单的两链路网络,其吞吐量是min{Rs,Rc}min\{R_s,R_c\},是瓶颈链路的传输速率

1.5 协议层次及其服务模型

1.5.1 分层的体系结构

  • 为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件
    • 协议分层具有概念化和结构化的优点,分层提供了一种结构化方式来讨论系统组件.模块化使更新系统组件更为容易
    • 分层的缺点是一层可能冗余较低层的功能,某层的功能可能需要可能需要仅在其他某层才出现的信息,违反层次分离的目标
  • 各层的所有协议被称为协议栈,目前由5层组成:物理层,链路层,网络层,运输层和应用层
    • ISO OSI参考模型为7层:物理层,链路层,网络层,运输层,会话层,表示层和应用层
      • 表示层的作用是使通信的应用程序能够解释交换数据的含义,包括数据压缩,数据加密和数据描述
      • 会话层提供了数据交换的定界和同步功能,包括了建立检查点和恢复方案的方法
  • 应用层
    • 应用层是网络引用程序以及它的应用层协议存留的地方
    • 应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息分组,把这种位于应用层的信息分组称为报文
  • 运输层
    • 因特网的运输层在应用程序端点之间传送应用层报文
    • 在因特网中,有两种运输层协议,即TCP和UDP
      • TCP向它的应用程序提供了面向连接的服务,包括了应用层报文向目的地的确保传递和流量控制,并提供拥塞控制机制
      • UDP协议向它的应用程序提供无连接服务,不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制
    • 运输层的分组称为报文段
  • 网络层
    • 网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机
    • 在一台源主机中的因特网运输层协议向网络层递交运输层报文段和目的地址
    • 网络层包括IP协议,定义了在数据报中各个字段以及端系统和路由器如何作用于这些字段,也包括决定路由的路由选择协议,根据该路由将数据报从源传输给目的地
    • 网络层简单地称为IP层
  • 链路层
    • 因特网的网络层通过源和目的地之间的一系列路由器路由数据报
    • 为了将分组从一个节点移动到路径上的下一个节点,网络层必须依靠该链路层的服务.特别是在每个节点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点,在该下一个节点,链路层将数据包上传至网络层
    • 链路层的分组称为帧
  • 物理层
    • 物理层的任务是将该帧的一个个比特从一个节点移动到下一个节点,在这层中的协议仍然是链路相关的,并且进一步与该链路的实际传输媒体相关

1.5.2 封装

  • 链路层交换机实现了第一层和第二层
  • 路由器实现了第一层到第三层
  • 封装:
    • 在发送主机端,一个应用层报文被传给运输层.在最简单的情况下,运输层收取报文并附上附加信息,该首部将被接收端的运输层使用,应用层报文和传输层首部信息一道构成了运输层报文段,运输层报文段因此封装了应用层报文
    • 运输层向网络层传输该报文段,网络层增加了如源和目的端系统地址等网络层首部信息,生成了网络层数据报
    • 该数据包被传递给链路层,链路层增加了它自己链路层首部信息并生成链路层帧
    • 在每一个层中,一个分组具有两个类型的字段:首都字段和有效载荷字段,有效载荷通常使来自上一层的分组

1.6 面对攻击网络

  • 拒绝服务攻击(DDOs)
    • 弱点攻击
    • 带宽洪泛
    • 连接洪泛
  • 分组嗅探器:记录每个流经的分组副本的被动接收机
  • IP哄骗:将具有虚假源地址的分组注入因特网的能力

2 应用层

2.1 应用层协议原理

  • 研发的网络应用程序是写出能够运行在不同的端系统和通过网络彼此通信的程序
  • 网络核心设备并不是在应用层上起作用,而仅在较低层起作用,特别是在网络层及下面层次起作用,这种基本设计,即将应用软件限制在端系统的方法,促进了大量的网络应用程序的迅速研发和部署

2.1.1 网络应用程序体系结构

  • 应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序.在选择应用程序体系结构时,应用程序研发者利用两种主流结构之一:客户-服务器体系或对等(P2P)体系结构
    • 在客户-服务器体系结构中,有一个总是打开打主机称为服务器,它服务于来自许多其他称为客户的主机的请求
      • 客户相互之间不直接通信
      • 服务器具有固定的,周知的地址称为IP地址
    • 在P2P体系结构中,对位于数据中心的专用服务器有最小的依赖,相反应用程序在间断连接的主机对之间使用直接通信,主机称为对等方
      • P2P的自扩展性,尽管每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件也为系统增加服务能力

2.1.2 进程通信

  • 进行通信的实际上是进程
  • 在两个不同端系统的进程,通过跨越计算机网络交换报文而相互通信
    • 发送进程生成并向网络中发送报文
    • 接受进程接受报文并可能通过会送报文进行相应
  • 客户和服务器进程
    • 网络应用程序由成对的进程组成,这些进程通过网络相互发送报文,发起通信的进程被标识为客户,在会话开始时等待联系的进程称为服务器
  • 进程和计算机网络之间的接口
    • 多数应用程序是由通信进程对组成的,每对中的两个进程互相发送报文
    • 进程通过一个称为套接字的软件接口向网络发送报文和从网络接受报文
    • 套接字是同一台主机内应用层与运输层之间的接口,套接字也称为应用程序和网络之间的应用程序编程接口(API)
  • 进程寻址
    • 在因特网中,主机由IP地址标识,目的地端口号指定了接受主机上的接受进程
    • web服务器用端口号80来标识,邮件服务器进程用端口号25来标识

2.1.3 可供应用程序使用的运输服务

  • 在发送端的应用程序将报文推进该套接字,在套接字的另一侧运输层协议负责从接受进程的套接字得到该报文
  • 一个运输层协议能够为调用它的应用程序提供可靠的数据传输,吞吐量,定时和安全性服务
  • 可靠的数据传输
    • 可靠的数据传输:一个协议提供了确保数据交付服务
    • 运输层协议能够潜在的向应用程序提供的一个重要服务是进程到进程的可靠数据传输.当一个运输协议提供这种服务时,发送进程只要将其数据传递进该套接字,就可以完全相信该数据能无差错的到达接收进程
    • 容忍丢失的应用可以接收运输层协议不提供可靠数据传输时,发送进程发送的某些数据可能到达不了的接收进程
  • 吞吐量
    • 带宽敏感的应用:具有吞吐量要求的应用程序
    • 弹性应用:能够根据当时可用的带宽或多或少地利用使用的吞吐量
  • 定时:运输层协议能提供定时保证
  • 安全性:运输层协议能为应用程序提供一种或多种安全性服务

2.1.4 因特网提供的运输服务

  • TCP服务
    • TCP服务模型包括面向连接服务和可靠数据传输服务
      • 面向连接的服务
      • 可靠的数据传输服务
      • 拥塞控制机制
      • TCP安全性
        • 安全套接字层(SSL)加强后的TCP不仅能做传统TCP的一切,而且能提供关键的进程到进程的安全性服务,包括加密,数据完整性和端点检测
        • 在应用层实现的
        • 当一个应用使用SSL时,发送进程向SSL套接字传输明文数据;在发送主机中的SSL则加密该数据并将加密的数据传递给TCP套接字
  • UDP服务
    • 不提供不必要服务的轻量级运输协议,仅提供最小服务,无连接的(没有握手过程),没有拥塞控制机制

2.1.5 应用层协议

  • 应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文
  • 应用层协议规定了
    • 交换的报文类型
    • 各种报文类型的语法
    • 字段的语义
    • 确定了一个进程何时以及如何发送报文,对报文进行响应的规则

2.2 Web和HTTP

2.2.1 HTTP概况

  • Web的应用层协议是超文本传输协议(HTTP)
  • HTTP由两个程序实现:一个客户程序和一个服务器程序.客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话
    • HTTP定义了报文的结构以及客户和服务器进行报文交换的方式
      • HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式
    • HTTP是一个无状态协议
      • 不保存关于客户的任何信息,服务器在接收相同对象第二次请求时,重新发送对象
    • HTTP使用TCP作为它的支撑运输协议
  • Web页面由对象组成
    • 多个Web页面含有一个HTML基本文件以及几个引用对象
    • Web浏览器实现了HTTP的客户端
    • Web服务器实现了HTTP的服务器端,用于存储Web对象,每个对象由URL寻址

2.2.2 非持续连接和持续连接

  • 非持续连接:每个请求是经一个单独的TCP连接发送
  • 持续连接:所有的请求及其响应经相同的TCP发送
    • HTTP默认情况下为持续连接
  • 采用非持续连接的HTTP
    1. HTTP客户进程在端口号80发起服务器的TCP连接,该端口号是HTTP默认的端口.在客户和服务器上分别有一个套接字与该连接相关联
    2. HTTP客户经它的套接字向该服务器发送一个HTTP请求报文
    3. HTTP服务器进程经它的套接字接收该请求报文,从其存储器检出对象,在一个HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文
    4. HTTP服务器进程通知TCP断开该TCP连接
    5. HTTP客户接收响应报文,TCP连接关闭
    6. 对每个引用的对象重复前4个步骤
  • 非持续连接的作用
    • 每个TCP连接在服务器发送一个对象后关闭,即该连接并不为其他的对象而持续下来
    • 每个TCP连接只传输一个请求报文和响应报文
  • HTML的往返时间(RTT):包括分组传播时延,分组在中间路由器和交换机上的排队时延以及分组处理时延
    • 总的响应时间是两个RTT加上服务器传输HTML文件的时间
  • 非持续连接的缺点
    • 必须为每一个请求的对象建立和维护一个全新的连接
    • 每一个对象经受两倍RTT的交付时延,即一个RTT用于创建TCP,一个RTT用于请求和接收一个对象
  • 采用HTTP1.1持续连接的情况下,在相同的客户与服务器之间,后续的请求和相应报文通过相同的连接进行传送
    • 如果一条连接经过一定时间间隔未被使用,HTTP服务器将关闭连接

2.2.3 HTTP报文格式

  • HTTP请求报文,报文由ASCII文本书写
    • 请求报文的第一行叫做请求行,后继的行称为首部行
    • 请求行有3个字段:方法字段,URL字段和HTTP版本字段
      • 方法字段包括:GET,POST,HEAD,PUT,DELETE
        • 使用GET方法时实体体为空,而使用POST方法时才使用该实体体
        • 方法字段是POST时,实体体中包含的是用于在表单字段中的输入值
        • HTML表单经常使用GET方法,并在所请求的URL中包括的输入的数据
        • HEAD方法类似GET方法,服务器受到HEAD请求时,将会用一个HTTP报文进行相应,但是并不返回请求对象
        • PUT方法常与WEB发行工具联合使用,允许用户上传对象到指定的WEB服务器上指定的路径
        • DELETE方法允许用户或应用程序删除WEB服务器上的对象
    • 首部行提供信息是Web代理高速缓存所要求的
      • Connection:close首部行,该浏览器告诉服务器不要麻烦地使用持续连接,要求服务器在发送完请求后就关闭该连接
      • User-agent首部行,指明用户代理,即浏览器地类型
      • Accept-lanuage首部行(协商首部之一):用户想得到该对象的法语版本
  • HTTP响应报文
    • 有三部分:初始状态行,6个首部行,实体体
    • 状态行有3个字段:协议版本字段,状态码和相应状态信息
    • 首部行
      • Connection:close首部行,告诉客户发送完报文后将关闭该TCP连接
      • Data首部行,指示服务器产生并发生该响应报文的日期和时间(服务器从文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间)
      • server首部行,类似HTTP请求报文中的User-agent首部行
      • Last-Modified首部行,指示对象创建或最后修改的日期和时间
      • Content-length首部行,指示被发送对象中的字节数
      • COntent-Type首部行,指示实体体中的对象是HTML文本
    • 状态码
      • 200 oK,请求成功,信息在返回的响应报文中
      • 301 Moved Permanently,请求的对象已经被永久转移了,新的URL定义在响应报文的Location首部行中
      • 400 Bad Reauest,通用差错代码,指示该请求不能被服务器理解
      • 404 Not Found,被请求的文芳不在服务器上
      • 505 HTTP Version Not Supported,服务器不支持请求报文使用的HTTP协议版本

2.2.4 用户与服务器的交互:cookie

  • cookie在RFC6265中定义,允许站点对用户进行跟踪
  • 有4个组件:
    • 在HTTP响应报文中的一个cookie首部行
    • 在HTTP请求报文中的一个cookie首部行
    • 在用户端系统中保留一个cookie文件,并由用户的浏览器进行管理
    • 位于web站点的一个后端数据库
  • HTTP报文的Set-cookie首部含有识别码,该识别码用于跟踪用户
  • cookie可以用于标识一个用户,用户首次访问一个站点时,可能需要提供一个用户标识,在后继会话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户
    • cookie可以在无状态的HTTP之上建立一个用户会话层

2.2.5 Web缓存

  • Web缓存器也叫代理服务器(proxy server)
    • 能够代表初始web服务器来满足http请求的网络实体
    • web缓存器由自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本
  • 假设浏览器正在请求对象,会发生以下情况
    1. 浏览器创建一个到Web缓存器的TCP连接,并向缓存服务器中的对象发送一个HTTP请求
    2. web缓存器进行检查,看本地是否存储了该对象的副本,若有则向客户浏览器用http响应报文返回该对象
    3. 若没有该对象,则打开一个与该对象的初始服务器的tcp连接.web浏览器则在这个缓存器到服务器的tcp连接上送一个对象的http请求,收到请求后,初始服务器向该web缓存器发送具有该对象的http响应
    4. web缓存器接收该对象时,在本地存储空间存储一份副本,并向客户用http响应报文发送该副本
  • 在因特网部署web缓存器的两个原因
    • web缓存器可以大大减少对客户请求的响应时间
      • 总的响应时间即从浏览器请求一个对象到接收到该对象为止的时间,时局域网时延,接入时延和因特网时延之和
      • 通过CDN,web缓存器在因特网发挥重要的作用
    • web缓存器可以大大减少一个机构的接入链路到因特网的通信量

2.2.6 条件GET方法

  • 允许缓存器正式它的对象是最新的机制为条件GET
    • 如果请求报文使用GET方法,并且请求报文包含If-Modified-Since首部行,则这个报文iu是条件GET方法
  • GET方法操作方式
    • 代理缓存器代表一个请求浏览器,向某web服务器发送一个请求报文
    • 该web服务器向缓存器发送具有被请求的对象的响应报文
    • 该缓存器在将对象发到请求的浏览器的同时,也在本地缓存该对象
    • 若If-Modified-Since首部行的值等于Last-Modified首部行的值,条件GET报文告诉服务器,仅当指定日期之后该对象被修改过,才发送该对象;假定该对象没有修改,接下来,web服务器向该缓存器发送一个响应报文

2.3 因特网中的电子邮件

  • 电子邮件系统具有3个主要组成部分:用户代理,邮件服务器简单邮件传输协议(SMTP)
    • 用户代理又叫邮件阅读器,撰写,边集和阅读邮件
    • 邮件服务器
      • 邮件中管理和维护发送给用户的邮件
      • 输出报文队列保持发送邮件报文
      • 邮件服务器之间的SMTP协议:发送email报文
        • 客户:发送方邮件服务器
        • 服务器:接收端邮件服务器
  • SMTP
    • 使用TCP在客户端和服务器之间传送报文,端口号为25
    • 直接传输:从发送方服务器到接收方服务器
    • 传输的3个阶段
      • 握手
      • 传输报文(报文必须为7为ASCII码)
      • 关闭
    • 命令/响应交互
      • 命令:ASCII文本
      • 响应:状态码和状态信息
    • SMTP使用持久连接
  • SMTP与HTTP比较
    • HTTP:拉(pull)
    • SMTP:推(push)
    • 两者都是ASCII形式的命令/响应交互,状态码
    • HTTP:每个对象封装在各自的响应报文中
    • SMTP:多个对象包含在一个报文中
  • 邮件报文格式:每个首部必须含有一个From首部行和一个TO首部行,可能需要Subject首部行,报文主体为ASCII码字符
  • 邮件访问协议
    • SMTP:传送到接收方的邮件服务器
    • 邮件访问协议:从服务器访问邮件
      • POP:用户身份确认并下载
      • IMAP:更多特性,在服务器上处理存储的报文
      • HTTP
  • POP3协议(本地管理文件夹)
    • 用户确认阶段
      • 客户端命令:user声明用户名,pass口令
      • 服务器响应:+OK,-ERR
    • 事务处理阶段,客户端:
      • list报文号列表
      • retr根据报文号检索报文
      • dele删除
      • quit
    • 下载并保留,不用客户机上为报文的拷贝
    • POP3在会话中是无状态的
  • IMAP(远程管理文件夹)
    • IMAP服务器将每个报文与一个文件夹联系起来
    • 允许用户用目录来组织报文
    • 允许用户读取报文组件
    • IMAP在会话过程中保留用户状态
      • 目录名,报文ID与目录名之间映射

2.4 DNS:因特网的目录服务

  • 主机的一种标识方法是用主机名,而主机名难以被路由器处理,使用IP地址进行标识

2.4.1 DNS提供的服务

  • **域名系统(DNS)**的任务:进行主机名到IP地址转换的目录服务
    • 一个由分层的DNS服务器实现的分布式数据库
    • 一个使得主机能够查询分布式数据库的应用层协议
      • DNS协议运行在UDP上,使用53号端口
  • DNS协议是应用层协议的原因
    • 使用客户-服务器模式运行在通信的端系统之间
    • 在通信的端系统之间通过下面的端到端运输层协议来传送DNS报文
  • DNS服务器的做法
    1. 同一台用户主机上运行着DNS应用的客户端
    2. 浏览器上URL中抽取出主机名,并将这台主机名传给DNS应用的客户端
    3. DNS客户向DNS服务器发送一个包含主机名的请求
    4. DNS客户最终会受到一份回答报文,其中包含对应于该主机名的IP地址
    5. 一旦浏览器接收到来自DNS的该IP地址,它能够向位于该IP地址的80端口的HTTP服务器进程发起一个TCP连接
  • DNS提供的其他服务:
    • 主机别名
    • 邮件服务器别名
    • 负载分配

2.4.2 DNS工作机理概述

  • 假设运行在用户主机上的某些应用程序需要将主机名转换为IP地址
    • 应用程序将调用DNS的客户端,并指明需要被转换的主机名.用户主机上的DNS接收到后,向网络中发送一个DNS查询报文.所有的DNS请求和回答报文使用UDP数据报经端口53发送.经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文.这个映射结果则被传递到调用DNS的应用程序
  • 集中式设计的问题:单点故障,通信容量,远距离的集中式数据库,维护
    • 在单一DNS服务器上运行集中式数据库没有可扩展能力,故采用分布式的方案
  • 分布式,层次数据库
    • 根DNS服务器,顶级域DNS服务器和权威服务器
    • 本地DNS服务器不属于该服务器的层次结构,但它对DNS层次结构至关重要
  • 在查询时,使用递归查询和迭代查询
    • 从请求主机到本地DNS服务器的查询是递归的,其余的查询时迭代的
  • DNS缓存
    • 为了改善时延性能并减少在因特网上到处传播的DNS报文数量
    • 在一个请求链中,当某DNS服务器接收一个DNS回答时,能将映射缓存在本地存储器中
    • 由于主机和主机名与IP地址间的映射并不是永久的,DNS服务器在一段事件后将丢弃缓存的信息

2.4.3 DNS记录和报文

  • 共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(RR),RR提供了主机名到IP地址的映射
  • 资源记录是一个4元组, (Name, Value, Type, TTL)
    • TTL是该记录的生存时间,决定了资源记录应当从缓存中删除的时间
    • 若Type=A,则Name是主机名,Value是主机名对应的IP地址,一条类型为A的资源记录提供了标准的主机名到IP地址的映射
    • 若Type=NS,则Name是一个域,Value是获得域中主机IP地址的权威DNS服务器的主机名,这个记录用于沿着查询链来路由DNS查询
    • 若Type=CNAME,则Value是别名Name的主机对应的规范主机名
    • 若Type=MX,则Value是个别名为Name的邮件服务器的规范主机名
  • 如果一台DNS服务器是用于某特定主机名的权威DNS服务器,那该DNS服务器会有一条包含用于该主机名的类型A记录
    • 如果服务器不是用于主机名的权威服务器,那么该服务器将包含一条类型NS记录,该记录对应于包含主机名的域,还将包括一条类型A记录,该记录提供了在NS记录的Value字段中的DNS服务器IP地址
  • DNS报文
    • DNS查询和回答报文具有相同的格式
    • 前12个字节是首部区域
      • 第一个字段标识符是16比特的数,用于标识该查询,会被复制到对查询的回答报文中,以便客户用它匹配发送的请求和接收到的回答
      • 标志字段含有若干个标志,查询/回答标志用0标识查询报文1标识回答报文
        • 若希望执行递归查询,将设置1比特的希望递归标志位
    • 问题区域包含正在查询的信息
      • 名字字段,包含正在被查的主机名
      • 类型字段,指出有关该名字的正被询问的问题类型
    • 回答区域包含了对最初请求的名字的资源记录,包含多条RR
  • 使用nslookup程序从工作的主机直接向某些DNS服务器发送DNS查询报文

2.5 P2P文件分发

  • 在P2P文件分发中,每个对等方能够向任何其他对等方重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器

2.6 视频流和内容分发网

  • 视频的一个重要特性:能被压缩,因而可用比特率来权衡视频质量

2.6.2 HTTP流和DASH

  • HTTP流具有严重缺陷,即所有客户接收到相同编码的视频,尽管对不同的客户或者对于相同客户的不同时间而言,客户可用的带宽大小有很大不同
  • 经HTTP的动态适应性流(DASH):
    • 在DASH中,视频编码为几个不同的版本,其中每个版本具有不同的比特率,对应于不同的质量水平.客户动态地请求来自不同版本且长度为几秒的视频段数据块.当可用带宽量较高时,客户自然地选择来自高速率版本的块;当可用带宽量较低时,客户自然地选择来自低速率版本的块.客户用HTTP GET请求报文一次选择一个不同的块
    • 使用DASH后,每个视频版本存储在HTTP服务器中,每个版本都有一个不同的URL
    • HTTP服务器也有一个告示文件,为每个版本提供了一个URL及其比特率

2.6.3 内容分发网

  • CDN两种不同的服务器安置原则
    • 深入
    • 邀请做客
  • 许多CDN 没有将视频推入它们的集群,而是使用一种简单的拉策略
    • 如果客户向一个未存储该视频的集群请求某视频,则该集群检索该视频(从某中心仓库或者从另一个集群),向客户流式传输视频时的同时在本地存储一个副本
  • 集群选择策略:动态地将客户定向到CDN中的某个服务器集群或数据中心机制
    • 地理上最为临近
    • 为了基于当前流量条件为客户决定最好的集群,CDN能够对其集群和客户之间的时延和丢包性能能进行周期性的实时测量

2.7 套接字编程:生成网络应用

  • 当生成一个套接字时,就为它分配一个端口号的标识符
    • 分组的目的地址包括该套接字的端口号,发送进程为分组附上目的地址,该目的地址是由目的主机IP地址和目的地套接字的端口号组成的

3 运输层

  • 运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分
    • 该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用

3.1 概述和运输层服务

  • 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能
  • 运输层协议是在端系统中而不是在路由器中实现的
    • 在发送端,运输层将从发送应用程序进程接收到的报文转换成运输层分组,该分组称为运输层报文段
    • 实现的方法是将应用报文划分为较小的块,并为每块加上一个运输层首部以生成运输层报文段.然后,在发送端系统中,运输层将这些报文段传递给网络层,网路层将其封装成网络层分组并向目的地发送
    • 网络路由器仅作用于该数据报的网络层字段;即它们不检查封装在该数据报的运输层报文段的字段.在接收端,网络层从数据报中提取运输层报文段,并将该报文段向上交给运输层.运输层则处理接收到的报文段,使该报文段中的数据为接收应用进程使用.

3.1.1 运输层和网络层的关系

  • 网络层提供了主机之间的逻辑通信,运输层为运行在不同主机上的进程之间提供了逻辑通信
  • 即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务
    • 即使底层网络协议是不可靠的,也就是说网络层协议会使分组丢失,篡改和冗余,运输协议也能为应用程序提供可靠的数据传输服务

3.1.2 因特网运输层概述

  • UDP(用户数据报协议),为调用它的应用程序提供了一种不可靠,无连接的服务
  • TCP(传输控制协议),为调用它的应用程序提供一种可靠的,面向连接的服务
  • 将运输层分组称为报文段
  • 网络层包括IP协议,其服务模型为尽力而为交付服务,为不可靠服务
  • UDP和TCP的服务模型
    • 基本责任是将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务
      • 将主机间交付扩展到进程间交付被称为运输层的多路复用多路分解
    • UDP和TCP可以通过在其报文段首部中包括差错检查字段而提供完整性检查
    • 进程到进程的数据交付和差错检查是两种最低限度的传输层服务,也是UDP仅能提供的两种服务,UDP也是一种不可靠的服务
    • TCP提供可靠数据传输,通过流量控制,序号,确认和定时器,确保正确地,按序地将数据从发送进程交付给接收进程
      • 提供拥塞控制机制,防止任何一条TCP连接用过多流量来淹没通信主机之间的链路和交换设备
        • 通过控制发送端的流量速率来力求为每一个通过一条拥塞网络链路的连接平等地共享网络链路带宽

3.2 多路复用与多路分解

  • 运输层的多路复用与多路分解:将由网络层提供的主机到主机交付服务延伸到为运行在主机上的应用程序提供进程到进程到交付服务
    • 在目的主机,运输层从紧邻其下的网络层接收报文段,运输层负责将这些报文段中的数据交付给主机上运行的适当的应用程序进程
    • 一个进程有一个或多个套接字,相当于从网络向进程传递数据和从进程向网络传递数的用户
    • 在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了中间的套接字
    • 套接字具有唯一的标识符,标识符的格式取决于是TCP还是UDP的套接字
  • 多路分解:在接收端,运输层检查这些字段,标识出接受套接字,进而将报文段定向到该套接字.将运输层报文段中的数据交付到正确的套接字的工作
  • 多路复用:在源主机从不用套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络
  • 运输层多路复用要求
    • 套接字由唯一标识符
    • 每个报文段由特殊字段来指示该报文段所要交付的套接字
      • 特殊字段是端口号字段和目的端口号字段
        • 端口号是一个16比特的数,范围为0~65535之间
        • 0~1023范围内的端口号是周知端口号,是受限制的
  • 在运输层实现分解服务
    • 在主机上的每个套接字能够分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字.然后报文段中的数据通过套接字进入其所连接的进程
  • UDP套接字由二元组全面表示的,该二元组包含一个目的IP地址和一个目的端口号
  • TCP套接字由四元组(源IP地址,源端口号,目的IP地址,目的端口号)来标识
  • web服务器和tcp
    • 连接套接字与进程之间并非总是有着一一对应的关系
    • 事实上,当今的高性能web服务器使用一个进程,但是为每个新的客户连接创建一个具有新连接套接字的新线程(线程为轻量级的子进程)

3.3 无连接服务:UDP

  • UDP从应用进程得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及两个其他的小字段,然后将形成的报文段交给网络层.网络层将该运输层报文段封装到一个IP数据报中,然后尽力而为地尝试将此报文段交付给接收主机.如果该报文段到达接收主机,UDP使用目的端口号将报文段中的数据交付给正确的应用进程.值得注意的是,使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手
  • 许多应用更适合UDP的原因
    • 关于发送什么数据以及何时发送的应用层控制更加精细
      • 采用UDP时,只要应用进程将数据传递给UDP,UDP就会将此数据打包进UDP报文段并立即将其传递给网络层
    • 无需连接建立
      • DNS运行在UDP之上的原因
    • 无连接状态
      • TCP需要在端系统中维护连接状态.此连接状态包括接收和发送缓存,拥塞控制参数以及序号与确认号的参数
    • 分组首部开销小
      • 每个TCP报文段都有20字节的首部开销,UDP仅有8字节的开销
  • 由无控制的UDP发送发引入的高丢包率将引起TCP发送方大大减小它们的速率
    • 因此UDP中缺乏拥塞控制导致UDP发送方和接收方之间的高丢包率,并挤垮了TCP会话
  • 使用UDP的应用是可能实现可靠数据传输的,应用层自身保证可靠性

3.3.2 UDP检验和

  • 发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷
  • 许多链路层协议提供差错检测的原因:是不能保证源和目的之间的所有链路都提供差错检测
    • 如果端到端数据传输服务要提供差错检测,UDP就必须在端到端基础上再运输层提供差错检测
    • 端到端原则:因为某种功能必须基于端到端实现

3.4 可靠数据传输原理

  • 可靠数据传输协议(rdt)

3.4.1 构造可靠数据传输协议

  • 经完全可靠信道的可靠数据传输:rdt1.0:底层信道完全可靠
    • 有限状态机(FSM)
      • 箭头指示了协议从一个状态变迁到另一个状态
      • 引起变迁的时间显示在标识变迁的横线的上方
      • 事件发生时所采取的动作显式再横线下方
      • 如果对一个时间没有动作,或没有就事件发生而采取一个动作,横线上方或下方使用符号明确表示缺少动作或事件
      • 初始状态用虚线表示
  • 经具有比特差错信道的可靠数据传输:rdt2.0:停等协议
    • 控制报文使得接收方可以让发送方直到哪些内容被正确接收
    • 基于重传机制的可靠数据传输协议称为**自动重传(ARQ)**协议
    • ARQ协议中三种协议功能来处理存在比特差错的情况
      • 差错检测
      • 接收方反馈
        • 反馈ACK或NAK
      • 重传
  • 有比特差错信道上实现的一个无NAK的可靠数据传输协议:rdt2.2
    • 解决ACK或NAK可能出错的问题:在数据分组中添加一个新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段,接收方检查序号即可确定收到的分组是否一次重传
    • 如果收到受损的分组,则接收方将发送一个否定确认,对上次正确接收的分组发送一个ACK,发送方接收到对同一个分组的两个ACK,就知道接收方没有正确接收
    • 接收方必须包括有一个ACK报文所确认的分组序号,发送方此时必须检查接收到的ACK报文中被确认的分组序号
  • 经具有比特差错的丢包信道的可靠数据传输:rdt3.0
    • 发送方与接收方之间的一个往返时延加上接收方处理一个分组所需的时间,等待这样长的时间确定分组已被丢失
    • 基于时间的重传机制,需要一个倒计数定时器
    • 分组在0和1之间交替,rdt3.0被称为比特交换协议

3.4.2 流水线可靠数据传输协议

  • 发送方(或信道)的利用率:发送方实际忙于将发送比特送进信道的那部分时间与发送时间的之比Usender=L/RRTT+L/RU_{sender} = \frac{L/R}{RTT+L/R}
  • 流水线(pipelining)技术:不以停等方式运行,允许发送方发送多个分组而无需等待确认
  • 对可靠数据传输协议的影响
    • 必须增加序号范围
    • 协议的发送方和接收方缓存多个分组
  • 解决流水线的差错恢复的两种基本方法:回退N步选择重传

3.4.3 回退N步

  • 回退N步(GBN)协议,滑动窗口协议
    • 基序号(base):最早未确认分组的序号
    • 下一个序号(nextseqnum):最小的未使用序号(下一个待发送分组的序号)
    • 窗口长度:N
    • 已被发送但还未被确认的分组需要序号范围可看作是一个需要范围内长度为N的窗口.随着协议的运行,该窗口在序号空间向前滑动
  • 在实践中,一个分组的序号承载在分组首部的一个固定长度的字段中,若分组序号的比特数是k,则序号范围是[0,2k1][0, 2^k-1]
    • 在一个有限的序号范围内,所涉及序号的运算必须使用模2k2^k运算
  • GBN发送方必须响应三种类型的事件
    • 上层的调用
    • 收到一个ACK
      • 在GBN协议中,对序号为n的分组的确认采取累计确认的方式,表明接收方已正确接收到序号为n的以前且包括n在内的所有分组
    • 超时事件
      • 如果出现超时,发送方重传所有已发送但还未被确认过的分组
  • 在GBN中,接收方的动作简单,如果一个序号为n的分组被正确接收到,并且按需,则接收方为分组n发送一个ACK,并将该分组中的数据部分交付到上层.在所有其他情况下,接收方丢弃该分组,并为最近按序接收的分组重新发送ACK
  • GBN重传机制的优点是接收缓存简单,即接收方不需要缓存任何失序妇女组.虽然发送方必须维护窗口的上下边界及nextseqnum在该窗口中的位置,但是接收方需要维护唯一信息就是下一个按序接收的分组的序号

3.4.4 选择重传

  • 选择重传(SR)协议通过让发送方仅重传那些它怀疑在接收方出错的分组而避免了不必要的重传
  • SR接收方将确认一个正确接收的分组而不管其是否按序
    • 失序的分组将被缓存直到所有丢弃分组皆被收到位置,这时可以将一批分组按序交付给上层
  • 发送方和接收方的窗口并不总是一致的
  • 窗口长度必须小于或等于序号空间大小的一半

3.5 面向连接的运输:TCP

3.5.1 TCP连接

  • TCP被称为面向连接的
  • TCP提供的是全双工服务
  • TCP连接总是点对点的
  • TCP建立的过程:三次挥手
    • 客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应.最后,客户再用第三个特殊报文段作为响应
    • 前两个报文不包含应用层数据,第三个报文段可以承载有效载荷
  • TCP可以从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(MSS)
    • MSS通常根据最初确定的由本地发送主机的最大链路层帧长度(所谓的最大传输单元(MTU))来设置
    • 设置MSS要保证一个TCP报文段(当封装在IP数据报中)加上**TCP/IP首部长度(通常为40字节)**将适合单个链路层帧
    • 以太网和PPP链路层协议都具有1500字节的MTU,因此MSS典型值为1460字节
    • MSS是指在报文段里应用层数据的最大长度,而不是指包括首部TCP报文段的最大长度
  • TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段,这些报文段被下传到网络层,网络层将其封装在网络层IP数据报中,然后数据报将被发送到网络中.当TCP在另一端接收到一个报文段后,该报文段的数据就被放入该TCP连接的接收缓存中

3.5.2 TCP报文段结构

  • 首部包括源端口号和目的端口号,被用于多路复用/分解来自或送到上层应用的数据据
  • 首部包括检验和字段
  • 32比特的序号字段和32比特的确认号字段:被TCP发送方和接收方用来实现可靠数据传输服务
  • 16比特的接收窗口字段,用于流量控制
  • 4比特的首部长度字段,指示了以32比特的字为单位的TCP的首部长度
  • 可选与变长的选项字段,用于发送方与接收方协商最大报文段长度(MSS),或在高速网络下用作窗口调节因子使用
  • 6比特的标志字段
    • ACK比特用于指示确认字段中的值是有效的
    • RST,SYN,FIN比特用于连接建立和拆除
    • CWR,ECE比特用于明确拥塞通告
    • PSH被置位时,就指示接收方应立即将数据交给上层
    • URG比特指示报文段里存在着被发送端的上层实体置为“紧急”的数据
      • 紧急数据的最后一个字节由16比特的紧急数据指针字段指出
      • 当紧急数据存在并给出指向紧急数据尾指针时,TCP必须通知接收端的上层实体
  • 序号和确认号
    • TCP把数据看成一个无结构,有序的字节流
      • 序号建立在传送的字节流上,而不是建立在传送的报文段的序列之上
      • 一个报文段的序号因此是该报文段首字节的字节流编号
      • 主机A填充仅报文段的确认号是主机A期望从主机B收到的下一字节的序号
  • TCP提供累积确认
  • 一条TCP连接的双方均可随机地选择初始序号,可以减少将那些仍在网络中存在地两台主机之间先前已终止的连接报文段,误认为是后来这两台主机之间新建连接所产生的有效报文段的可能性
  • 对客户到服务器的数据确认被装载在一个承载服务器到客户的数据的报文段中,这种确认被称为是被捎带

3.5.3 往返时间的估计与超时

  • 估计往返时间
    • 大多数TCP的实现仅在某个时刻做一次SampleRTT测量,而不是为每个发送的报文段测量一个SampleRTT
  • 一旦获得一个新的SampleRTT时,TCP就会根据公式来更新EstimatedRTT(SampleRTT均值)
    • EstimatedRTT=(1α)EstimatedRTT+αSampleRTTEstimatedRTT = (1-\alpha) EstimatedRTT+\alpha SampleRTT
    • RFC中的推荐值α=0.125\alpha = 0.125
  • RFC定义了RTT偏差DevRTT,用于估算SampleRTT一般会偏离EstimateRTT的程度:DevRTT=(1β)DevRTT+βSampleRTTEstimatedRTTDevRTT = (1-\beta) DevRTT + \beta |SampleRTT - EstimatedRTT|
    • RFC中的推荐值β=0.25\beta = 0.25
  • 设置和管理重传超市时间间隔
    • TimeoutInterval=EstimatedRTT+4DevRTTTimeoutInterval = EstimatedRTT + 4 DevRTT
    • 推荐的初始值TimeoutInterval值为1秒.同时当出现超时后,TimeoutInterval值将加倍,以免即将被确认的后继报文段过早出现超时

3.5.4 可靠数据传输

  • IP不保证数据报的交付,不保证数据报的按序交付,也不保证数据报中数据的完整性
  • TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流时无损坏,无间隔,非冗余和按序的数据流
    • 字节流与连接的另一方端系统发送出的字节流是完全相同
  • TCP发送方有3个与发送和重传有关的主要事件:
    • 从上层应用程序接收数据;定时器超时和收到ACK
      • 一旦第一个主要事件发生,TCP从应用程序接收数据,将数据封装在一个报文段中,并把该报文段交给IP,每个报文段含有一个序号,该序号为该报文段第一个数据字节的字节流编号.若定时器还没有为某些其他报文段而运行,则当报文段被传给IP时,TCP就启动该定时器
    • 超时
      • TCP重传引起超时的报文段来响应超时事件,然后TCP重启定时器
    • 到达一个来自接收方的确认报文段(ACK)
      • 当该事件发生时,TCP将ACK的值y与变量SendBase进行比较.TCP状态变量SendBase是最早未被确认的字节的序号
      • TCP采取累积确认,y确认了字节编号在y之前的所有字节都已经收到
      • y>SendBasey>SendBase,则该ACK是在确认一个或多个先前未被确认的报文段,发送方更新SendBase变量;若当前有未被确认的报文段,TCP还要重启定时器
  • 超时间隔加倍
    • 每次TCP重传时都会将下一次的超时间隔设为先前的两倍,而不是从EstimatedRTT和DevRTT更新
    • 超时间隔在每次重传后会呈指数型增长
      • 然而,每当定时器在另两个事件中的任意一个启动时,TimeoutInterval由最近的EstimatedRTT与DevRTT值推算得到
  • 快速重传
    • 当一个报文段丢失时,这种长超时周期迫使发送方延迟重传丢失的分组,因此增加了端到端时延
    • 冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到对该报文段的确认
    • 当TCP接收方收到一个具有序号大于下一个所期望的,按序的报文段,它检测到了数据流的一个间隔,着就是说有报文段丢失
    • 如果TCP发送方接收到对相同数据的3个冗余ACK,说明这个被确认过3次的报文段已经丢失
      • 一旦收到3个冗余ACK,TCP就执行快速重传,在该报文段的定时器过期之前重传丢失的报文段
  • 回退N步还是选择重传
    • TCP采用选择确认
    • 允许TCP接收方有选择地确认失序报文段,而不是累积的确认最后一个正确接收地有序报文段

3.5.5 流量控制

  • TCP为应用程序提供了流量控制服务
    • 流量控制是一个速度匹配服务
    • TCP发送方也可能因为IP网络的拥塞控制而被抑制,这种形式的发送方控制称为拥塞控制
    • TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制
  • 定义变量
    • LastByteRead:主机B上的应用进程从缓存读出的数据流的最后一个字节的编号
    • LastByteRcvd:从网络中到达的并且已经放入主机B接收缓存中的数据流的最后一个字节的编号
    • TCP不允许已分配的缓存溢出,故LaseByteRcvdLastByteRead<=RcvBuffer,rwnd=RcvBuffer[LastByteRcvdLastByteRead]LaseByteRcvd-LastByteRead<=RcvBuffer,rwnd=RcvBuffer-[LastByteRcvd-LastByteRead]
  • 使用rwnd来提供流量控制机制
    • 主机B通过把当前的rwnd值放入它发送给主机A的报文段接收窗口字段中,通知主机A它在该连接的缓存中还有多少可用空间
    • 开始时,主机B设定rwnd=RcvBuffer
    • 主机A轮流跟踪两个变量LastByteSent和LastByteAcked,主机A发送到连接中但未被确认的数据量LastByteSent-LastByteAcked.通过将未确认的数据量控制在值rwnd以内,就可能保证主机A不会使主机B溢出,主机A在整个生命周期内保证LastByteSentLastByteAcked<=rwndLastByteSent-LastByteAcked<=rwnd
    • TCP仅当在它有数据或有确认要发时才会发送报文段该主机A
    • 当主机B的接收窗口为0时,主机A继续发送只有一个字节数据的报文段
      • 报文段将会被接收方确认,最终缓存将开始清空,并且确认报文里将包含一个非0的rwnd值

3.5.6 TCP连接管理

  • 通过TCP建立连接(三次握手)
    • 第一步:客户端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段.该报文段中不包含应用层数据.但是在报文段的首部中的一个标志位(即SYN比特)被置为1.因此,这个特殊报文段被称为SYN报文段.另外,客户会随机地选择一个初始序号(client_isn),并将此编号放置于该起始的TCP SYN报文段的序号字段中.该报文段会被封装在一个IP数据报中,并发送给服务器
    • 第二步:一旦包含TCP SYN报文段的IP数据报到达服务器主机()假定它的确到达了),服务器会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段.(在完成三次握手的第三步之前分配这些缓存和变量,使得TCP易于受到称为SYN洪泛的拒绝服务攻击)这个允许连接的报文段也不包含应用层数据
      • 但是,在报文段的首部却包含3个重要的信息
        • 首先,SYN比特被置为1
        • 其次,该TCP报文段首部的确认号字段被置为client_isn+1
        • 服务器选择自己的初始序号(server_isn),并将其放置到TCP报文段首部的序号字段中
    • 第三步:在收到SYNACK报文段后,客户也要给该连接分配缓存和变量.客户主机则向服务器发送另外一个报文段;这最后一个报文段对服务器的允许连接的报文段进行了确认(该客户通过将值server_isn+1放置到TCP报文段首部的确认字段中来完成此项工作)
      • 因为连接已经建立了,所以该SYN比特被置为0.该三次握手的第三个阶段可以在报文段负载中携带客户到服务器的数据
      • 在以后的每一个报文段,SYN比特都i将将被置为0
  • 关闭连接
    • 客户应用进程发出一个关闭连接命令,引起客户TCP向服务器进程发送一个特殊的TCP报文段.这个特殊的报文段让其首部中的一个标志位即 FIN比特被设置为1.当服务器接收到该报文段后,就向发送方回送一个确认报文段.然后,服务器发送它自己的终止报文段,其FIN比特被置为1.最后,该客户对这个服务器的终止报文段进行确认.此时,在两台主机上用于该连接的所有资源都被释放了
  • TCP状态变迁
    • 客户的应用程序发起一个新的TCP连接,引起客户中的TCP向服务器中TCP发送一个SYN报文段.在发送过SYN报文段后,客户TCP进入了SYN_SENT状态.当客户TCP处于SYN_SENT状态时,它等待来自服务器TCP的对客户所发报文段文段进行确认且SYN比特被置为1的一个报文段.收到这样一个报文段之后,客户TCP进入ESTABLISHED(已建立)状态.当处在ESTABLISHED状态时,TCP客户就能发送和接收包含有效载荷数据(即应用层产生的数据)的TCP报文段了
    • 假设客户应用程序决定要关闭该连接.这引起客户TCP发送一个带有FIN比特被置为1的TCP报文段,并进入FIN_WAIT_1状态.当处在FIN_WAIT1状态时,客户TCP等待一个来自服务器的带有确认的TCP报文段.当它收到该报文段时,客户TCP进入FIN_WAIT_2状态.当处在FIN_WAIT_2状态时,客户等待来自服务器的FIN比特被置为1的另一个报文段;当收到该报文段后,客户TCP对服务器的报文段进行确认,并进入TIME_WAIT状态.假定ACK丢失,TIME_WAIT状态使TCP客户重传最后的确认报文.在TIME_WAIT状态中所消耗的时间是与具体实现有关的,而典型的值是30秒、1分钟或2分钟.经过等待后,连接就正式关闭,客户端所有资源(包括端口号)将被释放
  • 考虑主机接收一个tCP报文段,其端口号或源IP地址与该主机上进行中的套接字都不匹配的情况
    • 该主机将向源发送一个特殊重置报文段,该TCP报文段将RST标志位置为1
    • 当一台主机接收一个UDP分组,它的目的端口与进行中的UDP套接字不匹配,该主机发送一个特殊的ICMP数据报

3.6 拥塞控制机制

3.6.1 拥塞原因与代价

  • 情况1:两个发送方和一个具有无穷大缓存的路由器
    • 当分组的到达速率接近链路容量时,分组经历巨大的排队时延
  • 情况2:两个发送方和一台具有有限缓存的路由器
    • 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组
    • 发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组
  • 情况3:4个发送方和具有有限缓存的多台路由器及多跳路径
    • 一个分组沿一条路径被丢弃时,每个上有路由器用于转发该分组到丢弃该分组而使用的传输容器最终被浪费掉了

3.6.2 拥塞控制方法

  • 端到端拥塞控制
    • 网络层没有为运输层拥塞控制提供显式支持
    • 网络中存在拥塞,端系统也必须通过对网络行为的观察来推断
  • 网络辅助的拥塞控制
    • 路由器向发送方提供关于网络中拥塞状态的显式反馈

3.7 TCP拥塞控制

  • TCP所采用的方法是让每一个发送方格局所感知到的网络拥塞程序来限制其能向连接发送流量的速率
    • TCP连接的每一段都是由一个接收缓存,一个发送缓存和几个变量组成
    • 运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,即拥塞控制窗口cwnd,对一个TCP发送方能向网络中发送流量的速率进行了限制
    • 发送方的发送概率大概是cwnd/RTT字节/cwnd/RTT 字节/秒,通过调节cwnd的值,发送方因此能调整它向连续发送数据的速率
    • 当出现过度的拥塞时,在沿着这条路径上的一台路由器的缓存会溢出,引起一个数据报被丢弃.丢弃的数据报接着会引起发送方的丢包事件,发送方就认为在发送方到接收方的路径上出现了拥塞的指示
  • TCP是自计时的:TCP使用确认来触发增大它的拥塞窗口长度
  • TCP的指导性原则来设置发送速率
    • 一个丢弃的报文段表意味着拥塞,因此当丢弃报文段时应当降低TCP发送方的速率
      • 从拥塞控制的观点,该问题是TCP发送方应当如何减小它的拥塞控制窗口长度,即减小其发送速率,以应对这种推测的丢包事件
    • 一个确认报文段指示网络正向接收方交付发送方的报文段
      • 因此,当对先前未确认报文段的确认到达时,能够增加发送方的速率
    • 带宽探测
      • 给定ACK指示源到目的地路径无拥塞,而丢包事件指示路径拥塞,TCP调节其传输速率的策略是增加其速率以响应到达的ACK,除非出现丢包事件,此时才减小传输速率
  • TCP拥塞控制算法
    • 慢启动
      • 当一条TCP连接开始时,cwnd的值通常初始置为一个MSS较小值,使得初始发送速率大约为MSS/RTTMSS/RTT
      • 在慢启动状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加1个MSS
      • 每过一个RTT,发送速率就翻翻番
        • TCP发送速率起始慢,在慢启动阶段以指数增长
      • 结束指数增长
        • 如果存在一个由超时指示的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动过程
        • 并且将ssthresh(慢启动阈值的速记)设置为cwnd/2cwnd/2,即当检测到拥塞时将ssthresh置为拥塞窗口的一半
        • 当cwnd等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式
        • 进入拥塞避免模式时,TCP更加谨慎地增加cwnd
        • 当检测到3个冗余ACK时,TCP执行快速重传并进入快速恢复状态
    • 拥塞避免
      • 一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的值的一半,即距离拥塞可能并不遥远
      • TCP无法每过一个RTT再将cwnd的值翻番,而是每个RTT只将cwnd的值增加一个MSS
      • 一种通用的方法是对于TCP发送方无论何时到达一个新的确认,就将cwnd增加一个MSS(MSS/cwnd)字节
      • 何时应当结束拥塞避免的线性增长?
        • 当出现超时时,TCP的拥塞避免算法行为相同.与慢启动的情况一样,cwnd的值被设置为1个MSS,当丢包事件出现时,ssthresh的值被更新为cwnd值的一半
        • 丢包事件也能由一个三个冗余ACK事件触发.在这种情况下,网络继续从发送方向接收方交付报文段,TCP将cwnd的值减半,并且当收到3个冗余的ACK,将ssthresh的值记录为cwnd的值的一半.接下来进入快速恢复状态
    • 快速恢复
      • 在快速恢复中,对于引起TCP进入快速恢复状态的缺失报文段,对收到的每个冗余的ACK,cwnd的值增加一个MSS.最终,当对丢失报文段的一个ACK到达时,TCP在降低cwnd后进入拥塞避免状态.如果出现超时事件,快速恢复在执行如同在慢启动和拥塞免中相同的动作后,迁移到慢启动状态:当丢包事件出现时,cwnd的值被设置为1个MSS,并且 ssthresh的值设置为cwnd值的一半
      • 快速恢复是TCP推荐的而非必需的构件.一种称为TCP的TCP早期版本,不管是发生超时指示的丢包事件,还是发生3个冗余ACK指示的天包事件,都无条件地将其拥塞窗口减至1个MSS,并进人慢启动阶段
    • TCP拥塞控制:回顾
      • 每个RTT内cwnd线性(加性)增加1MSS,然后出现3个冗余ACK事件时,cwnd减半(乘性减)
      • TCP拥塞控制称为加性增,乘性减
      • TCP线性增加它的拥塞窗口长度,直到出现3个冗余ACK事件,然后以2个因子来减少它的拥塞窗口长度,然后又开始了线性增长,探测是否还有另外地可用带宽
  • 对TCP吞吐量地宏观描述
    • 在分析中,将忽略在超时事件后出现的慢启动阶段(这些阶段通常非常短,因为发送方很快就以指数增长离开该阶段)
      • 在一个特定的往返间隔内,TCP发送数据的速率是拥塞窗口与当前RTT的函数.当窗口长度是w字节,且当前往返时间是RTT秒时,则TCP的发送速率大约是w/RTTw/RTT
      • TCP通过每经过1个RTT将w增加1个MSS探测出额外的带宽,直到一个丢包事件发生为止.当一个丢包事件发生时,用W表示w的值.
        • 假设在连接持续期间RTT和W几乎不变,TCP的传输速率在W/(2RTT)W/(2RTT)W/RTTW/RTT之间变化
    • TCP稳态行为的一个高度简化的宏观模型
      • 当速率增长至W/RTT时,网络丢弃来自连接的分组;然后发送速率就会减半,进而每过一个RTT就发送速率增加MSS/RTT,直到再次达到W/RTT为止
      • 这一过程不断地自我重复.因为TCP吞吐量(即速率)在两个极值之间线性增长
      • 一条连接地平均吞吐量=0.75WRTT一条连接地平均吞吐量=\frac{0.75W}{RTT}
  • 经高带宽路径地TCP
    • 丢包率为L,往返事件RTT和最大报文长度MSS
    • 一条连接地平均吞吐量=1.22MSSRTTL一条连接地平均吞吐量=\frac{1.22MSS}{RTT \sqrt{L}}

3.7.1 公平性

  • 考虑K条TCP连接,每条都有不用的端到端路径,但是都经过一段传输速率为R bps的瓶颈链路
    • 瓶颈链路:指对于每条连接,沿着该连接路径上所有其他段链路都不拥塞,而且与该瓶颈链路的传输容量相比,都有充足的传输容量
    • 如果每条连接的平均传输速率接近R/KR/K,即每条连接都得有相同份额的链路带宽
  • 从TCP的观点看,运行在UDP上的多媒体运用时不公平的
    • 它们不与其他连接合作,也不适合地调整其传输速率,因此TCP拥塞控制在面临拥塞增加时,将降低其传输速率,而UDP源则不必这样做
    • UDP源有可能压制TCP流量

4 网络层:数据平面

  • 网络层能够分解成两个相互作用的部分:数据平面控制平面

4.1 网络层概述

  • 每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报
  • 控制平面的主要作用是协调一些本地的每台路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送

4.1.1 转发和路由选择:数据平面和控制平面

  • 转发:指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作
    • 当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适合的输出链路
    • 转发是在数据平面中实现的唯一功能
  • 路由选择:指确定分组从源到目的地所采取的端到端路径的网络范围处理过程
    • 当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径
    • 计算这些路径的算法称为路由选择算法
      • 路由选择算法决定了插入该路由器转发表的内容
      • 运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能
  • 每台网络路由器中有一个关键元素是它的转发表
    • 路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。这些值对应存储在转发表项中的值,指出了该分组将被转发的路由器的输出链路接口
  • 控制平面:SDN方法
    • 软件定义网络(SDN):计算转发表并与路由器交互的控制器是用软件实现的,网络是软件定义的

4.1.2 网络服务模型

  • 网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性,该服务包括
    • 确保交付
    • 具有时延上界的确保交付
    • 有序分组交付
    • 确保最小带宽
    • 安全性
  • 因特网的网络层提供单一的服务,称为尽力而为服务
    • 传送的分组既不能保证以它们发送的顺序被接收,也不能保证它们最终交付
    • 既不能保证端到端时延,也不能保证最小带宽
  • 分组交换机是一台通用分组交换设备,根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组
    • 某些链路层帧的字段值做出转发决定,交换机因此称为链路层(第二层)设备
    • 其他分组交换机称为路由器,基于网络层数据报中的首部字段值做出转发决定

4.2 路由器工作原理

  • 路由器的4个组件
    • 输入端口
    • 交换结构
    • 输出端口
    • 路由选择处理器
  • 路由器处理的信息
    • 基于目的地转发
    • 通用转发

4.2.1 输入端口处理和基于目的地转发

  • 输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。在输入端口中执行的查找对于路由器运行时至关重要的
    • 路由器使用转发表来查找输出端口,使得到达的分组能经过交换结构转发到该输出端口。
    • 转发表时路由选择处理器计算和更新的,或者转发表接收来自远程SDN控制器的内容
    • 使用在每个输入端口的影子副本,转发决策能在每个输入端口本地做出,无须基于每个分组调用集中式路由选择处理器,避免了集中式处理的瓶颈
  • 当使用转发表时,路由器用分组目的地址的前缀与该表中的表象进行匹配
    • 如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发分组
    • 当有多个匹配项时,该路由器使用最长前缀匹配规则,寻找在表中最长的匹配项,并与最长前缀匹配相关联的链路接口转发分组

4.2.2 交换

  • 经内存交换
  • 经总线交换
    • 输入端口经一根共享总线将分组直接传送到输出端口,不需要经过路哟选择处理器的干预
    • 路由器的交换带宽受到总线速率的限制
  • 经互联网络交换
    • 纵横式交换机是一种由2N条总线组成的互联网络,它连接N个输入端口与N个输出端口
    • 纵横式交换机是非阻塞的,即只要没有其他分组当前被转发到该输出端口,转发到输出端口的分组将不会被到达输出端口的分组阻塞

4.2.4 何时出现排队

  • 因为随着队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包
  • 线路前部阻塞(HOL):在一个输入队列中排队的分组必须等待通过交换结构发哦是那个,因为它被位于线路前部的另一个分组所阻塞
  • 当没有足够的内存来缓存一个入分组时
    • 要么丢弃到达的分组(弃尾)
    • 要么删除一个或多个已排队的分组

4.2.5 分组调度

  • 先进先出(FIFO)
    • 当链路当前正忙于传输另一个分组,到达链路输出队列的分组要排队等待传输,若没有足够的缓存空间来容纳到达的分组,队列的分组丢弃测量确定该分组是否被丢弃
    • 按照分组到达输出链路队列的相同次序来选择分组在链路上传输
  • 优先权排队
    • 到达输出链路的分组被分类放入输出队列中的优先权类
    • 非抢占式优先排队:一旦分组开始传输,就不能打断
  • 循环和加权公平排队
    • 循环排队规则:分组像使用优先权排队那样被分类,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务
      • 最简单的循环调度中,类1的分组被传输,接着是类2的分组,接着又是类1的分组
    • 保持工作排队规则
      • 在有分组排序等待传输时,不允许链路保持空闲
      • 当寻找给定类的分组但是没有找到时,保持工作的循环规则将立即检查循环序列中的下一个类

4.3 网络协议:IPv4,寻址,IPV6及其他

4.3.1 IPv4数据报格式

  • 网络层分组被称为数据报
  • IPv4数据报的关键字
    • 版本(号),4比特规定了数据报的IP协议版本
    • 首部长度,4比特确定IP数据报中的载荷实际开始的地方
      • 大多数IP数据报不包含选项
      • 一般的IP数据报具有20字节的首部
    • 服务类型
      • 使不同类型的IP数据报能相互区别开来
    • 数据报长度
      • 16比特,IP数据报的总长度,以字节计
      • IP数据报的理论最长长度为65535字节,数据报很少有超过1500字节的,该长度使得IP数据报能容纳最大长度以太网帧的载荷字段
    • 标识,标志,片偏移
    • 寿命(TTL)
      • 确保数据报不会永远在网络中循环
      • 每当一台路由器处理数据报时,该字段的值减1,若TTL字段减为0,则该数据报必须丢弃
    • 协议
      • 仅当一个IP数据报到达其最终目的地才会有用。该字段值指示了IP数据报的数据部分应当给哪个特定的运输层协议
      • 值为6表明数据部分要交给TCP,值为17表明数据要交给UDP
    • 首部检验和:用于帮助路由器检测受到的IP数据报中的比特错误
    • 源和目的IP地址:当源生成一个数据报时,在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址
    • 选项:允许IP字段被扩展
    • 数据:有效载荷
  • 一个IP数据报有总长为20字节的首部,如果数据报承载一个TCP报文段,则每个数据报共承载总长40字节的首部(20字节的IP首部加上20字节的TCP首部)以及应用层报文

4.3.2 IPv4数据报分片

  • 一个链路层帧能承载的最大数据量叫做最大传输单元(MTU)
    • 每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器,故链路层协议的MTU严格地限制着IP数据报的长度
  • IPv4设计者将标识,标志和片偏移字段放在IP数据报首部中
    • 当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号
    • 发送主机通常将它的发送的每个数据报的标识号加1
    • 当某路由器需要对一个数据报分片时,形成的每个数据报具有初始数据报的源地址,目的地址与标识号
    • 当目的地从同一发送主机收到一系列数据报时,能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片
    • 为了让目的主机绝对地相信它已收到了初始数据报地最后一个片,最后一个片地标志比特被设为0,而所有其他片地标志比特被设为1

4.3.3 IPv4编址

  • 简述主机与路由器连入网络的方法
    • 一台主机通常只有一个链路连接网络;当主机中的IP想发送一个数据报时,它就在该链路上发送
    • 主机与物理链路之间的边界叫做接口
      • 路由器的任务是从链路层上接收数据报并从某些其他链路转发出去,路由器必须拥有两条或更多条链路与它连接
      • 路由器与它的任意一条链路之间的边界称做接口
    • 一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联
  • IP地址为32比特,采用点分十进制记法
    • 地址中的每个字节用它的十进制形式书写,各字节间以句号隔开
    • 在全球因特网中每台主机和路由器的每个接口都不许有全球唯一的IP地址
    • 一个接口的IP地址的一部分需要由其连接的子网来决定
  • 子网掩码,指示32比特中最左侧的x比特定义了子网地址
    • 一个子网的IP地址定义并不局限于连接多台主机到一台路由器接口的以太网段
  • 确认子网
    • 分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端口
    • 隔离的网络中的每一个都叫做一个子网
  • 因特网的地址分配策略称为无类别域间路由选择(CIDR)
    • 将子网的概念一般化
    • 当使用子网寻址时,32比特的IP被划分为两部分,并且也具有点分十进制数形式a.b.c.d/xa.b.c.d/x
      • x指示了地址第一部分中的比特数,指示了子网掩码
      • x最高比特构成了IP地址的网络部分,并且经常被称为前缀
        • 使用单个网络前缀通过多个网络的能力称为地址聚合或路由聚合
  • a.b.c.d/xa.b.c.d/x中前x比特定义了组织的网络前缀,网络部分,剩余的32-x部分在该组织中划分子网
    • 网络部分划分为长度为8位,16或24比特分别为A,B和C类网络,是一种称为分类编址的编址方案
    • A(/8)类网络
    • B(/16)类网络,可容纳65534台主机
    • C(/24)类网络,可容纳282=2542^8-2=254台主机
  • 当主机发出一个目的地址位255.255.255.255的数据报时,该报文会交付给同一网络中的所有主机
    • 也会向邻近的子网转发该报文
  • 动态主机协议配置(DHCP)
    • 即插即用协议,零配置协议
    • 某些主机将被分配一个临时的IP地址,每次与网络连接时该地址也许不同
    • 是一个客户-服务器协议,在最简单场合下,每个子网将具有一台DHCP服务器,如果在某子网中没有服务器,则需要一个DHCP中继代理
    • DHCP是一个4个步骤的过程
      • DHCP服务器发现
        • 通过使用DHCP发送报文来完成,客户在UDP分组中向端口67发送该发现报文。该UDP分组封装在一个IP数据报中
        • 在这种情况下,DHCP客户生成包含DHCP发现报文的IP数据报,其中使用广播目的地址255.255.255.255并且使用“本主机”源IP地址0.0.0.0
        • DHCP客户将该IP数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点
      • DHCP服务器提供
        • DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的所有节点广播,仍然使用IP广播地址255.255.255.255
        • 每台路由器提供的报文包含有收到的发现报文事务ID,向客户推荐的IP地址,网络掩码以及IP地址租用期
      • DHCP请求
        • 新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数
      • DHCP ACK
        • 服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数

4.3.4 网络地址转换

  • 网络地址转换NAT
    • 使能路由器对于外部世界来说甚至不像一台路由器
    • 相反NAT路由器对外界的行为就如同具有单一IP地址的单一设备
    • 从本质上讲,NAT使能路由器对外界隐藏了家庭网络的细节
  • 从广域网到达NAT路由器的所有数据报都具有相同的目的IP地址,路由器上的NAT转换表,并且在表项中包含了端口号及其IP地址,使路由器讲某个分组转发给内容主机
  • NAT穿越通用即插即用(UPnP)
    • UPnP是一种允许主机发现和配置邻近NAT的协议

4.3.5 IPv6

  • IPv6数据报
    • 扩大的地址容量
      • IPv6将IP地址长度从32比特增加到128比特
      • IPv6引入了一种任播地址的新型地址,可以是数据报交付给一组主机中的任意一个
    • 简化高效的40字节首部:形成的40字节定长首部允许路由器更快地处理IP数据报
    • 流标签:具有流定义
  • IPv4向IPv6的迁移
    • 建隧道:两台IPv6路由器之间的IPv4路由器的集合称为隧道
    • 借助于隧道,在隧道发送端的IPv6节点可将IPv6的数据报放在一个IPv4数据报的数据字段中

4.4 通用转发和SDN

  • 将基于目的地转发的特征总结为两个步骤
    • 查找目的IP地址(“匹配”)
    • 然后将分组发送到有特定输出端口的交换结构(“动作”)
  • 匹配加动作转发表在OpenFlow中称为流表,表项包括
    • 首部字段值的集合
    • 计数器集合
    • 当分组匹配流表项时所采取的动作集合

4.4.1 匹配

  • 11个分组首部字段和入端口ID,该ID能被OpenFlow 1.0中的匹配加动作规则所匹配
    • 到达一台分组交换机的一个链路层(第二层)帧将包含一个网络层(第三层)数据报作为其有效载荷,该载荷通常依次将包含一个运输层(第四层)报文段
    • OpenFlow的匹配抽象允许对来自三个层次的协议首部所选择的字段进行匹配
    • 源和目的MAC地址是与帧的发送和接收接口相关联的链路层地址;通过基于以太网地址而不是IP地址进行转发,OpenFlow使能的设备能够等价于路由器(第三层设备)转发数据报以及交换机(第二层设备)转发帧。以太网类型字段对应于较高层协议(例如IP),利用该字段分解该帧的载荷,并且VLAN字段与所谓虚拟局域网相关联
    • 入端口是指分组交换机上接收分组的输入端口

4.4.2 动作

  • 每个流表项都有零个或多个动作列表,决定了应用与流表项匹配的分组的处理
    • 若有多个动作,则按在表中规定的次序执行
  • 其中最为重要的动作可能是
    • 转发
    • 丢弃
    • 修改字段

5 网络层:控制平面

  • 转发表和流变计算,维护和安装的方法
    • 每路由器控制:在每台路由器中运行一种路由选择算法的情况,每台路由器中都包含转发和路由功能
    • 逻辑集中式控制:逻辑集中式控制器计算并分发转发表以供每台路由器使用

5.2 路由选择算法

  • 用图来形式化描述路由选择问题
    • G=(N,E)G=(N,E)是一个N个节点和E条边的集合,其中每条边是取自N的一对节点
    • 在网络层路由选择的环境中,图中的节点表示路由器(做出分组转发决定的点)
    • 连接节点的边表示路由器之间的物理链路
  • 最低开销路径问题:找出源和目的地之间具有最低开销的一条路
    • 最低开销路径就是最短路径,及在源和目的地之间具有最小链路数量的路径
  • 路由选择算法的分类
    • 集中式路由选择算法
      • 具有关于连通性和链路开销方面的完整信息
      • 具有全局状态信息的算法称为链路状态(LS)算法
    • 分散式路由选择算法
      • 路由器以迭代,分布式的方式计算出最低开销路径
      • 距离向量(DV)算法的分散式路由选择算法
    • 静态路由选择算法,动态路由选择算法
    • 负载敏感算法

5.2.1 链路状态路由选择算法

  • 在链路状态算法中,网络拓扑和所有的链路开销都是一致的,可用作LS算法的输入
  • 链路状态路由选择算法也叫做Dijkstra算法
    • 在初始化步骤,从u到与其直接相连的邻居v、x、w的当前已知最低开销路径分别初始化为2、1和5。特别值得注意的是,到w的开销被设为5,因为这是从u到w的直接(一跳)链路开销。到y与z的开销被设为无穷大,因为它们不直接与u连接
    • 在第一次迭代中,观察那些还未加到集合N'中的节点,并且找出在前一次迭代结束时具有最低开销的节点。那个节点便是x,其开销是1,因此x被加到集合N'中。于是LS算法中的第12行中的程序被执行,以更新所有节点v的D(v),产生表5-1中第2行(步骤1)所示的结果。到v的路径开销未变。经过节点x到w(在初始化结束时其开销为5)的路径开销被发现为4。因此这条具有更低开销的路径被选中,且沿从u开始的最短路径上w'的前一节点被设为x。类似地,到y(经过x)的开销被计算为2,且该表也被相应地更新
    • 在第二次迭代时,节点v与y被发现具有最低开销路径(2),并且我们任意改变次序将y加到集合N'中,使得N'中含有u、x和y。到仍不在N'中的其余节点(即节点v、w和z)的开销通过LS算法中的第12行进行更新
    • 如此等等
  • 链路状态算法在最差情况下复杂性为O(n2)O(n^2)

5.2.2 距离向量路由选择算法

  • 距离向量算法是一种迭代器,异步的和分布式的算法
    • 每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将器计算结果分发给邻居
    • 此过程一直要持续到邻居之间无更多信息要交换为止
    • 不要求所有节点相互之间步伐一致地操作
  • 最低开销与Bellman_Ford方程dx(y)=minvc(x,v)+dv(y),minv是对x地所有邻居的d_x(y) = min_v { c(x,v) + d_v(y) },min_v是对x地所有邻居的
  • 基本思想
    • 每个节点x以Dx(y)D_x(y)开始,对在N中的所有结点y,估计从x到y的最低开销路径的开销
    • Dx=[Dy:yN]D_x = [D_y:y \in N]是节点x的距离向量,该向量是从x到在N中所有其他节点y的开销估计向量
    • 使用DV算法,每个节点x维护下列路由选择信息
      • 对于每个邻居v,从x到直接相连邻居v的开销为c(x,v)c(x,v)
      • 节点x的距离向量,即Dx=[Dy:yN]D_x = [D_y:y \in N],包含了x到N中所有目的地y的开销估计值
      • 它的每个邻居的距离向量,即对x的每个邻居v有Dv=[Dv:yN]D_v = [D_v:y \in N]
    • 在该分布式,异步算法中,每个节点不时地向它的每个邻居发送它的距离向量副本
    • 当节点x从任何一个邻居w接收到一个新距离向量,它保存w的距离向量,然后使用dx(y)=minvc(x,v)+dv(y)d_x(y) = min_v { c(x,v) + d_v(y) }方程更新自己的距离向量
    • 如果节点x的距离向量因这个变化步骤而改变,节点x接下来将向它的每个邻居发送其更新后的距离向量,继而让所有邻居更新自己的距离向量
    • 每个开销估计Dx(y)收敛到dx(y)D_x(y) 收敛到 d_x(y)
  • DV算法只需要两次迭代就达到了静止状态
    • 在x与y之间开销减少的好消息通过网络得到了迅速传播
    • 关于链路开销增加的坏消息传播很慢
  • LS与DV算法的比较
    • 在DV算法中,每个节点仅与它直接相连的邻居交谈,但为其邻居提供了从自己到网络中所有其他节点的最低开销估计
      • LS算法需要全局信息
    • 报文复杂性
      • LS算法要发送O(NE)O(|N||E|)的报文
      • DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文
        • 当链路开销改变时,DV算法仅当在新的链路开销导致与该链路相连节点的最低开销路径发生改变时,才传播以改变的链路开销
    • 收敛速度
      • LS算法的实现时一个要求O(NE)O(|N||E|)个报文的O(N2)O(N^2)算法
      • DV算法收敛较慢,且在收敛时会遇到路由选择环路,还会遭遇无穷计数问题
    • 健壮性

5.3 因特网中自治系统内部的路由选择:OSPF

  • 自治系统:AS
  • 开放最短路有限(OSPF)
    • 链路状态协议,使用洪泛链路状态信息和Dijkstra最低开销路径算法
    • 使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图。于是,每台路由器在本地运行Dijkstra的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树
    • 使用时,路由器向自治系统内所有其他路由器广播路由选择信息。每当一条链路的状态发生变化,路由器就会广播链路状态信息。即使链路状态未发生变化,也要周期性地广播链路状态
    • OSPF通告包含在OSPF报文中,该OSPF报文直接由IP承载,对OSPF其上层协议地值未89
  • OSPF的优点
    • 安全
    • 多条相同开销的路径
    • 对单播与多播路由选择的综合支持
    • 支持在单个AS中的层次结构

5.4 ISP之间的路由选择:BGP

  • OSPF是一个AS内部路由选择协议
    • 当在相同AS内的源和目的地之间进行分组选路时,分组遵循的路径完全由AS内路由选择协议所决定
    • 因为AS间路由选择协议涉及多个AS之间的协调,AS通信必须运行相同的AS间路由选择协议
    • 在因特网中,所有的AS运行相同的AS间路由选择协议,称为边界网关协议(BGP)
      • BGP是一种分布式和异步的协议

5.4.1 BGP的作用

  • 作为AS间的路由选择协议,BGP为每台路由器提供了一种完成以下任务的手段
    • 从邻居AS获得前缀的可达性信息
    • 确定到该前缀的最好的路由器

5.4.2 通过BGP路由信息

  • 每台路由器要么是一台网关路由器,要么是一台内部路由器
    • 网关路由器是一台位于AS边缘的路由器,直接连接到在其他AS中的一台或多台路由器
    • 内部路由器仅连接在它自己AS中的主机和路由器
  • 在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息
    • 每条直接连接以及所有通过该连接发送的BGP报文,称为BGP连接
    • 跨越两个AS的BGP连接称为外部BGP(eBGP)
    • 相同AS中的两台路由器之间的BGP会话称为内部BGP(iBGP)
      • iBGP连接并不总是与物理链路对应

5.4.3 确认最好的路由

  • 当路由器通过BGP连接通告前缀时,它在前缀中包括一些BGP属性
    • 前缀及其属性称为路由
    • 两个重要的属性是AS-PATH和NEXT-HOP
      • AS-PATH属性包含了通过已经通过的AS的列表
      • AS-PATH属性还用来检测和防止通过环路
      • NEXT-HOP是AS-PATH起始的路由器的接口IP的地址
  • 热土豆路由选择
    • 使用热土豆路由选择,选择的路由到开始改路由的NEXT-HOP路由器具有最小的开销
  • 路由选择算法
    • 对于任何给定目的地前缀,进入BGP的路由选择算法的输入是到某前缀的所有路由的集合,该前缀是已被路由器学习和接受的
      • 如果仅有一条路由,BGP则显然选择该路由
      • 如果到相同的前缀有两条或多条路由,则顺序调用消除规则直到余一条路由
        • 路由被指派一个本地偏好值作为其属性之一
        • 从余下的路由中,将选择具有最短AS-PATH的路由
        • 从余下的路由中使用热土豆路由选择
        • 若还剩余多条路由,使用BGP标识符选择路由

5.4.4 IP任播

  • BGP还被用于实现IP任播服务,该服务通常用在DNS中

5.5 SDN控制平面

  • SDN体系结构的4个关键特征
    • 基于流的转发
    • 数据平面与控制平面分离
    • 网络控制功能
    • 可编程的网络
  • SDN控制器的功能大体分为3个层次
    • 通信层:SDN控制器和受控网络设备之间的通信
    • 网络范围状态管理层
    • 对于网络控制应用程序层的接口
  • OpenFlow协议运行在TCP之上,使用6653的默认端口号

6 链路层和局域网

6.1 链路层概述

  • 将运行链路层协议的任何设备称为节点
  • 沿通信路径相邻节点的通信信道称为链路
    • 为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输
    • 在通过特定的链路时,传输节点将数据报封装在链路层帧中,并将该帧传送到链路中

6.1.1 链路层提供的服务

  • 尽管任一链路层的基本服务都是将数据报通过单一通信链路从一个节点移动到相邻节点,但所提供的服务细节能够随着链路层协议的不同而变化
  • 链路层提供的服务
    • 成帧
    • 链路接入
      • **媒体控制访问(MAC)**协议规定了帧在链路上传输的规则
    • 可靠交付
    • 差错检测和纠正

6.1.2 链路层在何处出现

  • 链路层的主体部分是在网络适配器中实现的,网络适配器有时也称为网络接口卡
    • 位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务的专用芯片
    • 在发送端,控制器取得了由协议栈较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报,然后遵循链路接入协议将该帧传进通信链路中
    • 在接收端,控制器接受了整个帧,抽取出网络层数据报
    • 如果链路层执行差错检测,则需要发送控制器在该帧的首部设置差错检测比特,由接收控制器执行差错检测

6.2 差错检测和纠正计数

  • 比特级差错检测和纠正
  • 奇偶校验,检测和方法和循环冗余检测

6.2.1 奇偶校验

  • 单个奇偶校验位
    • 在偶校验方案中,发送方只需包含一个附加的比特,选择它的值,使得这d+1比特中1的总数是偶数
  • 二维奇偶校验方案
    • D中的d个比特被划分为i行j列。对每行和每列计算奇偶值。产生的i+j+1奇偶比特构成链路层帧的差错检测比特
    • 包含比特值改变的列和行的校验值都将会出现差错
    • 接收方不仅可以检测到出现了单个比特差错的事实,而且能利用差错的索引来实际识别发生差错的比特并纠正

6.2.2 检验和方法

  • 将k比特整数加起来,并且用得到的和作为差错检测比特
    • 接收方通过对接收的数据的和取反码,并且检测其结果是否全1比特来检测检验和
  • 为什么运输层使用检验和而链路层使用CRC
    • 运输层通常是在主机中作为用户操作系统的一部分用软件实现的
    • 运输层差错检测用软件实现,采用简单而快速如检验和方案是重要的
    • 链路层的差错检测在适配器中用专用的硬件实现,能够快速执行更复杂的CRC操作

6.2.3 循环冗余检测

  • 基于循环冗余检测(CRC)编码,也称为多项式编码
    • 该编码能够将要发送的比特串看作系数是0和1的一个多项式,对比特串的操作被解释为多项式算术
  • 考虑d比特的数据D,发送节点要将它发送给接收节点
    • 发送方和接收方首先必须协商一个r+1比特模式,称为生成多项式
    • 要求G的最高有效位的比特(最左边)是1
  • CRC编码的关键思想
    • 对于一个给定的数据段D,发送方要选择r个附加比特R,并将它们附加到D上,使得得到的d+r比特模式用模2算数恰好能被G整除
    • 进行差错检测的过程:接收方用G去除接收到的d+r比特。如果余数非零,则出现了差错;否则认为数据正确而被接收
  • CRC计算采用模2运算,在加法中不进位,在减法中不借位
    • 等价与按位异或操作
  • 求R公式D×2rXORR=nGR=remainderD×2rG,remainder为取余数D \times 2^r XOR R = nG \Rightarrow R=remainder\frac{D \times 2^r}{G},remainder为取余数

6.3 多路访问链路和协议

  • 两种类型的网络链路
    • 点对点链路:由链路一端的单个发送方和链路另一端的单个接收方组成
    • 广播链路:能让多个发送和接收节点都连接相同的,单一的共享的广播信道上
  • 所有的节点都能够传输帧,所以多个节点可能会同时传输帧
    • 发生这种情况时,所有节点同时接到多个帧
    • 传输的帧在所有的接收方处发生碰撞
    • 碰撞发生时,没有一个接收节点能够有效地获得任何传输的帧
  • 多路访问协议划分为3种类型:信道划分协议,随机接入协议和轮流协议

6.3.1 信道划分协议

  • 时分多路复用(TDM)
  • 频分多路复用(FDM)
  • 码分多址(CDMA)

6.3.2 随机接入协议

  • 时隙ALOHA
  • ALOHA
  • 载波侦听多路访问(CSMA)
  • 具有碰撞检测的载波侦听多路访问(CSMA/CD)

6.3.3 轮流协议

  • 两种轮流协议
    • 轮询协议
      • 要求节点之一被指定为主节点,主节点以循环的方式轮询每个节点
      • 主节点首先向节点1发送一个报文,告诉它能够传输帧的最多数量
      • 在节点1传输率某些帧后,主节点告诉节点2能够传输的帧的最多数量
    • 轮询协议消除了碰撞和空时隙,提高了效率
      • 但引入轮询时延
      • 若主节点有故障,整个信道变得不可操作
    • 令牌传输协议
      • 没有主节点,一个称为令牌的小的特殊帧在节点之间以某种固定的次序进行交换

6.4 交换因特网

6.4.1 链路层寻址和ARP

  • MAC地址
    • 并不是主机或路由器具有链路层地址,而是它们的适配器具有链路层地址
    • 链路层交换机的任务是在主机与路由器之间承载数据报
    • 主机或路由器不必明确地将帧寻址到其间的交换机
    • 链路层地址称为LAN地址物理地址MAC地址
      • 对于大多数局域网(包括以太网和802.11无线局域网)而言,MAC地址长度为6字节,共有2482^48个MAC地址
      • 没有两块适配器具有相同的地址
      • 分配地址的方式:固定MAC地址的前24比特,然后公司自己分配后24个比特
  • 当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入到该帧中,并且将该帧发送到局域网中
    • 当适配器接收到一个帧时,将检查该帧中的目的MAC地址是否与自己的MAC地址匹配
    • 若匹配,该适配将提取封装的数据报,并将其沿协议栈向上传递
    • 若不匹配,适配器丢弃该帧
    • 若需要让局域网上所有其他适配器接收并处理打算发送的帧,发送适配器在该帧的目的地址字段中插入一个特殊的MAC广播地址(FF-FF-FF-FF-FF-FF)
  • 保持各层独立
    • 局域网是为任意网络层协议而设计的,而不只是用于IP和局域网
    • 若适配器被指派IP地址而不是中性的MAC地址,则适配器将不能够方便地支持其他网络层协议
  • 地址解析协议(ARP):存在网络层地址和链路层地址,需要在它们之间进行转换
    • 发送主机使用ARP确认IP地址的目的主机的MAC地址
    • 在发送主机中的ARP模块将取在相同局域网上的任何IP地址作为输入,然后返回相应的MAC地址
    • ARP将一个IP地址解析为一个MAC地址,和DNS类似,DNS将主机名解析为IP地址
      • 每台主机或路由器在其内存中具有一个ARP表,包含IP地址到MAC地址的映射关系,并包含一个寿命值(TTL)值,指示了从表中删除每个映射的时间
  • ARP解析的过程
    • 首先,发送方构造一个称为ARP分组的特殊分组
    • 一个ARP分组有几个字段,包括发送和接收IP地址和MAC地址
    • ARP查询分组和响应分组都具有相同的格式
      • 查询分组的目的是询问子网上所有其他主机和路由器,以确定对于要解析的IP地址的MAC地址
    • 主机向适配器传递一个ARP查询分组,并且指示适配器应该用MAC广播地址(FF-FF-FF-FF-FF-FF)来发送这个分组
    • 适配器在链路层帧中封装这个ARP分组,用广播地址作为帧的目的地址,并将该帧传输进子网中
    • 有趣的事情:查询ARP报文是在广播帧中发送的,响应ARP报文在一个标准帧中发送
  • 一个ARP分组封装在链路层帧中,因而在体系结构上位于链路层之上
    • 一个ARP分组具有包含链路层地址的字段,因而可认为是链路层协议,但也包含网络层地址,因而也可以认为是网络层协议
  • 发送数据报到子网之外
    • 对于帧来说,MAC地址是路由器接口的适配器地址
    • 在子网上的路由器适配器看到该链路层帧是向它寻址的,因此把帧传递给了路由器的网络层

6.4.2 以太网

  • 在安装中,主机(和路由器)直接用双绞对铜线与一台集线器相连
    • 集线器是一种屋里层设备,作用于各个比特而不是作用与帧。当表示一个0或一个1的比特到达一个接口时,集线器只是重新生成这个比特,将其能量强度放大,并将该比特向其他所有接口传输出去
  • 以太网帧结构
    • 考虑从一台主机向另一台主机发送一个IP数据报,且这两台主机在相同的以太局域网上。(尽管以太网帧的负载是一个IP数据报,但我们注意到以太网帧也能够承载其他网络层分组)
    • 设发送适配器A的MAC地址是AA-AA-AA-AA-AA-AA,接收适配器B的MAC地址是BB-BB-BB-BB-BB-BB。发送适配器在一个以太网帧中封装了一个IP数据报,并把该帧传递到物理层。接收适配器从物理层收到这个帧,提取出IP数据报,并将该IP数据报传递给网络层
    • 6个字段
      • 数据字段(46-1500字节),承载IP数据报,以太网的最大传输单元(MTU)是1500字节,数据字段的最小长度是46字节
      • 目的地址(6字节),包含目的适配器的MAC地址
        • 当适配器B收到一个以太网帧,该帧的目的地址无论是BB-BB-BB-BB-BB-BB,还是MAC广播地址,都将该帧的数据字段的内容传递给网络层;若它收到了具有任何其他MAC地址的帧,则丢弃
      • 源地址(6字节),包含了传输该帧到局域网上的适配器上的MAC地址
      • 类型字段(2字节)
      • CRC(4字节),循环冗余检测字段的目的是使得接收适配器检测帧中是否引入了差错
      • 前同步码(8字节)
        • 以太网帧以一个8字节的前同步码字段开始
        • 该前同步码的前7个字节都是10101010,最后一个字节是10101011
        • 前7个字节用于唤醒接收适配器,并将其时钟和发送方的时钟同步
          • 为什么时钟不同步?适配器A的目的是根据以太网类型的不同,分别以10Mbps,100Mbps,1Gbps的速率传输帧
        • 适配器只需通过锁定前同步码的前7字节的比特,就能锁定适配器的时钟
        • 前同步码的第8个字节的最后两个比特警告适配器有重要的内容到达
  • 所有的以太网计数都向网络层提供无连接,不可靠服务
  • 以太网技术
    • 物理媒介仅承载以太网流量
    • 所有的802.3标准都适用于基带以太网
    • 通过使用转发器能够得到更长的运行距离,而转发器是一种物理层设备,能在输入端接收信号并在输出端再生该信号
  • 吉比特以太网为IEEE802.3z,完成的工作
    • 使用标准以太网帧结构,并且向后兼容10BASE-T与100BASE-T技术
    • 允许点对点链路以及共享的广播信道
    • 使用CSMA/CD来共享广播信道
    • 对于点对点信道,允许在两个方向上以40Gbps全双工操作

6.4.3 链路层交换机

  • 交换机的任务是接收入链路层帧并将它们转发到出链路
  • 交换机自身对子网中的主机和路由器是透明的
    • 某主机/路由器向另一个主机/路由器寻址一个帧(而不是向交换机寻址该帧),顺利地将该帧发送进局域网,并不知道某交换机将会接收该帧并将它转发到另一个节点
  • 交换机转发和过滤
    • 过滤是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能
    • 转发是决定一个帧应该被导向哪个接口,并把该帧移动到那些接口的交换机功能
    • 交换机的过滤和转发借助于交换机表
      • 该交换机表包含某局域网上某些主机和路由器的但不必是全部的表项。交换机表中的一个表项包含:一个MAC地址;通向该MAC地址的交换机接口;表项放置在表中的时间
  • 交换机过滤和转发的3种可能的情况
    • 表中没有对于DD-DD-DD-DD-DD-DD的表项。在这种情况下,交换机向除接口x外的所有接口前面的输出缓存转发该帧的副本。换言之,如果没有对于目的地址的表项,交换机广播该帧
    • 表中有一个表项将DD-DD-DD-DD-DD-DD与接口x联系起来。在这种情况下,该帧从包括适配器DD-DD-DD-DD-DD-DD的局域网网段到来。无须将该帧转发到任何其他接口,交换机通过丢弃该帧执行过滤功能即可
    • 表中有一个表项将DD-DD-DD-DD-DD-DD与接口y≠x联系起来。在这种情况下,该帧需要被转发到与接口y相连的局域网网段。交换机通过将该帧放到接口y前面的输出缓存完成转发功能
  • 自学习
    • 交换机的表是自动,动态和自治地建立的,交换机是自学习的,是即插即用设备
    • 能力的实现方式
      • 交换机表初始为空
      • 对于每个接口接收到的每个入帧,交换机在其表中存储
        • 在该帧源地址字段中的MAC地址
        • 该帧到达的接口
        • 当前时间
      • 如果在一段时间(老化期)后,交换机没有接收到以该地址作为源地址的帧,就在表中删除这个地址
  • 链路层交换机的性质
    • 消除碰撞
    • 异质的链路
    • 管理
  • 交换机和路由器的比较
    • 路由器是使用网络层地址转发分组的存储转发分组交换机
    • 尽管交换机是一个存储转发分组交换机,而路由器是第三层的分组交换机,使用“匹配加动作”的现代交换机能够转发基于帧的目的MAC地址的第二层帧,也能转发使用数据报目的IP地址的第三层数据报
  • 交换机的优点
    • 即插即用
    • 具有相对高的分组过滤和转发速率
    • 处理高至第二层的帧,而路由器必须处理高至第三层的数据报
    • 交换网络的活跃拓扑限制为一棵生成树
    • 交换机对于广播风暴并不提供给任何保护措施
  • 网络寻址通常是分层次的,即使当网络种存在冗余路径时,分组通常也不会通过路由器循环

6.4.4 虚拟局域网

  • 使用支持虚拟局域网(VLAN)处理的难题
    • 缺乏流量隔离
    • 交换机的无效使用
    • 管理用户

评论