《计算机网络:自顶向下方法》阅读笔记
程序员文章站
2024-02-21 23:29:46
...
第一章 计算机网络和因特网
1.1 什么是因特网
我们可以从两个角度来回答这个问题:一种是描述组成它的软硬组件;另一种是根据为分布式应用提供联网服务的基础设施来描述。其实,第一种角度,是从它的组成来描述,第二种角度是从它的功能来描述1.1.1 具体构成描述
因特网是一个世界范围的计算机网络,它互联了数以亿计的计算设备(包括PC、服务器、电视机、汽车等)。这些连入因特网的设备被称为主机或者端系统。
以下是重点的一些概念:
端系统通过通信链路和分组交换机连接到一起。
不同类型通信链路有不同的物理媒介(同轴电缆、铜线等)组成,以不同的速率传输数据,单位为比特/秒(bit/s,bps)。
端系统之间收发数据时,发送端系统将数据分段,每段加上首部字节形成新的数据包,这些数据包称为分组。分组==用户数据+首部字节;链路系统传输分组;分组到达接收端系统后,接收端系统将根据首部字节抽取用户数据来装配成初始数据;
分组交换机从它的一条入通信链路接收分组,并且选择一条出通信链路将分组转发出去;分组交换机也有很多种类,最为有名的是路由器和链路层交换机;两者的的不同之处在于,链路层交换机主要用在接入网中,路由器主要用在网络核心。从发送端到接收端经历的通信链路和分组交换机称为路径。
端系统通过因特网服务提供商(Internet Service Provider,简称ISP)接入因特网,包括如本地电缆、住宅区ISP、公司ISP等不同的ISP提供不同类型的网络接入,它们都是多个交换机、通信链路组成的网络。
上面介绍的端系统、交换机等因特网部件都遵循了一系列协议:TCP(Transport Control Protocol,传输控制协议)和IP(Internet Protocol,网际协议:定义了路由器和端系统之间收发数据的分组格式);因为协议控制了信息的传递,所以对协议达成一致就很重要,所以需要一个标准来规范协议,以便创造可以协同工作的系统和产品
1.1.2 服务描述
还可以从为应用程序提供服务的基础设施的角度来描述互联网。电子邮件、web、游戏等分布式应用程序涉及多台相互交换数据的端系统。端系统提供应用程序编程接口(API),它规定了一个应用程序请求因特网基础设施向另一端某程序交付数据的方式(就像寄信必须要填地址贴邮票一样)。此时因特网提供了相应请求的服务。1.1.3 协议
协议是如何使用首部字节理解用户数据的方法规则;分组接收者接收到分组并按照协议获得了用户数据后,还应该对此消息做出反应,而如何做出反应也是协议规范的一部分(不反应也是一种反应哦)
协议:定义了两个或多个通信实体(不一定是端系统,还有可能是分组交换机等)之间交换信息的格式和次序以及对该信息所采取的动作。
通信实体的所有活动都要受到协议的约束。比如,硬件实现的控制协议控制了两块网卡之间的比特流;在端系统中,拥塞控制协议控制了发送方和接收方之间传输数据的速率等1.2 网络边缘
端系统:与因特网相连的计算设备,往往处于网络的边缘
端系统分类:客户和服务器1.2.1 接入网
接入网:是指将端系统连入到边缘路由器的物理链路 边缘路由器:是指端系统到任何其他远程端系统路径上的第一台路由器
DSL(Digital Subscribe Line)数字用户线
这是一种宽带住宅接入的方法,它的ISP是本地电话公司。其使用的通信链路的物理材质为电话线,是一种双绞线。
用户使用DSL调制解调器通过电话线与ISP中的数字用户线接入复用器(DSLAM)来交换数据;家庭DSL调制解调器将数字数据转换为高频音后通过电话线传输到ISP中心,并且通过DSL解调器将DSLAM发送过来的模拟信号转为数字信号;
CIC(Cable Internet Access)电缆因特网接入
这是另一种宽带住宅接入方法,它的ISP是有线电视公司。其使用的通信链路的物理材质有光纤和同轴电缆,也被称为混合光纤同轴(Hybrid Fiber Coax HFC);
用户使用电缆调制解调器通过同轴电缆与光纤结点相连,光纤结点通过光缆与电缆头端相连,而电缆头端接入了因特网。在电缆头端,电缆调制解调器端接系统(Cable Modem Termination System)起到DSLAM的作用,即实现模拟信号和数字信号的转换;
FTTH(Fiber TO The Home)光纤到户
这里主要是指使用光纤作为通信链路的材质,有两种竞争性的光纤分布方案,一种是主动光纤网络(Active Optical Network),另一种是被动光纤网络(Passive Optical Network).其主要区别在于,是否在传输数据时共享光纤。
以太网和WIFI
以太网接入是一种在公司、大学、家庭里很流行的接入方式;用户使用双绞线与以太网交换机相连,从而接入因特网;接入以太网交换机的速度可达100Mbps;
在无线局域网中,无线用户从一个接入点发送和接收数据,而该接入点与企业网相连,企业网最终接入因特网;在无线LAN中,用户需要在一个接入点的几十米范围之内;
广域无线接入
在移动设备中,通过蜂窝网提供商运营的基站来发送和接收分组,与WIFI不同的是,用户仅需要位于基站的数万米范围之内即可;1.2.2 物理媒体
传输媒体是构成通信链路的主要部分,物理媒体通常可以分为导引性媒体和非导引性媒体;其中导引性媒体,信号沿着固体前行;而非导引性媒体中,信号沿着固体媒体前行
值得注意的是,架设传输媒体的人历成本要远远高于物理材料的成本
双绞线
最便宜的引导性传输媒体,由两条相互螺旋缠绕的铜线组成。目前局域网中的双绞线数据传输速率在10Mbps到10Gbps之间,所能达到的数据传输速率取决于线的粗细以及传输距离;双绞线实际上已经成为高速局域网联网的主要方式;因为现代的双绞线技术速率和传输距离都是很不错的;
同轴电缆
也由两个铜导体构成,但是它们是同心的,而非并行的;借助特殊的结构和绝缘层,同轴电缆可得到较高的数据传输速率;在电视系统中应用广泛;同轴电缆可被用作引导性的共享媒体;
光纤
一种可以引导光脉冲的媒体
陆地无线电信道
无线电信道承载电磁频谱中的信号,不需要物理线路,提供与移动用户的连接以及长距离承载信号的方式;是一种有吸引力的媒体;
卫星无线电信道
通过卫星连接两个或多个在地球上的微波发射方(也被称为地面站),该卫星在一个频段上接收信号,在另一个频段上发送信号;种类有同步卫星和近地轨道卫星;1.3 网络核心
网络核心即为由互联因特网端系统的分组交换机和链路构成的网状网络
通过网络链路和交换机移动数据有两种基本方法:电路交换和分组交换1.3.1 分组交换
报文执行控制功能或包含数据。端系统将报文划分小块数据,即分组。
分组通过通信链路和分组交换机传送。
分组在通信链路上以等于该链路的最大传输速率传输通过通信链路。因此如果某条链路的最大传输速率为Rbps,分组为L比特,则该链路传输该分组的时间为L/R秒;这个时间也被称为传输时延。
分组交换的常见方式是存储转发机制。
存储转发
大多数分组交换机采用存储转发机制来转发分组;
存储转发是指交换机将收到的部分分组缓存起来直到收到一个完整的分组,才会向出链路传输分组。
因为缓存等待一个分组的全部数据而导致的时间开销被称为存储转发时延。
忽略传播时延后的时延:d=(N+P)L/R (N条链路,P个分组)
排队时延与分组丢失
每个分组交换器都有一个输出缓存,存储路由器准备发往那条链路的分组。如果该链路被占用就会发生缓存等待,等待的时间称为排队时延。时延取决于拥塞程度。
转发表与路由选择协议
分组交换机之所以能够知道分组往哪去是因为其内部有一个转发表,这个表维护了IP地址和链路的对应关系,所以处理流程为:
通过分组的首部字节,获得目的端系统的IP地址;通过IP地址索引转发表,从而确定输出链路。1.3.2 电路交换
在电路交换网络中,端系统通信会话期间,交换机会预留端系统间通信路径上的相关资源(缓存,链路传输速率),即先建立连接,然后通信。传统的电话网络就是电路交换网络的例子。
电路交换网络中的复用
时分复用(Time-Division Multiplexing TDM):是指将时间划分为固定区间的帧,每个帧则又被划分为固定数量的时间空隙;当网络需要建立一条连接时,网络将在每个帧中为该连接指定一个时隙;在该时隙内,链路用来传输该链接的数据;
频分复用(Frequency-Division Multiplexing):将频率域划分为频段,然后将频段分配给连接;此频段被用来专门传输链接的数据。该频段的宽度称为带宽。
TDM传输速率=帧速率(每秒传多少帧)×每个帧中的比特数量 或总比特速率/时隙数1.3.3 分组交换和电路交换的对比
分组交换的优点:
它提供了比电路交换更好的带宽共享;
它比电路交换更简单、更有效、实现成本更低;
分组交换的缺点:
分组交换不适合实时服务,因为端到端的时延是可变、不可预测的,这和整个网络的情况相关;
电路交换的优点:
提供了端对端传输数据的速率保证;
电路交换的缺点:
电路交换存在静默期,这是指专用电路空闲时,其占用的资源并没有得到充分的利用;
建立连接的过程比较复杂;
总体上来说,分组交换的性能要好于电路交换的性能,但是不同类型的分组交换方式有不同的应用场景;比如一些对最低速率有着严格要求的应用,比如实时服务等,为了获得速率保证,牺牲网络的效率也是可以接受的。趋势向着分组交换发展
网络的网络1.3.4 网络的网络
不得不说,因特网是一个庞大而复杂的系统,但是我们仍然有办法描述它(我们不是已经这么做过了吗?),但是我们需要一个模型来刻画因特网的结构;该用什么样的结构来刻画因特网呢?我想,最普遍的说法就是:因特网是网络的网络。但是这一说法足够精炼的同时也不够明确。更重要的是,我们可以选择更明确的方法来刻画因特网;书中通过5个模型不断过渡到最终模型,其实过渡的过程就结构不断合理、连接方式不断明确的过程。
我们在什么是因特网 一节中介绍ISP,端系统是通过ISP接入因特网的,为了实现端系统的互联,ISP也必须互联,其实网络模型就是用来表达ISP和端系统以及ISP之间的结构的抽象;
网络结构1:存在唯一的全球承载ISP互联所有的接入ISP,这是指,全球ISP是一个又路由器和通信链路构成的网络,该网络跨越全球,并且其他的接入ISP都至少和一个它的路由器相连;
网络结构2:存在多个全球承载ISP,它们分别于一部分的接入ISP互联;为了实现端系统的互联,这多个全球ISP也必须互联;网络结构是一个两层结构,其中全球承载ISP位于顶层,接入ISP处于底层;
网络结构3:顶层全球承载ISP基本上已经定型,但是接入ISP现在还很混乱,比如,它们直接同顶层ISP相连;而网络结构3中,接入ISP也是分层的:较小区域中的ISP连入较大区域的ISP,而不是直接与顶层ISP相连;为什么会出现这样的结构呢?这是因为,如果都直接同顶层ISP相连,那么两个同一较小区域内,分属不同ISP的端系统之间通信的数据也会到顶层ISP中心去一趟,如果它们不是直接接入顶层ISP,而是接入了一个较大区域的ISP,那么它们之间的通信数据就不用去顶层ISP中心了,因为它们通过较大区域的ISP已经实现了互连,所以通信速度肯定就上去了。
网络结构4:是在网络结构3的基础上,增加了以下特点而形成的结构:存在点(Point of Presence,PoP)、多宿、对等、因特网交换点(Internet exchange point,IXP)。
PoP存在于等级结构中所有层次,但是底层ISP除外;一个PoP是ISP网络中的一台或者多台路由器群组,其中客户ISP能够通过第三方提供的高速链路直接将它的路由器和供应商的PoP连接,从而实现与提供商ISP连接。这样接入速度很明显就提高了。
多宿(multi-home)是指,任何ISP(除第一层ISP)都可以与两个或者多个提供商ISP连接,这被称为多宿;这样网络的可靠性就提高了
对等(peer) 是指,位于相同等级结构层次的一对邻近ISP能够直接将它们的网络连接到一起,使它们之间流量经直接连接而不是经过上游的中间ISP传输,这样既不用付费,速度也可能会快一些;
因特网交换点是为了实现多个ISP可以对等而创建的。
网络结构5:网络结构5是在网络结构4的基础上增加了内容提供商网络而构成。内容提供商构建自己的网络,并且通过与较低层ISP对等而“绕过”较高层因特网ISP,而且内容提供商对端用户也有了更多的控制。
总体来说,今天的因特网是一个“网络的网络”,其结构复杂,由十多个顶层ISP和数十万个较低层ISP构成。近年来,主要的内容提供商创建自己的网络,直接在可能的地方与较低层ISP互联1.4 分组交换中的时延、丢包、吞吐量
因特网能够看成是一种给运行在端系统上的分布式应用提供服务的基础设施
计算机网络必定要要限制在端系统之间的吞吐量,故在端系统之间存在时延、丢包;1.4.1 分组交换网中的时延概述
一个分组在沿途每个节点承受不同类型的时延,这些时延中最为重要的是:结点处理时延、排队时延、传输时延和传播时延.这些时延总体累加起来是结点总时延
时延的类型
处理时延
处理时延是因为检查首部字节并决定其出链路(索引转发表等操作)而产生,通常在微秒或者更低数量级;
排队时延
排队时延是因为分组所对应的出链路前面有其他分组正在传输,所以分组需要该链路的缓冲队列里等待其他分组传输完毕而产生的;一般来说,排队时延是到达该队列的流量强度和性质的函数,通常可以达到毫秒级到微秒级;
传输时延
传输时延是将缓存中分组的所有比特传输向链路所需要的时间,实际的传输时延通常在毫秒到微秒数量级。用L表示分组的长度,用Rbps表示从路由器A到B的链路传输速率。传输时延是L/R。
传播时延
传播时延是指一个比特进入链路后到达下一个路由器所用的时间;一旦分组中的最后一个比特到达路由器就意味着该分组的所有比特都已到达路由器;广域网中,传播时延一般是毫秒级的。传播时延是d/s。d是路由器A到B的距离。s是链路的传播速率。
传输时延和传播时延的对比
如果打个比方的话,传输时延就是一堆车(一个分组一堆比特)经过收费站的时间而传播时间就是车在高速公路上行驶的时间。传输时延是分组长度和链路传输速率的函数。传播时延是两台路由器间距离的函数。传播时延小于传输,第一个比特到达下一个路由器,分组的其他比特还在往链路上传输。1.4.2 排队时延和丢包
丢包:由于空间有限无法缓存整个分组时,路由器将丢弃该分组
排队时延和丢包与网络的状况和结点的缓冲空间大小、处理速度相关;如果分组到达的速度高于结点的处理速度,那么分组就会在缓冲队列里排队等待。当缓冲空间用完后,如果还有到的分组,那么该分组将*丢弃
为了描述网络状体,我们引入了流量强度这一概念:流量强度=分组到达的速度/结点的处理速度;流量工程里一个金科玉律就是:设计系统时流量强度不能大于1;
当流量强度持续大于1时,就将出现丢包现象1.4.3 端到端时延
路由器接受到指定分组、目的端系统接收到所有分组都会向源返回一个报文,包括路由器地址名字、往返时延。1.4.4 计算机网络的吞吐量
计算机网络的吞吐量实际上是一个速度指标,它描述了比特经过某个节点的速度。对于某条路径上的结点来说,和该结点有关的速度有两个:接收数据的速度和发送数据的速度,而该结点的吞吐量是这两个速度中较小的一个;对于某条路径来说,该路径的吞吐量则是所有节点的吞吐量的最小值;网络的吞吐量可以衡量网络的性能.
任何时间的瞬时吞吐量是主机B接受到该文件的速率
如果该文件由F比特组成,主机B接受到所有比特用去Ts,则文件的平均吞吐量为F/Tbps
吞吐量可以近似为源和目的地之间路径的最小传输速率。最小传输速率的链路为瓶颈链路。
在今天,因特网对吞吐率的限制因素通常是接入网。1.5 协议层次及其服务模型
因特网是一个极为复杂的系统,该系统里存在着大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。面对这种复杂性,接下来将组织网络体系结构。1.5.1 分层体系结构
计算机网络采用分层的体系结构,分层的体系结构因为提供模块化而具有很高的价值,同时也易于服务实现的多样性:某一层对其上一层提供服务,同时它可以利用下一层提供的服务。只要对上提供的服务和对下利用的服务没有变化,其层内部的实现并不会对系统结构产生影响(按时间等级按vip等级并不影响起飞);对于大而复杂且需要不断更新的系统来说,改变服务的实现而不影响系统其他组件是分层模式的另一个重要优点(类似系统解耦)
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的软硬件
一个协议层可以使用软硬件实现,同时某个协议层的不同部分常常位于网络组件的各部分。协议分层具有概念化和结构化的优点。模块化使得更新系统组件更为容易。但是分层也有其缺点,就是功能上的冗余,比如许多协议栈针对链路和端到端两种情况都提供了差错恢复功能。第二种潜在的缺点就是某层的功能可能需要仅在其它层才出现的信息
总体来说,将各层的所有协议组合起来,称为协议栈。因特网的协议栈有5个层次组成:物理层、链路层、网络成、传输层、应用层
应用层:应用层协议分布在多个端系统,端系统中的应用程序使用该协议与另一个端系统中的应用程序通信。处于应用层的分组称为报文;
传输层:传输层在应用程序端点之间传输应用层报文,因特网中有两个传输层协议:TCP和UDP。处于传输层的分组称为报文段。TCP提供应用层报文向目的地的确保传递、流量控制、拥塞控制机制。UDP提供无连接服务,即不提供不必要服务的服务。没有可靠性、没有流量和拥塞控制。向网络层提供报文段和目的地址。
网络层:网络层将称为数据报的网络层分组从一台主机移动到另一台主机。网络层协议包含IP协议(定义数据报中各字段以及端系统、路由器如何利用这些字段)以及其他一些路由选择协议(使数据报根据该路由从源传输到目的地)。
链路层:链路层将称为帧的链路层分组从一个结点(主机、路由器)移动到路径上的另一个端点。一个帧可能被沿途不同链路上的不同链路层协议处理。链路层将数据报传输给网络层。
物理层:物理层的任务是将帧中的比特从一个结点移动到下一个节点,它提供了传输信息的实际物理通道,以太网有许多物理协议关于双绞线、光纤等;
OSI模型
在因特网协议栈出现以前,OSI模型是ISO组织研发的计算机网络结构模型。OSI的模型一共有7层,从下到上依次为:物理层,链路层,网络层,传输层,会话层,表示层,应用层。相比因特网体系结构,OSI多了两层。
因特网将两层的功能留给了开发者自行实现。表示层使通信的应用程序能够解释交换数据的含义,
会话层提供数据交换定界和同步功能。1.5.2 封装
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效载荷字段;其中有效载荷字段即为来自上一层的分组数据,而首部字段就是该层加上的必要信息;分组不断被封装(报文分多报文段进而多数据包,最后重构报文)以实现各层协议规定的相关功能第二章、应用层2.1 应用层协议原理
研发网络应用的核心是写出能够运行在不同端系统和通过网络彼此通信的程序;值得注意的是,我们不需要写在网络核心设备如路由器或者链路层交换机上运行的软件,这种设计方式即将应用程序限制在端系统的方法,促进了大量网络应用程序的迅速研发和部署2.1.1 网络应用程序体系结构
应用程序的体系结构不同于网络的体系结构。从应用程序研发者的角度来看,网络体系结构是固定的,并为应用程序提供特定的服务集合;应用程序体系结构由应用程序研发者设计,它规定了在端系统上如何组织应用程序。两种常见的现代网络应用程序所采用的体系结构为:客户-服务器体系结构和对等体系结构
客户-服务器体系结构
在该体系结构中,有一个总是打开的主机,即服务器,它接收和响应来自被称为客户的主机的请求;客户之间是不直接通信的,因为服务器具有固定的、周知的地址,客户通过IP地址向服务器发送分组进行联系
客户-服务器体系结构的著名应用有:Web、FTP、Telnet和电子邮件。
通常,如果仅有一台服务器处理所有的请求,那么服务器系统将很快变得不堪重负,为此,配备大量主机的数据中心常被用于创建强大的虚拟的服务器,一个数据中心可以有数十万台服务器,它们需要供电和维护,同时服务提供商还需要支付不断出现的互联和带宽费用,以及发送和接收到达/来自数据中心的数据;
P2P体系结构
应用程序对位于数据中心的服务器有着最小依赖,在间断连接的主机(对等方)对之间使用直接通信。对等方并不为服务提供商所拥有,因为这种对等方通信不需要通过专门的服务器,所以该体系结构也被称为对等方到对等方结构
目前,流量密集型应用都是P2P体系结构的。这些应用包括文件共享(例如BitTorrent)、协助下载(例如迅雷)、因特网电话(例如Skype)和IPTV(例如迅雷看看)。
值得注意的是,某些应用具有混合的体系结构,它们结合了客户-服务器和P2P这两种体系结果,比如许多的即时通讯工具,服务器用来跟踪用户IP地址,但是用户之间的通信则使用直接发送
P2P体系结构的特性之一就是它们的自扩展性。比如在文件共享应用中,对等方可能通过向文件的原始拥有者发出请求而产生工作量,但是对等方也有可能通过为其他对等方传送文件而为原始拥有者分担压力;p2P体系结构也是成本有效的,通常不需要庞大的服务器基础设施和服务带宽。
但是P2P也面临着以下三个问题:
ISP友好。住宅ISP已经受制于非对称带宽应用,但P2P改变了从服务器到住宅ISP的上载流量;
安全性。其高度的分布和开放式,P2P应用也存在安全问题;
激励。让用户向应用提供带宽、存储和计算资源2.1.2 进程通信
在操作系统中,进行通信的是进程。进程间通信机制由端系统上的操作系统确定。
当进程运行在不同的端系统上时,它们通过交换报文相互通信;发送进程产生报文并且向网络中发送,接收进程接收报文并对此作出响应。
客户进程和服务器进程
发起通信的进程被标记为客户进程,在会话开始时等待联系的进程被称为服务器进程。
进程与计算机网络之间的接口
进程通过称为套接字的软件接口向网络发送、接收报文。套接字是同一台主机内应用层和运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用编程接口(Application Programming Interface).
应用程序开发者可以控制套接字在应用层端的一切内容,但是对于运输层仅限于:选择传输层协议和设定几个传输层参数,比如最大缓存和最长传输层报文长度。
进程寻址
发送分组需要一个地址标志某台主机上运行的进程(准确来说是进程的套接字)。标记由两部分组成:接收进程所在的主机地址和接收进程的标记符;即IP地址和端口号。2.1.3 可供应用程序使用的运输服务
传输层协议的特点大致可以从以下这四个方面考量:可靠数据传输、吞吐量、定时和安全性
可靠数据传输
路由器溢出、比特损坏后被抛弃会造成数据丢失。协议可以确保数据交付,即提供了可靠数据传输。
像一些音频、视频是容忍丢失的应用。
吞吐量
可用吞吐量就是指能够向接收进程交付比特的速率。
因为会有其他会话共享该网络的路径的带宽,并且因为这些会话的到来和离开,可用吞吐量将发生变化;这就导致另一种自然的服务,即运输层协议能够提供确切的可用吞吐量。使用这种服务时,应用程序就能以明确的速度接收数据,并且运输层应当保证可用吞吐量必须总是至少为该速度;
对吞吐量有明确要求的应用程序被称为带宽敏感的应用(多媒体应用)。弹性应用则对吞吐量没有严格的要求,如电子邮件、文件传输以及web传送等。
定时
Z游戏、视频等是需要运输层协议提供定时保证,即发送方注入套接字的每个比特到达接收方的套接字不迟于1××ms
安全性:机密性,数据完整性,断点检测
机密性:运输协议加密发送进程传输的数据,并解密给接收进程
2.1.4 因特网提供的传输层服务
因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP。每个协议对应用程序提供了不同服务的集合。以下为常见的因特网应用的特点:
TCP服务
TCP服务模型包括了面向连接的服务和可靠数据传输服务。
面向连接的服务:在应用层数据报文开始流动之前,TCP会在客户端和服务器端相互交换传输层控制信息。即第一次握手将建立一条全双工的TCP连接,提示客户端和服务器端为即将到来的大量分组做好准备;双方使用该条链接可以同时进行报文的收发,连接将在通讯结束后拆除。
可靠的数据传输:通信进程使用TCP协议可实现无差错、按适当顺序交付所有发送的数据,没有字节的丢失和冗余;
TCP服务还提供了拥塞控制机制。当发送方和接收方之间的网络出现拥塞时,会抑制发送进程。也会试图限制TCP连接。
SSL处于应用层,为TCP提供加密、数据完整性和端点鉴别服务。
UDP服务
UDP服务是仅提供最小服务的轻量级运输协议。是无连接的也就是说通信之前没有握手,不提供数据的可靠传输;UDP也没有拥塞控制机制,发送端可以选择任意速率向网络层注入数据。有些应用场景下,UDP协议将带来更多的便利和效率,比如DNS和一些因特网电话服务(为了避免拥塞控制协议的控制而使用UDP)
传输层无法提供的服务
从可靠数据传输、吞吐量、定时、安全性等四个角度来看运输层提供的服务,我们发现,运输层无法对吞吐量和定时做出保证。但是,今天的因特网能够为时间敏感的应用提供满意的服务,尽管它并不提供任何定时或者带宽保证;
http和https和ssl和tcp/ip之间的关系和区别2.1.5 应用层协议
应用层协议定义了程序进程如何相互传递报文,它定义了:交换的报文类型(请求或者响应)、各种报文的语法、报文中字段的语义、一个进程何时以及如何发送报文 对报文进行响应的规则。
应用层协议是网络应用的一部分,如web应用包括浏览器、服务器、文档格式的标准(HTML)、一个应用层协议(如HTTP)2.1.6 本书涉及的应用层应用
即将介绍的应用包括:Web、文件传输、电子邮件、目录服务和P2P。
Web部分将介绍HTTP协议;FTP则和HTTP形成了对照;电子邮件是比Web更为复杂的应用,因为它使用了多个应用层协议;为因特网提供目录服务的DNS,它很好地说明了一种核心的网络功能(名字到地址转换)是如何在应用层实现的。P2P应用:文件共享应用、分布式查找服务。在第七章涉及多媒体应用:流式视频、IP电话。2.2 WEB和HTTP2.2.1 HTTP概述
HTTP(HyperText Transfer Protocol)是WEB的应用层协议;客户端程序和服务器程序实现了HTTP;HTTP定义了报文的结构 以及客户和服务器进行报文交换的方法;
Web页面是由一个HTML基本文件和几个引用对象组成。(Web服务器中)基本文件通过对象的URL地址引用其它对象。URL地址包括主机名和对象的路径名ww.sss.com(主机名)/docu/aa.gif(路径名)。
客户和服务器交互的核心思想是客户通过HTTP请求对服务器发出对Web页面的请求报文,服务器收到该报文后将返回包含该对象的HTTP响应报文。
HTTP使用TCP作为它的支持运输协议,HTTP客户首先发起一个与服务器的TCP连接,连接建立后进程就可以通过套接字接口访问TCP,从而保证了可靠数据传输。也利用了分层的设计优点 HTTP不用关心数据丢失、乱序恢复这些较底层协议的工作。
需要注意的是,服务器不存储任何关于该客户的状态信息,所以被称为无状态协议。2.2.2 持续连接和非持续连接
每个请求/响应是经一个单独的TCP,该应用程序使用持续连接;如果是同一个TCP,则称为非持续连接。
采用非持续连接的HTTP
建立连接过程:
HTTP客户进程通过端口发起到服务器www.dsd.com的TCP连接,客户和服务器上分别有一个套接字与该连接相关联;
HTTP客户经套接字向服务器发送HTTP请求报文,保温包括asd/asas/sad.index路径名;
HTTP服务器经套接字接收报文,检索出对象www....index,在响应报文中封装该文件对象通过套接字发送;
HTTP服务器通知TCP确认客户接收报文后断开连接;
HTTP客户接收响应报文并从中提取HTML文件,得到其中的URL引用;
这时客户可以采取串行或者并行方式获取引用对象。
使用非持续连接时,每个TCP连接只传送一个请求报文和响应报文,在服务器发送一个对象后就会关闭;
RTT(Round-Trip Time):一个短分组从客户端到服务器,然后再返回客户端所用的时间,包括分组的传播时延、排队时延、处理时延(因为是短分组,所以其传输时延可不计);
响应时间是两个RTT加上服务器传输HTML的时间,包含了“三次握手过程”:服务器对接收到的小TCP报文段做出确认和响应,客户端发送请求,服务端发送响应。
缺点:对每个连接,客户和服务器都要分配TCP缓冲区和保持TCP变量,给服务器带来了严重负担;每一个对象都要经受两倍的RTT的交付延迟。
采用持续连接的HTTP
持续连接:服务器在发送响应报文后将保持该TCP打开,后续客户端可以使用该连接来向服务器发出请求
一条连接在一定时间间隔后没被使用,就会被关闭。HTTP默认使用带流水线的持续连接。2.2.3 HTTP报文格式:请求报文和响应报文
请求报文
请求报文的第一行称为请求行,其后继的各行被称为首部行。
请求行包含三个内容:方法字段、URL字段、HTTP版本;其中方法字段可为:GET、POST、PUT、DELETE、HEAD等。URL字段里带有请求对象的标志;
首部行:Host指明了对象所在主机,是Web高速缓存所需要的;Connection:浏览器通知服务器在发送完响应报文后是否关闭TCP连接;浏览器类型(让服务器为不同的浏览器发送相同对象的不同版本);浏览器想得到的语言版本;
空行(Accpet行结束后亮哥回车换行符cr、lf);
“实体体”:当用户使用搜索引擎等需要向服务器提交表单时会用到post方法,提交的内容就是实体体;如果使用get,输入的数据扩展在URL中 www....edu/animalserach? monkeys&bananas
Head会用一个http报文进行响应,但是不返回请求对象,常用作调试跟踪。put方法允许用户上传对象到Web服务器上指定的路径。Delete方法允许用户或应用程序删除Web服务器上的对象。
HTTP响应报文格式
响应报文总体上也分三个部分,第一部分是状态行,包含HTTP版本字段、状态码以及相应状态信息;
第二部分是首部行:Connection:服务器通知浏览器关闭连接;Date:从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间;Server:指示该报文是由什么服务器产生的、相应服务器;Last-Modified:与对象缓存有关; Connect-Length:被发送对象的字节数;Connect-Type:实体体中对象的类型;
空行
第三部分是实体体:请求对象。
常见状态码
200 OK:请求成功 处理方式:获得响应的内容,进行处理
301 Moved Permanetly:请求的对象转移到了新的URL,URL在首部段的Location 处理方式:重定向到分配的URL
400 Bad Request:非法请求 处理方式:丢弃
404 Not Found:文件不在服务器 处理方式:丢弃
505:服务器不支持请求报文使用的http版本2.2.4 用户与服务器的交互:Cookie
Cookie可以在无状态的HTTP上建立一个用户会话层,浏览器向服务器发送Cookie信息,服务器在用户和应用程序会话过程中标志该用户,关联用户相关的信息。P73!!!
Cookie技术包含4个组件
HTTP响应报文里增加一个关于Cookie的首部行;
HTTP请求报文里增加一个关于Cookie的首部行;
用户端系统保留一个Cookie文件,由浏览器管理;
位于Web站点的一个后端数据库;
2.2.5 Web缓存
Web缓存器又称为代理服务器。它有自己的存储空间,并在存储空间里保持有最近请求过的对象的副本;可以通过配置浏览器,使指向指向初始服务器的请求先指向代理服务器。
当代理服务器收到一个HTTP请求后,检查本地是否缓存过该对象,如果缓存过该对象则检查是否过期,如果没有过期则直接将该对象返回给浏览器;如果本地不存在或者存在已过期,则代理服务器将根据请求报文里的Host首部行以及请求行里的URL字段向初始服务器发出请求,然后将响应对象返回给浏览器并缓存在本地。
优点:减少了请求的响应时间;减少了接入因特网的通信量从而改善了服务器端应用的性能。P75有关缓存器解决方案、响应时间??
通过使用内容分发网络(Content Distribution Network),使大量的流量实现了本地化,有点像主存。
Web缓存即是客户又是服务器2.2.6 条件GET方法
缓存器中文件副本可能是过期的,HTTP提供了一种机制——条件GRT,允许缓存器证实其使用的对象是最新的。
通过缓存器向浏览器响应时,缓存器不仅缓存了对象,还存储了它的最后修改时间。当再次请求时,缓存器向服务器发送一个条件GET执行最新检查。
增加一个If-Modified-Since首部行,时间是上一次缓存所保存的Last-Modified。服务器响应报文 304且不带有实体体,即没有修改,缓存器就可以将缓存响应给浏览器。2.3 文件传输协议FTP
用户首先提供远程主机的主机名,使FTP客户进程建立到远程主机FTP服务器进程的TCP连接,之后用户提供用户标识和密码,它们作为FTP命令的一部分在该TCP连接上传输;服务器向用户授权,用户便可以和服务器进行文件传输。
HTTP和FTP都是应用层(文件传输)协议,都运行在TCP协议上。区别:FTP使用俩个并行的TCP连接来传输数据,一个TCP被称为控制连接,用来传输控制信息如用户标识密码、存取指令等;一个TCP连接被称为数据连接,用于传输文件数据;
FTP协议其控制信息是通过一个独立的TCP连接传输,所以我们称FTP的控制信息是带外传送的;HTTP的控制信息和数据信息通过同一个TCP传输,称为带内传送。FTP中控制连接端口21,数据连接端口20,控制连接贯穿整个会话,数据连接会在一个文件开始传输的时候建立,在传输结束后关闭。
FTP需要在整个会话期间,保留用户的状态,也就是将控制连接(存取移动目录)同用户账户关联起来,同时记录用户在远程目录树上的操作。也限制了FTP可以同时维持的会话总数。
FTP命令和回答
从客户到服务器的命令和从服务器到客户的回答,都是以7比特ASCII格式在控制连接上传递的
常见的命令如下:
RETR <filename>从服务器上找回(复制)文件
STOR <filename>储存(复制)文件到服务器上
USER <username>>系统登录的用户名
PASS <password>系统登录密码
常见的回答如下:
125打开数据连接,开始传输
331要求密码
452磁盘空间不足,写错误
425无法打开数据连接
2.4 因特网中的电子邮件
因特网电子邮件系统有三个核心组件:用户代理、邮件服务器、SMTP(简单邮件传输协议,Simple Mail Transfer Protocol)。
电子邮件发送过程:发送方通过用户代理将邮件传送到发送方的邮件服务器,它在一个报文队列中保持该报文并不断尝试发送到接收方的邮件服务器,然后接收方通过服务器验证后 邮件被分发到接收方的邮箱里。
SMTP是因特网中电子邮件的主要应用层协议,它使用TCP可靠数据传输从发送方的邮件服务器向接收方的邮件服务器发送邮件;邮件服务器上同时运行SMTP服务器和SMTP客户端,当邮件服务器接收其他邮件服务器的邮件时,表现为SMTP服务器;当邮件服务器向其他邮件服务器发送邮件时,表现为SMTP客户端。
2.4.1 SMTP
STMP限制了报文实体只能采用7比特ASCII表示(多媒体要转解码)。
过程:客户STMP通过25端口建立与服务器STMP的连接;执行应用层的握手,客户要指示发送方和接收方的地址;TCP传输,持续连接可多次发报文;传输完后,客户指示关闭连接。
2.4.2 与HTTP对比
HTTP和SMTP都是用TCP协议;持续的HTTP和SMTP都是持续连接;
区别:
第一个区别:HTTP被设计为一个Pull协议而SMTP被设计为一个Push协议。即用户通过HTTP主动向服务器请求内容,而SMTP则是客户将内容推向服务器端;
第二个区别:HTTP传输的数据不一定是用ASCII字符,但是SMTP则只能使用ASCII字符;
第三个区别:HTTP将每个对象 封装 在自己的响应报文里,而SMTP则将所有的报文对象 放 到一个报文之中;2.4.3 邮件报文格式和MIME
报文由两部分组成:包含环境信息的首部和包含邮件内容的报文体;首部和报文体之间使用空行分开;首部行的格式为关键字:值;每个首部必须包含一个From和To首部行,也可以包含其它信息(Subject)。2.4.4 邮件访问协议
从某ISP服务器上取邮件是个取操作,需要一个特殊的邮件访问协议:POP3(Post Office Protocol-Version 3)、因特网邮件访问协议(IMAP,Internet Mail Access protocol)、HTTP
POP3
POP3使用端口110来建立TCP连接(SMTP使用端口25);三个阶段:特许、事务处理和更新;在特许阶段,用户代理发送密码和用户名以鉴别用户;第二阶段,用户代理取回报文,同时还可以做删除、取消删除标记以及获取邮件的统计信息;第三个阶段是在用户发出quit命令后POP3结束会话,删除被标记的邮件;
一个需要注意的是,POP3用户代理可以使用两种事务处理模式:一种是下载并删除,另一种是下载保留;POP3代理发出的命令和其工作模式相关;用户常用命令:user<aaa> pass<ssss> list retr quit 服务器在事务处理过程需作出回答:OK、-ERR
在用户代理与邮箱服务器之间的POP3会话期间,POP3服务器保留了一些状态信息,特别是记录了哪些用户报文被标记为删除。但是POP3服务器并不在POP3会话过程中携带状态信息,简化了POP3服务的实现。
IMAP
IMAP将每个报文和一个文件夹联系起来联系起来,允许用户在远程建立文件夹、移动邮件(维护了IMAP会话的用户状态信息,将邮文件夹和报文关联)、查询邮件等。IMAP协议还允许用户代理获取报文组件而不是报文整体。
基于Web的电子邮件
用户与服务器之间使用HTTP协议,邮件服务器之间使用SMTP协议。2.5 DNS:因特网的目录服务
比起主机名cnn.com,IP地址容易让路由器处理,可以更好的标识主机。IP地址由4个字节组成,具有层析结构——从左往右越来越具体的主机位置信息。2.5.1 DNS提供的服务
DNS(Domain Name System)域名系统提供主机名到IP地址转换的目录服务。DNS是一个由分层的DNS服务器实现的的分布式数据库和一个使得主机可以查询分布式数据库的应用层协议组成;
DNS运行在UDP之上使用53号端口,通常被其他应用层协议使用,比如:HTTP、SMTP和FTP。
过程:浏览器从URL中抽出主机名传给DNS应用客户端,客户向DNS服务器发送一个包含主机名的请求,最终收到包含IP的报文。一旦浏览器接收到了IP,就能够向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接。
DNS为用户带来方便的同时,也为网络应用带来额外的时延——查询DNS服务器的时延。通过DNS缓存器减少时延。
DNS还提供了以下重要服务:
主机别名:提供主机别名与主机规范名的转换
邮件服务器别名:邮件服务器主机名和别名的转换
负载分配:繁忙的站点被冗余分布在多台服务器上,有着不同IP地址,这个IP地址集合与同一个服务器规范名相联系;
客户对映射到某地址集合的名字发出一个DNS请求,DNS服务器用整个IP集合响应,循环出一个IP包含于回答报文中,这样DNS就在这些冗余的Web服务器之间循环分配了负载。2.5.2 DNS工作机理概述
DNS使用UDP作为传输层协议,经53端口发送查询报文;若干毫秒后客户端将收到一个DNS回答报文,之后将IP地址传递给调用DNS的应用程序。DNS就像一个简单的提供直接转换服务的黑盒子,实际上这个黑盒子非常复杂,由分布在全球的大量DNS服务器以及定义DNS服务器和查询主机通信方式的应用层协议组成;
DNS采用分布式的设计方案,实际上,DNS是一个在因特网实现分布式数据库的精彩范例!而之所以这样做,是因为,单一的DNS服务器存在单点故障、通信容量、向远距离集中式数据库查询实验、维护的问题。
分布式、层次数据库
为了处理扩展性问题,DNS服务器采用层次式组织,并且分布在全世界范围内;大致来说,存在三种DNS服务器:根DNS服务器、*域DNS服务器和权威DNS服务器;举例说明,其工作的普遍流程:一个DNS客户端,希望获得www.baidu.com的IP地址,粗略的说,DNS客户端首先和根DNS服务器取得联系,它将返回负责解析*域名com的服务器的IP地址(或者其集合),客户将同这些服务器之一取得联系,然后*域DNS服务器建返回baidu.com的权威服务器的IP集合,客户端通过与这些服务器之一取得联系,获得www.baidu.com的IP地址。
根DNS服务器:因特网上有13个根DNS服务器,大部分分布在北美洲,尽管我们可以将这13个根DNS服务器视为单个的服务器,但是每台服务器实际上是一个冗余的计算机网络以提供安全性和可靠性;
*域DNS服务器:负责*域名,如com,org,net,edu,gov以及各个国家的*域名的转换。
权威DNS服务器:因特网上,具有公共可访问主机的每个组织机构必须公共可访问的DNS记录,这些记录将主机名映射为IP地址。一个组织的权威DNS服务器收藏了这些DNS记录,多数大学和大公司实现和维护它们自己的基本和辅助(备份)权威DNS服务器;当然,也可以通过付费的方式,将相关的信息插入到其它权威服务器中;
除了上面三种DNS服务器,还有一种不在DNS层次结构之中,但是很重要的DNS,是本地DNS服务器。本地DNS服务器通常邻近其所在网络的其他主机。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将请求转发到DNS服务器层次结构中。
DNS查询有两种,一种是递归查询一种是迭代查询;实践中,查询通常满足这样的模式:从请求主机到本地DNS服务器的查询是递归的,其余查询是迭代的。所谓迭代就是,如果请求的接收者不知道所请求的内容,那么接收者将扮演请求者,发出有关请求,直到获得所需要的内容,然后将内容返回给最初的请求者。也就是说,在递归查询中,一定要给请求者想要的答案;迭代查询则是指,如果接收者没有请求者所需要的准确内容,接收者将告诉请求者,如何去获得,但是自己并不去发出请求。
DNS缓存
DNS缓存实际上是为了盖上时延性能并且减少在因特网上传输的DNS报文数量而引入的。DNS缓存原理十分简单,每当DNS服务器发出请求后收到回答时,就将回答的内容缓存在它自己的主机空间上。这样,如果有相同的请求到达时,就不需要再去发出请求,直接使用缓存即可;因为有了缓存,本地DNS就可以直接提供一些经常被访问的主机名所对应的IP地址,而不需要询问根DNS服务器了。需要注意的是,缓存不可避免的一个问题:有效时间。如果缓存过时而未得到更新,那么就会导致一些请求失败。
个人认为,缓存技术就是一种典型的使用空间换时间的策略2.5.3 DNS记录和报文
共同实现分布式数据库的所有DNS服务器存储了资源记录(Resource Record)。而RR提供了主机名到IP地址的映射信息;一条RR是具有一下字段的4元组:(name, value, type, TTL);其中TTL是指该记录的生存时间,它决定了该条记录何时被删除。
首先看看type,type有4种取值,包括:A、NS、CNAME、MX等:
type=A:则name为主机名,value为对应的IP地址;
type=NS:则name为域,value为如何获得该域下主机IP地址的权威DNS服务器的主机名;
type=CNAME:则value为name(本身为主机别名)所对应的主机的规范主机名;
type=MX:则value为那么所对应的邮件服务器的规范主机名;
如果为了获得邮件服务器的规范主机名,请求一条MX记录;为了获得其它服务器的规范主机名,请求一条CNAME记录
所以如果一条记录为type=A,则它直接包含了需要的信息;如果是NS,需要进一步得到权威DNS服务器的IP地址(同时返回一条NS记录,并返回一条以该NS记录的value值为name的A记录)希望得到一条A记录;而type=CNAME和MX的记录则实现了主机别名到主机规范名的转换,可以通过该规范名继续构建查询链条,直到获得希望的IP地址;
DNS报文
DNS报文有两种,即查询报文和回答报文,并且两种报文有着相同的结构:
DNS报文结构:
前12字节为首部区域。标识符是一个用来标记该查询的16比特数。该标志符会被复制到相应的回答报文里,以便匹配请求和回答;
标志字段有若干标志,用来指出报文的类型(请求还是响应)、查询类型(递归还是迭代)、是否是所请求名字的权威DNS服务器、以及4个有关数量的字段,用来指示4类数据区域出现的数量;
问题区域包含了正在进行的查询信息,包括名字字段、查询类型;
回答区域包含了对最初请求的名字的资源记录,回答报文的回答区域可以包含多条RR,因此一个主机名能有多个IP地址;
权威区域包含了其他权威服务器的信息;
附加区域包含了其它有帮助的记录,比如在对于一个MX类型的请求回答报文里,回答区域里指出了邮件服务器的规范主机名,而附加区域里就有可能包含一个类型为A的关于该规范主机名的的IP地址;
向DNS数据库中插入数据
需要在注册登记机构完成这一任务,当你注册一个域名时,需要向该机构提供你的基本和辅助DNS服务器的名字和IP地址;该***构将确保一个类型为NS和类型为A的记录输入对应的*域名服务器;这样就完成了插入数据2.6 P2P应用
对总是打开的基础设施服务器没有依赖,成对间歇连接的主机之间相互通信。
有两种典型因特网应用十分适合P2P体系结构,一种是文件分发(BitTorrent),另一种是大型对等方社区中的数据库;我们将探讨分布式散列表的概念。P2P体系结构有着良好的自扩展性。这种扩展性的直接成因是:对等方除了比特的消费者之外还是他们的重新分发者2.6.1 P2P文件分发(BitTorrent)
BitTorrent 是一种用于文件分发的流行P2P协议;用BitTorrent的术语来说,参与一个特定文件分发的所有对等方的集合被称为一个洪流;在一个洪流中的对等方彼此下载等长度的文件块;当一个对等方下载文件块的时候,也向其他对等方发送了多个块;一旦某对等方获得了完整文件,就可以自私地离开洪流或者大公无私地留下来继续向其他对等方发送文件.
P2P文件共享协议,参与一个特定文件分发的所有对等方结合被称为一个洪流(torrent),在一个洪流的对等方彼此下载等长度的文件块,可以随时离开洪流,也可继续向其他对等方上载。每个洪流都有一个追踪器。
Alice加入某洪流时,会在追踪器里进行注册,周期性通知追踪器它仍在洪流中。我们称所有与ALICE成功的创建了一个TCP链接的对等方成为邻近对等方。
洪流随机从参与对等方的结合中选择一个子集,将他们的IP地址发给Alice,Alice维护这张对等方列表,试图与所有对等方建立并行的TCP连接。
Alice周期询问每个邻近对等方(连上的)他们有的文件块列表,她随时知道邻居有哪些文件块
Alice使用最稀缺优先技术,首先请求那些邻居们副本数量最少的块,使该文件块迅速分发,以均衡每个块在洪流中的副本数量
BitTorrent使用一种算法,Alice优先从像她传时速度最快的邻居(4个,每10s修改一次)那里获取文件块。
每过30s,Alice也要随机选择另外一个对等方Bob,向他发送块。若Alice是Bob最快的前四快,Bob也是Alice的前4快,则Bob和Alice互相发送数据。
每过30s换一个新的对象,互相交换数据(一报还一报),为了使对等方能够找到彼此协调的速率上传2.6.2 分布式散列表(DHT)
分布式、P2P版本的key-value数据库,在大量对等方上存储key-value值(键值对)
分布式数据库用来定位拥有某key-value的对等方,然后向查询方返回该键值对
使用散列函数把每个键映射为[0,-1]之间的一个整数。
把(键,值)对存储在最邻近对等方那里。比如有8个对等方,标识符为1,3,4,5,8,10,12和15。因此将(11,“wangwenxuan")存储在12上。
环形DHT。(就是环形)。为了防止放松的报文太多了,还可以可以增加捷径,使每个对等方不仅仅联系直接前驱和直接后继。
对等方扰动。对等方可能忽然离开或到来。为了处理对等方扰动。我们要求每个对等方联系第一个和第二个后继。周期性的证实他们俩是活着的。
2.7 套接字编程
当发送进程能够将数据分组退出套接字之门之前,当使用UDP时,必须将目的地址(IP+端口号)附着在分组上。在分组传给发送方的套接字后,因特网将使用目的地址通过因特网为该分组选路到接受进程的套接字。发送方的源地址也是由IP和端口号组成。然而,将源地址附着在分组上通常是由底层操作系统自动完成的。第三章、传输层
在讨论UDP时:阐述如何将网络层在两个端系统之间的交付服务扩展到运行在不同端系统上的应用进程之间的交付服务。
关于TCP:
问题1 通过在会丢失、损坏数据的媒体上实现可靠通信,来看如何建立TCP协议。
问题2 控制运输层实体的传输速率以避免网络中的阻塞,或从阻塞中恢复过来。从了解拥塞控制到TCP如何实现拥塞控制的方法。3.1 概述和运输层服务
传输层协议为运行在不同端系统上的应用进程提供逻辑通信功能;并无需考虑承载报文的的物理基础设施细节;
过程:运输层协议是在端系统中实现的。在发送端,运输层将从应用进程中接收到的报文划分为较小的块并为每块加上运输层首部以生成运输层报文段;网络层进一步封装成网络层分组,网络层路由器仅作用于网络层字段;在接收端,网络层只从数据报中提取运输层报文段交给运输层,运输层将数据给应用层。
因特网有两种传输层协议,即TCP和UDP,不同的传输层协议提供不同的运输层服务
应用 应用层协议 运输层协议
电子邮件 SMTP TCP
远程终端访问 Telnet TCP
Web HTTP TCP
文件传输 FTP TCP
远程文件服务器 NFS UDP
流式多媒体 通常专用 UDP或TCP
因特网电话 通常专用 UDP或TCP
网络管理 SNMP UDP
路由选择协议 RIP UDP
名字转换 DNS UDP3.1.1 传输层和网络层的关系
运输层协议能提供的服务常常受制于底层网络层协议的服务类型,如果网络层协议无法为运输层提供时延和带宽保证,运输层协议也就无法为应用进程提供时延或者带宽保证.
运输层也提供某些服务:虽然网络层会使分组丢失、篡改和冗余,但运输层协议能提供可靠数据传输;加密报文提高安全性。3.1.2 因特网传输概述
传输层协议:UDP(用户数据报协议)提供一种不可靠、无连接的服务;TCP提供可靠的,面向连接的服务。
运输层分组称为报文段,网络层分组称为数据报(UDP分组也可称为数据报);
网络层协议:IP,即网际协议。IP为主机间提供逻辑通信,服务模型是尽力而为交付服务(best-effort delivery service,尽最大的努力在主机间交付报文段)。它不保证报文段的交付、不保证报文段按序交付、不保证报文段中数据的完整性;IP也被称为不可靠的服务。每台主机都需要有一个网络层地址,即IP地址。
运输层(UDP和TCP)所提供的基本服务模型:
1)数据交付 :运输层的多路复用与多路分解:将不同端系统间的IP的交付服务扩展到进程间交付服务;
2)差错检查:运输层报文段首部中包含差错检查字段而提供完整性检查;
TCP提供附加服务:
1)可靠数据传输:通过流量控制、序号、确认和定时器,TCP确保正确按序的将数据从发送进程交付给接收进程;
2)拥塞控制:通过调节发送端发送进网络的流量速率来防止任意一条TCP连接使用过多流量而淹没通信主机间的链路和交换设备;尽可能平等的共享宽带。3.2 多路复用和多路分解
问题:运输层怎么将从网络层接收到的数据定向到某个进程?
一个进程有一个或多个套接字(Socket),套接字具有唯一的标识符。运输层通过套接字的对应端口号将数据交付给相应套接字也就将数据定向到了某个进程。
多路复用:在源主机从不同套接字收集数据块,并为每个数据块封装上首部信息(后面将分解出套接字标识符)生成运输层报文段,然后将其传递到网络层。
多路分解:在接收端,运输层检查报文段中的几个字段从而标识出接收的套接字,将报文段定向到该套接字,即将数据交付给相应进程。
多路的要求:(在应用层)套接字有唯一标识符;(运输层)每个报文有特殊字段(存放标识符)来指示所要交付的套接字。
特殊的字段是 源端口号字段和目的端口号字段,端口号是一个16比特的数,大小在0~65536,0-1023是周知端口号 保留给HTTP、FTP等。
无连接的多路复用与多路分解
UDP套接字是由一个二元组来标志的:目的IP地址和一个目的端口号。
运输层检查目的端口号将报文段交付给相应的套接字实现分解;目的端系统接收到的运输层报文段中还包含一个源端口号,它和源主机的IP地址组成返回地址(新的目的IP和端口号),从而返回发送新的报文段实现复用。
面向连接的多路复用与多路连接
TCP协议中的Socket是通过一个四元组来标记的:源IP地址,源端口号,目的IP地址,目的端口号。与UDP不同的是,两个具有不同源IP地址或源端口号的TCP报文段将被定向到不同的套接字。
服务器主机支持多个并行的TCP套接字,即一个进程与多个套接字相联系,并由其四元组来标识某个套接字;TCP报文段到达主机后通过四元组将报文段定向分解到相应套接字。
创建连接过程:TCP服务器某应用程序进程有一个专门接收请求的套接字在某端口上等待;客户创建套接字并向某端口发送连接请求;服务器OS接收到请求后定位正在该端口等待接收连接的进程,进程创建一个新的套接字;后续到达报文段的四元组匹配的话则被分解到 这个套接字。随着TCP连接完成,客户和服务器可互相发送数据了。
也就是说,一个进程会通过一个套接字占据一个端口,然后创建其他的套接字建立一个个TCP连接。
安全问题???!
Web服务器与TCP
多个浏览器向同一个服务器发送报文,其端口均为80。服务端在80端监听请求,根据源IP地址和源端口号来区分报文段,然后创建一个个具有新连接套接字的新线程。web使用持续HTTP减少了非持续创建销毁的资源损耗。3.3 无连接运输:UDP
DNS是一个使用UDP的应用层协议例子;DNS客户端通过套接字向UDP发送查询报文,UDP为该报文添加首部字段(源和目的端口号,以及其他两个小字段)后交给网络层,网络层将它封装进IP数据报中 尽力地将该报文段交付;当DNS客户端没有收到响应(有可能网络层丢失了查询和响应)则向另一个服务器发送查询或通知调用DNS的程序不能获得响应。
选择UDP构建应用的优点:
关于何时、发送什么数据的应用层控制更为精细:UDP直接将报文打包传给网络层,不必像TCP考虑拥塞而带来过多的延迟。
无需建立连接:没有建立连接时延。
无需维护连接状态:TCP为了实现可靠数据传输和拥塞控制需要在端系统中维护一些参数(接收和发送的缓存、拥塞控制参数、确认号和序号),UDP不需要维护,同一服务器上的应用程序采用UDP可以支持更多的活跃用户。
分组首部更小:TCP有20字节的首部开销,而UDP只有8字节;
使用了TCP作为传输层协议:电子邮件、远程终端访问、Web、文件传输;使用UDP作为其传输层协议:远程文件服务器、网络管理(因为网络管理应用要求在网络处于重压状态时仍要运行)、路由选择协议和名称转换(DNS);这都有使用:流式多媒体、因特网电话等多媒体应用;这些应用对实时性的要求较高同时对可靠性的要求又不是很高,所以既可以使用UDP也可以使用TCP协议。
UDP缺点:缺乏拥塞机制:在大量使用UDP时会导致路由器分组溢出使丢包率变大;也会挤垮TCP会话。
使用UDP仍然可通过在应用程序中建立可靠性机制来实现可靠数据传输,如增加确认与重传机制;将可靠性直接构建于应用程序中,将使其既可以可靠地传输数据又可以避免受制于TCP的拥塞控制(传输速率的控制)。3.3.1 UDP报文结构
UDP首部只有4个字段,每个字段占用两个字节(16比特),分别是:源端口号、目的端口号、长度和校验和。
长度表示包含首部和数据的UDP报文段长度,以字节为单位;校验和字段可被接收方用来计算报文段在传输的过程中是否出现了差错;
3.3.2 UDP检验和
方法:发送方将报文段中所有16比特字的和进行反码运算,溢出回卷,最终结果放在检验和字段。接收方除了加和前三个16比特字,还将加和检验和字段,无差错时结果为1111111111111111
端到端原则:某些功能与在较高级别实现的代价相比,在低级别实现此功能是冗余的。 在既无法保证每一条链路的可靠性,又无法确保在路由器内存中的差错检测下,如果端到端的数据传输服务要提供差错检测,UDP就必须在运输层提供。这也被称为端到端原则。3.4 可靠数据传输原理
本接考虑单向数据传输。udt:不可靠数据传输。rdt:可靠数据传输。
服务模型向上层实体是通过一条可靠信道,即rdt_send(应用层发往运输层)、rdt_rcv(运输层从网络层接收)。TCP是建立在不可靠的(IP)端到端网络层上实现的,即udt_send。虽然本节是讨论单向数据传输,但仍要通过udt往返交换控制分组(ACK等)。3.4.1 构造可靠信道的可靠数据传输
一个可靠数据传输协议,将要面对以下问题:分组丢失、分组损坏到达、分组乱序到达
可靠传输需要的技术:检验和、序号、定时器、肯定和否定确认分组。
(1)经完全可靠信道的可靠数据传输:rdt 1.0
底层信号完全可靠
(2)经具有比特差错信道的可靠数据传输:rdt 2.0
假设所有发送的分组都按其发送顺序被接收,此时要解决的是分组在传输、传播、缓存过程中使比特受损的问题。
通过肯定确认、否定确认这些控制分组使发送端知道哪些被正确接收、哪些需要重传。这种基于重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)。增加了ACK和NCK。
ARQ协议中需要的功能:差错检测,接收方反馈,重传。
rdt2.0的发送端每发送一个分组需要等待接收端的确认信号。这种需要接收方反馈的协议被称为停等协议。
rdt 2.1
rdt 2.0的缺陷:ACK 或NAK 有分组受损和如何的问题。
受损:添加检验和确认是否受损。
纠正:发送端接收到含糊不清的ACK或NAK,直接重发分组。即引入冗余分组。
冗余分组的困难:接收方不知道它上次所发送的ACK和NAK是否被发送方正确接收到。因此它无法知道接收到的分组是新的还是一次重传。
解决这个新问题的一个简单的方法就是在数据分组中添加一个字段,让发送方对其数据分组编号,即将发送数据分组的 序号 放在该字段。于是,接收方只需要检查序号即可确定收到的分组是否一次重传。对于停等协议这种简单的情况,1 比特的序号就足够了。
rdt 2.2
如果不发送NAK,而是对上次正确接收的分组发送一个ACK,我们也能实现同样的效果。
发送方接收到对一个分组的两个ACK(冗余ACK)后,就知道接收方没有正确接收到跟在确认两次的分组后面的分组。
rdt 2.2 是在有比特差错信道上实现的一个无NAK的可靠数据传输协议。
rdt 2.1和rdt 2.2的区别在于,接收方此时必须包括由一个ACK报文所确认的分组序号
(3)经具有比特差错的丢包信道的可靠数据传输:rdt3.0
解决问题:怎样检测丢包以及丢包后做什么。
在 rdt 3.0 中,丢包的问题让发送方通过倒数计时器实现基于事件的重传机制来解决。不管是发送的分组丢失,还是接收方返回的确认分组丢失,在经过一定的时延后,让发送方重发该分组即可。
由此产生的 冗余数据分组 则由接收方通过序号处理。
分组序号在 0 和 1 之间交替, rdt 3.0 有时被称为 比特交替协议。3.4.2 流水线可靠数据传输协议
rdt 3.0的核心问题在于他是一个停等协议
流水线协议
rdt 3.0 是一个功能正确的协议,但是由于它是一个停等协议,大部分的时间都浪费在等待确认上面,所以性能不好。
解决这种特殊性能问题的一个简单的方法是:不使用停等方式运行,允许发送方发送多个分组而无需等待确认。这种技术被称为 流水线。
要使用流水线技术,则须:
增加序号范围。因为要传送多个分组,而每个传输中的分组必须有一个单独的序号。
协议的发送方和接收方两端必须能缓存多个分组。发送方至少得能缓存那些已发送但未确认的分组,而接收方或许也需要缓存那些已经正确接收的分组。
所需序号的范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。
流水线的差错恢复有两种基本方法:
回退 N 步
选择重传
3.4.3 回退N步(GBN)
在回退N步中,发送方维护一个N——窗口大小和一个base——发送方期待收到的最小待确认分组序号,同样也是窗口的起点,还有一个next Sequence变量,表示上层需要发送分组时,可以使用的序号。这样全部序号就被划分为0-base-1,这一部分的分组是已发送且收到接收方确认的分组,base~next Sequence-1这一部分的分组是已发送但是尚未收到确认的,其中base是尚未收到确认的最小序号;next-1~base+N-1表示当前发送方可以使用的序号,表示一种发送能力;当发送方收到确认号为base的确认分组后就会向前移动窗口,所以回退N步也被称为滑动窗口协议
这是发送方需要维护的数据,同时发送方需要响应的事件有:上层调用、收到ACK、超时事件;
上层调用:检查next Sequence是否在窗口之内,如果在,这说明发送方还有发送能力,发送之;
收到ACK:回退N步策略对序号为n的分组采取累积确认的方式,即当收到序号为n的ACK时,表明序号小于等于n的分组全部到位;发送方收到的ACK毕竟来自接收方,收到ACK的情况还得看接收方如何发送;
超时事件:如果发生超时事件,那么发送方会重发所有已发送但是未确认的分组,即分组号在base和next sequence-1之间的所有分组;这也是为什么叫“回退N步”,如果收到一个ACK,则定时器会重行启动;如果没有待确认的分组,定时器将被终止;
在接收方,如果到达分组的序号为n且该分组是按序到达,那么发送ACK,这就导致发送方移动窗口;如果不是按序到达,那么接收方丢弃所有失序分组;丢弃一个正确接收的失序分组可能会导致更多的重传
3.4.4 选择重传(SR)
回退N步协议存在一个问题就是当窗口和带宽的时延都较大时,单个分组的差错可能会引起GBN重传大量的分组,然后许多本来不用重传的分组会充斥在信道中,造成资源浪费;选择重传就是让发送方仅重传那些丢失和受损的分组而避免不必要的重传
SR 发送方的事件和动作:
从上层接收数据: 检查下一个可用于该分组的序号,若在发送方的窗口内,则将数据打包发送。
超时: 定时器再次用来防止丢失分组。但是现在每个分组必须得有单独的定时器。
收到 ACK:倘若该分组序号在窗口内,则 SR 发送方将那个被确认的分组标记为已接收。如果该分组的序号等于send_base,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且该序号落在窗口内的未发送分组,则发送这些分组。
SR 接收方的事件于动作:
序号在 [rcv_base, rcv_base + N -1] 内的分组被正确接收:在此情况下,收到的分组落在接收方的窗口内,一个选择 ACK 被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收窗口的基序号,则该分组及以前缓存的序号连续的分组交付给上层。
序号在 [rcv_base - N, rcv_base - 1] 内的分组被正确接收: 产生一个 ACK,即使该分组是接收方以前已确认过的分组。因为视图不一致
其他情况:忽略该分组。
接收方将确认一个正确接收的分组而不管其是否按序;失序的分组被缓存,直到形成连续数据后将其提交给上层;值得注意的是,如果接收方收到了已经确认的分组,则说明确认ACK丢失,或者时延太长,接收方和发送方沟通不及时;这也表明了关于那些分组到位了,那些分组还没到位,接收方和发送方有着不一样的视图。
另外还需要注意的是,序号的重用问题,如果在分组中序号字段的位数为k,那么最大的序号为2^k-1,所以有可能不同分组同时占用一个序号,为了避免这种情况,需要做的是控制分组的生命周期。窗口长度必须小于或等于序号空间大小的一半。
可靠数据传输机制和用途总结:
3.5 面向连接的TCP
基本原理:差错检测、重传、累积确认、定时器以及用于序号和确认号的首部字段。3.5.1 TCP连接
TCP协议之所以被称为是面向连接的协议,是因为在一个应用进程可以向另一个应用进程发送数据前,这两个进程将首先“握手”,即它们必须交换一些预报文段,已建立对关于数据传输的参数的共识;作为TCP连接建立的一部分,通信双方都将初始化与TCP连接的许多相关变量。
TCP的连接,并不是一条像电路交换网络中端到端的TDM、FDM电路,也不是一条虚电路;其连接状态被端系统所维护而中间路由器完全忽略了该协议,中间路由器看到的只是数据,也就是说,TCP只运行在端系统之上;所以,TCP连接更像一种状态而不是物理的、实际的连接
TCP提供全双工服务,并且是点对点的,数据从A到B的同时,也能从B到A;TCP协议无法提供“多播”服务,一条TCP连接只关联一个发送方和接收方(当然,发送方也是接收方);
通过“三次握手”建立TCP连接。前两次报文段不承载“有效负载”。过程:通信的发起方首先发送一个特殊的TCP报文段给接收方;接收方收到该报文段后,对该报文段进行响应;发送方接收到响应报文段后,发送第三个报文段,其中包含了有效负载。
连接建立后,两个应用进程就可以发送数据。数据通过Socket传递给TCP,TCP将数据引导到“三次握手”所建立的发送缓存;之后TCP在适时从该缓存中拿出数据进行发送;TCP每次可以从缓存中取出的数据数量受限于最大数据长度,MSS(Maximum Segment Size)。一般来说,MSS+TCP/IP首部的长度要小于等于链路的MTU(即链路层最大帧长度Maximum Transport Unit)而以太网和PPP的MTU都等于1500字节,TCP/IP的首部通常为40字节,MSS一般来说为1460字节。
注意:MSS指的是报文段中应用层数据最大长度,而不是包括TCP首部的报文段长度。
TCP为每块客户数据加上TCP首部后就形成了一个个TCP报文段;这些TCP报文段被交给网络层,然后被发送到网络中;当TCP报文段到达接收端时,便进入了接收端的缓存,等待被应用程序读取。
TCP连接的每一端都有发送和接收缓存3.5.2 TCP报文段结构
源端口号和目的端口号:用于TCP的多路复用和多路分解;分别为16位;
序号和确认号:实现可靠数据传输服务。
序号:TCP就是一个字节流,序号建立在字节流上,是当前字节的编号
确认号:该数据表示期望接收方接受的下一字节编号(已经正确接收的报文段的序号),在流水线的差错恢复方案里,不同的恢复策略有不同的意义:回退N步里,当发送方接收到对K的确认号时,表示所有序号小于K的报文段均已到达;而在选择重传里,则仅表示序号为K的报文段被正确接收;
首部长度
TCP的首部是可变长的,所以该字段表示报文段的首部长度,也揭示了应用数据的开始位置;该字段以32比特为单位,占4比特
选项字段
该字段用于在发送方和接收方之间协商MSS的大小,在高速网络环境下,也可用于调节窗口大小;
标记字段
ACK位表示确认号字段的里的值是否有效,如果ACK被置位,那么该报文段就对确认号所指示的报文段进行了确认;
RST、SYN和FIN位用于TCP的连接和拆除;
PSH被置位时,指示接收方应该立即将数据交给上层;
URG被置位时表示报文段里存在着发送端的上层实体置为紧急的数据;紧急数据的最后一个字节由16位紧急指针指出。当紧急数据存在并且给出了指向紧急数据尾指针时,TCP必须通知接收端的上层实体;
然而,实际上,PSH、URG和紧急数据指针在实践中并没有被使用;标记字段一共6比特;
1. 序号和确认号
这两个字段是TCP实现可靠数据传输的重要部分;TCP将数据看作是一个无结构、有序的字节流;序号是基于传输的字节流之上,而不是报文段的序列之上;也就是说,来自应用层的数据被TCP包装在多个报文段中,其中第2个报文段的***不是2,而是1001,如果MSS为1000。关于确认号,如果采取回退N步策略,那么TCP采用一种累计确认的方法,前面已经提到过,这里就不赘述;一条TCP连接可以采取任意数字作为初始序号,这样可以减少将那些残存在网络中的报文段误认为是新建连接的报文段(新旧连接恰巧采用了相同端口)
一个报文段的序号就是该报文段数据字段首字节的序号;确认号就是接受主机正在等待接收的数据的字节序号。服务端对接收端发来的报文段的确认被装载到一个从服务端发往到接收端的报文段中,这种确认被称为“捎带”。
TCP提供累积确认。
3.5.3 往返时间的估计与超时
TCP使用超时重传机制来处理报文段的问题;虽然这在概念上很简单,但是一个问题是,如何设置超时时间?如何设置超时时间,取决于网络的状态,所以需要做的是估计网络的状态。TCP使用一种Sample RTT的方法来估计RTT。Sample RTT就是从某报文段发出到收到对该报文段的确认之间的时间量。大多数TCP的实现是在某个时刻做一个Sample RTT测试。TCP并不为已经重发的报文段做Sample RTT测试,它只为传输一次的报文段测量Sample RTT。
TCP一般来说通过Estimated RTT=(1-a)Estimated RTT+a*Sample RTT来计算因路由器的拥塞和端系统负载变化所导致变化的RTT。a一般取1/8;因为Estimated RTT表示最近的网络状况,所以其理应得到较大的权值;这种方法也被称为指数加权移动平均
除了估计RTT外,计算RTT的变化也是ok的,DevRTT =(1-b)DevRTT+b*|Sample RTT-Estimated RTT|;其中b的推荐值为0.25;当Sample RTT变化较大的时候,DevRTT的值较大,当Sample RTT变化较小的时候,DevRTT就较小;
TCP是如何考虑超时时间的呢?该时间因略大于测量的RTT,不易过小——容易引起不必要的重传,也不易过大——网络对于报文段丢失情况的反应就会变慢;最后TCP采用了如下计算方式:Timeout Interval=Estimated RTT+4*Dev RTT;
当出现超时后,TimeOutInteval值将加倍。不管怎么样,一旦报文段收到并更新Estimated RTT后,TimeInteval就又用上值计算了3.5.4 可靠数据传输
IP协议提供的是尽力而为的服务:不保证不丢失、不保证按序到达、不保证没有损坏,TCP协议在IP协议之上,提供可靠数据传输,从而保证一个进程从其相关联的缓存中读取的数据和另一端进程发送的数据是一致的;TCP使用超时重传和冗余确认技术来处理超时、丢失等情况;使用确认、序号等技术来保证按序到达;使用校验和来检验是否报文段在传输过程中是否发生了错误;
TCP 发送方有三个与发送和重传有关的事件:
从上层应用程序接收数据
定时器
收到 ACK
1.超时时间加倍
在大多数TCP实现中,当发生超时事件时,超时时间并不是从Estimated RTT和Dev RTT推算出来而是直接将超时时间设置为原来的两倍;然而,每当定时器在另两个事件(收到ACK和接收到上层应用数据)发生时,新的超时时间将由上面提到的两个值计算出来;实际上,这是一种形式受限的拥塞控制
2. 快速重传
响应超时事件,然后重传尚未收到确认的报文段,但是,当超时时间过长的时候,会显著增加端到端的延迟;一种可行的方法是对冗余ACK的的检测;在理解冗余ACK之前,需要先看一下接收方为什么会发送冗余ACK。接收方接收到某个报文段时,会检查该报文段是否是按序到达,如果不是,那么接收端会发送对已经收到的最后一个连续报文段的确认,所以如果发送方收到冗余ACK,说明有多个报文段到达了接收端,但不是接收端所期望的——这意味着,很有可能发生了丢失。所以发送方可以在定时器过时之前快速重传所丢失的报文段
下表是 TCP 接收方的 ACK 接收策略:
3.是回退N步还是选择重传
首先,我们需要明白的是,TCP采用了累计确认的机制,也就说,如果接收方正确接收了某一失序到达的分组,那么接收方发送的ACK将是对最后接收的按序到达的分组的确认,而不是对刚刚接收的分组的确认;当然,许多TCP实现都会缓存失序的分组;那么问题来了,发生超时事件后,GBN将重传所有待确认的分组,而不是丢失的分组;而选择重传会好很多
对TCP提出的一种修改意见是所谓的选择确认——即接收方对失序到达的分组也会确认,当该机制和重传机制相结合使得TCP更像选择重传,于是TCP的差错恢复协议最好被分类为GBN和SR协议的混合体.3.5.5 流量控制
流量控制是一个速度匹配服务:TCP连接的发送方和接收方都各自维护一个缓存,因此两者的数据交换应该在一个合理的速度范围内:不让对方发生数据溢出;TCP为它的应用程序提供了这种服务:流量控制服务。虽然流量控制和拥塞控制所采取的动作非常相似,但是它们的目的很明显并不同。在接下来的讨论中,我们将假设TCP是这样实现的,即TCP接收方丢弃失序到达的报文段
在TCP首部中有一个窗口大小字段,TCP连接的双方通过该字段来向对方表明自己的窗口大小,即缓存空间的大小;同样,在TCP连接的两端,各自维护着相关的变量:last Sent、last Acked;在发送方,这两个变量之间的分组就是已经发送但是尚未确认的分组;而在接收方,last Read表示应用进程下一次读取的数据,last Revd表示最后纳入缓存的报文段编号(注意,我们讨论的前提是TCP会将失序到达的报文段丢弃哦~);通过这些变量以及报文段首部中窗口大小字段,我们就可以对发送速度做一些控制:在发送方last Sent-last Acked应该小于等于接收方的窗口大小;在接收端A=last Received-last Read就是已经使用的空间大小,所以窗口大小=buffer-A;
对了,还有一个问题就是,如果接收方的窗口大小为0,那么发送端该如何处理呢?一个需要注意的事实是,接收方在没有ACK或者数据要向发送端发送的时候,是不会通知发送方其窗口大小已经改变,即如果应用程序读取了缓存中的数据,发送方是不会知道的,除非它向接收方发送了数据,而发送方对其进行了确认;实际上,发送方也是这么做的!当接收到窗口大小为0的报文段后,发送方会向接收方间隔发送只有一个字节的数据。3.5.6 TCP连接管理
1. TCP三次握手
PS:TCP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』。不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。
起初,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。
服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。
第一次握手
客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。
PS1:SYN=1,ACK=0表示该报文段为连接请求报文。
PS2:x为本次TCP通信的字节流的初始序号。
TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号。
第二次握手
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。
该应答发送完成后便进入SYN-RCVD状态。
PS1:SYN=1,ACK=1表示该报文段为连接同意的应答报文。
PS2:seq=y表示服务端作为发送者时,发送字节流的初始序号。
PS3:ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。
第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
该报文段的头部为:ACK=1,seq=x+1,ack=y+1。
客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!
为什么连接建立需要三次握手,而不是两次握手?
防止失效的连接请求报文段被服务端接收,从而产生错误。
PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。
若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。
2. TCP连接的释放一共需要四步,因此称为『四次挥手』:
我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。
第一次挥手
若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:
FIN=1,seq=u。此时,A将进入FIN-WAIT-1状态。
PS1:FIN=1表示该报文段是一个连接释放请求。
PS2:seq=u,u-1是A向B发送的最后一个字节的序号。
第二次挥手
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:
ACK=1,seq=v,ack=u+1。
PS1:ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
PS2:seq=v,v-1是B向A发送的最后一个字节的序号。
PS3:ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。
A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。
第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手
当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。
第四次挥手
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
为什么A要先进入TIME-WAIT状态,等待时间后才进入CLOSED状态?
为了保证B能收到A的确认应答。
若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。
3.6 拥塞控制原理3.6.1 拥塞原因与代价
计算机网络拥塞的原因是因为网络中的分组太多,而链路带宽和路由器缓存容量都是有限的;
当分组的到达速率接近链路容量时,分组将经历巨大的排队时延;
发送方必须执行重传已补偿因为缓存溢出而丢弃的分组
发送方遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
当一个分组沿着一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了;3.6.2 拥塞控制方法
拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;
流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。
总体来说,我们可以更具网络层是否为传输层拥塞控制提供了显式帮助来区分拥塞控制方法:端到端拥塞控制和网络辅助拥塞控制;
在端到端拥塞控制方法中,网络层并没有向传输层拥塞控制提供显式支持,即便网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来判断;TCP必须通过端到端的方法解决拥塞控制,因为IP层不会像端系统提供有关网络拥塞的反馈信息。TCP报文段的丢失(超时或者收到3次冗余确认而得知)被认为是网络拥塞的一个迹象,TCP将相应地减小窗口长度;
在网络辅助的拥塞控制方法里,网络层会向发送方提供关于网络中拥塞状态的显式反馈消息;比如使用一个比特位来指示网络是否拥塞;拥塞信息从网络反馈到发送方一般有两种方式,其中直接反馈信息可以由网络路由器发送给发送方,这种方式的通知通常采用一种拥塞分组的形式;第二种形式的通知是路由器标记或者更新从发送方到接收方的分组中的某个字段来指示拥塞的产生,然后由接收方向发送方通知该网络发生了拥塞。3.6.3 网络辅助的拥塞控制例子:ATM ABR拥塞控制 异步传输方式 可用比特率
ATM基本上采用一种面向虚电路的方法来处理分组交换。
ABR已被设计成一种弹性数据传输服务。
对于ATM ABR服务,数据信元经过一系列交换机传输到目的地。在数据信元中夹杂着所谓的资源管理信元(RM信元)。这些RM信元可被用作在主机和交换机之间传递与堵塞相关的消息。当一个RM信源到达目的地时,它将掉头并向发送端发送。交换机也可能自己产生一个RM信元,并将该信元直接发送给源。因此,RM信元可以用来提供直接网络反馈和经由接收方的网络反馈。
与拥塞相关的信令信息:
EFCI比特。每个数据信元都包含一比特的显式转发拥塞指令(EFCI)。某拥塞的网络交换机可把一个数据信元中的EFCI设为1来向目的主机发送网络已经堵塞的信令。当一个RM到达时,如果多数近来收到的数据信元的EFCI都是1.则目的地会将RM的堵塞指示比特(CI)设为1,并将RM信元发送给发送方。
CI和NI比特。RM信元的夹杂比率可调。每个RM信元包含一个拥塞指示比特(CI)和无增长比特(NI)。轻微堵塞NI设1,严重堵塞CI设1.
ER的设置。每一个RM信元还包含一个两个字节的显式速率(ER)字段。一个拥塞的交换机也许会降低ER的值。ER字段被设置为在源和目的路径上所有交换机中的最小可支持速率。3.7 TCP拥塞控制原理
TCP必须使用端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP并不会向端系统提供显式的网络拥塞反馈;TCP所采用的方法是让每一个发送方根据其所感知的网络拥塞程度来限制其能向连接发送流量的速率;如果TCP判断网络通畅,那么它会提高发送速率,如果TCP判断网络拥塞,那么它会限制发送速率;需要解决三个问题:TCP如何限制发送速率?TCP如何感知网络拥塞程度?TCP该以何种算法改变其发送速率?
我们知道,TCP连接的双方都维护着两个窗口,其中一个是作为发送方的窗口,也被称为拥塞窗口cwnd,它对发送方能向网络中发送流量的速率进行了限制,last sent-last acked<=min{cwnd,rwnd};另一个自然是作为接收方的接收窗口。
我们假设,发送方可以在RTT时间范围内连续发送cwnd个字节的数据,所以发送速率即为cwnd/RTT;发送方通过调整窗口大小来对发送数据的速率加以控制
我们将TCP发送方的丢包事件定义为:要么超时,要么收到接收方的3个冗余ACK;如果网路拥塞,那么网络中的路由器就会发生缓存溢出,进而导致数据报被丢弃,然后就会引起发送方的丢包事件;此时,TCP发送方就可以认为TCP连接出现了拥塞
另外,TCP将接收方发送的ACK视为网络通畅的标志,如果ACK到达的速率较高,那么TCP的拥塞窗口就会以较高的速率扩大,如果ACK到达的速率较慢,那么TCP拥塞窗口的增加速度也会较慢;因为TCP使用ACK对拥塞窗口做出调节,所以也别称为自计时的;
TCP发送速率过高,网络就很容易拥塞;TCP发送方如果过于谨慎,那么就无法充分利用网络的带宽;所以TCP如何设置自己的发送速率,才能使得网络不会拥塞而且还充分利用带宽呢?关于这个问题,TCP使用下列指导性原则回答这些问题:
一个丢失的报文段意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率;
一个确认报文段指示该网络正在向接收方交付发送方的报文段,因此,当收到对先前报文段的确认时,可以增加发送方的速率;
带宽检测;TCP调节器传输速率的策略是增加其速率以响应到达的ACK,除非出现丢包,此时才减少发送速率;以为网络中没有明确的拥塞控制状态信令,ACK和丢包事件充当了隐式信号.
以上为TCP拥塞控制的概述,接下来就是广受赞誉的TCP拥塞控制算法,该算法包含三个主要部分:慢启动、拥塞避免、快速恢复;慢启动和拥塞控制是TCP的强制部分;两者的差异在于对收到的ACK做出反应时增加cwnd长度的方式;快速恢复是推荐部分,对于TCP发送方并非是必须的
1.慢启动
TCP连接在开始的时候,其cwnd常设置为一个MSS,然后在慢启动状态每收到一个ACK,cwnd就增加一个MSS;这样的话,在慢启动阶段,发送速率是指数增加的(1,2,4,8…)
何时结束这种指数增长?有三种情况:发送了超时、发生了冗余ACK以及cwnd达到ssthresh。ssthresh是慢启动阈值的速记;在慢启动阶段,如果发生了超时事件,那么ssthresh就被设置为当前cwnd的一半,然后将cwnd置为1;当cwnd逐步增加到ssthresh时,再翻倍增加cwnd就有一点鲁莽了,所以此时TCP结束慢启动,进入拥塞避免模式。在拥塞避免模式里,TCP将更谨慎地增加cwnd;如果收到冗余ACK,那么TCP会做一次快速重传,然后进入快速恢复阶段;
2.拥塞避免
一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的一半,所以TCP在每个RTT中,只将cwnd增加一个1个MSS大小;也就是说在拥塞避免阶段,cwnd是线性增加的;
当出现超时时,TCP将cwnd设置为1,然后将ssthresh更新为cwnd的一半;当收到冗余ACK时,TCP将cwnd减半,然后将ssthresh置为cwnd值的一半,并且进入快速恢复状态;
3.快速恢复
在快速恢复阶段,对于引起TCP进入该状态的缺失报文段,每收到一个ACK,cwnd增加一个MSS;最终,当对丢失报文段的一个ACK到达时,TCP降低cwnd后进入拥塞避免状态;如果出现超时事件,快速恢复在执行如同慢启动和拥塞避免中相同动作后,进入慢启动状态.
当多条连接共享一条瓶颈链路时,那些具有较小RTT的连接能够在链路空闲时更快的抢到可用带宽(即较快的打开其拥塞窗口),因而将比那些具有较大RTT的连接享用更高的吞吐量。第四章、网络层
4.1,4.2 从网络层概述和提供的服务开始,考察两种用于构造网络层分组交付的方法,理解编址在传递分组到目的主机所起的作用。
对网络层的转发和路由选择功能做区分。转发涉及分组在单一路由器中由一条链路到另一条的1传送。路由选择涉及一个网络的所有路由器,经路由选择协议共同交互以决定分组到源目的地结点所采用的路径。
4.3,4.4 转发:路由器内部的硬件体系结构,因特网中的分组转发和IP。网络层编址和IPv4的数据报格式。NAT、数据报分段、ICMP和IPV6.
4.5,4.6 路由选择: 路由选择算法。因特网自治系统内部、之间的路由选择协议。广播,多播路由。4.1 概述4.1.1 转发和路由选择
网络层的作用:将分组从一台发送主机移动到一台接收主机。需要两种功能:
转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
路由选择:分组从发送方流向接收方时,网络层通过路由选择算法决定这些分组采用的路由或路径。
每台路由都有一张转发表。路由器检查分组首部字段值,使用该值在转发表索引查询,该值指出了该分组将被转发的路由器输出链路接口。
那转发表中的值是如何配置的?路由选择算法决定了插入路由器转发表中的值。路由器接收路由选择协议报文,来配置转发表。有两种算法:集中式,分布式。
分组交换机:指一台通用分组交换设备,根据分组首部字段值从输入链路接口转移分组到输出链路接口。
链路层交换机:基于链路层字段中的值做转发决定。
路由器:基于网络层字段值做转发决定。
连接建立:某些网络结构(ATM、帧中继、MPLS)要求从源到目的地沿着所选择路径彼此握手,在网络层数据分组流动前建立状态。4.1.2 网络服务模型
定义了分组在发送与接收端系统之间的端到端运输特性
网络层可以提供的服务(注意IP并没有这些服务!):
确保交付
具有时延上界的确保交付:不仅确保交付,在预定时延内到达
有序分组交付:确保交付,以发送的顺序到达目的地。
确保最小带宽:模仿发送方和接收方之间一条特定比特率传输链路的行为。发送速率低于该速率,分组不会丢失,且会在预定时延内到达
确保最大时延抖动:确保发送方两个相继分组之间的时间 = 目的地接收到它们之间的时间
安全性服务:使用仅由源和目的地主机知晓的**,加密、解密数据报负载,还提供数据完整性和源鉴别服务
因特网的网络层IP协议提供单一服务,称为尽力而为服务。无带宽保证,无丢包保证,无法保证接受顺序和发送顺序一致,不保证分组间的定时,无拥塞指示。
其他提供服务的服务模型:
恒定比特率(CBR) ATM网络服务
使网络连接看起来就像在发送和接收主机之间存在一条专用的、固定带宽的传输链路,以使用性质相同的虚拟管道来提供分组(ATM术语称为信元)流。
可用比特率(ABR)ATM网络服务
信元会丢失但不能重排序。最小传输速率(MCR)是可以得到保证的。4.2虚电路和数据报网络
和运输层有面向连接、不连接协议类似,网络层也有连接、不连接。
仅在网络层提供连接服务的计算机网络称为虚电路;仅在网络层提供无连接服务的计算机网络称为数据报网络。
运输层面向连接服务是在位于网络边缘的端系统中实现的;网络层连接服务(虚电路)除了在端系统中,也在位于网络核心的路由器中实现4.2.1 虚电路网络
因特网是一个数据报网络,ATM、帧中继的体系结构是虚电路网络,因此在网络层使用连接。这些网络层连接被称为 虚电路。
虚电路组成:
源和目的主机之间的路径,即一系列链路和路由器;
VC号,沿着该路径每段链路的一个号码;
沿着该路径每台路由器中的转发表表项。
属于虚电路的分组首部有一个VC号,虚电路上的不同链路具有不同VC号,分组离开主机后通过VC到选择相应链路进入中间路由器,中间路由器从转发表获得新的VC号,从而仍将分组转向新的链路。
当跨越一台路由器创建一条虚电路时,转发表增加一个新表项,终止虚电路时相应表项将会被删除。
转发分组过程中VC号改变的原因:逐链路代替该号码减少了分组首部VC字段长度;大大简化虚电路建立。
虚电路网络中的路由器必须为进行中的连接维护连接状态信息。每当跨越一个路由器创建一个连接,转发表加一项;释放一个连接则删除对应项。即使没有VC号转换,仍有必要维持状态信息,它将该信息将VC号和输出接口号联系起来。
虚电路3个阶段:
虚电路建立
发送运输层与网络层联系,(运输层)指定接收方地址,等待网络建立虚电路;
网络层决定发送方和接收方之间的路径,即虚电路要通过一系列链路和路由器,为每条链路设置vc号
最后,网络层在路径上每台路由器的转发表增加一个表项
在建立期间,网络层预留该虚电路路径上的资源,如带宽。
数据传送
发起呼叫,入呼叫,接收呼叫,呼叫连接,数据流开始,接收数据
虚电路拆除
网络层通知网络另一侧端系统结束呼叫,更新路由器上转发表项以表明该虚电路不存在。
信令报文
端系统向网络发送指示 虚电路启动与终止的报文;路由器之间传递的用于建立虚电路(修改路由器表中的连接状态)的报文,它们被称为 信令报文。
用来交换这些报文的协议称为信令协议。4.2.2 数据报网络
每当端系统要发送分组,数据包网络就为分组加上目的地址,然后将分组推进网络。
分组从源到目的端系统传输会通过一系列路由器传递,每个路由器有转发表,将目的地址映射到输出链路接口,然后路由器将分组向该接口转发。
目的地址(IP地址)32bit,路由器用分组的目的地址的前缀与表项进行匹配。当有多个匹配时,使用最长前缀匹配规则。
数据包网络中路由器不维持连接状态信息,但在转发表中维护了转发状态信息。转发状态信息是通过路由选择算法进行修改的。
因为在数据包网络中的转发表能在任何时刻修改,从一个端系统到另一个端系统发送一系列分组可能在通过网络时走不同的路径,并可能无序到达。4.2.3 虚电路和数据报网络的由来
虚电路来源于电话界
端系统设备复杂,网络层服务模型应尽可能简单,另外的功能(按序发送、可靠数据传输、拥塞控制与DNS名字解析)在端系统中的更高层实现。
因特网服务模型简单对网络层施加了最小限度的需求,使得互联网使用各种链路层技术(卫星、以太网、光纤、无线)变得简单。
增加一个新服务只需连接一台主机到网络,定义一个新的应用层协议即可,使得Web之类的新服务很快在因特网得以部署。4.3 路由器工作原理
路由器的组成部分
输入端口:
执行将一条输入的物理链路与路由器相连接的物理层功能;
执行需要与位于入链路远端的数据链路层交互的数据链路层功能;
查找功能,查询转发表决定路由器的输出端口,分组通过交换结构转发到输出端口;
控制分组(携带路由选择协议信息的分组)从输入端口转发到路由选择处理器。
交换结构
将路由器的输入端口与输出端口相连。
输出端口
存储从交换结构接收的分组,执行必要的链路层和物理层功能在输入链路上传输这些分组。
当链路是双向的时,输出端口与输入端口在同一线路卡成对出现。
路由选择处理器
执行路由选择协议, 维护路由选择表以及连接的链路状态信息,为路由器计算转发表。
一台路由器的输入端口、输出端口和交换结构共同实现了转发功能(总用硬件实现),这种转发功能有时总称为路由器转发平面。
路由器的控制功能(执行路由选择协议、对上线或者下线链路进行响应、管理功能),在毫秒时间尺度上运行,这些路由控制平面通常用软件实现并在选择处理器上执行。4.3.1 输入端口(查找转发排队):
查找:
在路由器的输入端口中执行查找功能,通过查找转发表来找到输出端口,从而让分组通过交换结构到达该输出端口(转发)。
吉比特速率下,查找必须在纳秒级别执行,不仅要用硬件执行查找,而且要对大型转发表使用超出简单线性搜索的技术如快速查找算法,同时要关注内存访问时间(DRAM、SRAM、三态内容可寻址寄存器)。
与查找相关的 输入表概念:转发表是由路由选择处理器计算,经过一个独立的总线复制到线路卡而更新的。并且,转发表的一份影子副本会被更新到每个输入端口,这样转发决策能在输入端口本地做而无需集中式的在*路由选择处理器处理。
排队:有分组正在使用交换结构则当前分组会在进入交换结构时被暂时阻塞。一个被阻塞的分组必须在输入端口处排队并等待调度以通过交换结构。
尽管查找在输入端口可以说是最为重要的,但必须采取许多其它动作:必须出现物理层和数据链路层处理;必须检查分组的版本号、检验和寿命字段,重写后两个字段;必须更新用于网络管理的计数器(如接收到IP数据报的数目)
匹配加动作(网络层,链路层,防火墙),抽象的作用巨大。4.3.2 交换结构
通过交换结构,分组才能实际地从一个输入端口交换(即转发)到一个输出端口中。
三种交换方式:
经内存交换
最初的路由器像计算机,输入输出端口像IO设备 在路由选择处理器控制下完成功能。
一个分组到达输入端口时,该端口会先通过中断方式向路由选择处理器发出信号;
分组从输入端口被复制到处理器内存中,路由选择处理器从首部提取目的地址,在转发表找到对应的输出端口;
将分组复制到输出端口的缓存中。(集中式处理)
现代路由器,在分组交换内存时多在本地输入输入线路卡处理。
经总线交换
输入端口经一根共享总线将分组直接传送到输出端口,不需路由选择处理器的干预。
输入端口为分组预计划一个标签然后进入总线,只有输出端标签匹配的才能接收分组。多分组时,只有一个能跨越总线,其他要在输入接口等待,即路由器的交换带宽受总线速率限制。
经互联网络交换
纵横式交换机,2N条总线组成的互联网络,连接N个输入端口和N个输出端口。
每条垂直的总线与每条水平的总线交叉,交叉点通过交换结构控制器开启闭合,当闭合时分组就可以通过联通的总线到达输出端口。这种纵横的网络可以并行转发多个分组。
4.3.3 输出端口
选择和取出排队的分组进行传输,执行所需的物理层和链路层功能。4.3.4 何处出现排队
输入、输出端口都能形成分组队列,排队的位置和程度取决于流量负载、交换结构相对速率和线路速率。
随着队列增长,路由器缓存空间会耗尽,出现丢包。
如何合理设置缓存来减少丢包??
假设多个输入端口的n个分组到达了输出端口,可能有n-1个需要缓存处理。
需要路由器缓存吸收流量负载波动,需要多少缓存?
少量TCP流:RTT * C(平均往返时延RTT250ms×链路容量10Gbps==2.5Gb)
大量TCP流:RTT* C/ (N^1/2)(N:TCP流)
输出端口排队,需要输出端口上的分组调度程序选出一个分组发送。这种选择可以是简单的先来先服务(FCFS)或其他如加权公平排队(WFQ)。分组调度程序在提供服务质量保证上有很大的作用
当缓存无法满足到达的分组时,就需要丢弃了:1)弃尾 2)在缓存填满前便丢弃已排队的分组(或在首部添加标记),并向发送方提供一个拥塞信号。
这些策略统称为 主动队列管理(RQM)。
随机早期检测算法(RED):为输出队列维护一个加权平均值,以丢弃/标记。
线路前部阻塞(HOL)
输入队列第一个分组必须等待时,即便第二个分组的目标输出端口空闲但也会因为前部分组的阻塞而阻塞。这就是HOL阻塞。4.3.5 路由选择控制平面
网络范围的路由选择控制平面是分布式的,即不同部分(如路由选择算法)执行在不同的路由器上并且通过彼此发送控制报文进行交互。4.4 网际协议(IP):因特网中的转发和编址
网络层三个组件
网际协议(IP)
路由选择协议:决定数据报从源到目的地所流经的路径。
互联网控制报文协议(ICMP):报告数据报中的差错、对某些网络层信息请求进行响应。
4.4.1 数据报格式
版本号(IPv4、IPv6):4比特,不同版本对数据报不同解释,通过版本号路由器确定如何解释数据报。
首部长度:数据报首部包含可变数量的选项,用这4比特确定数据报数据部分从那开始。一般数据报不包含此项,首部20字节。
服务类型(TOS):区分不同类型的IP数据报(实时,非实时)
数据报长度:首部+数据的长度。16bit,所以数据报理论长度65535字节。
标识、标志、片偏移:IP分片有关。IPv6不允许在路由器上对分组分片
寿命TTL:确保数据报不会永远在网络中循环。每被一个路由器处理时,值-1;减到0,丢弃数据报。
协议号:到达最终目的地才有用,指示了IP数据报的数据部分应该交给哪个运输层协议。如6交给TCP,如17交给UDP。协议号是将网络层与运输层绑定到一起的粘合剂;端口号是将运输层和应用层绑定的粘合剂,链路层帧也有一个特殊字段用于将链路层与网络层绑定到一起。
首部检验和:帮忙路由器检测收到IP数据报中的比特错误。IP层仅对IP首部计算检验和,而TCP/UDP检验和是对整个TCP/UDP报文段进行的。
源和目的IP地址:当源声称一个数据报时,它在源IP字段插入它的IP地址,在目的IP插入最终地址。源主机通过DNS查找决定目的地址。
选项:IPv4中,选项字段允许IP首部被扩展;IPv6已抛弃选项字段
数据(有效载荷):包含运输层报文段(TCP或UDP),或ICMP报文段。
一个IP数据报有长为20的首部,如果数据报承载一个TCP报文段,则每个(无分片)数据报承载总长40字节的首部(20字节的TCP首部)以及应用层报文。
1. IP数据报分片
一个链路层帧能承载的最大数据量叫做最大传送单元,而数据报是封装在链路层帧中从一个路由器到下一个路由器的,所以IP数据报长度受限于链路层协议的MUT。
当数据报大于MUT时则可将分组分片(fragmented),当分组到达目的地前再重组(reassembled)。为了坚持网络内核保持简单的原则,IPv4的设计者把数据报的重新组装工作放在端系统中。
如何确定收到了最后一片,并如何将收到的片拼接成初始的数据报呢?
IPv4设计者将标识、标志和片偏移片段放在IP报首部中。首部的相关字段用于标识分片以及确定分片的相对顺序。生成一个数据报时,发送主机会在设置源和目的地址的同时贴上标识号。分片时,每片都具有源地址、目的地址和标识号。通过标识号确定收到的片是同一数据报。最后一个片的标志被设置为0来确定收到了数据报的最后一片。使用偏移字段确定是否丢失片以及正确顺序组装这些片。
例:
4000字节的数据报,在MTU1500字节的链路上
数据报的有效载荷仅当在IP层已完全重构为初始IP数据报时,才会传递给目的地传输层。如果一个或多个片没有到达目的地,则该不完整的数据报被丢失或使用TCP让源来重传数据。
IPv6废除了分片,简化了IP分组的处理,使得IP不容易收到Dos攻击。4.4.2 IPV4编址
主机与路由器连入网络的方法
一台主机通常只有一条链路连接到网络,主机IP发送数据报从该链路发送,主机与这条物理链路之间的边界叫做接口。
路由器是从该链路上接收数据报并从其它链路转发出去,所以它拥有多条链路,也就拥有多个接口。
IP要求每台主机和路由器都有自己的IP地址,因此一个IP地址实际上是与每一个接口相关联。
每个IP地址长度32bit(4字节),总共2^32个可能的IP地址,这些地址按点分十进制记法书写:即每个字节用十进制形式书写,各字节间用点隔开。如193.32.216.9
一个接口的IP地址的一部分需要由其连接的子网决定。如互联3个主机接口与1个路由器接口的网络形成一个子网,IP编址为这个子网分配一个地址:223.1.1.0/24,/24记法称为子网掩码,指示了32比特中的最左侧24 比特定义了子网地址。
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点,这些隔离的网络中每一个都叫做一个子网。
全球因特网是如何处理编址的?
因特网地址分配策略:无类别域间路由选择(CIDR)。
形如a.b.c.d/x的地址的x最高比特构成IP地址的网络部分,称为该地址的前缀(网络前缀)。一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。BGP路由选择协议中,该组织网络外部的路由器仅考虑前缀,减少了转发表的长度。因为形式为a.b.c.d/x单一表项足以将数据报转发到该组织内的任何目的地???
地址聚合(路由聚合):使用单个网络前缀通告多个网络的能力
发送以200.23.16.0/20开始的任何内容。外部无需知道在该地址块内的其他组织,每个组织有自己的子网。
一个地址的剩余32-x比特可认为是用于区分该组织内部设备的。组织内部路由器转发分组时,才会考虑这些比特。
在CDIR被采用之前,IP地址的网络部分被限制为8、16、24比特,这些比特的子网被称为A、B、C网络。
E类:240.0.0.0~255.255.255.255
D类 224.0.0.0~239.255.255.255
C类(/24)仅能容纳2^8-2=254台主机(其中两个用于特殊用途)192.0.0.0~223.255.255.255
B类(/16)支持65534台主机,一个组织分配一个B类地址却只用2000个接口,造成巨大浪费 128.0.0.0~191.255.255.255
A类 (/8)0.0.0.0~127.255.255.255
IP广播地址:当一台主机发出目的地址为255.255.255.255的数据报时,报文会交付给同一个网络的所有主机,路由器也会有选择的向邻近的子网发送报文。
如何获取地址、分配地址?
1. 获取一块地址
子网获取IP地址:由ISP的大地址再划分出地址块 200.23.16.0/20 ——》200.23.16.0/23(P230)
I其它:ICANN
2.获取主机地址:动态主机配置协议
组织获得一块地址,就可为组织内的主机、路由器接口逐个分配IP地址
路由器中的IP地址手工配置。主机地址能手动配置,也能通过动态主机配置协议DHCP来完成。
动态主机配置协议DHCP---UDP
DHCP允许主机自动获取一个IP地址。
DHCP可配置,可以使主机每次连网获得相同IP地址,也可每次分配一个临时IP地址。
DHCP还允许主机查看子网掩码、默认网关(第一跳路由器地址)、本地DNS服务器地址。
DHCP具有能将主机连接进一个网络的自动能力,常被称为即插即用协议
DHCP是一个客户-服务器协议。新来的主机要获得包括自己使用的IP地址在内的网络配置信息。
每个子网都有一台DHCP服务器,若子网没有DHCP服务器,则由一个DHCP中继代理(一台路由器),它知道该网络的DHCP服务器地址。
新主机获取网络配置时,DHCP协议的四个步骤
1.DHCP服务器发现
新到的客户通过使用DHCP发现报文,发现一个要与其交互的DHCP服务器。
客户在UDP分组中向端口67发送该发现报文,用广播地址255.255.255.255、源地址是0.0.0.0;DHCP将该IP数据报传给链路层将该帧广播到所有与该子网连接的子网。
2.DHCP服务器提供
DHCP收到DHCP发现报文时,用DHCP提供报文做出响应,因为此时新客户并没有IP地址所以仍然使用广播地址255.255.255.255。
可能有多台DHCP服务器,每台服务器提供的报文中,有向客户主机推荐的IP地址、网络掩码以及IP地址租用期(一般几天或几小时)
3.DHCP请求
客户从提供中选一个,并向选中的服务器提供一个DHCP请求报文进行响应,回显配置参数。
4.DHCP ACK
用DHCP ACK报文对DHCP请求报文进行响应,证实所传参数。
客户收到ACK后,交互完成,可在租期内使用DHCP分配的IP地址。DHCP还提供了机制允许客户更新对一个IP地址的租用。
当一个移动结点在子网之间移动时,就不能维持与远程应用的TCP连接。
3.网络地址转换NAT
ISP会为SOHO子网分配一组连续地址供子网内的所有机器使用,子网变大时该如何呢? NAT
地址10.0.0.0/8是保留的3个IP地址空间之一,这些地址用于家庭网络等专用网络或具有专用地址的地域。具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。
家庭网络中的设备只能够使用10.0.0.0/24 编址彼此发送分组,也就是它只在给定的网络中才有意义,当向全球因特网发送/接收分组时地址在何处是唯一?NAT
NAT使能路由器
NAT路由器对外界的行为看起来像一个具有单一IP地址的单一设备。图中所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址138.76.29.7(圆圈3),进入的也是(圆圈2)。本质上,NAT路由器对外隐藏了家庭网络的细节。
家庭网络怎么得到其地址?NAT使能路由器又从哪里得到单一IP地址?
NAT路由器从ISP的DHCP服务器得到它的地址,并且路由器运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的计算机提供地址。
NAT转换表:
既然到达NAT路由器的1所有数据都有相同目的IP地址,那路由器怎么将分组发给内部某个主机呢? 路由器上有一张包含了端口号及其IP地址的NAT 转换表, 端口号和IP地址用于路由器将分组转发给特定的内部主机。
详细过程:从主机10.0.0.1通过端口3345发送一个web请求;请求到达NAT路由器后 IP被转换为广域网一侧的IP即ISP分配的138.76.29.7,使用了一个新的端口5001,并在NAT转换表中增加一表项;当响应报文到达该NAT路由器后,使用目的IP地址和目的端口号5001检索出家庭浏览器使用的IP地址和目的端口号3345,并改写数据包中的IP和端口号后继续转发报文。
NAT重要问题:
用于了主机编址,违反了端到端原则等,应该用IPv6来改进。
妨碍P2P应用程序。一个对等方在NAT后面,不能充当服务器并接受TCP连接,其解决办法是连接反转。
连接反转:A通过C与B联系,C不位于NAT之后并与B建立了TCP连接,已经被很多P2P应用用于NAT穿越。
若对等方A和B都在NAT之后,使用应用程序进行中继处理,如Skype中继。
4.UPnP
NAT穿越由通用即插即用(UPnP)提供。
UPnP是一种允许主机发现并配置邻接NAT的协议,要求主机和NAT都是UPnP兼容。
使用UPnP,在主机上运行的应用程序能为某些请求的公共端口号请求一个NAT映射((主机的)专用IP地址,专用端口号 — 公共IP地址,公共端口号)。如果某NAT接收请求并生成映射,来自外部的结点能发起到(公共IP地址,公共端口号)的TCP连接。
允许外部主机使用TCP和UDP向NAT化的主机发起通信会话。它提供了有效健壮的NAT穿越解决方案。4.4.3 因特网控制报文协议ICMP
ICMP被主机和路由器用来沟通网络层信息,典型用途是差错报告。 如“目的网络不可到达”之类的错误是在ICMP产生的,IP路由器找不到路径通往指定主机,该路由器就向发送主机发出ICMP报文指示错误。
ICMP通常被认为是IP的一部分,但从体系结构上来讲它是位于IP之上的,因为ICMP报文是作为IP有效载荷承载的。当主机接收到一个指明上层协议为ICMP的IP数据报时,它将分解出该内容给ICMP。
ICMP报文有一个类型字段和一个编码字段。ping程序就是发送一个ICMP类型8编码0的报文到指定主机,目的主机收到该回显请求会发回一个类型0编码0的ICMP回显回答。
ICMP报文是源抑制报文,在最初拥塞的路由器向主机发送它,强制主机减小发送速率。TCP在运输层有拥塞控制机制,不需要网络层中的反馈信息了(ICMP源抑制报文)。
Traceroute:如何跟踪从一台主机到世界上任意一台主机之间的路由?
原理:IP协议规定,路由器收到TTL为0的数据报会将其丢弃,然后发送一个ICMP告警报文给源主机。
过程:发送一系列IP数据报,携带了不可达UDP端口号的UDP报文段 TTL依次为1~n。源主机也会为每个数据报启动定时器,当第n个数据报到达第n个路由器时TTL刚好过期,路由器丢弃数据报并发送ICMP告警报文给源主机(11,0)。该报文包含了路由器的名字和IP地址。
4.4.4 IPv6
1. IPv6数据报格式(引入的变化)
扩大的地址容量:IP地址长度从32bit 增加128bit; 除了单播多播地址,引入任播地址,使数据报可以将数据报交付给一组主机中的任意一个。
简化高效的40字节首部
流标签与优先级: 给特殊流的分组加上标签,如音频流、视频流、高优先级用户承载的流量。
版本:4比特用于标识IP版本号。
流量类型,流标签
有效载荷长度:16比特作为一个无符号整数,给出跟在定长40字节首部后面的字节数量。
下一个首部(数据报内容交给哪个首部),跳限制(每次路由器对该字段减1,为0时丢弃数据报,类似IPv4中的TTL)
源地址和目的地址,数据(到达目的地时取出并交给下一首部字段指定的协议处理)
分片/重新组装:使分片只能在源与目的地进行组装
首部检验和:IPv6中去掉
选项 放到了“下一个首部”位置,删除使得IP首部定长40字节
2. IPv4到IPv6的迁移
双栈:为了引入IPv6使用该方法的6结点还具有IPv4实现,这种结点被称为IPv4/IPv6结点,具有发送和接收两种数据报的能力,也就同时具有IPv4和IPv6两种地址;通过DNS解析另一个节点来确定另一个节点是IPv4/6使能的,解析返回IPv6地址,使用双栈方法的结点发送IPv6数据报。
例:
结点B必须生成一个IPv4数据报发给C,IPv6数据报的数据字段可以复制到IPv4数据报的数据字段中,并且要做适当的地址映射。在IPv4中没有对应的部分的数据,这些字段的信息会丢失。
建隧道:两台IPv6结点之间的IPv4路由器的集合称为一个隧道。在隧道前的IPv6结点将所有信息作为IPv4数据报的有效载荷,作为IPv4数据报在隧道传输,当隧道后的IPv6结点接收到数据报后就提取出原来的信息,,重新作为IPv6数据报进行传输。4.4.5 涉足IP安全性
提供安全的新型网络层协议:IPsec。它在虚拟专用网(vpn)中得到了广泛部署。
与IPv4和IPv6向后兼容,不需要替换路由器或主机中的协议栈。
使用IPsec的运输模式时,两台主机要通信,IPsec只需在两台主机中使用,其他主机和路由器继续用普通的IPv4即可。使用时两台主机创建IPsec会话(面向连接的),在两台主机发送的TCP和UDP报文段都享受IPsec的安全性服务。发送端,运输层向IPsec传递一个报文段,IPsec添加安全性字段加密后,封装到IP数据报的有效载荷中。传输到目的主机的IPsec,IPsec解密报文段并将脱密的报文段传送给运输层。
IPsec会话提供的服务:
密码技术约定
IP数据报有效载荷的加密
数据完整性
初始鉴别:主机确信在数据报中的源IP地址是该数据报的实际源。4.5 路由选择算法
路由选择算法在网络路由器中运行、交换和计算信息,用这些信息配置转发表,(不论提供数据报服务还是虚电路服务)从而通过转发表查询转发让网络层具有了路由选择功能。路由选择:确定从发送方到接收方通过路由器网络的好路径。
主机通常直接与一台路由器相连,该路由器即为该主机的默认路由器或第一跳路由器。
当主机发送分组后,我们把源主机默认路由器称为源路由器,目的主机默认路由器称为目的路由器。一个分组从源主机到目的主机的路由选择问题就成了从源路由器到目的路由器的路由选择问题。
把因特网中的路由器、链路抽先后,结点代表路由器,边代表与路由器相连的链路,边的值代表费用。 并且抽象出的图是无向图。
路由选择算法:给定一组路由器和连接路由器的链路,路由选择算法要找到一条源路由器到目的路由器好的路径(有最低费用的路径)。
路由选择算法的广义分类方式一:
全局式路由选择算法
用完整、全局性的网络信息计算出从源到目的地之间的最短路径(最低费用路径)。算法具有连通性和链路费用方面的完整信息所以实践中这种具有全局状态信息的算法又称作链路状态算法(LS)。
分散式路由选择算法
以迭代、分布式的方式计算最低费用路径。没有结点拥有关于网络链路的完整信息,每个结点仅有与其直接相连链路的信息即可工作。通过迭代计算并与相邻结点交换信息,一个节点逐渐计算出到达某目的结点的最低费用路径。例如距离向量算法(DV)。
路由选择算法的广义分类方式二:
静态路由选择算法
变化缓慢,通常人工干预进行调整。
动态路由选择算法
网络流量负载或拓扑发生变化时改变路由选择路径。算法可以周期性运行或直接响应拓扑或链路费用的变化。容易受路由选择循环、路由震荡等问题的影响
路由选择算法的第三种分类方法:
负载敏感算法
链路费用动态变化来反映底层链路当前的拥塞水平。
负载迟钝算法
当今因特网路由选择算法基本都是迟钝的,链路费用不明显反应其当前的拥塞水平。
4.5.1 链路状态路由选择算法LS
在该算法中,网络拓扑和所有链路费用已知。实践中是由每个结点向网络中所有其它节点广播链路状态分组(包括这个结点所连接的链路的特征和费用)完成的。实践中例如使用OSPF路由选择协议,这经常由链路状态广播算法完成。最终所有结点都具有该网络的信息,每个结点都可以运行LS算法计算出相同的最低费用路径集合。
Dijkstra算法:采用贪心策略,计算从某节点出发得到它到相邻节点的值(不相邻无穷),选择最小值的邻居增加到最短路径中;然后再次遍历看新增加的结点是否缩短了到其它结点的值,缩短则更新并选择一个新的最短路径节点;依次类推,即每次遍历到距离源结点最近且未被访问过的结点。迭代算法,经过第k次迭代后知道始结点到k个目的结点的最低费用路径。
这样就有了从源结点到其它结点的最短路径,每个结点这样构建信息:目的地;到目的结点该路由结点在最短路径的下一个结点(输出链路(a,b))。最差情况下时间复杂度O(n^2)。堆减少复杂性??
实际中同一条链路不同分组流向的负载是不同的,假如所有路由器选择某顺时针同一路径 下次检测到这条路径拥塞 选择逆时针 ,下次又是顺时针;这样会产生路由震荡,可以让每台路由器发送链路通告的时间随机化。4.5.2 距离向量路由算法DV
DV算法是一种迭代、异步、分布式的算法。
分布式:每个结点要从一个或多个直接相连邻居接收某些信息,执行计算,将计算结果分发给邻居。
迭代:这种接收计算分发的过程持续到邻居之间无更多信息交换为止。
异步:不要求所有结点相互之间步伐一致地操作。 感觉比集中式有意思呀。
DV算法
Bellman-Ford方程,==》min{源结点与其邻居的距离+邻居到目的结点的 最 短 距离(迭代的,展开式是嵌套的)}
(感觉就是函数调用自身不断嵌套,也就是计算了所有不重复链路的路径,就这?,这种计算不像LS一样结点有全局信息,它只需要直接相连邻居的链路费用,没有详细阅读代码 感觉要有结果的话需要目的结点开始计算然后分布式到任意邻居,其它这些结点在等待接收信息然后继续做分布式更新)
本书中提到的优点:解为结点转发表的表项(也就这样);很酷的一点,它提出了邻居到邻居通信的形式,很好的体现了分布式、异步思想!!
1.链路费用改变与链路故障
路由选择环路,无穷计数
2. 增加毒性逆转
a--》b,并告知b没有到达其他节点的好路径(0-》a-》b 不要再给我整成0-》a-》b-》a-》b——)(有没有比增加毒性逆转更好的控制??)
3.LS与DV路由选择算法的比较
报文复杂性
LS每条链路费用改变要向其它所有结点发送新的链路费用;DV更新改变的链路。
收敛速度
LS:n^2 ;DV算法收敛较慢,且会遇到路由选择环路和无穷计数问题。
健壮性
路由器发生故障,LS结点仅计算自己的转发表,提供了一定健壮性。
DV算法一个 不正确的结点计算值会扩散到整个网络。
4. 其他路由选择算法
LS、DV基本上是当前因特网实践中使用的仅有的两种;
电路交换路由选择算法。4.5.3 层次路由选择
让所有路由器执行一样的算法在现实中有一些问题:
规模:随着路由器数目变得很大,涉及路由选择信息的计算、存储和通信的开销将高的不可实现。
管理自治:一个组织应该当按自己愿望运行管理其网络。
解决方法:将路由器组织进自治系统AS来解决
每个AS由一组处在相同管理控制下的路由器组成(如相同的ISP运营)。在相同的AS中路由器运行同样的路由选择算法,且拥有彼此的信息;这种算法叫做自治系统内部路由选择协议(As内部路由选择算法),这样就有了AS内部路由器到网关路由器的最低费用路径。AS内的部分路由器向AS外的目的地转发分组,这些路由器叫做网关路由器。
当AS有多条链路通往外部,那该如何选择网关路由器呢?
此时AS需要解决两个问题:1)从相邻AS获取可达性信息(相邻AS的可达目的地);2)将可达性信息向AS中的路由器传播。这两项需要由 自治系统间路由选择协议 处理。 因特网中所有AS中都运行相同的AS间路由选择协议BGP4。 每台路由器接收来自一个AS内部路由选择协议和一个AS间路由选择协议的信息,并使用来自这两个协议的信息配置它的转发表。
为转发到AS外某子网,如何在多个网关中选择:AS1从AS间协议知道经过多个网关可达子网x,并向AS1内所有路由器传播该信息;使用AS内部协议的路由选择信息来得到到这些网关的最低费用路径(AS内);热土豆路由选择:选择具有最小的最低费用的网关(目的路径上所有网关路由器中有最低的从路由器到网关的费用)还是AS内?????啥玩意; 一旦选择了路径,源路由器在转发表增加用于子网的表项。
一个AS从相邻AS知道了一个目的地,该AS能向它的其它相邻AS告知该路由选择信息。4.6 因特网中的路由选择4.6.1 自治系统内部的路由选择:RIP
AS是处于相同的管理与技术控制下的路由器的集合。AS内部路由选择协议用于确定在一个AS内执行路由选择的方式,这些协议又称为内部网关协议。两个重要的路由选择:路由选择信息协议(RIP),开放最短路优先(OSPF)。与OSPF相关的路由选择协议是IS-IS协议。
RIP是一种距离向量协议(其运行方式像理想化的DV协议,在DV协议中费用被定义在路由器对之间),而它使用跳数作为其费用测度, 跳是沿着源路由器到目的子网(包括目的子网)的最短路径经过的子网数量。一条路径的最大费用限制为15,因此RIP的使用限制在网络直径不超过15跳的自治系统内。
路由选择更新信息在邻居之间通过使用RIP响应报文(RIP通告)来交换,大约每30s交换一次,由一台路由器或主机发出的响应报文包含了该AS内多达25个目的子网的列表,以及发送方到其中每个子网的距离。
每台路由器维护一张称为路由选择表的RIP表,包括该路由器的距离向量和转发表(目的子网,下一台路由器的标识,沿着最短路径到到目的子网的跳数)。
路由器收到通告后,将通告与路由选择表合并,更新更短路径(到某子网最短路径改变的原因:DV算法还在收敛,或者新的链路加入AS)。
一台路由器超过180s没有从邻居听到报文,该邻居要么死机要么链路中断了。RIP可以修改本地路由选择表,向其它相邻的邻居发送RIP通告以传播该信息。 路由器在UDP上使用端口520相互发送RIP请求与响应报文,UDP封装在标准IP数据报中在路由器之间传输。 它是一个运行在UDP上的应用层协议。
4.6.2 AS内部的路由选择:OSPF
OSPF和其密切相关的IS-IS通常设置在上层ISP中,RIP设置在在下层ISP和企业网中。
OSPF核心就是一个使用洪泛链路状态信息的链路状态协议 和一个 Dijkstra最低费用路径算法。一台路由器在本地运行Dij算法以确定一个以自身为根结点到所有子网的最短路径树,这样就构建一幅关于整个自治系统的完整拓扑图。各条链路费用(权值)是管理员配置的,OSPF不强制使用如何设置链路权值的策略,但提供了一种为给定链路权值集合确定最低费用路径路由选择的机制(协议)。
使用OSPF时,路由器向AS内所有其他路由器广播路由选择信息。当链路状态发生变化时,并且也要周期性广播链路状态。OSPF通告包含在OSPF报文中,该OSPF报文直接由IP承载。
优点:
安全:能够鉴别OSPF路由器之间的交换(如链路状态更新)。仅有受信任的路由器能参与AS内的OSPF协议。
多条相同费用路径:当到达某目的地的多条路径具有相同费用时,允许使用多条路径来承载流量,而无需仅选择单一路径承载所有流量。
支持单播多播路由选择
支持在单个路由选择域内的层次结构
一个OSPF 自治系统可以配置成多个区域,每个区域运行自己的OSPF链路状态路由选择算法,一个区域内每台路由器可以向该区域其他路由器广播其链路状态。 一个区域内,一台或多台区域边界路由器负责为流向该区域以外的分组提供路由选择。 AS内只有一个OSPF区域配置成主干区域,为其他区域之间的流量提供路由选择。该主干包含AS内所有区域边界路由器,也可能包含一些非边界路由器。 区域内路由要求分组先路由到一个区域边界路由器,再通过主干路路由到位于目的区域的区域边界路由器,然后再路由到目的地。
4.6.3 自治系统间的路由选择:BGP
那是跨越多个AS的源和目的对之间是如何确定路径的呢?
边界网关协议(BGP)作为一个自治系统间路由选择协议,每个AS提供了进行以下工作的手段:
1)从相邻AS获得子网可达性信息;2)向本AS内部所有路由器传播这些可达性信息;3)基于可达性信息和AS策略,决定到达子网的"好"路由。
1. BGP基础
它是因特网中至关重要的协议,正是BGP将因特网中的所东西粘合在一起。
BGP中,路由器通过使用179端口的半永久TCP连接来交换路由选择信息,它连接了不同AS中的路由器。这种半永久BGP TCP连接还连接了AS内的路由器。对于每条TCP连接,位于连接端点的两台路由器称为 BGP对等方,沿着该连接发送BGP报文的TCP连接称为BGP会话。跨越两个 AS的TCP连接称为外部BGP会话(eBGP),AS内部每对路由器之间的TCP连接称为内部BGP会话(iBGP)。BGP会话线不总是与物理链路对应。
与ISP签订协议后获得了一个IP地址范围(子网),每台路由器是通过BGP知道子网地址的前缀进行转发的,这样别人才能成功将分组发到子网内。
BGP使每个AS知道经过其相邻AS可到达哪些目的地。在BGP中目的地是CDIR化的前缀,每个前缀表示AS内的一个子网或子网的集合。子网集合发送的是子网聚合的前缀,使用最长前缀匹配来转发数据报。
BGP是怎样经BGP会话来分发前缀可达性信息的?
AS的网关路由器使用eBGP会话向会话的另一端网关路由器发送该AS可达的前缀列表,这种发送是相互的;在一方网关路由器接收到可达性信息后,使用iBGP会话向AS内的其它路由器发布这些前缀,得知新前缀的路由器将在转发表中创建一个项。
2.路径属性和BGP路由
BGP中,一个AS由其全局唯一的自治系统号ASN标识。并不是都有,在一种stubAS就没有。
当一台路由器通过BGP会话通告一个前缀时,它在前缀中包括一些BGP属性。带属性的前缀称为一条路由,因此BGP对等方彼此通告路由。有下面这两个较为重要的属性:
AS-PATH:该属性包含了前缀通告已经通过的AS,当一个前缀传送到一个AS时,AS将其ASN增加到AS-PATH中。
路由器使用AS-PATH属性检测和防止循环通告;使用AS-PATH在多条路径中选择相同的前缀。
NEXT-HOP:是一个开始某AS-PATH的路由器接口。路由器使用该属性正确地配置它们的转发表;使用NEXT-HOP值和AS内部路由选择算法,路由器能确定到每条对等链路的路径的费用,用热土豆路由选择决定适当的接口。
1.
BGP路由选择
BGP使用eBGP和iBGP向在AS中的所有路由器发布路由,路由器可能知道到达任何一条前缀的多条路由。路由器必须在可能的路由中选择一条,调用如下消除规则直到留下一条路由:
路由被指派一个本地偏好值作为他们的属性值一。
选择具有最短AS-PATH的路由。
最靠近NEXT-HOP路由器的路由,最靠近指最低费用路径最低,由AS内部算法决定(热土豆路由选择)。
使用BGP标识符选择路由。
4. 路由选择策略
4.7 广播和多播路由选择
广播路由选择,网络提供了一种源节点到网络中事务所有其它结点的交付分组的服务;
多播路由选择,使单个源节点能够向其他网络结点的一个子集发送分组的副本。4.7.1 广播路由选择算法
1.N次单播
给定N个目的节点,源结点产生该分组的N份副本,对不同目的地每个副本编址,用单播路由选择传送
效率低,多份独立的副本会重复经过某段链路,让网络结点本身生成分组副本更有效
N次单播的一个假设是广播的接收方及其地址为发送方所知晓。但是怎样得到这些消息呢?最可能的是,可能还需要别的机制。浙江增加更多的开销。
2.无控制洪泛
源节点向所有邻居发送分组副本,结点复制该分组并向它邻居转发
图中有环,会无休止循环
当一个结点与两个以上结点连接时,它将生成并转发广播分组的多个副本,副本中的每个又产生多个副本,产生广播风暴,使网络变得毫无用处
3.受控洪泛
序号控制洪泛:源节点将其地址或其他唯一标识和广播序号放入广播分组,每个结点维护它已经收到的、复制的和转发的源地址和序号列表。当结点接受到一个广播分组时,它首先检查该分组是否在列表中。如果在,丢弃该分组;如果不在,复制该分组并向该结点的所有邻居转发。
反向路径转发RPF:仅当分组到达的链路正好位于它自己返回源的最短单薄路径上,才传输报文,否则丢弃。RPF仅需要知道在它到发送方的单薄路径上的下一个邻居;它仅用这个邻居的身份以决定是否洪泛一个接收到的广播分组。
4.生成树广播
虽然序号控制洪泛和RPF避免了广播风暴,但它们不能完全避免冗余广播分组的传输。
构造最小生成树;结点只需知道哪些邻居在生成树中
分布式生成树算法
基于中心的方法:建立一棵生成树时,定义一个中心结点(汇合点、核),结点向中心结点单薄加入树的报文。加入树的报文使用单播路由选择朝着中心结点进发,直到它到达一个生成树中,经过的路径再嫁接到现有生成树中。
在实践中,广播协议被用于应用层和网络层4.7.2 多播
只有一部分路由器(那些具有加入该多播组的相连主机的路由器)实际需要接收多播流量。
一些新兴应用要求将分组从一个或多个发送方交付给一组接收方,比如各种直播、游戏
多播数据报使用间接地址来编址。每个分组难道携带所有接收方IP地址?这不科学
用一个标识表示一组接收方(D类多播地址),接收方小组称为多播组
因特网组管理协议IGMP
IGMP + 多播路由选择协议 组成网络层多播
确定多播路由选择:
使用一棵组共享树的多播路由选择(共享的):通过组共享树进行多播路由选择的基础是构建一棵树。
使用一棵基于源的树的多播路由选择:而第二种方法为多播组中的每个源构建一棵多播路由选择树。
解决应用RPF时会收到不想要的多播分组这个问题成为剪枝。一台接收到该多播分组的多播路由器,如它无加入改组的相连主机,则它向其上游路由器发送一个剪枝报文,则它就能向上游转发一个剪枝报文。第五章、链路层:链路、接入网和局域网5.1 链路层概述
本章将运行链路层协议的任何设备(主机、路由器、交换机和WiFi接入点)均称为结点。沿着通信路径连接相邻结点的通信信道称为链路。在通过特定链路时,传输结点将数据报封装在链路层帧中,将该帧传送到链路中。
5.1.1链路层提供的服务
链路层基本服务:将数据报通过单一通信链路从一个结点移动到相邻结点。
能够提供的可能服务包括:
成帧
网络层数据报经链路传送前,链路层协议要将其用链路层帧封装起来。一个帧由一个数据字段和若干首部字段组成,网络层数据报就存在数据字段中。 帧的结构由链路层协议规定。
链路接入
媒体访问控制(MAC)协议规定帧在链路上传输的规则。当多个结点共享单个广播链路时,即所谓多路访问问题,MAC协议用于协调多个结点的帧传输。
可靠交付
链路层通过确认和重传来保证数据报的无差错运输,通常用于易产生高差错率的链路,在该链路上就纠正差错。
差错检测和纠正(硬件)
通过让发送方在帧中包括差错检测比特,让接收结点进行差错检测,用硬件实现。接收方不仅能检测出比特差错,而且能准确确差错出现的位置并纠正。
5.1.2 链路层在何处实现
路由器:线路卡中实现
端系统:网络适配器(网络接口卡),位于网络适配器核心的是链路层控制器,它是一个实现了许多链路层服务(成帧、链路接入、差错检测)的专用芯片。
过程:发送端,控制器取得由协议栈较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报(填写各字段),遵循链路接入协议将该帧传进通信链路中;在接收端,控制器接收整个帧,抽离出网络层数据报,执行差错检测等功能(有相应字段)。
部分链路层是在运行于主机CPU上的软件中实现的,实现了高级链路层功能:发送端组装链路层寻址信息和**控制器硬件;接收端响应控制器中断(帧到达时),处理差错条件和将数据报上传给网络层。
链路层是软、硬件结合体,是协议栈中软件和硬件交接的地方。5.2 差错检测和纠正技术
比特级差错检测与纠正,即对从一个结点发送到另一个物理上连接的邻近结点的链路层帧中的比特损伤进行检测和纠正。
在发送结点,为了保护比特免受差错,使用差错检测和纠正比特(EDC)来增强数据D。要保护的数据不仅包括从网络层传递下来需要通过链路传输的数据报,而且包括链路帧首部中的链路级的寻址信息、序号和其它字段。 在接收结点,通过差错检测和纠正技术检测收到的比特序列;有可能未检出比特差错,通过一些差错检测方案降低未检出事件概率。
检测差错技术:奇偶校验(描述差错检测和纠正的基本思想)、检验和方法(运输层)、 循环冗余检测(适配器链路层)。
5.2.1 奇偶校验
单个奇偶校验位
单个比特的奇偶校验是指在要发送的数据最后附加一个奇偶校验位,使这d+1 个数据中1的个数是奇或偶数;在接收方只需要看一看是否仍是奇或偶数个1,但仍会有损失偶数个1导致检测失败。
二维奇偶校验
D中的d个比特被划分为i行j列.对每行每列计算奇偶值。产生的i + j + 1奇偶比特就构成了链路层帧的差错检测比特。
当出现单个比特差错时,发生错误的行和列都会出现差错。接收方可以根据行列索引来纠正它。也可以检测(但不能纠正)一个分组中两个比特错误的任何组合。2同一行;2个不同行。
接收方检测和纠错的能力被称为前向纠错(FEC)。在接收方直接纠正,避免了重传的往返时延。
5.2.2 校验和方法
在校验和方法中,d比特数据被作为一个k比特整数的序列处理。 这些序列全部相加之后取反码就是校验和。接收方收到数据之后,把所有数据加起来,结果全是1来则未出错。
检验和方法与链路层的CRC相比,校验和提供较弱的差错保护。
为什么传输层使用校验和而链路层使用CRC呢?
1. 传输层使用软件实现,检验和简单快速
2. 链路层的CRC用硬件实现,能够执行复杂的CRC操作。
5.2.3 循环冗余检测(CRC)
现在广泛应用的差错检测技术基于循环冗余检测(CRC)编码,也称为多项式编码。因为该编码能够将要发送的比特串看成系数是0或1的一个多项式,对比特串的操作被解释为多项式算数。
发送方编码步骤如下 。
1)发送方和接收方首先协商一个r + 1的比特模式,称为 生成多项式( G)。要求最高比特位是1。
2) 对于一个给定的数据段D,发送方选择r个附加比特R,并将它们附加到D上。
3) 使得到的d + r比特模式(被解释为一个二进制数)用模2算数恰好能被G整除。
接收方的解码步骤:用G去除收到的d + r比特。如果余数非0,接收方知道出了差错。
CRC计算采用模2算数来做,加/减法不进/借位,等价于操作数的按位异或XOR;乘除法与二进制算数相同(D×2^r XOR R 产生d+r 比特模式)。代数特性:用d+r比特模式的二进制除以1+r比特模式的G,余数为0则没有出错。
要使得R对于n有: D * XOR R = nG.
两边异或R得: D * = nG XOR R (异或两次 规定不进位 后面00000000)
余数 R = remainder {D * / G}5.3 多路访问链路和协议
有两种类型的网络链路
点对点链路:由链路一端的单个发送方和另一端的单个接受方组成。
针对这种链路设计的协议: 点对点协议PPP, 高级数据链路控制协议HDLC
广播链路:让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。 当任何一个结点传输一个帧时,信道广播该帧,其他结点都收到一个副本。(以太网、无线局域网是广播链路层技术的例子)
多路访问问题: 如何协调多个发送和接收结点对一个共享广播信道的访问。
所有结点都能传输帧,所以多个节点可能会同时传输帧,这时所有结点同时收到多个帧,也就是说传输的帧在所有接收方处接收 碰撞 了。碰撞帧信号丢失使得帧丢失,也就浪费了碰撞时间间隔中的广播信道。
多路访问协议:结点通过协议规范它们在共享的广播信道上的传输行为。
类型划分: 信道划分协议, 随机接入协议, 轮流协议。
理想情况下对速率R bps的广播信道,多路访问协议希望有以下特性:
仅有一个结点有数据发送时,结点具有R bps的吞吐量;
M个结点有数据发送时,每个结点平均吞吐量R/M bps;
协议是分散的,不会因为主结点故障使整个系统崩溃
协议简单5.3.1信道划分协议
时分多路复用和频分多路复用是两种能够用在所有共享信道结点之间划分广播信道带宽的技术。
TDM(时分多路复用)
假设一个支持N个结点的信道且信道传输速率为R bps。
TDM把时间划分为 时间帧,并进一步把时间帧划分为N个时隙(slot)。 把每个时隙分配给N个节点中的一个,有分组要发送时在循环的 TDM 帧中指派给它的时隙内 传输分组比特。(注意这个时隙应能够传输完一个分组)
优点:消除了碰撞,且公平的让每个结点在每个帧时间内得到了专用的传输速率 R/N bps。
缺点:
1)结点被限速于R/N bps的平均速率,即使它是唯一要发送分组的结点;
2)结点总是等待它在传输序列中的轮次,即专属于它的时隙。
FDM(频分多路复用)
FDM将R bps的信道划分为不同的频段(每个频段具有R/N带宽),并把每个频率分给N个结点中的一个。因此FDM在单个较大的信道中创建了N个较小的R/N bps信道。
FDM:避免了碰撞,公平划分了带宽;缺点是只能使用R/N带宽。
码分多址CDMA
TDM和FDM分别为结点分配时隙和频率,CDMA对每个结点分配不同的编码。 每个结点用其唯一编码对发送的数据进行编码,使得不同结点能同时传输,并且它们各自对应的接收方仍能正确接收发送方编码的数据比特。应用:蜂窝电话5.3.2随机接入协议
传输结点总是以信道全部速率R bps进行发送。有碰撞时,涉及碰撞的每个节点反复重发(等待一个随机时延)它的帧,直到该帧无碰撞的通过。
常用随机接入协议:
1.时隙 ALOHA
操作:当结点有新帧发送时,等到下一个时隙开始传输整个帧(假设一个时隙可传一个帧); 如果有碰撞,结点在时隙结束之前检测到这次碰撞。该节点以p的概率在后序的每个时隙重传它的帧,直到无碰撞传输出去。
优点:当该结点有帧要传输时就被认为是活跃的,如果只有一个活跃结点 时隙ALOHA允许以全速R连续传输; 时隙ALOHA也是高度分散的,所以每个结点检测碰撞并独立决定什么时候重传。
注意: 时隙ALOHA的确需要在结点中对时隙同步。
时隙内有多个活跃结点将有碰撞;结点概率传输会有没有结点的情况;刚好有一个结点传输的时隙称为一个成功时隙。
时隙多路访问协议的效率定义为:当有大量的活跃结点且每个结点总有大量的帧要发送时,长期运行中成功时隙的份额。
效率:当活跃结点数量趋向无穷大时,最大效率1/e,即37%。一个给定的结点成功传送的概率是,因为有N个结点,任意一个结点成功传送的概率是N。
2. ALOHA
碰撞时,立即以概率p重传该帧,否则等待一个帧传输时间
效率:仅为时隙ALOHA的一半:.一个给定结点成功传输一次的该概率是
3.载波侦听多路访问CSMA
在时隙和纯ALOHA,一个结点传输的决定独立于其他结点,不关心自己传输时别人是不是在传输
举例:有礼貌的人类谈话有两个重要规则
说话之前先听。如果在说话,等他们说完话再说,网络中称为载波侦听 ,结点等待直到一小段时间没有传输,然后开始传输
如果与他人同时开始说话,停止说话。称为碰撞检测,当一个传输结点在传输时一直侦听此信道,如果检测到另一个结点正在传输,它就停止,等待一段随机事件,重复『侦听=当空闲时传输』动作
这两个规则包含在CSMA和具有碰撞检测的CSMA/CD协议族中
B的比特沿着广播媒体传播所实际需要的时间不是0(2*10^8),在还没到D时,尽管B正在发,但D侦听的信道空闲,D就开始传输,于是发生了碰撞
广播信道端到端信道传播时延决定了性能,时延越大,不能侦听到已传输结点的可能就越大,碰撞越多,性能越差
4.具有碰撞检测的载波侦听多路访问CSMA/CD
与广播信道相连的适配器:
适配器从网络层一条获得数据报,准备链路层帧,并将其放入帧适配器缓存中
如果适配器侦听到信道空闲,开始传输帧;如果侦听到信道在忙,等待,直到侦听到信道空闲
传输过程中,适配器监视信道
如果适配器传输整个帧而未检测到其他信号,该适配器完成了该帧,传输过程中检测到了就停止传输帧
中止传输后,适配器等待一个随机时间量,继续侦听
选择随机回退时间间隔太大,信道会空闲,太小会再次碰撞。当碰撞结点数量较少时时间应该间隔较短,否则较长。
二进制指数后退算法解决这个问题
帧经历一连串n次碰撞,结点随机从{0,1,2,…,2^n-1}选择一个K值
一个帧经历碰撞越多,K选择的间隔越大.该算法称为二进制指数倒退。
以太网中,一个结点等待的实际时间量是K*512bit的时间.
效率
信道在大多数时间都会有效地工作。 5.3.3 轮流协议
轮询协议
指定一个主结点,以循环的方式轮询每个结点
主结点首先向结点A发送一个报文,告知A能传输帧的最大数量,A传完后主结点告诉B能传帧的最多数量,如此循环
缺点:有轮询时延;主结点故障,整个信道就GG
令牌传递协议
没有主结点,一个叫令牌token的特殊帧在结点之间以固定次序交换,如1发给2,2发给3,N发给1,就像网络拓扑结构中的环状网络令牌
当一个结点收到令牌时,有帧发送,则发送最大数量的帧,然后转发令牌;没帧发送,直接把令牌转发.
缺点:单点故障。
DOCISIS:用于电缆因特网接入的链路层协议5.4 交换局域网
交换机运行在链路层,所以是交换链路层帧,使用链路层地址而不是IP地址来转发链路层帧通过交换机网络 5.4.1 链路层寻址和ARP
1.MAC地址
并不是主机或路由器具有链路层地址,而是它们的适配器(网络接口)具有链路层地址。具有多个网络接口的主机或路由器也有多个链路层地址,就像它也有多个IP地址一样。
链路层交换机并没有链路层地址,任务是执行在主机与路由器之间承载数据报的任务
链路层地址也叫LAN地址、物理地址、MAC地址
MAC地址长度6字节,2^48个可能的MAC地址,通常用十六进制表示法,如5C-66-AB-90-75-B1
MAC地址一般是固定的(也有软件改变适配器MAC地址的可能)
没有两块适配器有相同的MAC地址,MAC地址空间由IEEE管理,IEEE给公司固定前24个比特,后面24个比特让公司自己去生成
MAC地址具有扁平接口。比如具有802.11接口的手机总是有相同mac地址;而当主机移动时,IP地址会改变(IP地址是层次结构)
MAC地址像身份证号,IP地址像邮政地址,有层次,会改变
当某适配器要向目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入该帧,发送到局域网上,适配器可以接受一个并非向它寻址的帧,当适配器接受一个帧时,检查帧中的目的MAC地址与自己的MAC地址是否匹配,若匹配则取出数据报,向上传递,否则丢弃
适配器通过MAC广播地址FF-FF-FF-FF-FF-FF来广播
2. 地址解析协议ARP(即插即用的)
转换网络层地址和链路层地址,如IP地址和MAC地址的转换
DNS为因特网中任何地方的主机解析主机名为IP地址;而ARP只为在同一个子网上的主机和路由器接口解析IP地址(返回该IP地址对应的MAC地址)。
如何解析?
每台主机和路由器在内存中有一个ARP表,包含IP地址到MAC地址的映射关系,过期时间20分钟
若发送方的ARP表没有目的主机的表项,发送反公用ARP协议来解析这个地址
工作流程:
首先发送方构造一个ARP分组,字段包括发送和接受IP地址和MAC地址,ARP查询分组和响应分组格式相同
适配器用MAC广播地址发送该ARP查询分组,每个适配器都把ARP分组向上传递给ARP模块,检查自己的IP地址和分组中的目的IP地址是否一致
匹配的主机发送回一个ARP响应分组,它就是ARP分组中的MAC地址,然后查询主机更新它的ARP表并发送它的IP数据报
ARP协议是一个跨越链路层和网络层的协议
3. 发送数据报到子网以外
路由器有几个接口,就有几个IP地址、ARP模块和适配器,假设一个路由器连着两个子网A、B
子网A中的适配器要发往子网B中的适配器,先通过子网A的ARP把数据报发到子网A跟子网B相连的路由器(目的地址是路由器的MAC),路由器通过子网B的ARP将该数据报转发给目的适配器(目的地址是最终目的地的MAC)。 5.4.2 以太网
以太网占领了现有的有线局域网市场,就像因特网之于全球联网的地位
集线器是一种物理层设备,作用于比特而不是帧。当0或1的比特到达一个接口时,集线器只是重新生成这个比特,将其能量强度放大,并将该比特向其他所有接口传输出去
早期基于集线器星形拓扑以太网,现在位于中心的集线器被交换机所取代。交换机是无碰撞的存储转发分组交换机,运行在链路层
以太网帧结构
数据字段(46~1500字节):承载了IP数据报(如),超过1500字节的数据报需要分片;若小于46字节,需要填充到46字节
目的地址(6字节):目的适配器的MAC地址。当目的适配器收到一个以太网帧,若目的地址是自己的MAC地址或广播地址,将数据字段传给网络层,其他则丢弃
源地址
类型字段:允许以太网复用多种网络层协议
CRC(4字节):差错检测
前同步码(8字节):以太网帧以前同步码开始,前7个字节用于唤醒接收适配器,同步发送方接收方时钟,第8个字节最后两个比特(11)警告目的适配器,重要内容来了
以太网技术向网络层提供不可靠、无连接服务。没有通过CRC校验只是丢弃。
以太网有时候的确重传了数据,但并不知道正在传输新数据还是旧数据。
以太网技术
早期10BASE-2和10BASE-5标准规定两种类型的同轴电缆的10Mbps以太网,每种标准限制在500米,通过转发器得到更长运行距离。
BASE表示基带以太网。前面的数字代表速率。T代表双绞线。F代表光纤。 100BASE-FX
今天的以太网,结点经点对点由双绞铜线或光纤构成的线段与一台交换机相连
10Gbps以太网,5类UTP线缆
线代交换机是全双工的,一台交换机和一个结点能同时向对方发送帧而没有干扰。在基于交换机的以太局域网中,没有必要使用MAC协议了! 5.4.3 链路层交换机
交换机的任务:接收入链路层帧,转发到出链路
交换机自身对子网中的主机和路由器是透明的,主机/路由器向另一个主机/路由器寻址一个帧,顺利将帧发送进局域网,并不知道交换机干嘛
交换机输出接口设有缓存
交换机是即插即用设备,管理员无需配置
交换机是双工的,任何交换机接口能同时发送和接收
转发和过滤
借助于交换机表,包含局域网上某些主机和路由器的表项(MAC地址,通向该地址的交换机接口,表项放置的时间)
假定目的地址为DD-DD-DD-DD-DD-DD的帧从交换机接口x到达,交换机用该MAC地址索引交换机表,有三种可能:
表中没有该地址,交换机广播该帧
表中有表项将该地址与接口x联系起来,过滤掉,因为该帧从x来,DD也通过x去,说明该帧跟DD适配器在同一个局域网段,该帧已经在包含目的地的局域网网段广播过了
表中有表象将该地址与接口y≠x联系起来,该帧需要被转发到与接口y相连的局域网段,放到接口y前的输出缓存,完成转发功能
自学习:表是自动、动态建立的
交换机表初始为空
对于每个接口接收到的每个入帧,交换机在其表中存储
该帧源MAC地址
帧到达的接口
当前时间
一段时间后,交换机没有接受到以该地址作为源地址的帧,在表中删除该地址。如果一台PC被另一台PC代替,原来PC的MAC地址将被清除
链路层交换机的性质
消除碰撞
交换机缓存帧并且不会在网段上同时传输多于一个帧,交换机提供了比广播链路局域网高的多的性能改善
异质的链路
交换机将链路彼此隔离,因此局域网中的不同链路能够以不同速率运行,在不同媒介上运行
网络管理
主动断开异常适配器
收集带宽使用的统计数据、碰撞率和流量类型,这些信息用来调试解决问题
安全性
交换机毒化:向交换机发送大量不同伪造源MAC地址的分组,用伪造表项填满了交换机表,没有为合法主机留下空间,导致交换机广播大多数帧,被嗅探器俘获到
交换机和路由器比较
路由器是第三层的分组交换机,交换机是第二层的分组交换机
交换机:
交换机即插即用,相对高 的分钟过滤和转发速率
防止广播帧循环,交换网络的活跃拓扑限制为一颗生成树
大型交换网络要求在主机和路由器中有大的ARP表,生成大量ARP流量和处理量
对广播风暴不提供任何保护,使得以太网崩溃
路由器:
分组不会被限制到生成树上,可以使用源到目的地的最佳路径,拓扑结构更加丰富
对第二层的广播风暴提供了防火墙保护
不是即插即用,需要人为配置IP地址
对分组处理时间较长,因为必须处理第三层字段