第6章 传输层95726(精品).ppt
第第6章章 传输层传输层传输服务传输协议Internet传输协议传输层的基本功能 传输层依据会话层的服务质量(QoS,Quality of Service)要求,选择适当的网络层服务和传输层协议,以提供可靠的、价格合理的、与网络层无关的数据传送。QoS相当于在货物传输的例子中所考虑的时间、可靠性、费用等。选择网络服务相当于在货物运输的例子中选择运输方式,比如:空运、铁路等。传输层协议相当于邮寄信件时是使用平信,还是挂号信,等等。传输层的功能为:数据传送,不关心数据含义,进程间通信;可视为低层的一部分。弥补高层(上3层)要求与网络层(基于下3层)数据传送服务质量间的差异(差错率、差错恢复能力、吞吐率、延时、费用等),对高层屏蔽网络层的服务的差异,提供稳定和一致的界面。传输服务(传输服务(1)引入传输层的原因-消除网络层的不可靠性;-提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。传输服务-传输实体(transport entity):完成传输层功能的硬软件;-传输层实体利用网络层提供的服务向高层提供有效、可靠的服务;Fig.6-1-传输层提供两种服务面向连接的传输服务:连接建立,数据传输,连接释放无连接的传输服务。-1 4层称为传输服务提供者(transport service provider),4层以上称为传输服务用户(transport service user)。服务质量服务质量建立连接延迟建立连接失败的概率吞吐率传输延迟残余误码率安全保护优先级恢复功能传输服务(传输服务(2)传输服务原语(Transport Service Primitives)-传输用户(应用程序)通过传输服务原语访问传输服务-一个简单传输服务的原语-TPDU传输服务(传输服务(3)-拆除连接方式有两种不对称方式:任何一方都可以关闭双向连接;对称方式:每个方向的连接单独关闭,双方都执行DISCONNECT才能关闭整条连接。-简单连接管理状态图传输服务(传输服务(4)-Berkeley Sockets连接释放是对称的传输服务(传输服务(5)应用举例-一个服务程序和几个远程客户程序利用面向连接的传输层服务完成通信。-建立连接服务程序-调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回一个文件描述符用于以后调用中使用该套接字;-调用bind将一个地址赋予该套接字,使得远程客户程序能访问该服务程序;-调用listen分配数据空间,以便存储多个用户的连接建立请求;传输服务(传输服务(6)-调用accept将服务程序阻塞起来,等待接收客户程序发来的连接请求。当传输层实体接收到建立连接的TPDU时,新创建一个和原来的套接字相同属性的套接字并返回其文件描述符。服务程序创建一个子进程处理此次连接,然后继续等待发往原来套接字的连接请求。客户程序-调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回一个文件描述符用于在以后的调用中使用该套接字;-调用connect阻塞客户程序,传输层实体开始建立连接,当连接建立完成时,取消阻塞;-数据传输双方使用send和receive完成数据的全双工发送。-释放连接每一方使用close原语单独释放连接。传输协议的要素传输协议的要素传输层和数据链路层的异同-寻址-建立连接-子网的存储能力-数量的不同物理通信信道路由器路由器子网主机数据链路层传输层传输协议的要素(传输协议的要素(1)寻址(Addressing)-方法:定义传输服务访问点TSAP(Transport Service Access Point),将应用进程与这些TSAP相连。在Internet中,TSAP为(IP address,local port);-Fig.6-8-远方客户程序如何获得服务程序的TSAP?方法1:预先约定、广为人知的,象telnet是(IP地址,端口23);方法2:从名字服务器(name server)或目录服务器(directory server)获得TSAP-一个特殊的进程称为名字服务器名字服务器或目录服务器目录服务器(TSAP众所周知);-用户与名字服务器建立连接,发送服务名称,获得服务进程的TSAP,释放与名称服务器的连接;-与服务进程建立连接。传输协议的要素传输协议的要素-当服务程序很多时,使用初始连接协议(initial connection protocol)一个称为进程服务器(进程服务器(process server)的进程(inetd)同时在多个端口上监听;远方客户程序向它实际想访问的服务程序的TSAP发出连接建立请求;如果没有服务程序在此TSAP上监听,则远方客户和进程服务器建立连接;进程服务器产生所请求的服务进程,并使该进程继承和远程客户的连接;进程服务器返回继续监听;远方客户程序与所希望的服务程序进行数据传输。Fig.6-9TSAP的地址结构的地址结构 现在我们假定用户已经成功地找到欲建立连接的TSAP地址。另一个有趣的问题是:本地传输实体如何知道那个TSAP被放置在哪台机器上?进一步说,传输实体怎么知道哪个网络层地址用来与管理TSAP请求的远程传输实体建立网络连接呢?答案依赖于TSAP地址的结构。一种可能的结构是TSAP地址为层次型地址(hierarchial addresses)。层次型地址是由-系列字段组成,这些字段将地址空间划分为不相交的分区。例如,一个完全通用的TSAP地址可能有如下的结构:地址=使用这一方案,可以十分简单明了地确定任何已知范围内的TSAP。同理,如果一个TSAP地址是一个NSAP地址和一个端口(表明本地TSAP之一的局部标识符)的组合,那么当给出了一个传输实体要连接的TSAP地址时,它使用TSAP中包含的NSAP地址以到达适当的远端传输实体。作为层次型地址的一个简单例子,考察电话号码19076543210。该号码可以按1-907-654-3210来分析。其中,1为国家代码(美国+加拿大),907为地区代码(阿拉斯加),654为阿拉斯加的一个分局,而3210则是该分局中的“端口”(用户专用线)之一。有别于层次型地址空间的一种选择是平面型地址空间(flat address space)。如果TSAP地址为非层次型,则需要二级映射来定位合适的机器。即必须有一个名字服务器,其输入为传输地址,输出为网络地址。另外,在某些情况下(例如,在局域网中),有可能以广播方式发出一个查询,请目的机器发送一个分组来标识自己。传输协议的要素(传输协议的要素(2)建立连接建立连接建立连接听起来容易,但实际上却是意想不到的棘手。初看起来,一个传输实体似乎只需向目的机器发送一个连接请求(CONNECTION REQUEST)TPDU,并等待对方接受连接(CONNECTION ACCEPTED)的应答就足够了,但当网络可能丢失、存储和出现重复分组时,问题便出现了。设想一个子网十分拥塞以至于根本不能及时返回确认,每个分组由于在规定时限内得不到确认而需要重发二次或三次的情形。假设该子网内部使用数据报,并且每个分组拥有不同的路由。一些分组可能会因为子网内部的线路拥塞需要很长一段时间才能到达,即它们被存储到子网中,并在很久以后突然出现。最坏的可能性是发生下面的情况。一个用户与银行之间建立了一条连接,并发送报文让银行将一笔巨款转至一个不能完全信任的人的账户下,然后便释放连接。不幸的是,此时每个分组均被复制并存放于子网中。当连接已经断开后。所有的复制分组又会从子网中发出并顺序到达目的瑞,请求与银行建立一个新的连接并再次转账,然后释放连接。而银行则无法辨别这些分组是重复的,便假定这是第二次独立的转账业务。于是将巨款再次转移。本节将专门讨论延迟的重复分组问题,特别重点讨论可靠地建立连接的算法,以防止类似于上述灾难性问题的发生。建立可靠的连接:限制分组的生命周期建立可靠的连接:限制分组的生命周期 采用下述的技术之一,可以将分组的生命周期限制在一个已知的最大值内:1.受限制的子网设计;2.在每个分组内设置一个生存时间;3.为每个分组加上时间戳。第一种方法包括防止分组进入回路,以及限制延时不超过(当前已知的)可能最长的路径时延。第二种方法是在每次转发分组时使生存时间加1。数据链路层协议将丢弃那些生存时间值超过某个特定值的分组。第三种方法要求每个分组均包含生成时间,由路由器负责丢弃超过预定时间的旧分组。第三种方法要求路由器的时钟同步,而同步本身就是一项繁重的任务,除非同步信号来自子网络外部,如通过收听定期广播准确时间的无线电台。在实际应用中,我们不仅需要保证一个分组已经无效,而且要保证对该分组的所有确认均告失效,因此,我们现在引进T的概念,它表示实际最长的生命期的某个不太大的倍数。该倍数与所用的协议无关,只是对延长T有影响。如果在一个分组发出后等待了时间T,我们便可以确定有关该分组的一切现在已告失效,该分组及其确认将不会再次突然出现而使问题复杂化。为了解决系统崩溃后机器会丢失全部存储信息的问题。Tomlinson建议为每台主机增设一个计时(time-of-day)时钟。不同主机的时钟不需同步。假定每个时钟都采用二进制计数器形式,在统一的时间间隔内累加计数。而且,计数器内的位数必须等于或大于序列号内的位数。最后,也是更重要的,是假定时钟一直在运转,即使主机停机亦如此。基本思想是确保在同一时刻永远不会出现两个编号相同的TPDU。当一个连接建立后,时钟的低k位作为初始序号(也是k位)。这样便不同于数据链路层所介绍的协议,每个连接均以不同的序号开始对其TPDU进行编号,序号空间应该很大,以便当序号再次(循环了一周)出现时,具有相同序号的旧的TPDU早已传送完毕。时间和初始序号之间的线性关系如图所示。一旦建立连接的两个传输实体接受了初始序号,便可以使用任何滑动窗口协议来实现数据流量控制。建立可靠的连接:分组的编号建立可靠的连接:分组的编号 传输协议的要素(传输协议的要素(2)建立连接-网络可能丢失、重复包,特别是延迟重复包(delayed duplicates)的存在,导致传输层建立连接的复杂性;-解决延迟重复包的关键是丢弃过时的包;-两次握手方案A发出连接请求CR TPDU,B发回连接确认CC TPDU;失败的原因:网络层会丢失、存储和重复包。-三次握手方案(three-way handshake)A 发出序号为X的CR TPDU;B 发出序号为Y的CC TPDU并确认A的序号为X的CR TPDU;传输协议的要素传输协议的要素A 发出序号为X+1的第一个数据TPDU,并确认B的序号为Y的CR TPDU。Fig.6-11(DATA序号应为X+1)-三次握手方案解决了由于网络层会丢失、存储和重复包带来的问题。传输协议的要素传输协议的要素释放连接-两种连接释放方法非对称式:一方释放连接,整个连接断开,存在丢失数据的危险;传输协议的要素传输协议的要素对称式:由于两军问题两军问题(two-army problem)的存在,可以证明不存在安全的通过N次握手实现对称式连接释放的方法;-但是在实际的通信过程中,使用三次握手+定时器的方法释放连接在绝大多数情况下是成功的。Fig.6-14传输协议的要素传输协议的要素流控和缓存(Flow Control and Buffering)-缓存:由于网络层服务是不可靠的,传输层实体必须缓存所有连接发出的TPDU,而且为每个连接单独做缓存,以便用于错误情况下的重传。接收方的传输层实体既可以做也可以不做缓存。缓存区的设计有三种。Fig.6-15-流控:传输层利用可变滑动窗口协议来实现流控。所谓可变滑动窗口协议,是指发送方的发送窗口大小是由接收方根据自己的实际缓存情况给出的。为了避免控制TPDU丢失导致死锁,主机应该周期性的发送TPDU。Fig.6-16多路复用多路复用 在连接、虚电路及物理链路上,多路复用几组对话的方法在网络结构的许多层上都有一定的作用。在传输层中对多路复用技术的需要表现在很多方面。例如,子网内部使用虚电路的网络中,每个接通的连接在连接的整个阶段均需占据路由器中的-些表空间。如果缓冲区是被分配给每个路由器中的虚电路的,那么登录到远端机器上的用户离开终端去喝咖啡期间,他仍然在耗费着昂贵的资源。尽管这种分组交换的实现与使用分组交换的主要原因之一用户只根据传输的数据量而不是根据连接时间付费相抵触,但很多通信公司还是选择了按时间收费的方法,因为它非常类似于他们在过去的几十年中巳经习惯了的电路交换模型。在这种价格结构下,长时间保持虚电路的接通十分不利,于是使不同的传输连接复用到同一网络连接上的技术便很有吸引力。这种形式的多路复用称为向上多路复用(upward multiplexing),如图所示。图中,4个不同的传输连接都使用同-网络连接与远端主机相连。向上多路复用使多路复用在传输层中也可能有用,一种可能的解决方案是让传输层接通多个网络连接,以循环轮转的策略在这些连接上分配传输信息,如图所示。这种方法的操作称为向下多路复用(downward multiplexing)。向下多路复用 崩溃恢复崩溃恢复如果主机和路由器易崩溃,那么就存在着从崩溃恢复的问题。对于网络崩溃,如果传输实体完全在主机内部,那么从网络和路由器崩溃中恢复是直截了当的。如果网络层提供数据报服务,传输实体对丢失的TPDU留有副本,就会知道如何解决恢复问题。如果网络层提供的是面向连接的服务,那么处理虚电路突然中断的方法是建立一条新的虚电路,接着探查远端机的传输实体,看它已经收到了哪些TPDU以及哪些还未收到,后者可以重发。一个较复杂的问题是如何从主机崩溃中进行恢复,尤其是当服务器崩溃并很快重新启动后,客户端希望能够继续进行崩溃前的操作。为了能恢复崩溃前的状态,服务器可以以广播方式向所有其他的主机发送一个TPDU,说明自己刚才发生崩溃并要求其客户主机通知所有接通的连接所处的状态。每个客户主机可能处于两种状态之一:有一个未被确认的TPDU-S1状态,或没有未被确认的TPDU-S0状态。根据这种状态信息,客户主机必须决定是否要重发最近的TPDU。这种简单的方法存在的困难。例如,考虑下面这种情况,远端服务器的传输实体只发送一个确认,当确认发生后,又对应用进程执行-个写操作。向输出流写一个TPDU和发送一个确认是两个不同而又不可分的事件,二者不能同时进行。如果在确认发出后而在写操作执行前崩溃发生了,此时客户端将收到这个确认。当崩溃恢复声明到达时它处于状态S0。客户端将因此不再重发,因为它错以为那个TPDU已经到达服务器端。客户端的这种决定会导致丢失一个TPDU。崩溃恢复崩溃恢复崩溃恢复崩溃恢复 进一步完善协议也于事无补。即使客户端和服务器端在服务器准备进行写操作前已经交换了几个TPDU,以便客户端能确切知道将要发生什么,但客户端还是无法确定崩溃是在写操作前还是写操作之后发生。因此我们得出如下结论:基于对非同时事件所制订的基本规则,无法使主机崩溃和恢复做到对于高层透明。使用更一般的术语,这一结果可以重新叙述为:从第N层崩溃中恢复只能由第N+1层来完成,并且只有在第N+1层保留有足够的状态信息的情况下才能完成。正如上面提到的,如果连接的两端均保持了当前的状态信息,传输层可以从网络层的错误中进行恢复。崩溃恢复崩溃恢复确认(A)将数据写入输出进程(W)崩溃(C)传输层协议传输层协议 传输层协议是依据网络层提供的服务质量来分类的。经过多年的研究与讨论,ISO于1984年通过了OSI传输协议的标准。这就是ISO8072和ISO 8073。CCITT参与了这一标准的制订,并通过了相应的X.214和X.224建议书。欧洲计算机厂家协会ECMA,美国国家标准学会ANSI以及美国国家标准局NBS等也都积极参与了传输层协议标准的制订。NBS已于1988年底改名为国家标准与技术研究院NIST。网络服务网络服务 网络服务分类:A类网络服务B类网络服务C类网络服务 A类网络服务:可接受的残留差错率、可接受的可报告差错率;A型网络服务是一个完善的、理想的、可靠的网络服务。分组在网络中传送时不会丢失也不会失序(失序指分组到达的顺序与发送的顺序不一致),这样,传输层就不需要故障恢复的服务和重新排序的服务等等,因而传输层就非常简单。B类网络服务:可接受的残留差错率、不可接受的可报告差错率;需要传输实体进行差错恢复。C类网络服务:不可接受的残留差错率、不可接受的可报告差错率;C型网络服务的质量最差。对于这类网络,传输协议应能检测出网络的差错,同时要有差错恢复能力。对失序、重复以及错误投递的数据分组,也应能检测出并进行改正。某些局域网和一些具有移动结点的城域网以及具有衰落信道的分组无线电网都局于C型网络。传输协议类 为了能够在各种不同网络上进行不同类型的数据的传送,ISO定义了5类(class)传输协议,即第0类至第4类的传输协议。这5类传输协议都是面向连接的。也就是说,用户要进行通信,必须先建立传输连接。当然,这必然要用到网络层提供的服务,或者说,要建立网络连接。同理,在建立网络连接时,又需要建立各有关链路的连接。当数据传送结束后,则必须释放传输连接。针对网络服务质量的差异,传输层定义了针对网络服务质量的差异,传输层定义了5个传输协议类,提供不同的功能。网络层服务质个传输协议类,提供不同的功能。网络层服务质量降低时,对传输协议的要求就提高,以向传输层用户提供一种比较稳定的服务界面。量降低时,对传输协议的要求就提高,以向传输层用户提供一种比较稳定的服务界面。第0类传输协议是最简单的,它只具有一些最起码的功能。第0类传输协议和CCITT的T.70建议书相兼容。T.70是为智能用户电报(teletex)终端提供传输服务的建议书。第0类传输协议的功能就是建立一个简单的端到端的传输连接,而在数据传送阶段具有将长数据报文分段传送的功能(当有此需要时)。它没有差错恢复功能,也不将多条传输连接复用到一条网络连接上。第0类传输协议是面向A型网络服务的。第1类传输协议较简单,但增加了基本差错恢复功能。利用网络层的连接拆除或复位进行差错恢复。这里的基本差错是指出现网络连接断开或网络连接失败,或者收到了一个未被认可的传输连接的数据单元。当网络连接断开时,传输层就试图建立另一条网络连接。第1类传输协议面向B型网络服务。第3类传输协议面向B型网络服务,它包含了第1类相第2类传输协议的功能,既有差错恢复功能又有复用功能。第4类传输协议是最复杂的,它可以在网络的质量较差时保证高可靠性的数据传送。它面向C型网络服务。第4类传输协议具有差错检测、差错恢复以及复用等功能。Internet传输协议传输协议传输控制协议TCP(Transmission Control Protocol)-面向连接的、可靠的、端到端的、基于字节流的传输协议;-RFC 793,1122,1323,2018,2581等。用户数据协议UDP(User Data Protocol)-无连接的端到端传输协议;-RFC 768。TCP与UDP协议TCP与UDP协议的基本概念端口和套接字接口TCP协议UDP协议TCP与UDP协议的基本概念TCP和UDP是TCP/IP协议簇中的传输层,处于IP协议与应用层协议之间,分别提供面向连接和无连接的传输服务。TCP和UDP实现了端到端的通信,只驻留在通信子网外面的主机中。TCP弥补了IP协议不可靠的特性,向应用层提供可靠的面向连接的服务,实现了通信进程的连接与释放、滑动窗口协议及拥塞控制等功能。而UDP协议实现的是简单的无连接不可靠数据报传输服务,完成了应用进程的识别,不提供流控或拥塞管理机制。端口和套接字接口基本概念端口端口的基本分配方式BSD UNIX上的套接字接口原语通过伯克利套接字接口调用传输服务完成通信的例子 基本概念基本概念在传输层协议接收到数据后,如何区分数据到底是发送给哪一个应用程序的呢?在TCP和UDP协议中引入了端口(Port)和套接字(Socket)的概念。每个端口有一个16位的标志符,称为端口号,标识传输层协议和应用程序之间的数据接口,端口号是由不同的主机上的TCP和UDP协议独立分配的,所以不可能全局唯二。端口号和IP地址合起来,称为套接字,就可以在全网范围内唯一标识一个端口了。在TCP协议中,一条连接两端的套接字就可以唯一标识该连接了.端口端口是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。应用程序即进程通过系统调用与某端口建立连接(binding绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。端口的基本分配方式端口的基本分配方式全局分配,这是一种集中分配方式,由一个公认的中央机构ICANN(The Internet Corporation for Assigned Names and Numbers)根据用户需要进行统一分配,并将结果公布于众。本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来。一些已经分配的端口一些已经分配的端口PortProtocolUse21FTPFile transfer23TelnetRemote login25SMTPE-mail69TFTPTrivial File Transfer Protocol79FingerLookup info about a user80HTTPWorld Wide Web110POP-3Remote e-mail access119NNTPUSENET newsBSD UNIXBSD UNIX上的套接字接口原语上的套接字接口原语 原语含义SOCKET创建一个新的通信端点BIND往套接字中附加本地地址LISTEN宣布愿意接受连接;给出队列大小ACCEPT阻塞呼叫者,直到连接尝试到达CONNECT建立连接尝试SEND通过连接发送数据RECEIVE通过连接接收数据CLOSE释放连接通过伯克利套接字接口调用传输服务完成通信的例子通过伯克利套接字接口调用传输服务完成通信的例子 建立连接服务程序调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回一个文件描述符用于以后调用中使用该套接字;调用bind将一个地址赋予该套接字,使得远程客户程序能访问该服务程序;调用listen分配数据空间,以便存储多个用户的连接建立请求;调用accept将服务程序阻塞起来,等待接收客户程序发来的连接请求。当传输层实体接收到建立连接的TPDU时,新创建一个和原来的套接字相同属性的套接字并返回其文件描述符。服务程序创建一个子进程处理此次连接,然后继续等待发往原来套接字的连接请求。客户程序调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回一个文件描述符用于在以后的调用中使用该套接字;调用connect阻塞客户程序,传输层实体开始建立连接,当连接建立完成时,取消阻塞;数据传输 双方使用send和receive完成数据的全双工发送。释放连接 每一方使用close原语单独释放连接。TCP 协议TCP的功能概述TCP段格式TCP的连接、数据段传输和释放管理 TCP定时器管理 TCP的拥塞控制策略 TCPTCP的功能概述的功能概述多路复用数据流:TCP利用端口实现了同时接收多个应用数据,跟踪记录报文要转发到的应用程序,因此可以完成将多个应用的数据流的复用。实现可靠传输:TCP协议中采用滑动窗口协议来实现可靠传输。TCP头的校验和域可以实现对TCP段的校验,来验证TCP段的完整性。TCP协议中采用确认应答机制保证数据段的可靠传输。流量控制和拥塞控制:TCP使用窗口大小实现传输连接上的流量控制。目的主机通过设置窗口大小来通知发送主机能够发送的数据量大小。同时利用重发定时器实现部分拥塞控制功能。TCP段格式TCP段格式中的域(1)源端口和目的端口:各16位,分别表示源主机和目的主机的端口号。顺序号:32位,以字节为单位对数据段编号,表示该数据段的第一个字节的编号。确认号:32位,标识期望下次收到的第一个数据字节的序号 TCP头长域:4位,表示TCP头部(包含可选项域)的长度包含多少个32位字。TCP头长域后的6位是保留域,为将来定义新的用途保留。6位的标识位:置1时表示有效。URG:和紧急指针配合使用,发送紧急数据,使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中,由接收方决定如何处理。此时与后面的“紧急指针”相结合,该紧急指针被置为一个正的偏移量,表示紧急数据的长度,该偏移量必须与 TCP 首部中的序号字段相加,以便得出紧急数据的最后一个字节的序号。即使窗口大小为时也可以发送紧急数据。ACK:当ACK=1时,表示确认号有效。PSH:当PSH=1时,表明请求远地TCP将本报文段立即传送给其应用层,而不要等到整个缓冲区都填满了后再向上交付。RST:当RST=1时,表明出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重建传输连接。它还可用来拒绝一个非法的数据段或拒绝连接请求。SYN:用于建立连接;SYN=1,ACK=0,表示连接请求数据段,SYN=1,ACK1表示连接响应数据段。FIN:用于释放连接。当置位时表示发送方已没有数据发送了。TCP段格式中的域(2)窗口大小域:16位,目的机使用该域告诉源主机,在确认了的字节后还可以发送多少个字节。校验和:16位,校验和域是TCP协议提供的一种检错机制。在计算校验和时要包括TCP包的头和数据以及一个伪包头。紧急指针域:是一个可选的1 6位指针,指向段内的最后一个字节位置,这个域只在URG标志设置了时才有效。选项域:在TCP头的固定部分后可以使用选项来进行一些参数的协商。TCP段格式中的域(3)TCPTCP的连接、数据段传输和释放管理的连接、数据段传输和释放管理TCP连接建立 TCP数据段传输 TCP连接释放 TCPTCP连接建立连接建立TCP采用三次握手过程来完成建立连接 TCP A TCP B 1.CLOSED LISTEN 2.SYN-SENT -SYN-RECEIVED 3.ESTABLISHED-ESTABLISHED 5.ESTABLISHED-ESTABLISHEDTCPTCP数据段传输数据段传输TCP采用滑动窗口机制完成数据段的可靠传输。提高传输效率的策略提高传输效率的策略第一个策略是在发送方缓存应用程序的数据,等到形成一个比较大的段后再发出(Nagle算法)。第二个策略是采用接收方延迟确认的策略。第三个策略是使用Clark 算法解决傻窗口症状(silly window syndrome)。TCPTCP连接释放连接释放 TCPTCP定时器管理定时器管理重发定时器(retransmission timer)持续定时器(Persistence timer)保活定时器(keepalive timer)TCP连接的定时器 重发定时器重发定时器 每次传输一个数据段时,启动一个数据重发定时器。如果在定时器超时前被确认,则关闭该定时器,相反,超时重传数据段并重新开始计时。重发定时器也可以间接地用于管理网络拥塞,因为当超时出现时可能是由于网络拥塞造成的,这时发送方就减慢传输速率,从而减小自身对拥塞的影响。持续定时器持续定时器 持续定时器用于防止出现以下死锁情况:如果接收方主机发生了缓冲上溢情况,就会发送一个窗口为0的应答,通知发送方等待。发送主机收到后就会中止发送,等待接收方窗口为非0的确认,才会重新开始发送。如果接收方主机发出的修正窗口分组丢失了,发送方和接收方都会等待对方的进一步动作,这就出现了死锁的情况。当发送方收到窗口为0的应答时,等待并启动持续定时器,当持续定时器超时,发送方就向接收方发送一探测数据段。接收方应答中应包含窗口大小。如果窗口仍为0,则重新设置持续定时器。如果查询仍不能得到窗口大小,TCP协议会重新设置连接。保活定时器保活定时器 当一个连接长时间闲置时,保活定时器会超时而使一方去检测另一方是否仍然存在。如果未得到响应,就终止该连接。TCPTCP连接的定时器连接的定时器 用于每个TCP连接的定时器是用在断开连接操作中的TIME WAIT状态,设置为分组最长生命期的两倍,以确保当一个连接断开后,由它创建的分组完全消失。TCP的拥塞控制策略l基本概念l慢速启动算法l拥塞避免算法l拥塞窗口大小在慢速启动和拥塞避免算法作用下的变化情况变化基本概念l在端到端的连接中,可能导致网络拥塞的两个潜在因素是网络能力和接收能力。当网络快而接收方缓存小时,拥塞发生在接收方主机处;当接收方具有足够的缓存而网络比较慢时,拥塞发生在网络中的某个地方。lTCP协议实现中发送方维持了两个窗口:可变发送窗口和拥塞窗口,按两个窗口的最小值进行发送。可变发送窗口由接收方的缓存能力决定。拥塞窗口依照慢速启动(slow start)算法和拥塞避免(congestion avoidance)算法变化。慢速启动算法慢速启动算法/*慢速启动算法*/initialize:Congwin=1for(each segment ACKed)Congwin+until(loss event OR CongWin threshold)拥塞避免算法Until(loss event)every w segments ACKed:Congwin+threshold=Congwin/2 Congwin=1 perform slowstart-拥塞避免(congestion avoidance)算法若拥塞窗口大于阈值,从此时开始,拥塞窗口线形增长,一个RTT周期增加一个最大段长,直至发生丢包超时事件;当超时事件发生后,阈值设置为当前拥塞窗口大小的一半,拥塞窗口重新设置为一个最大段长;执行慢启动算法。拥塞窗口大小在慢速启动和拥塞避免算法作用下的变化情况拥塞窗口大小在慢速启动和拥塞避免算法作用下的变化情况 UDP 协议UDP提供无连接服务,不能保证数据完整地到达目的地,也没有流量和拥塞控制机制。UDP保留应用程序定义的报文边界,不把两个应用程序报文组合在一起,也不把单个应用报文划分成几个部分。UDP是小的、节约资源的传输层协议。它的操作执行比TCP快得多。UDPUDP数据段格式数据段格式 源端口目的端口消息长度校验和数据0 15 16 31nWhyisthereaUDP?nnoconnectionestablishment(whichcanadddelay)nsimple:noconnectionstateatsender,receivernsmallsegmentheadernnocongestioncontrol:UDPcanblastawayasfastasdesirednUDP特点nRFC768n“nofrills,”“barebones”Internettransportprotocoln“besteffort”service,UDPsegmentsmaybe:nlostndeliveredoutofordertoappUDP的特点-connectionless:no handshaking between UDP sender,receivereach UDP segment handled independently of others-often used for streaming multimedia appsloss tolerantrate sensitive-other UDP uses(why?):RIP,路由信息周期发送DNS,避免TCP连接建立延迟SNMP,当网络拥塞时,网管也要运行。网管信息带内(in-band)传输,用UDP比用可靠的、具有拥塞控制的TCP效果要好。-reliable transfer over UDP:add reliability at application layerapplication-specific error recover!UDP的特点的特点问题A、B双方已经建立了TCP连接,采用SlowStart算法进行流控,初始的阈值为32K字节(1K=1024),最大发送段长MSS为1K字节。发送方向为A-B,B没有数据要发送,B每收到一个数据报文都会发出一个应答报文。在整个过程中上层一直有数据要发送,并且都以MSS大小的报文发送。A的发送序列号从0开始。1.在传输过程中,A收到1个ACK为10240的报文,收到这个应答报文后,A处拥塞窗口的大小是多少?2.当收到ACK=32768的报文后,A处拥塞窗口的大小是多少?3.当阈值为32K字节、拥塞窗口为40K字节时,发送方发生了超时,求超时发生后拥塞窗口的大小和阈值的大小。1收到的为第10个报文的应答,变化后拥塞窗口的大小为112收到的为第32个报文的应答,这时拥塞窗口已经超过阈值,应当使用线性增长,变化后的拥塞窗口大小为32K字节。3拥塞窗口1MSS=1KB阈值40/2=20KB