计网
第一章 计算机网络和因特网
1.1 什么是因特网
回答这个问题有两种方式 其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。
1.1.1 具体构成描述
因特网是一个世界范围的计算机网络,这意味着它互联了数以亿计的计算设备(不仅仅是计算机哦);这些设备包括但不限于传统PC、工作站以及所谓的服务器。现在有更多的设备加入到因特网中,比如便携式计算机、电视机、汽车、传感器等。
用因特网的术语来说,所有连入因特网的设备都叫做主机或者端系统
端系统通过通信链路和分组交换机连接到一起。
-
通信链路由不同的物理媒体组成,传播速度用bit/s或bps来计算
-
分组:当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上头部字节,由此形成的信息包叫分组
- 分组通过网络发送到接收端系统,在那里被装配成初始数据
-
分组交换机从它的一条入通信链路接收到达的消息,并从它的一条出通信链路转发该条消息
- 最著名的分组交换机:路由器和链路层交换机
- 路由器通常用作网络核心
- 链路层交换机常用在接入网
-
一个分组所经历的一系列的通信链路和分组交换机称为通过网络的路径(路由)
端系统通过因特网服务供应商(ISP)(类比移动联通电信等公司)接入因特网中
- 每个ISP本身就是一个由多台分组交换机和通信链路(光纤等等)组成的网络,各ISP为端系统提供了不同类型的网络接入
ISP也为内容提供者提供因特网接入服务,将Web站点直接接人因特网。
- 低层的ISP通过国家的、国际的高层ISP互联起来
- 高层ISP是由通过高速光纤链路互联的高速路由器组成的。
端系统,分组交换机和其他网络部件都需要运行一系列的协议(详见1.1.3)
- 因特网最重要的协议TCP(传输控制协议)/IP(网际协议)
- IP协议定义了路由器和端系统之间交换的分组格式
1.1.2 服务描述
- 分布式应用程序: 应用程序涉及在多个相互交换数据的端系统,故称他们分布式应用程序。
- 与因特网相连的端系统都有一个套接字接口,该接口规定了运行在端系统上的程序请求在因特网基础设施向另一个端系统上特定的目的程序交付数据的方式
- 因特网套接字接口是一个发送程序必须遵守的规则合集
1.1.3 什么是协议
为了完成一项工作,要求两个(或多个)通信实体运行相同的协议
报文的交换以及发送和接收这些报文时所采取的动作是定义 个协议的关键元素
协议 (protocol) 定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和或接收一条报文或其他事件所采取的动作
1.2 网络边缘
通常把与因特网相连的计算机和其他设备称为端系统,因为它们位于因特网的边缘,故而被称为端系统。
端系统也称为主机( host ), 因为它们容纳(即运行)应用程序。
主机有时又被进一步划分为两类 :客户 (client) 和服务器 (server)
- 客户通常是桌面PC,智能手机等(发起请求)
- 服务器是更强大的机器,用于存储和发布Web页面,邮件等(处理请求)
1.2.1 接入网
接入网:是将端系统物理连接到其边缘路由器的网络
- 边缘路由器:是端系统到任何其他远程端系统的路径上的第一台路由器
如下图圈出来的是边缘路由器
接入网的方式:
- 家庭接入:DSL、电缆、FTTH、拨号和卫星(图1-6)
- 企业接入:以太网和WiFi(图1-8)
- 广域无线接入:3G和LTE
1.2.2 物理媒体
- 双绞线:短距离
- 同轴电缆
- 光纤:远距离,高宽带
- 陆地无线电信道
- 卫星无线电信道:同步卫星和近地轨道卫星
1.3 网络核心
网络核心:由互联端系统的分组交换机和链路构成的网状网络
通过网络链路和交换机移动数据有两种基本方法:电路交换和分组交换
1.3.1 分组交换
- 端系统之间彼此交换报文
- 报文能够包含协议设计者需要的任何东西。报文可以执行一种控制功能,也可以包含数据,例如电子邮件数据、JPEG图像或MP3音频文件。
- 为了从源端系统向目的端系统发送一个报文,源将上报文划分为较小的数据块,称为分组
- 在源和目的之间,每个分组都通过通信链路和分组交换机(packet switch)(交换机主要有两类:路由器和链路层交换机)传送。
- 分组以等于该链路最大传输速率的速度传输通过通信链路。因此,如果某源端系统或分组交换机经过一条链路发送一个L比特的分组,链路的传输速率为R比特/秒,则传输该分组的时间为L/R秒。
1,存储转发传输:
- 多数分组交换机在链路的输入端使用存储转发传输,是指在交换机开始向输出链路传输该分组的第一个比特之前,必须接受到整个分组
如上图,报文1,2,3按次序发送到路由器再发送到目的地,但是当报文1到达路由器但报文2没到达路由器时输出链路上是不会有报文发送的。要等到路由器从输入链路上接受到报文1,2,3才会按次序发送到输出链路,从而发送到目的地
2,排队时延和分组丢失
- 每台分组交换机和多个链路连接,对于每条相连的链路,该分组交换机具有一个输出缓存(也称输出队列),它用于存储路由器准备发往那条链路的分组
- 如果该链路正在传输其他分组,那么该分组必须在输出缓存等待(由上一条可知,输出缓存是一种队列,是先进先出的性质,故后面进入队列的需要等待前面进入的先出去),这叫排队时延。这些时延是变化的,变化的程度取决于网络中的拥塞程度。
- 一个到达的分组可能发现输出缓存已经满了的情况,此时将出现分组丢包的情况,可以选择丢弃已满队列中随机一个包或者新到达的分组,主要和输出缓存大小和传输速率有关
3,转发表和路由选择协议
- 每个端系统都有一个IP地址(每个设备的IP是唯一的)。当源主机向目的主机发送一个分组时,源在该分组的首部包含了目的主机的IP地址
- 更特别的是,每台路由器有一个转发表(forwarding table),用于将目的地址(或目的地址的一部分)映射成为输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路。路由器则将分组导向该出链路。
那转发表如何设置的?
- 因特网具有一些特殊的路由选择协议(routing protocol) ,用于自动地设置这些转发表。
- 例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径结果来配置路由器中的转发表。
1.3.2 电路交换
- 电路交换:在这个发送者可以发送信息之前,电话网络必修要先在发送者和接受者之间建立一条连接。这是条真正的连接,在发送者和接受者之间的交换机都是维持着的。
- 当网络把这个电路建立好之后,在这个网络中的链路的传输速率也是维持好的。所以发送者可以以稳定的速率传输数据给接收者
1,电路交换网络中的复用
- 链路中的电路是通过频分复用FDM和时分复用TDM来实现的
- 对于FDM,链路的频谱由跨越链路创建的所有连接共享。在连接期间链路为每条连结专用一个频率。
- 电话网络中,这个频宽通常是4kHz,该频段的宽度称为带宽
- 对于TDM,时间被划分为固定的帧,每个帧又被划分为固定数量的时隙
2,分组交换与电路交换的对比
- 分组交换的优点
- 它提供了比电路交换更好的带宽共享
- 它比电路交换更简单、更有效、实现成本更低
- 分组交换的缺点
- 分组交换不适合实时服务,因为端到端的时延是可变、不可预测的,这和整个网络的情况相关
- 电路交换的优点
- 提供了端对端传输数据的速率保证
- 电路交换的缺点
- 电路交换存在静默期,这是指专用电路空闲时,其占用的资源并没有得到充分的利用
- 建立连接的过程比较复杂
总体上来说,分组交换的性能要好于电路交换的性能,但是不同类型的分组交换方式有不同的应用场景;比如一些对最低速率有着严格要求的应用,比如实时服务等,为了获得速率保证,牺牲网络的效率也是可以接受的。趋势向着分组交换发展
1.3.3 网络的网络
第三方公司能够创建一个因特网交换点 (Internet Exchange Point, IXP) , IXP是一个汇合点,多个ISP能够在这里一起对等
1.4 分组交换网中的时延、丢包和吞吐量
- 因特网能够看成是一种运行在端系统上的分布式应用提供服务的基础设施
- 计算机网络必定要要限制在端系统之间的吞吐量,故在端系统之间存在时延、丢包
1.4.1 分组交换网中的时延概述
一个分组在沿途每个节点承受不同类型的时延,这些时延中最为重要的是:结点处理时延、排队时延、传输时延和传播时延。这些时延总体累加起来是结点总时延
时延的类型
- 处理时延
处理时延是因为节点需要解析分组的首部信息然后决定其出链路(索引转发表等操作)而产生的,通常在微秒或者更低数量级
- 排队时延(详细可见1.3.1中描述)
排队时延是因为分组所对应的出链路前面有其他分组正在传输,所以分组需要该链路的缓冲队列里等待其他分组传输完毕而产生的;一般来说,排队时延是到达该队列的流量强度和性质的函数,通常可以达到毫秒级到微秒级。如果队列为空且没有其他分组正在传输,则排队时延为0。
- 传输时延
传输时延是将所有分组的比特推向链路所有需要的时间,实际的传输时延通常在毫秒到微秒数量级。用L表示分组的长度,用Rbps表示从路由器A到B的链路传输速率。传输时延是L/R
- 传播时延
传播时延是指比特进入链路后,从该链路的起点到下一个结点所用的时间;一旦分组中的最后一个比特到达路由器就意味着该分组的所有比特都已到达路由器;广域网中,传播时延一般是毫秒级的。传播时延是d/s。d是路由器A到B的距离。s是链路的传播速率。
- 传输时延和传播时延的对比
- 传输时延是路由器将分组推出所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。
- 传播时延是一个比特从一台路由器向另一台路由器传播所需要的时间,它是两台路由器之间距离的函数,而与分组长度或链路传输速率无关。
打个比方就是传输时延是火车过一个站点的时间,其大小只和火车长度和火车通过站点的时间有关。而传播时延则是火车经过两个地点的时间,其大小和距离和速度有关。
1.4.2 排队时延和丢包
**丢包:**到达的分组发现一个满的队列。由于没有地方存储这个分组,路由器将丢弃该分组,该分组将会丢失
排队时延和丢包与网络的状况和结点的缓冲空间大小、处理速度相关;如果分组到达的速度高于结点的处理速度,那么分组就会在缓冲队列里排队等待。当缓冲空间用完后,如果还有到的分组,那么该分组将被迫丢弃
为了描述网络状体,我们引入了流量强度这一概念:流量强度=分组到达的速度/结点的处理速度;流量工程里一个金科玉律就是:设计系统时流量强度不能大于1
当流量强度持续大于1时,就将出现丢包现象
因此,一个结点的性能常常不仅根据时延来度量,而且根据分组丢失的概率来度量。正如我们将在后面各章中讨论的那样,丢失的分组可能基于端到端的原则重传,以确保所有的数据最终从源传送到了目的地。
1.4.3 端到端时延
1.4.4 计算机网络的吞吐量
计算机网络的吞吐量实际上是一个速度指标,它描述了比特经过某个节点的速度。对于某条路径上的结点来说,和该结点有关的速度有两个:接收数据的速度和发送数据的速度,而该结点的吞吐量是这两个速度中较小的一个;对于某条路径来说,该路径的吞吐量则是所有节点的吞吐量的最小值;网络的吞吐量可以衡量网络的性能.
任何时间的瞬时吞吐量是主机B接受到该文件的速率(例如下载文件时显示多少m/s,就是一个瞬时吞吐量)
如果该文件由F比特组成,主机B接受到所有比特用去Ts,则文件的平均吞吐量为F/T bps
吞吐量可以近似为源和目的地之间路径的最小传输速率。最小传输速率的链路为瓶颈链路。
1.5 协议层次及其服务模型
因特网是一个极为复杂的系统,该系统里存在着大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。但是它同时也是有着清晰结构的,就像我们前面在网络核心 一节介绍的,我们仍能构建它的结构模型
1.5.1 分层体系结构
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的软硬件软件。每个协议属于这些层次之一,就像图1-22所示的航线体系结构中的每种功能属于某一层一样。我们再次关注某层向它的上一层提供的服务(service),即所谓一层的服务模型(service model)。每层通过在该层中执行某些动作或使用直接下层的服务来提供服务。
将各层的所有协议组合起来,称为协议栈。因特网的协议栈有5个层次组成**:物理层、链路层、网络成、运输层、应用层**
- 应用层
应用层是网络应用程序及它们的应用层协议存留的地方。
应用层协议分布在多个端系统,端系统中的应用程序使用该协议与另一个端系统中的应用程序通信。处于应用层的分组称为报文
- 运输层
传输层在应用程序端点之间传输应用层报文,因特网中有两个传输层协议:TCP和UDP。
- TCP将长报文分成短报文,并提供确保传递、流量控制、拥塞控制机制。
- UDP提供无连接服务,即不提供不必要服务的服务。没有可靠性、没有流量和拥塞控制。
处于传输层的分组称为报文段
- 网络层
网络层将称为数据报的网络层分组从一台主机移动到另一台主机。网络层协议包含著名的IP协议以及其他一些路由选择协议。
- 链路层
网络层通过源和目的地之间的一系列路由器来 路由(注意这是动词) 数据报。为了将分组从一个结点移动到路径上的下一个结点,网络层必须依靠该链路层的服务。
将链路层分组称为帧frame。链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素。该层协议与链路层相关。
- 物理层
物理层的任务是将每个帧中的一个个比特从一个节点移动到下一个节点。该层协议与链路相关,并进一步与链路的实际传输媒体相关,例如双绞铜线、单模光纤等。
OSI模型
在因特网协议栈出现以前,OSI模型是ISO组织研发的计算机网络结构模型。OSI的模型一共有7层,从下到上依次为:物理层,链路层,网络层,传输层,会话层,表示层,应用层。相比因特网体系结构,OSI多了两层。
1.5.2 封装
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效负载;其中有效负载即为来自上一层的分组数据,而首部字段就是该层加上的必要信息;分组不断被封装以实现各层协议规定的相关功能
示层**,应用层。相比因特网体系结构,OSI多了两层。
1.5.2 封装
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效负载;其中有效负载即为来自上一层的分组数据,而首部字段就是该层加上的必要信息;分组不断被封装以实现各层协议规定的相关功能