网课摸鱼,含泪复习。
这玩意怎么和历史一样…
参考:
计算机网络系列–什么是电路交换和分组交换?
计算机网络(自顶向下方法)学习笔记
计算机网络——各种时延的计算
什么是丢包,为什么会丢包
http和https和ssl和tcp/ip之间的关系和区别
我们可以从两个角度来看待这个问题:它的组成和它的功能。
因特网是一个世界范围的计算机网络,它互联了数以亿计的计算设备(包括不限于PC,电视机,传感器等)。
计算机是网络的网络。
下面有一些概念需要了解:
把数据分割成小块同时加上*必要信息* 形成一个个数据包
,然后逐块地发送,这种小块就称作分组。【具体了解可参考:谁能告诉我什么是承载网,核心网和接入网? - 小枣君的回答 -
知乎https://www.zhihu.com/question/325934238/answer/826772440】
协议:是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序
。
协议三要素
语法:数据与控制信息的结构或格式 。信号电平
语义:需要发出何种控制信息或完成何种动作以及做出何种响应。差错控制
时序:事件顺序。速度匹配。
端系统:与因特网相连的计算机和其它设备,往往处于网络的边缘
端系统分类:客户和服务器
网络边缘:
传输媒体是构成通信链路的主要部分,物理媒体通常可以分为导引性媒体和非导引性媒体
;其中导引性媒体,信号沿着固体前行;而非导引性媒体中,信号沿着固体媒体前行
值得注意的是,架设传输媒体的人历成本要远远高于物理材料的成本。
双绞线:最便宜的
引导性
传输媒体,由两条相互螺旋缠绕的铜线组成。目前局域网中的双绞线数据传输速率在10Mbps到10Gbps之间,所能达到的数据传输速率取决于线的粗细以及传输距离;双绞线实际上已经成为高速局域网联网的主要方式;因为现代的双绞线技术速率和传输距离都是很不错的;
同轴电缆:由两个铜导体构成,但是它们是同心的,而非并行的;借助特殊的结构和绝缘层,同轴电缆可得到较高的数据传输速率;在电视系统中应用广泛;同轴电缆可被用作引导性
的共享媒体;
光纤:一种可以引导
光脉冲的媒体
陆地无线电信道:无线电信道承载电磁频谱中的信号,不需要物理线路
,提供与移动用户的连接以及长距离承载信号的方式;是一种有吸引力的媒体;
卫星无线电信道:通过卫星连接两个或多个在地球上的微波发射方(也被称为地面站),该卫星在一个频段上接收信号,在另一个频段上发送信号;种类有同步卫星和近地轨道卫星;
网络核心即为由互联端系统的分组交换机和链路构成的网状网络。
通过网络链路和交换机移动数据有两种基本方法:电路交换和分组交换。
(还有报文交换,就是一整个数据包存储转发的,不过太憨了就不说了)
分组交换采取存储转发传输的机制。
举例子: 假如A要给E发送一个数据包P,但这个数据包有点大,需要分成三组,例如分成p1,p2,p3三个更小的数据包。
.
这时A给E传输数据不需要新建连接这个过程,即不需要寻找一个通往E的路径。而且A直接把小的数据包丢给附近的路由器,然后A就不管了,例如A把p1丢给了B,这个时候A就不在去管p1的,当B收到p1这个完整的小数据包之后,B再丢给E。
.
但是A不一定都会把剩下的数据包都丢给B,有可能会把其他的数据包p2丢给C,之后再把p3丢给D,然后C和D在转发丢给E。这些都是不确定的,会根据某种算法的选择路由器。
.
这里有一个关键词存储,就是说,B必须收到完整的p1数据包后才能进行转发,这也不难理解,因为p1数据包包含E的地址,如果不是完整的数据包,B也不知道该发给谁。
由于A把数据包丢给B之后就不管了,B什么时候会把p1转发出去,谁也不知道,而且可能B会绕几个圈子再发给E也是有可能的。机制在数据传输方面不具有实时性。
而且,很有可能会有很多路由器把数据包丢给B,这个时候就会造成通信阻塞,这时可能p1只能排队等待B来发送。
由于B路由器的容量是有限的,如果有太多的数据包丢给它,它可能会容纳不下,这时候就可能会出现丢包的情况。
再者,由于p1,p2,p3数据包都有文件头,里面都包含了A和E的一些信息,当然还有其他的信息。可以说这些文件头有很多重复的数据,因此分组交换发送的数据具有很多的重复无用数据。
优点:设计简单,资源利用率高。
缺点:不具有实时性。存在延时。会造成通信阻塞。存在无用的重复数据。会出现丢包的情况
大多数分组交换机采用
存储转发机制
来转发分组;所谓存储转发是指交换机在收到一个完成的分组,才会向链路输出转发分组,否则就将收到的部分分组缓存起来
;
因为缓存等待一个分组的全部数据而导致的时间开销被称为存储转发时延
因为需要缓存分组,所以此时分组交换机
需要一个缓冲队列
;缓冲队列的空间有限性
就有可能导致分组交换机无法继续缓存分组(因为链路被占用或者分组还没全部到位)而使到达分组交换机的数据包被迫丢弃(丢包
);这就导致了分组不但承担了传输时延,还承担了队列时延。
实际上,分组交换机之所以能够知道往哪去是因为其内部有一个
转发表
,这个表维护了一个IP地址和链路的对应关系,所以处理流程为:
通过分组的必要信息,获得目的端系统的IP地址
通过IP地址索引转发表,从而确定输出链路
假设A要和E打个电话吧。当A输入E的电话号码,开始拨号之后,那么服务器要做的第一件事就是根据E的电话号码找到E在哪里,由于A通往E的路径有多条,会根据某种算法找到E之后,建立一条通路,然后进行数据的传输。
我们假设选的路径是A→D-→E
找到一条通往E的路径并建立会话的过程中,我们称之为电路交换的第一阶段—-建立连接。
之后A和E在通话的过程中会始终霸占着这条路径,数据传输的过程称为电路交换的第二阶段—-数据传输。
电路交换的第三阶段,也就是最后一个阶段—-释放连接。A和B只要有一方挂了电话,那便了开始释放连接。
在这个过程中,新建连接需要花销一定的额外时间(想象你打电话的时候是不是出现正在拨号的字眼),释放连接也会花销一些额外的时间。
那么,电话交换的过程中,数据需要分组来传送吗?
答是不用的,因为电话交换的过程中,A和B两个人始终霸占着一条通信电路,他们每说一句话,都会实时被对方获取,因此数据是不用分组的。
从这也可以看出,电路交换的方式,在数据的传输上是比较高效、实时的,只要A一发出数据,E立马就能收到了,这也是为什么我们的电话通信使用的是电路交换的方式。
但由于一直霸占着这条路径,假如霸占的过程中A与E都在沉默不说话,那么将是对这条路径的极大浪费。因此,电路连接的方式资源的利用率是比较低的。
优点:传输速度快,高效。实时。
缺点:资源利用率低。新建连接需要占据一定时间。
电路交换网络中常见的复用
时分复用
(Time-Division Multiplexing TDM):是指将时间划分为固定区间的帧,每个帧则又被划分为固定数量的时间空隙;当网络需要建立一条连接时,网络将在每个帧中为该连接指定一个时隙;在该时隙内,链路用来传输该链接的数据;
频分复用
(Frequency-Division Multiplexing):将频率域划分为频段,然后将频段分配给连接;此频段被用来专门传输链接的数据。该频段的宽度成为带宽。
时延是指一个报文或分组从一个网络的一端传送到另一个端所需要的时间。
发送时延:是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
发送时延=数据帧长度(b) /信道带宽(b/s) [信道带宽就是数据率]
传播时延:电磁波在信道中需要传播一定的距离而花费的时间。
传播时延=信道长度(m)/电磁波在信道上的传播速率(m/s)
处理时延:主机或路由器处理所收到的分组的时间。
排队时延:分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。
总时延=发送时延+传播时延+处理时延+排队时延
时延带宽积:时延带宽积 = 传播时延 * 带宽
数据在INTERNET上的传输方式数据是以数据包为单位传输的,每包nK,不多也不少。
这就是说,不管你的网有多好,你的数据都不会是以线性(就象打电话一样)传输的,中间总是有空洞的。
数据包的传输,不可能百分之百的能够完成,因为种种原因,总会有一定的损失。碰到这种情况,INTERNET会自动的让双方的电脑根据协议来补包。
如果你的线路好,速度快,包的损失会非常小,补包的工作也相对较易完成,因此可以近似的将你的数据看做是无损传输。但是,如果你的线路较差(如用猫),数据的损失量就会非常大,补包工作也不可能百分之百完成。在这种情况下,数据的传输就会出现空洞,造成丢包。
我们一般测试网络是否丢包,是用PING的命令方式:“开始-运行-cmd-ping”
IP正常的网络PING值是time=22~30ms,超过100ms就说明网络延时大了,访问速度就慢,这个跟本地网络是有直接联系的,本地网络不好也会造成PING值大,如果本地是正常的,那应该就是机房网络出现问题,或者本地线路跟机房线路不是同一个运营商的,比如电信访问网通或者网通访问电信,当ping了后显示Request
timed out时,说明掉包了,几个timed out说明掉了几个包,一直是timed
out的话,说明已经无法访问此服务器,就要检查是不是本地断网或者远程服务器断网了。
计算机网络的吞吐量实际上是一个速度指标,它描述了比特经过某个节点的速度。对于某条路径上的结点来说,和该结点有关的速度有两个:接收数据的速度和发送数据的速度,而该结点的吞吐量是这两个速度中较小的一个;对于某条路径来说,该路径的吞吐量则是所有节点的吞吐量的最小值;
网络的吞吐量可以衡量网络的性能.
任何时间的瞬时吞吐量是主机B接受到该文件的速率
如果该文件由F比特组成,主机B接受到所有比特用去Ts,则文件的平均吞吐量为F/Tbps
吞吐量可以近似为源和目的地之间路径的最小传输速率。最小传输速率的链路为瓶颈链路。
在今天,因特网对吞吐率的限制因素通常是接入网。
因特网是一个极为复杂的系统,该系统里存在着大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。但是它同时也是有着清晰结构的,就像我们前面在网络核心 一节介绍的,我们仍能构建它的结构模型。
计算机网络采用分层的体系结构,这种体系结构提供模块化,同时易于服务实现多样性:某一层对其上一层提供服务,同时利用下一层提供的服务。只要对上提供的服务和对下利用的服务没有变化,其层内部的实现并不会对系统结构产生影响;对于大而复杂且需要不断更新的系统来说,改变服务的实现而不影响系统其他组件是分层模式的另一个重要优点。
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的软硬件。
一个协议层可以使用软硬件实现,同时某个协议层的不同部分常常位于网络组件的各部分
。协议分层具有概念化和结构化
的优点。模块化使得更新系统组件更为容易。但是分层也有其缺点
,就是功能上的冗余
,比如许多协议栈针对链路和端到端两种情况都提供了差错恢复功能。第二种潜在的缺点
就是某层的功能可能需要仅在其它层才出现的信息
总体来说,将各层的所有协议组合起来,称为协议栈。
因特网的协议栈有5个层次组成:物理层、链路层、网络成、传输层、应用层。
应用层:应用层协议分布在多个端系统,端系统中的应用程序使用该协议与另一个端系统中的应用程序通信。处于应用层的分组称为报文;
传输层:传输层在应用程序端点之间传输应用层报文。处于传输层的分组称为报文段。
- 因特网中有两个传输层协议:TCP和UDP。
- TCP提供确保传递、流量控制、拥塞控制机制
。
- UDP提供无连接服务,即不提供不必要服务的服务
。
网络层:网络层将称为数据报的网络层分组从一台主机移动到另一台主机。网络层协议包含著名的IP协议
以及其他一些路由选择协议
。
数据报是通过网络传输的数据的基本单元
,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。链路层:链路层将称为帧的链路层分组从一个结点移动到路径上的另一个端点。一个帧可能被沿途不同链路上的不同链路层协议处理。
- 所谓数据帧(Data frame),就是数据链路层的协议数据单元
物理层:物理层的任务是将帧中的比特从一个结点移动到下一个节点,它提供了传输信息的实际物理通道;
在因特网协议栈出现以前,OSI模型是ISO组织研发的计算机网络结构模型。OSI的模型一共有7层,从下到上依次为:物理层,链路层,网络层,传输层,会话层,表示层,应用层。相比因特网体系结构,OSI多了两层。
一个分组,在不同的层次有不同的称谓,是因为它们经过每一层的时候就被该层封装上了属于该层的相关信息,也就是前面提到的必要信息;于是,每一分层的分组有两种类型的字段:首部字段和有效负载;其中有效负载即为来自上一层的分组数据
,而首部字段就是该层加上的必要信息
;分组不断被封装以实现各层协议规定的相关功能。
应用程序的体系结构不同于网络的体系结构。
从应用程序研发者的角度来看,网络体系结构是固定的,并为应用程序提供特定的服务集合;
换言之,应用程序体系结构使用应用程序开发设计的,它规定了在端系统上如何组织应用程序。
两种常见的现代网络应用程序所采用的体系结构为:客户-服务器体系结构和对等体系结构。
值得注意的是,某些应用具有混合的体系结构,它们结合了客户-服务器和P2P这两种体系结果,比如许多的即时通讯工具,服务器用来跟踪用户IP地址,但是用户之间的通信则使用直接发送。
P2P体系结构最引人入胜的特性之一就是它们的自扩展性。比如在文件共享应用中,对等方可能通过向文件的原始拥有者发出请求而产生工作量,但是对等方也有可能通过为其他对等方传送文件而为原始拥有者分担压力;P2P体系结构也是成本有效的,因为他通常不需要庞大的服务器基础设施和服务带宽。
但是P2P也面临着以下三个问题:
在操作系统中,实际进行通信的是进程而不是应用程序;
当进程运行在同一个端系统上时,它们使用进程间通信机制
相互通信;而进程间通信的规则是由端系统上的操作系统确定的。
当进程运行在不同的端系统上时,它们通过跨越计算机网络的报文相互通信;发送进程产生报文并且向网络中发送,接收进程接收报文并对此作出响应
(不响应也是一种响应)。
在给定的一对进城之间,首先发起通信的进程被标记为客户进程,在会话开始时等待联系的进程被称为服务器进程
。多数应用程序是由通信进程对组成的
,运行在不同端系统上的进程对之间通过计算机网络来实现通信。套接字
。更为准确的说,套接字是同一台主机内应用层和运输层之间的接口
。由于该套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用编程接
口(Application Programming Interface).选择传输层协议和设定几个传输层参数
,比如最大缓存和最长传输层报文长度进程寻址
为了向特定目的进程发送报文,发送机进程需要知道接收进程(更为准确的说是,接收进程对应的套接字)的标记。
该标记由两部分组成:接收进程所在的主机地址
和接收进程在该主机中的标记
;
在因特网中,主机由IP地址标记,其中IP地址是一个32位(IPV4)标记;
而**接收进程(**或者说是其对应的套接字)使用端口号标记;一些常用的应用程序有着固定的端口号,比如Web服务器使用80端口、邮件服务器(运行SMTP协议)使用25端口等
传输层协议的特点大致可以从以下这四个方面考量:可靠数据传输、吞吐量、定时和安全性
可靠数据传输
:分组在传输过程中可能会丢失。比如,分组因为路由器中的缓存溢出而被丢弃或者分组在传输的过程中发生了损坏等情况;有些应用是不允许数据发生丢失的,比如电子邮件、文件传输、远程主机访问、Web文档传输以及金融应用等。为了支持这些应用,必须做一些工作以确保应用程序一段发送的数据正确、完全地交付给接收数据的进程。如果一个协议提供了这样得确保数据交付的服务,就认为该协提供了可靠数据传输
。当应用程序使用可靠数据传输的传输层协议时,只要将要发送的数据传输进套接字就可以完全相信该数据可以完整无差错地到达接收方;吞吐量
:在一条网络路径上的两个进程之间的通信会话中,可用吞吐量就是指能够向接收进程交付比特的速率
。因为会有其他会话共享该网络的路径的带宽,并且因为这些会话的到来和离开,可用吞吐量将发生变化;这就导致另一种自然的服务,即运输层协议能够提供确切的可用吞吐量
。使用这种服务时,应用程序就能以明确的速度接收数据,并且运输层应当保证可用吞吐量必须总是至少为该速度;定时
:一个提供定时服务的例子是:发送方注入套接字中的每个比特到达接收方的套接字不迟于100ms。也就是说,定时是对数据从发送到到达所需时间的要求,而吞吐量是对数据交付速度的要求。
打个比方,吞吐量是指一个小时内经过某个收费站的汽车数目,而定时则是第一辆车从出发到进入收费站的时间。有些应用为了服务的有效性而对数据到达时间有严格的要求,常见的应用有:因特网电话、多方在线游戏等;安全性
:运输层可以提供一些安全服务,以防止传输的数据以某种方式在这两个进程之间被察觉到
。这些安全服务包括:数据的加解密、数据的完整性和端点鉴别等。因特网(更一般的是TCP/IP网络)为应用程序提供连个运输层协议,即UDP和TCP
。每个协议对应用程序提供了不同服务的组合。以下为常见的因特网应用的特点:
TCP服务
:TCP服务模型包括了面向连接的服务
和可靠数据传输服务
。
在应用层数据报文开始流动之前,TCP会在客户端和服务器端相互交换传输层控制信息
。这个握手过程将提示客户端和服务器端,让它们为即将到来的大量分组做好准备;握手阶段接收后将建立一个TCP连接。这条链接是全双工的,即连接双方使用该条链接可以同时进行报文的收发
。这条连接将在通讯结束后拆除;UDP服务
:UDP服务是一种不提供不必要服务的轻量级运输协议。它仅提供最小服务。UDP是无连接的也就是说通信之前没有握手;UDP不提供数据的可靠传输;UDP也没有拥塞控制机制。有些应用场景下,UDP协议将带来更多的便利和效率,比如DNS和一些因特网电话服务(为了避免拥塞控制协议的控制而使用UDP)超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
所有的WWW文件都必须遵守这个标准,HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议
。
在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息,HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK"
IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。以及检验客户端和服务端是否安全。TLS与SSL在传输层对网络连接进行加密。
SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,
HTTPS和HTTP的区别:超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。
HTTPS主要作用是:(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
(2)对网站服务器进行真实身份认证。
HTTPS和HTTP的区别主要为以下四点: 一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https = http + ssl
HTTPS和HTTP的区别是什么
1、HTTPS是加密传输协议,HTTP是超文本传输协议;
2、HTTPS需要用到SSL证书,而HTTP不用;
3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO【参考:(1)为保护用户隐私安全,谷歌优先索引HTTPS网页、(2)百度开放收录https站点,https全网化势不可挡】;
4、 HTTPS标准端口443,HTTP标准端口80;
5、 HTTPS基于传输层,HTTP基于应用层;
6、HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
HTTP(HyperText Transfer Protocol)是WEB的应用层协议,它是Web的核心;
HTTP有两部分实现,一个客户端程序一个服务器程序;
HTTP定义了客户和服务器进行报文交换的方法;
Web页面是由对象组成的,一个对象是一个文件,它们通过一个URL地址进行寻址。
客户和服务器交互的核心思想是客户通过HTTP请求对服务器发出对Web页面的请求报文,服务器收到该报文后将返回包含该对象的HTTP响应报文。URL地址由两部分组成:存放对象的服务器主机名和对象的路径名
HTTP使用TCP作为它的传输层协议
;HTTP客户首先发起一个与服务器的TCP连接,需要注意的是,服务器根据请求作出响应,但是不存储任何关于该客户的状态信息;也正因为这样,HTTP被称为无状态协议
。
同时,Web使用了客户端-服务器的应用体系结构;其中web服务器总是开着的
当通信是使用TCP协议时,服务器端需要做出一个决定:这些请求是使用一个TCP连接完成还是通过独立的TCP连接完成?。
如果采取前一个方法,则称应用程序使用持续连接,如果使用后一种方式,则称为非持续连接。
HTTP在静默情况下使用持续连接
非持续连接的HTTP
每个TCP连接在服务器发送一个对象后就会关闭,也就是每个TCP只传送一个请求报文和响应报文
;RTT
(Round-Trip Time)。RTT指的是,一个短分组从客户端到服务器,然后再返回客户端所用的时间
。持续连接的HTTP
HTTP默认使用的是带流水线的持续连接
。请求报文
请求报文的第一行称为请求行
,其后继的各行被称为首部行
。
请求行包含三个内容:方法字段、URL字段、HTTP版本
;其中方法字段可为:GET、POST、PUT、DELETE、HEAD等。URL字段里可以传递请求对象的标志;
首部行包含是否在发送完响应报文后关闭TCP连接的Connection;请求的主机地址(该头部信息被Web高速缓存所要求);浏览器版本;可接受的语言等头部信息
;
在首部行之后一个空行,之后便是请求的“实体体”
。该实体体可以在POST方法里传递Form表单内容或者传递其它一些二进制流数据等。值得注意的是,表单也不一定必须使用POST方法。如果使用get,实体体为空,会显示在url中。
Head类似于get方法,将会用一个http报文进行响应,但是不返回请求对象,经常用作调试跟踪。put方法允许用户上传对象到指定的Web服务器上指定的路径。Delete方法允许用户或应用程序删除Web服务器上的对象。
HTTP是无状态协议,但是Web站点为了识别用户身份或者限制用户访问的时间或者将用户访问的内容同用户身份相关联,Web站点可以使用Cookie技术
;
Cookie技术包含4个组件
HTTP响应报文里增加一个关于Cookie的首部行;
HTTP请求报文里增加一个关于Cookie的首部行;
用户端系统保留一个Cookie文件,由浏览器保存维护;
Web站点建立Cookie和用户身份的关联;
Web缓存器也被称为代理服务器
,它代表初始web服务器来满足HTTP请求。
它有自己的存储空间,并在存储空间里保持有最近请求过的对象的副本;可以通过配置浏览器,将所有指向初始服务器的请求首先指向代理服务器。
当代理服务器收到一个HTTP请求后,它将检查本地是否缓存过该对象,如果缓存过该对象,将检查是否过期,如果没有过期,则直接将该对象返回给浏览器;如果本地不存在或者存在已过期,则代理服务器将根据请求报文里的Host首部行以及请求行里的URL字段向初始服务器发出请求,然后将响应对象返回给浏览器并缓存在本地。
通常,代理服务器与客户端的通信速度要快于初始服务器与客户端的连接速度;Web代理服务器可以大起大减少对客户请求的响应时间;而且,缓存器能从整体上大大降低因特网上的web流量,从而有助于提高所有应用程序的性能;
通过使用内容分发网络(Content Distribution Network),Web缓存器正在因特网中发挥越来越重要的作用
Web缓存即是客户又是服务器
在一个典型的FTP应用中,用户通过FTP代理和FTP交互。
用户首先提供远程主机的主机名,使得FTP用户代理建立一个到远程主机的TCP连接,之后需要用户提供用户名和密码,它们作为FTP命令的一部分在TCP连接上传输;一旦服务器授权,用户便可以和服务器进行文件传输了。
HTTP
和FTP
都是应用层协议,它们都运行在TCP协议之上
,但是它们之间也有一些重要区别,其中一个就是FTP使用连个并行的TCP连接来传输数据
(FTP)一个TCP连接被称为控制连接
,用来传输FTP命令
;
(HTTP)一个TCP连接被称为数据连接
,用于传输文件数据
;
因为FTP协议内,控制信息是通过一个独立的TCP连接传输,所以我们称FTP的控制信息是带外传送
的;如果控制信息和数据信息通过同一个TCP传输,则称为带内传送
。
TCP控制连接端口21,数据连接端口20
需要注意的是,FTP中控制连接贯穿整个会话,但是数据连接会在一个文件开始传输的时候建立,在传输结束后关闭;所以每次传输一个新的文件时,都会新建一个数据连接;
同时,FTP需要在整个会话期间,保留用户的状态,也就是将控制连接同用户账户关联起来,同时记录用户在远程目录树上的操作,这就限制了FTP可以同时维持的会话总数.
因特网电子邮件系统有三个核心组件:用户代理、邮件服务器、SMTP
(简单邮件传输协议)
邮件服务器
构成了电子邮件系统的核心。每个收发方在邮件服务器上拥有一个邮箱;
一个典型的电子邮件发送过成为:发送方通过用户代理将邮件传送到发送方的邮件服务器,然后再传输到接收方的邮件服务器,然后邮件被分发到接收方的邮箱里;接收方从邮件服务器里获取自己的邮件时需要通过邮件服务器的验证.
SMTP
是因特网中电子邮件的主要应用层协议,它使用TCP可靠数据传输
从发送方的邮件服务器向接收方的邮件服务器发送邮件;在每台邮件服务器上同时运行SMTP服务器和SMTP客户端。当邮件服务器接收其他邮件服务器的邮件时,它表现为SMTP服务器,当邮件服务器向其他邮件服务器发送邮件时,表现为SMTP客户端。
如果发送端不能将邮件发送个接受端的服务器,发送端的邮件服务器会在一个报文队列中保持该报文并在以后尝试再次发送。
传输的三个阶段:握手、传输、关闭连接。
SMTP25号端口。
SMTP是持续连接的。
SMTP报文一般不使用中间邮件服务器发送报文,也就是邮件不会在中间某个邮件服务器保留;
在SMTP握手阶段,SMTP客户端将介绍发送方和接收方的邮箱地址;一旦介绍完毕后,SMTP客户端将开始发送报文
HTTP和SMTP 都是用TCP协议;
持续的HTTP和SMTP都是用持续连接;但是两者也有区别:
报文由两部分组成:一个包含环境信息的首部和一个包含邮件内容的报文体
;
首部和报文体之间使用空行分开;首部行的格式为关键字:及其值;每个首部必须包含一个From和To首部行。首部也可以包含其它信息,比如Subject等。
SMTP是邮件服务器之间发送邮件报文的协议,并不是用户通过代理和邮件服务器之间通信的协议;
用户代理使用邮件访问协议
来从邮件服务器上获取邮件信息;目前常用的邮件访问协议有POP3(Post Office Protocol-Version 3)、因特网邮件访问协议(IMAP,Internet Mail Access protocol)和HTTP.
POP3是一个非常简单的协议,因为简单,所以功能有限;POP3
使用端口110来建立TCP连接
(SMTP使用端口25
);
POP3按照三个阶段进行工作:特许、事务处理和更新;在特许阶段,用户代理发送密码和用户名,进行身份鉴别;第二阶段,用户代理取回报文,同时还可以做删除、取消删除等标记或者统计邮件信息;第三个阶段是在用户退出后,POP3结束会话,删除被标记的邮件;
一个需要注意的是,POP3用户代理可以使用两种事务处理模式:一种是下载并删除,另一种是下载保留
POP3代理发出的命令和其工作模式相关;下载并删除的方法存在的问题是,如果用户在一台设备上查看了邮件(下载了邮件)后,邮件将被删除,那么在其他设备上将无法查看邮件;这给用户带来一定的不便。使用下载保存方式,则用户下载邮件后,邮件还在服务器上。
在用户代理与邮箱服务器之间的POP3会话期间,该POP3服务器保留了一些状态信息,特别是标记了哪些用户报文被标记为删除了。但是POP3服务器并不在POP3绘画过程中携带状态信息,大大简化了POP3的服务。IMAP
POP3协议无法为用户提供邮件分类管理的功能,虽然用户可以通过将邮件下载到本地,然后由用户代理程序做分类管理,但是处理的结果是无法同步到其他查看设备上的。为了解决这一问题,IMAP诞生了。IMAP是一个邮件访问协议,比POP3要复杂的多,当然也就有更多的特色了。(远程)IMAP将每一份邮件和一个一个文件夹联系起来,当报文第一次到达服务器时,它与收件人的INBOX相关联。收件人可以将邮件移到新创建的文件夹,阅读邮件,删除邮件等。IMAP允许用户在不同文件夹里移动邮件并且查询邮件。值得注意的是**,IMAP服务器维护了IMAP会话的用户状态信息,但是POP3并不;IMAP协议还允许用户代理获取报文组件而不是报文整体**。
基于Web的电子邮件
这种方式主要是指,用户使用HTTP协议和邮件服务器通信。用户代理就是普通的浏览器,但是,邮件服务器之间还是使用SMTP协议的
通过IP地址来标记某一时刻网络中唯一的主机。
IP地址(IPV4)由4个字节组成,有着严格的层次结果,每个字节使用点号分隔。同时,为了方便记忆,我们也通过为主机提供一个便于记忆的主机名来标志主机,这样主机之间的通信就变得方便了。但是,同时也就引入一个问题:主机名和IP地址的转换问题;因为在信息的发送者一端,通常使用主机名来标识主机,但是在计算机网络里是使用IP地址来标机主机。
DNS(Domain Name System)域名系统
。DNS是一个由分层的DNS服务器组成的分布式数据库和一个使得主机可以查询分布式数据库的应用层协议组成
;
用户主机上应该运行着DNS客户端。
DNS通常被其他应用层协议使用,比如:HTTP、SMTP和FTP等。这些协议在正式工作以前,首先利用DNS提供的服务,将主机名转换为IP地址,可以发现的是,DNS为用户带来方便的同时,也为网络应用带来额外的时延——查询DNS服务器的时延。
需要注意的是,缓存作为一种提高性能,特别是查询性能的手段,在DNS中同样适用。
DNS运行在UDP之上,使用53号端口
DNS还提供以下重要服务:
主机别名
:虽然,主机名比起IP地址好记多了,但是有时候我们的主机名仍然很长,很不好记忆,所以我们需要为主机名再起一个名字,这就是主机别名,DNS不但提供主机名到IP地址的转换服务,还提供主机名与主机别名的转换
;此时主机名被称为规范主机名;邮件服务器别名
:DNS同样也提供邮件服务器主机名和别名的转换服务
,实际上,公司的邮件服务器和Web服务器可以使用相同的主机别名;MX记录允许一个公司的邮件服务器和Web服务器使用相同的主机名。负载分配
:DNS也被用在冗余的服务器之间分配负载
。每个服务器有着不同的IP地址,但是它们都和同一个主机名相关联,也就是一个IP地址集合同一个规范主机名相联系;当某个DNS服务器收到DNS请求时,该服务器奖使用IP地址的整个集合作为相应,但是在每个应答中,循环这些地址的次序。因为客户端通常都是使用IP地址集合的首个元素,所以DNS就在冗余的Web服务器之间分配了负载。同理,多个邮件服务器可以具有相同的别名。DNS使用UDP作为其传输层协议;
DNS服务使用53端口;
当主机上的DNS客户端收到一个转换请求时,客户端将向网络发送一个DNS查询报文,然后客户端将收到一个包含相关信息的DNS回答报文,这个报文里有客户端想要的内容,之后DNS客户端将IP地址返回给请求的提出者即可。
从使用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就可以直接提供一些经常被访问的主机名所对应的IP地址,而不需要询问根DNS服务器了。
需要注意的是,缓存不可避免的一个问题:有效时间。如果缓存过时而未得到更新,那么就会导致一些请求失败。
省略(…懒得弄了w)
有两种典型因特网应用十分适合P2P体系结构,一种是文件分发(BitTorrent),另一种是大型对等方社区中的数据库;我们将探讨分布式散列表的概念。
P2P体系结构有着良好的自扩展性。这种扩展性的直接成因是:对等方除了比特的消费者之外还是他们的重新分发者.
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换一个新的对象,互相交换数据(一报还一报),为了使对等方能够找到彼此协调的速率上传
传输层位于应用层和网络层之间,是分层的网络体系结构中重要的部分,该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。
在这里我们将讨论两个大的问题:将网络层在不同端系统之间的通信服务扩充到运行在两个端系统上不同的应用层进程之间的通信服务(如何实现进城之间通信的可靠传输)和控制传输层实体的传输速度以避免网络拥塞或者从网络拥塞中恢复过来,这里需要考虑的有拥塞的后果和原因以及常见的拥塞控制手段,特别的,我们将了解TCP协议中的拥塞控制。
传输层协议为运行在不同端系统上的应用进程之间提供逻辑通信功能
;
应用层进程使用传输层提供的逻辑通信功能
而无需考虑实现通信的物理基础设施的细节;
传输层协议是在端系统中实现的
而不是在路由器中实现的。
传输层接收来自应用层的报文并通过添加传输层首部以生成传输层报文段。在生成过程中可能会对来自应用层的报文加以分割;然后在发送端系统中,运输层会将这些报文段交给网络层;网络层将其封装成网络层分组,也被称为数据报,然后向目的地发送。
路由器不会检查封装在数据报中的传输层报文段的字段;
在接收端,网络层从数据报中抽取传输层报文段,并将其交给传输层,传输层接收到报文段后,使该报文段中的数据被接收进程所使用。
网络应用可以使用多种传输层协议,因特网有两种传输层协议,即TCP和UDP
,不同的传输层协议提供不同的运输层服务.
网络层
提供主机之间的逻辑通信
而传输层
为运行在不同主机上
的应用进程
提供逻辑通信
;
运输层协议只工作在端系统中。在端系统中,传输层协议将来自应用进程的报文
移动到网络边缘即网络层 ,反过来 也从网络层接收这些报文段;传输层对报文段如何在网络核心传输并不做干涉;事实上中间路由器既不处理也不识别传输层加载应用层报文上的任何信息
运输层协议能提供的服务常常受制于底层网络层协议的服务类型,如果网络层协议无法为主机之间的通信提供时延和带宽保证的话,运输层协议也就无法为进程之间发送的应用程序报文提供时延或者带宽保证.
然而即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务。例如,即使底层网络协议是不可靠的,运输协议也能为应用程序提供可抗的数据传输服务。
因特网为应用层提供了截然不同的两种传输层协议:UDP(用户数据报协议)它提供一种不可靠、无连接的服务
;另一种是TCP,它提供可靠的,面向连接的服务;运输层分组也被称为报文段
;
网络层协议有一个名字即IP,即网际协议。IP为主机间提供逻辑通信,IP的服务模型为尽力而为交付服务(best-effort delivery service)这意味着IP尽最大的努力在主机间交付报文段,但是不做任何保证。它不保证报文段的交付、不保证报文段按序交付、不保证报文段中数据的完整性;即IP 提供一种不可靠的服务;每台主机都需要有一个网络层地址,即IP地址。
UDP和TCP最基本的责任就是将IP提供的主机间交付服务扩展到不同端系统上两个个进程之间的服务。这也被称为传输层的多路分解和多路复用
;
UDP和TCP通过在传输层首部添加差错检查字段来提供完整性检查
。进程到进程之间的数据交付和差错检查是最低限度的两种传输层服务,也是UDP可以提供的仅有的两种服务。UDP和IP一样,也是不可靠服务;
TCP提供额外的服务,首先它是一种可靠数据服务,这意味着TCP协议保证数据的按序、完整地从发送端应用进程发送到接收端应用进程;TCP 通过序号、确认、定时器以及流量控制来将IP的不可靠数据传输转换为可靠数据传输;其次,TCP提供拥塞控制,拥塞控制与其说是一种提供给应用程序的服务,不如说是一种提供给整个网络的服务,因为整个网络都将因为拥塞控制而受益;不太严格地说,拥塞控制力求为每一个经过一条拥塞网络的连接提供平等的共享网络链路带宽,从而避免一条TCP连接用过多的流量来淹没通信主机之间的链路和设备;拥塞控制是通过调节发送进网络的的流量速率来做得到;
UDP不提供拥塞控制,使用UDP传输的应用程序可以根据需要以任意的速率发送数据。
传输层和应用程序进程之间通过Socket(套接字)
关联 ,这样 通过Socket就可以区别同一主机上的不同应用进程,从而传输层提供服务变为可能 ;
** 传输层从同一台主机上的不同Socket接收数据的过程 ** 称为多路复用
;
传输层向同一台主机上的不同Socket传输数据的过程称为多路分解
;
为了实现多路复用和多路分解,我们需要标志套接字,并将相关信息添加到报文段中。
实际上,每个套接字都有一个唯一的ID,被称为端口号
;而在传输层接收到来自应用程序的分组并通过添加传输层首部而形成报文段的过程中,该端口号被写入;端口号大小在0-65535之间,其中0-1023属于周知端口号,它们为特定的Socket而拥有。
无连接的多路复用与多路分解
面向连接的多路复用与多路分解
源IP地址,源端口号,目的IP地址,目的端口号
);两个具有不同源IP地址或者源端口号,但有相同的目的IP地址和目的端口号的TCP报文段将通过两个不同的Socket进入同一应用进程;这也表示,一个应用进程可以关联多个Socket,而一个Socket将只关联一个应用进程;常常,这样的对应关系是通过线程来实现的:一个进程有多个线程,而每个线程关联了一个Socket;这样做可以提高服务器性能嘛实际上,传输层就是根据这些信息来实现多路分解的;而这些信息是在多路复用的时候被放置在报文段中的
差错检查
和进程到进程的数据交付
是传输层协议必须提供的功能,事实上,UDP的确做到了这些,并且只做了这些。它几乎没有对IP增强别的东西;
因为在发送报文段之前,发送方和接收方的传输层实体之间没有握手,所以UDP也被称为无连接的;
DNS是一个使用UDP的应用层协议例子;UDP在接收到来自Socket的数据时,UDP为该报文添加首部字段(源和目的端口号,以及其他两个小字段),然后将报文段交给网络层,网络层通过IP协议尽力地将该报文段交付,至于结果,尽力就好;当DNS客户端等待不到对该查询的响应时(有可能网络层将其丢失了)则会向其他Name Server发送查询请求,要么就通知应用程序,做不到
既然TCP提供了可靠数据传输,并且提供了拥塞控制,为什么人们还需UDP呢?事实上,有些应用很适合UDP(因为没有连接过程啊,因为不会受拥塞控制的调节啊,更自由);UDP有以下好处:
这些应用程序使用了TCP作为其传输层协议:电子邮件、远程终端访问、Web、文件传输;
这些应用通常使用UDP作为其传输层协议:远程文件服务器、网络管理(因为这里应用即便在网络处于拥塞的情况下仍要工作,所以UDP更为合适)、路由选择协议和名称转换(DNS);
这些应用两个都有使用:流式多媒体、因特网电话等多媒体应用;这些应用对实时性的要求较高同时对可靠性的要求又不是很高,所以既可以使用UDP也可以使用TCP协议。
不过在UDP之上运行多媒体应用是有争议的,因为UDP没有拥塞控制协议,所以其对网络有很大的威胁性:大量的UDP流量将使网络过度拥塞而造成TCP连接几乎无法传输数据,并且因为网络拥塞,所以应用又有着较高的丢包率,而因为丢包率UDP很有可能继续发送数据,由此使得网络效率低下。也有研究人员提出一些新的机制,使得所有数据源,包括UDP源执行自适应的拥塞控制来解决这一问题;
需要注意的是,使用UDP仍然可以实现可靠数据传输,只不过这一部分功能需要在应用程序中自主开发;将可靠性直接构建于应用程序中,将使其既可以可靠地传输数据又可以避免受制于TCP的拥塞控制(传输速率的控制)
UDP首部只有4个字段,每个字段占用两个字节,分别是:源端口号、目的端口号、长度和校验和;
其中,长度表示包含首部在内的UDP报文段长度,以字节为单位;
校验和字段
用来计算报文段在传输的过程中是否出现了差错;
一种常见的校验和的计算方法是:发送方将前三个字段做按位加运算,然后将其取反作为校验和;然后接收方对所有四个字段(每个字段16位)进行求和,如果没有出现差错,则最后的结果全是1,否则就表明出现了错误;出现错误的原因可能有:传输链路上数据受到干扰、数据存储在中间路由器的时候,出现了错误
UDP作为传输层协议,提供的差错检测功能很有可能和底层协议提供的相似功能产生冗余;但是,这是必须的,因为由于不能保证源和目的地之间所有链路都提供差错检测功能,即便数据在链路上正确传输,也无法保证其在中间路由器的内存中不发生错误;所以要实现端到端的差错检测,就必须在传输层协议中实现该功能;
这一原则在系统设计中被称为端到端原则
:“因为某一功能必须在端到端实现,与在较高层次提供这些功能的代价相比,在较低层次上设置的功能可能是冗余的,或者根本是没有用的”
IP作为网络层协议,可以运行在任何第二层协议上,所以运输层提供差错检测也是必须的;UDP可以检测差错,但是无法恢复差错,能做的除了将其丢弃外,便是将其交给应用程序然后给出警告.
可靠数据传输的问题,不仅在传输层需要考虑,在链路层以及应用层都需要考虑这个问题,所以了解一些其基本原理是必要的,特别是在详细了解TCP中为实现可靠数据传输而采取的。
可靠数据传输为上层实体提供的服务抽象是:数据可以通过一套可靠的信道进行传输,借助于可靠信道,传输数据就不会受到损坏或者丢失;并且所有数据都可以按照其发送顺序进行交付。而这正是TCP向调用它的应用所提供的服务模型
实现这种抽象服务是可靠数据传输的责任,但是因为可靠数据传输的底层协议可能是不可靠的,所以这项任务有一点困难;
单方向的可靠数据传输流程大概是这样的:可靠数据传输->不可靠数据传输->不可靠的传输信道->可靠数据接收->上传Data
一个可靠数据传输协议,将要面对以下问题:分组丢失、分组损坏到达、分组乱序到达
总结可靠传输需要的技术:检验和、序号、定时器、肯定和否定确认分组
。
假设所有发送的分组都可以按其发送顺序被接收。
基于重传机制的可靠数据传输协议称为自动重传请求协议
(ARQ)。增加了ACK和NCK
ARQ协议中还需要另外三种协议功能来处理存在比特差错的情况:差错检测,接收方反馈,重传。
rdt2.0的发送端每发送一个分组需要等待接收端的确认信号,这种协议被称为停等协议。
考虑ACK和NAK受损的个两可能性:
- 增加足够的校验和比特
- 当接受到模糊不清的ACK和NAK分组时,只需要重传当前数据分组。这引入了冗余分组
- 冗余分组的根本困难在于接收方不知道它上次所发送的ACK和NAK是否被发送方正确接收到。因此它无法事先知道接收到的分组是新的还是一次重传。
解决这个新问题的一个简单的方法就是在数据分组中添加一个字段,让发送方对其数据分组编号,即将发送数据分组的 序号
放在该字段。于是,接收方只需要检查序号即可确定收到的分组是否一次重传。对于停等协议这种简单的情况,1 比特的序号就足够了。
如果不发送NAK,而是对上次正确接收的分组发送一个ACK,我们也能实现同样的效果。
发送方接收到对一个分组的两个ACK(冗余ACK)后,就知道接收方没有正确接收到跟在确认两次的分组后面的分组。
rdt 2.2 是在有比特差错信道上实现的一个无NAK的可靠数据传输协议。
rdt 2.1和rdt 2.2的区别在于,接收方此时必须包括由一个ACK报文所确认的分组序号
由此产生的 冗余数据分组
则由接收方通过序号处理。为了实现基于时间的重传机制,需要一个倒计时定时器
因为分组序号在 0 和 1 之间交替,因此 rdt 3.0 有时被称为 比特交替协议
。
rdt 3.0 是一个功能正确的协议,但是由于它是一个停等协议,大部分的时间都浪费在等待确认上面,所以性能不好。
解决这种特殊性能问题的一个简单的方法是:不使用停等方式运行,允许发送方发送多个分组而无需等待确认。这种技术被称为 流水线
。
要使用流水线技术,则须:
流水线的差错恢复有两种基本方法:
在回退N步中,发送方维护一个N——窗口大小和一个base——发送方期待收到的最小待确认分组序号,同样也是窗口的起点,还有一个next Sequence变量,表示上层需要发送分组时,可以使用的序号。
这样全部序号就被划分为0-base-1,这一部分的分组是已发送且收到接收方确认的分组,
base~next Sequence-1这一部分的分组是已发送但是尚未收到确认的,其中base是尚未收到确认的最小序号;
next-1~base+N-1表示当前发送方可以使用的序号,表示一种发送能力;当发送方收到确认号为base的确认分组后就会向前移动窗口,所以回退N步也被称为滑动窗口协议
这是发送方需要维护的数据,同时发送方需要响应的事件有:上层调用、收到ACK、超时事件;
回退N步协议存在一个问题就是当窗口和带宽的时延都较大时,单个分组的差错可能会引起GBN重传大量的分组,然后许多本来不用重传的分组会充斥在信道中,造成资源浪费;
选择重传就是让发送方仅重传那些丢失和受损的分组而避免不必要的重传
SR 发送方的事件和动作:
SR 接收方的事件于动作:
接收方将确认一个正确接收的分组而不管其是否按序;失序的分组被缓存,直到形成连续数据后将其提交给上层;值得注意的是,如果接收方收到了已经确认的分组,则说明确认ACK丢失,或者时延太长,接收方和发送方沟通不及时;这也表明了关于那些分组到位了,那些分组还没到位,接收方和发送方有着不一样的视图。
另外还需要注意的是,序号的重用问题,如果在分组中序号字段的位数为k,那么最大的序号为2^k-1,所以有可能不同分组同时占用一个序号,为了避免这种情况,需要做的是控制分组的生命周期。窗口长度必须小于或等于序号空间大小的一半。
TCP协议之所以被称为是面向连接的协议,是因为在一个应用进程可以向另一个应用进程发送数据前,这两个进程将首先“握手”,即它们必须交换一些预报文段,已建立对关于数据传输的参数的共识;作为TCP连接建立的一部分,通信双方都将初始化与TCP连接的许多相关变量.
TCP连接状态被端系统所维护而中间路由器完全忽略了该协议,中间路由器看到的只是数据,也就是说,TCP只运行在端系统之上;所以,TCP连接更像一种状态而不是物理的、实际的连接.
TCP提供全双工服务,并且是点对点的,数据从A到B的同时,也能从B到A;
TCP协议无法提供“多播”服务,一条TCP连接只关联一个发送方和接收方(当然,发送方也是接收方)
通信的发起方首先发送一个特殊的TCP报文段给接收方,这是第一次握手;接收方收到该报文段后,对该报文段进行响应,此为第二次握手;发送方接收到响应报文段后,发送第三个报文段,其中包含了有效负载;因为TCP建立的过程,一共发生了三次握手,所以该过程也被称为“三次握手
”
当TCP连接建立后,两个应用进程就可以发送数据了。
应用程序将要发送的数据通过Socket传递给TCP,TCP将数据引导到该连接的发送缓存,发送缓存大小是在三次握手的过程中确定的;之后TCP将时不时从该缓存中拿出数据进行发送,一个有趣的事情是,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连接的每一端都有发送和接收缓存.
TCP报文段结构,从整体上来说由首部+数据字段组成;其中数据字段来自应用层,其长度不能大于MSS;首部的常规长度为20字节,但是值得注意的是,TCP首部是可变长的;TCP首部是以32比特为单位组织的,其结构组成如下图:
TCP报文段中两个重要的字段是确认号和序号;这两个字段是TCP实现可靠数据传输的重要部分;
TCP将数据看作是一个无结构、有序的字节流;值得注意的是,TCP的序号是基于传输的字节流之上,而不是报文段的序列之上;也就是说,来自应用层的数据被TCP包装在多个报文段中,其中第2个报文段的序列号不是2,而是1001,如果MSS为1000。
关于确认号,如果采取回退N步策略,那么TCP采用一种累计确认的方法,前面已经提到过,这里就不赘述;一条TCP连接可以采取任意数字作为初始序号,这样可以减少将那些残存在网络中的报文段误认为是新建连接的报文段(新旧连接恰巧采用了相同端口)
总体来说,一个报文段的序号就是该报文段数据字段首字节的序号;确认号就是接受主机正在等待接收的数据的下一个字节序号;值得注意的是,服务端对接收端发来的报文段的确认被装载到一个从服务端发往到接收端的报文段中,这种确认被称为“捎带”
Telnet:应用层协议。
即使报文段没有护具仍有序号。这是因为TCP存在序号字段,报文段必须填入某个序号。
IP协议提供的是尽力而为的服务:不保证不丢失、不保证按序到达、不保证没有损坏
TCP协议在IP协议之上,提供可靠数据传输,从而保证一个进程从其相关联的缓存中读取的数据和另一端进程发送的数据是一致的;
TCP使用超时重传和冗余确认技术来处理超时、丢失等情况;使用确认、序号等技术来保证按序到达;使用校验和来检验是否报文段在传输过程中是否发生了错误;
TCP 发送方有三个与发送和重传有关的事件:
流量控制是一个速度匹配服务
:TCP连接的发送方和接收方都各自维护一个缓存,因此两者的数据交换应该在一个合理的速度范围内:不让对方发生数据溢出;TCP为它的应用程序提供了这种服务:流量控制服务。
(省略…)
TCP三次握手
第一次握手
客户端向服务端发送连接请求报文段。
该报文段的头部中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状态,服务端将会一直等待下去,这样浪费服务端连接资源。
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永远无法正常关闭。
(A:我关了哦 B:你关吧(A->B关闭) B:那我也关了 A:好(B->A关闭))
计算机网络拥塞的原因是因为网络中的分组太多,而链路带宽和路由器缓存容量都是有限的;
1.拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;
2.流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。
总体来说,我们可以根据网络层是否为传输层拥塞控制提供了显式帮助来区分拥塞控制方法:端到端拥塞控制和网络辅助拥塞控制
;
在端到端拥塞控制方法中,网络层并没有向传输层拥塞控制提供显式支持,即便网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来判断;
TCP必须通过端到端的方法解决拥塞控制,因为IP层不会像端系统提供有关网络拥塞的反馈信息
。
TCP报文段的丢失(超时或者收到3次冗余确认而得知)被认为是网络拥塞的一个迹象,TCP将相应地减小窗口长度
;
在网络辅助的拥塞控制方法里,网络层会向发送方提供关于网络中拥塞状态的显式反馈消息;比如使用一个比特位来指示网络是否拥塞;
拥塞信息从网络反馈到发送方一般有两种方式,其中直接反馈信息可以由网络路由器发送给发送方,这种方式的通知通常采用一种拥塞分组的形式;第二种形式的通知是路由器标记或者更新从发送方到接收方的分组中的某个字段来指示拥塞的产生,然后由接收方向发送方通知该网络发生了拥塞。
TCP必须使用端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP并不会向端系统提供显式的网络拥塞反馈;
TCP所采用的方法是让每一个发送方根据其所感知的网络拥塞程度来限制其能向连接发送流量的速率;
如果TCP判断网络通畅,那么它会提高发送速率,如果TCP判断网络拥塞,那么它会限制发送速率;
需要解决三个问题:TCP如何限制发送速率?TCP如何感知网络拥塞程度?TCP该以何种算法改变其发送速率?
TCP如何限制发送速率?
TCP连接的双方都维护着两个窗口,其中一个是作为发送方的窗口,也被称为拥塞窗口
cwnd,它对发送方能向网络中发送流量的速率进行了限制,last sent-last acked<=min{cwnd,rwnd};另一个自然是作为接收方的接收窗口。
我们假设,发送方可以在RTT时间范围内连续发送cwnd个字节的数据,所以发送速率即为cwnd/RTT;发送方通过调整窗口大小来对发送数据的速率加以控制。
TCP如何感知网络拥塞程度?
我们将TCP发送方的丢包事件定义为:要么超时,要么收到接收方的3个冗余ACK;
如果网络拥塞,那么网络中的路由器就会发生缓存溢出,进而导致数据报被丢弃,然后就会引起发送方的丢包事件;此时,TCP发送方就可以认为TCP连接出现了拥塞。
TCP将接收方发送的ACK视为网络通畅的标志,如果ACK到达的速率较高,那么TCP的拥塞窗口就会以较高的速率扩大,如果ACK到达的速率较慢,那么TCP拥塞窗口的增加速度也会较慢;因为TCP使用ACK对拥塞窗口做出调节,所以也别称为自计时的;
TCP发送速率过高,网络就很容易拥塞;TCP发送方如果过于谨慎,那么就无法充分利用网络的带宽;
所以TCP如何设置自己的发送速率,才能使得网络不会拥塞而且还充分利用带宽呢?
关于这个问题,TCP使用下列指导性原则回答这些问题:
TCP拥塞控制算法,该算法包含三个主要部分:慢启动、拥塞避免、快速恢复
;
慢启动和拥塞控制是TCP的强制部分;两者的差异在于对收到的ACK做出反应时增加cwnd长度的方式
快速恢复是推荐部分,对于TCP发送方并非是必须的
何时结束这种指数增长?
有三种情况:发送了超时、发生了冗余ACK以及cwnd达到ssthresh。
ssthresh是慢启动阈值的速记
;在慢启动阶段,如果发生了超时事件,那么ssthresh就被设置为当前cwnd的一半,然后将cwnd置为1;当cwnd逐步增加到ssthresh时,再翻倍增加cwnd就有一点鲁莽了,所以此时TCP结束慢启动,进入拥塞避免模式。
在拥塞避免模式里,TCP将更谨慎地增加cwnd;如果收到冗余ACK,那么TCP会做一次快速重传,然后进入快速恢复阶段;
当出现超时时,TCP将cwnd设置为1,然后将ssthresh更新为cwnd的一半;当收到冗余ACK时,TCP将cwnd减半,然后将ssthresh置为cwnd值的一半,并且进入快速恢复状态;
转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路
路由选择:分组从发送方流向接收方时,网络层必须决定这些分组采用的路由或路径,路由选择算法
转发是路由器本地动作,路由选择是网络范围过程
。
比如开车从北京到上海,转发相当于在某个路口选择某一条岔路,路由选择相当于规划从北京到上海所有线路的过程
每台路由都有一张 转发表 。
路由器检查分组首部字段值(可能是目的地址或所属连接,看网络层协议)来转发分组,使用该值在转发表索引查询。该值指出了该分组将被转发的路由器输出链路接口。
路由选择算法决定了插入路由器转发表中的值。路由器接收路由选择协议报文,来配置转发表。有两种算法:
分组交换机:指一台通用分组交换设备,根据分组首部字段值从输入链路接口转移分组到输出链路接口。
链路层交换机:基于链路层字段中的值做转发决定
路由器:基于网络层字段值做转发决定
连接建立:**某些网络结构(ATM、帧中继、MPLS)除了转发和路由选择功能,还有连接建立功能。**要求从源到目的地沿着所选择路径彼此握手,建立连接。
定义了分组在发送与接收端系统之间的端到端运输特性
网络层可以提供的服务(注意IP并没有这些服务!):
确保交付
具有时延上界的确保交付
有序分组交付
确保最小带宽:模仿发送方和接收方之间一条特定比特率传输链路的行为。发送速率低于该速率,分组不会丢失,且会在预定时延内到达
确保最大时延抖动:确保发送方两个相继分组之间的时间 = 目的地接收到它们之间的时间
安全性服务:使用仅由源和目的地主机知晓的密钥,加密数据报,源加密,目的主机解密。此外还有数据完整性和源鉴别服务
仅在网络层提供连接服务的计算机网络成为虚电路
;
仅在网络层提供无连接服务的计算机网络称为数据报网络
。
运输层面向连接服务是在位于网络边缘的端系统中实现的;我们很快看到,网络层连接服务 除了在端系统中,也在位于网络核心的路由器中实现
包括ATM、帧中继的体系结构是虚电路网络
,在网络层使用连接。
IP是数据报网络。
虚电路组成:
一条虚电路每条链路上可能有不同VC号,每台路由器必须用一个新的VC号更新每个分组的VC号
(which can get from the forwarding tables)也就是一个分组经过一台路由器,首部VC号可能就变了,原因:
虚电路网络中的路由器必须为进行中的连接维护连接状态信息。
创建一个连接,转发表加一项,释放一个连接,转发表删一项。该信息将VC号与输出接口号联系起来。即使没有VC号转换,仍有必要维持状态信息,该信息将VC号和输出接口号联系起来。
虚电路3个阶段:
虚电路建立
- 发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路
- 网络层决定发送方和接收方之间的路径,即虚电路要通过一系列链路和路由器,为每条链路设置vc号
- 网络层在路径上每台路由器的转发表增加一个表项
- 预留该虚电路路径上的资源
数据传送
- 发起呼叫—>入呼叫—>接收呼叫—>呼叫连接—>数据流开始—>接收数据
虚电路拆除
- 网络层通知网络另一侧端系统结束呼叫,更新删除路由器上转发表项以表明虚电路不存在(说明路由器转发表项是虚电路的物理体现)
信令报文
:端系统向网络发送指示 虚电路启动与终止的报文
路由器之间传递的用于建立虚电路(修改路由器表中的连接状态)的报文。
用来交换这些报文的协议称为信令协议
分组从源到目的地传输,通过一系列路由器传递,每台都使用分组的目的地址转发该分组
每个路由器有转发表,将目的地址映射到输出链路接口,路由器将分组向该接口转发
目的地址(其实就是IP地址)32bit,转发表不可能对每个目的地址有一个表项,因此,路由器用分组的目的地址的前缀与表项进行匹配。当有多个匹配时,使用最长前缀匹配规则
。
数据包网络中路由器不维持连接状态信息,但是维护了转发状态信息。实际上每1-5分钟,路由选择算法更新一次转发表。
因为在数据包网络中的转发表能在任何时刻修改,从一个端系统到另一个端系统发送一系列分组可能在通过网络时走不同的路径,并可能无序到达
虚电路来源于电话界(真电路)
端系统设备复杂,网络层服务模型应尽可能简单,复杂功能在更高级实现(按序、可靠数据传输、拥塞控制等)
因为简单,所以互联各种链路(卫星、以太网、光纤、无线)和丢包特性的网络变得容易
增加一个新服务器只需连接一台主机到网络,定义一个新的应用层协议即可,使得Web之类的新服务很快在因特网部署
输入端口:
执行将一条输入的物理链路与路由器相连接的物理层功能
执行与位于入链路远端的数据链路层交互的数据链路层功能
查找功能,查询转发表决定路由器的输出端口,将分组转发到输出端口
交换结构:
将路由器的输入端口与输出端口相连
分组通过交换结构转发到输出端口
输出端口:
存储从交换结构接收的分组,执行必要的链路层和物理层功能在输入链路上传输这些分组。
当链路是双向的时,输出端口与输入端口在同一线路卡成对出现
路由选择处理器:
执行路由选择协议
维护路由选择表、连接的链路状态信息,为路由器计算转发表
路由转发平面
一台路由器的输入端口、输出端口和交换结构共同实现了转发功能,并且用硬件实现(软件太慢,需以纳秒时间尺度运行)
路由控制平面
路由器的控制功能(执行路由选择协议、对上线或者下线链路进行响应、管理功能),在毫秒时间尺度上运行,用软件实现并在选择处理器上执行(一种cpu)
查找:查找必须在纳秒级别执行,不仅要用硬件执行查找,而且要对大型转发表使用快速查找算法,而且需要更快的内存访问速度(DRAM、SRAM)。
影子副本:转发表由路由选择处理器计算和更新,从路由选择处理器经过独立总线复制到(输入)线路卡(影子副本)
有了转发表副本,转发决策能在每个输入端口本地做出,无须调动路由选择处理器,避免集中式处理
排队:查找确定了某分组输出端口,分组就能发送进入交换结构。一个被阻塞的分组必须在输入端口处排队。
尽管查找在输入端口可以说是最为重要的,但必须采取许多其它动作:
通过交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中
三种交换方式:
经内存交换
一个分组到达输入端口时,该端口会先通过中断方式向路由选择处理器发出信号
分组从输入端口复制到处理代路由器查找交换进内存,是器内存中(现由输入线路卡处理的)
早期路由选择处理器从首部提取目的地址,在转发表查找输出端口,将分组复制到输出端口
经总线交换
输入端口经一根共享总线
将分组直接传送到输出端口,无需路由选择处理器的干预
路由器的交换带宽受总线速率限制
经互联网络交换
纵横式交换机,2N条总线组成网络,连接N各输入端口和N个输出端口
每条垂直的总线与每条水平的总线交叉,交叉点通过交换结构控制器开启闭合
某分组到达端口A,需要转发到Y,交换机控制器闭合总线A和Y的交叉点,A在其总线上发送分组,仅由Y接收;同时B也能发分组到X,因为没有公用总线。纵横式网络能并行转发多个分组。但是如果两个不同输入端口的两个分组的目标是同一个输出端口。则一个分组必须在输入端等待。
输入、输出端口都能形成分组队列,取决于流量负载、交换结构
随着队列增长,路由器缓存空间会耗尽,出现丢包
需要路由器缓存吸收流量负载波动,需要多少缓存?
输出端口排队,需要分组调度程序选出一个分组发送。提供服务质量保证。
输出端口的一个分组调度程序
必须在这些排队的分组中选取一个发送。分组调度程序在提供服务质量保证上有很大的作用
主动队列管理(RQM):缓存填满前丢弃(或首部加个标记)一个分组,向发送方提供一个拥塞信号
随机早期检测算法(RED):平均队列长度在某个范围内时,以某种概率被丢弃/标记。
线路前部阻塞(HOL):
深色阴影分组必须等待。但不仅该分组要等待,左下角队列中排在该分组之后的浅色阴影分组也要等待,即使右侧输出端口中无竞争。这种现象叫做线路前部阻塞(HOL)
网络层三个组件:
如何将过大的IP分组压缩进链路层帧的有效载荷字段?
将IP数据报中的数据分片成多个较小的IP数据报,用单独的链路层帧封装这些小IP数据报,每个小数据报叫片
IPv4将数据报的重新组装放在端系统中,而不是路由器中
标识、标志、片偏移字段,帮助主机执行重组任务
一个4000字节的数据报(20+3980)到达一台路由器,转发到一条MTU为1500子节的链路上。必须分配3个独立的片,假设初始数据报的标识号是777,则前两片字节都为20+1480,第三层为20+1020
IPv6废除了分片,简化了IP分组的处理
主机与路由器连入网络的方法
一个ISP将8个组织连接到因特网。该ISP向外界通告:向我发送以200.23.16.0/20开始的任何内容。外部无需知道在该地址块内还有8个其他组织,每个组织有自己的子网
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的数据报时,报文会交付给同一个网络的所有主机,路由器也会有选择的向邻近的子网发送报文(通常不这样做)。可用于DHCP发现报文的发送,广播最小生成树
新主机到来时,DHCP协议的四个步骤
1.DHCP服务器发现
新到的客户通过广播DHCP发现报文,发现一个要与其交互的DHCP服务器
客户在UDP分组中向端口67发送该发现报文,此时必须用广播地址255.255.255.255,源地址是0.0.0.0
2.DHCP服务器提供
DHCP收到DHCP发现报文后,响应一个DHCP提供报文,仍然使用广播地址,因为此时新客户并没有IP地址
可能有多台DHCP服务器,每台服务器提供的报文中,有向客户主机推荐的IP地址、网络掩码以及IP地址租用期(一般几天或几小时)
3.DHCP请求
客户从提供中选一个,向选中的服务器提供一个DHCP请求报文进行响应,回显配置参数
4.DHCP ACK
收到DHCP请求报文后,用DHCP ACK报文对其记性响应,证实所传参数
客户收到ACK后,交互完成,在租期内使用DHCP分配的IP地址。DHCP提供了机制允许客户更新对一个IP地址的租用
当一个移动结点在子网之间移动时,就不能维持与远程应用的TCP连接。
(省略了啥…NAT,UPnP)
ICMP被主机和路由器用来沟通网络层信息,如差错报告
如『目的网络不可到达』这种错误是在ICMP产生的,IP路由器找不到路径通往指定主机,该路由器就向发送主机发出ICMP报文指示错误
ICMP通常被认为是IP的一部分,但从体系结构上来讲它是位于IP之上的,因为ICMP报文是承载在IP分组中的。也就是说,ICMP报文是作为IP有效载荷承载的
。
ping:发送一个ICMP类型8编码0(回显请求)的报文到指定主机,目的主机发回一个类型0编码0(回显回答)的报文
源抑制报文:拥塞的路由器向主机发送,强制主机减小发送速率。TCP在运输层有拥塞控制机制,不需要该报文的信息了
Traceroute:如何跟踪从一台主机到世界上任意一台主机之间的路由?
原理:IP协议规定,路由器收到TTL为0的数据报会将其丢弃,然后发送一个ICMP告警报文给源主机,which concludes the name and IP address of it
方法:发送TTL为1~n的一系列IP数据报。当到达目的主机时,返回一个端口不可达(数据报携带了不可达UDP端口号)的ICMP报文,则结束探测
IPv4到IPv6的迁移
双栈
:同时使用IPv4和IPv6,这种结点有两种地址。DNS可解析两种地址。
如果发送方和接收方中任意一个仅为IPV4使能的,则必须使用IPv4数据报。
结点B必须生成一个IPv4数据报发给C,IPv6数据报的数据字段可以复制到IPv4数据报的数据字段中,并且要做适当的映射。在IPv4中没有对应的部分的数据,这些字段的信息会丢失.
新型网络层协议:IPsec
(如果你是Mac OS,网络设置中添加VPN服务时你会看到)。
与IPv4和IPv6向后兼容
在VPN(虚拟专用网)中部署
两台主机要通信,IPsec只需在两台主机中可用,其他主机和路由器继续用普通的IPv4
两台主机首先创建IPsec会话(面向连接的),在两台主机发送的TCP和UDP报文段都享受IPsec的
路由选择:确定从发送方到接收方通过路由器网络的好路径
主机通常直接与一台路由器相连,该路由器即为该主机的默认路由器或第一跳路由器
源主机默认路由器称为源路由器,目的主机默认路由器称为目的路由器
一个分组从源主机到目的主机 == 从源路由器到目的路由器
路由选择算法:给定一组路由器和连接路由器的链路,路由选择算法找到一条源路由器到目的路由器好的路径(最低费用),如最短路径算法(图)
当路由器数目变得很大,算法开销高的不可实现如LS更新链路费用时
管理自治。一个组织应该当按自己愿望运行管理其网络
解决方法:将路由器组织进自治系统AS
每个AS由一组处在相同管理控制下的路由器组成(如相同的ISP运营)
相同AS中路由器全部运行同样的路由选择算法,叫做自治系统内部路由选择协议
一个AS内一台或多台路由器负责向本AS之外的目的地转发分组,这些路由器称为网关路由器
当有多台网关路由器,需要用到自制系统间路由选择协议来配置转发表
因特网中所有AS中都运行相同的AS间路由选择协议BGP4
AS内部路由选择协议,又称内部网关协议
路由选择信息协议RIP,通常设置在下层ISP中
开放最短优先OSPF,通常设置在上层ISP中
(统统省略…看不下去了呜呜呜)
在广播路由选择(必须同一网段)中,网络提供了一种源节点到网络中事务所有其它结点的交付分组的服务;多播路由选择使单个源节点能够向其他网络结点的一个子集发送分组的副本。(不必同一网段).
(此处也省略-_-||)
运行链路层协议的任何设备均称为结点
,沿着通信路径连接相邻结点的通信信道称为链路
。
通过特定链路时,传输结点将数据报封装在链路层帧中,将该帧
传入链路
举例:游客想从苏州到临汾玩,旅行社安排的线路是:第一段线路是从苏州乘火车到上海,第二段线路是在上海坐飞机到太原,第三段线路是太原坐大巴到临汾
游客相当于数据报
每个运输段相当于一条链路
每种运输方式相当于一种链路层协议
旅行社相当于一个路由选择协议
能够提供的协议可能包括:(不同协议包括不同,细节不同)
成帧
网络层数据报经链路传送前,链路层协议要将其用链路层帧封装起来
帧的结构由链路层协议规定
链路接入
媒体访问控制MAC协议,规定帧在链路上传输的规则,协调多个结点的帧传输
可靠交付
保证无差错经链路层移动每个网络层数据报
确认和重传,类似TCP
通常用于高差错率链路,如无线链路,同轴电缆、光纤、双绞线等链路不需要
目的是在差错发生的链路上纠正差错,而不是通过运输层或应用层进行端到端数据重传
- **链路层可靠交付可能会被认为是一种不必要的开销**。由于这个原因,许多有线的链路层协议不提供可靠交付服务。
错检测和纠正(硬件)
- 奇偶校验
- 检验和
- 循环冗余检测
路由器中:在线路卡中实现
端主机中:网络适配器(网络接口卡,网卡),位于其核心的是链路层控制器,一个实现了许多链路层服务(成帧、链路介入、差错检测)的专用芯片。之前是物理分离的卡,现在网卡直接焊在了主板上
大部分链路层是在硬件中实现的,但部分链路层是在运行于主机CPU上的软件中实现的,软件实现了高级功能,如组装链路层寻址信息和激活控制器硬件,响应控制器中断
链路层是协议栈中软件和硬件交接的地方
比特级差错检测与纠正,即对从一个结点发送到另一个物理上连接的邻近结点的链路层帧中的比特损伤进行检测与纠正,它们通常是链路层提供的两种服务。
为了保护比特免受差错,使用差错检测和纠正比特(EDC)。
通常,要保护的数据不仅包括从网络层传递下来需要通过链路传输的数据报,而且包括链路帧首部中的链路级的寻址信息、序号和其它字段。
即使采用差错检验比特,也还是可能有未检出比特差错。
传输数据中检测差错的三种技术
奇偶校验
单个奇偶校验位
单个比特的奇偶校验是指在要发送的数据最后附加一个奇偶校验位.奇校验的意思就是整个编码中的1的个数要是奇数.偶校验就是1的个数是偶数.显然如果有偶数个比特发生错误,那么奇偶校验就检测不出来了.
校验和方法
在校验和方法中,数据被切成k比特的序列,这些序列全部相加之后取反码就是校验和.
接收方收到数据之后,把所有数据加起来(包括校验和).用结果是否全为1来作为判断数据是否出错的标准.
和CRC相比,校验和提供较弱的保护.
为什么传输层使用校验和而链路层使用CRC呢?
传输层使用软件实现,采用简单快速的方案是必须的(校验和)
链路层的CRC用硬件实现,能够快速执行CRC操作.
编码解码步骤:
CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看成系数是0或1的一个比特串,对比特串的操作被解释为多项式算数.
这里不过多讨论多项式理论.
编码步骤如下 :
接收方的解码步骤很简单,用G去除收到的d + r比特.如果余数非0,接收方知道出了差错.否则认为数据被正确接收.
怎么计算R
要使得R对于n有: D * XOR R = nG.
两边同异或R得: D * = nG XOR
所以 R = remainder {D * / G}
多路访问问题
如何协调多个发送和接收结点对一个共享广播信道的访问
所有结点都能传输帧,多个结点可能会同时传输帧,所有结点同时接到多个帧,传输的帧在所有接收方出碰撞了,发生碰撞时,所有帧丢失
多路访问协议:结点通过协议规范它们在共享的广播信道上的传输行为
信道划分协议
随机接入协议
轮流协议
协议希望有的特性,理想情况下对速率R bps的广播信道
仅有一个结点发送数据,结点具有R bps的吞吐量
M个结点发送数据时,每个结点平均吞吐量R/M bps
协议分散,不会因为主结点故障似整个系统崩溃
协议简单不昂贵
TDM(时分多路复用)
TDM把时间划分为时间帧,并进一步把时间帧划分为N个时隙(slot).(时间帧和链路层交换的单元帧不是一个意思)
然后把每个时隙分给N个节点中的一个.无论何时某个节点在有分组想要发送的时候,他在循环的TDM帧中指派给它的时隙内传输分组比特.时隙长度一般应是一个时隙内能传输一个分组
TDM的缺点
1. 最高速率只能达到R/N bps ,即使只有一个人使用信道
2. 节点总是总是要等待它的时隙,可能会对缓存等造成压力
3.消除了碰撞且十分公平
FDM(频分多路复用)
FDM将Rbps的信道划分为不同的频段(每个频段具有R/N带宽),并把每个频段分给N个结点中的一个.因此FDM在N个较大的信道中创建了N个较小的R/N信道.
FDM的缺点和TDM相同,限制了每个结点只能使用R/N带宽…
码分多址CDMA
TDM和FDM分别为结点分配时隙和频率,CDMA对每个结点分配不同的编码
每个结点用其唯一编码对发送数据进行编码,使得不同结点能同时传输,接收方仍能正确而接收
抗干扰,军用系统,民用蜂窝电话
传输结点总是以信道全部速率R bps进行发送
有碰撞时,涉及碰撞的每个节点反复重发它的帧(等待一个随机时延),直到该帧无碰撞的通过
(省略:时隙ALOHA,纯)ALOHA,载波侦听多路访问CSMA,具有碰撞检测的载波侦听多路访问CSMA/CD)
轮询协议
指定一个主结点,以循环的方式轮询每个结点
主结点首先向结点A发送一个报文,告知A能传输帧的最大数量,A传完后主结点告诉B能传帧的最多数量,如此循环
缺点:有轮询时延;主结点故障,整个信道就GG
令牌传递协议
没有主结点,一个叫令牌token的特殊帧在结点之间以固定次序交换,如1发给2,2发给3,N发给1,就像网络拓扑结构中的环状网络令牌
当一个结点收到令牌时,有帧发送,则发送最大数量的帧,然后转发令牌;没帧发送,直接把令牌转发.
缺点:单点故障。
DOCISIS:用于电缆因特网接入的链路层协议
交换机运行在链路层,它们使用链路层地址而不是IP地址来转发链路层帧通过交换机网络
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地址是层次结构)
AC地址像身份证号,IP地址像邮政地址,有层次,会改变
当某适配器要向目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入该帧,发送到局域网上,适配器可以接受一个并非向它寻址的帧,当适配器接受一个帧时,检查帧中的目的MAC地址与自己的MAC地址是否匹配,若匹配则取出数据报,向上传递,否则丢弃
适配器通过MAC广播地址FF-FF-FF-FF-FF-FF来广播
2.地址解析协议ARP(即插即用的)
转换网络层地址和链路层地址,如IP地址和MAC地址的转换
DNS为因特网中任何地方的主机解析主机名,而ARP只为在同一个子网上的主机和路由器接口解析IP地址
每台主机和路由器在内存中有一个ARP表,包含IP地址到MAC地址的映射关系,过期时间20分钟
若发送方的ARP表没有目的主机的表项,发送反公用ARP协议来解析这个地址
首先发送方构造一个ARP分组,字段包括发送和接受IP地址和MAC地址,ARP查询分组和响应分组格式相同
适配器用MAC广播地址发送该ARP查询分组,每个适配器都把ARP分组向上传递给ARP模块,检查自己的IP地址和分组中的目的IP地址是否一致
匹配的主机发送回一个ARP响应分组,然后查询主机更新它的ARP表,并发送它的IP数据报
ARP协议是一个跨越链路层和网络层的协议
以太网占领了现有的有线局域网市场,就像因特网之于全球联网的地位
集线器是一种物理层设备,作用于比特而不是帧。当0或1的比特到达一个接口时,集线器只是重新生成这个比特,将其能量强度放大,并将该比特向其他所有接口传输出去
早期基于集线器星形拓扑以太网,现在位于中心的集线器被交换机所取代。交换机是无碰撞的存储转发分组交换机,运行在链路层
以太网技术
早期10BASE-2和10BASE-5标准规定两种类型的同轴电缆的10Mbps以太网,每种标准限制在500米,通过转发器得到更长运行距离。
BASE表示基带以太网。前面的数字代表速率。T代表双绞线。F代表光纤。 100BASE-FX
今天的以太网,结点经点对点由双绞铜线或光纤构成的线段与一台交换机相连
10Gbps以太网,5类UTP线缆
`线代交换机是全双工的`,一台交换机和一个结点能同时向对方发送帧而没有干扰。在基于交换机的以太局域网中,没有必要使用MAC协议了!
交换机的任务:接收入链路层帧,转发到出链路
交换机自身对子网中的主机和路由器是透明的,主机/路由器向另一个主机/路由器寻址一个帧,顺利将帧发送进局域网,并不知道交换机干嘛
交换机输出接口设有缓存
交换机是即插即用设备,管理员无需配置
交换机是双工的,任何交换机接口能同时发送和接收
转发和过滤
借助于交换机表,包含局域网上某些主机和路由器的表项(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地址
对分组处理时间较长,因为必须处理第三层字段