您好,欢迎访问三七文档
第八章运输层运输层概述运输层是OSI参考模型的七层中比较特殊的一层,同时也是整个网络体系结构中十分关键的一层。它是通信部分的最高层,又是用户功能中的最低层运输层功能根据下面通信子网的特性最佳的利用网络资源,并以可靠和经济的方式在两端主机的进程之间,建立一条运输连接,以透明地传送报文,也就是说,运输层向上一层进行通信的两个进程之间提供一个可靠的端到端的服务,使它们看不见运输层以下的数据通信细节。在通信子网内的各个交换节点以及连接各通信子网的路由器都没有运输层。运输层只能存在于通信子网外面的主机中。运输层以上的各层就不再关心信息传输问题了。运输层功能为什么需要运输层1、在一个网络连接上复用多对进程的通信。2、解决多互连的通信子网的通信协议的差异和提供的服务功能的不同。3、解决网络层及下两层自身不能解决的传输错误。运输层与上下层之间的关系运输层与上下层之间的关系运输层中向应用层提供传输服务的是运输实体。使用运输服务的是运输服务用户(也就是应用层中的各种应用进程,或应用层实体)。运输层中的两个对等运输实体之间的通信遵循着运输协议。运输协议保证了运输层能够向应用层提供运输服务。运输层提供的运输服务也使用了下面网络层向上提供的网络服务。TSAP和NSAP分别是运输层和网络层的服务访问点。TCP/IP体系中的运输层协议TCP/IP的运输层有两个不同的协议UDP(UserDatagramProtocol)——用户数据报协议:提供面向无连接的服务TCP(TransmissionControlProtocol)——传输控制协议:提供面向连接的服务UDP和TCP都使用IP协议,也就是说,这两个协议在发送数据时,其协议数据单元PDU都作为下面IP数据报中的数据。在接收数据时,将IP首部去掉后,根据上层使用的什么运输协议,把数据部分交给上层的UDP或TCP。TCP/IP体系中的运输层协议面向连接和面向无连接面向连接:面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。面向无连接:无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性。端口的概念按照OSI七层协议的描述,传输层与网络层最大的区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅是主机地址了,还包括可以描述进程的某种标识。为此TCP/IP协议提出了协议端口的概念,用于标识通信的进程。UDP和TCP都使用端口与上层的应用进程进行通信。端口是什么?端口是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。应用程序即进程通过系统调用与某端口建立连接(binding绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问。端口号每个端口都拥有一个叫端口号的整数描述符,以区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。端口从1开始分配,超出255的部分通常被本地主机作为私有用途。1-255之间的号码被用于远程应用程序所请求的进程和网络服务。端口号的分配有两种基本分配方式:第一种叫全局分配这是一种集中分配方式,由一个公认的中央机构根据用户需要尽行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来(绑定)。TCP/IP端口号的分配综合了两种方式。TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口叫周知口(well-knownport),即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。Linux的/etc/services文件分析连接、半相关、全相关和插口连接:两个进程间的通信链路称为连接。连接在内部表现为一些缓冲区和一组协议机制,在外部表现出比无连接高的可靠性。半相关:网络中用一个三元组可以在全局中唯一标是一个进程:(协议,本机地址,本地端口号)这样一个三元组,叫做一个半相关,他指定连接的每半部分。全相关:一个完整的网间进程通信需要有两个进程组成,并且只能使用同一种高层协议。也就是说TCP和UDP没法通信。因此一个完整的网间进程通信需要一个五元组来标识:(协议,本机地址,本地端口号,远地地址,远地端口号),这样一个五元组叫做一个全相关。示例*执行端口扫描程序,检测一台机器开放的端口套接字和API套接字又叫插口:包括IP地址和端口号如(131.6.23.13,500)和(130.42.85.15,25)应用编程接口API:运输层与应用层之间的接口的通用名称。现在流行的API有两类:Berkeleysocket——起源于Berkeley的加州大学TLI(运输层接口)——由AT&T公司开发用户数据报协议(UDP)UDP采用无连接的方式提供高层协议间的事务处理服务,允许它们之间互相发送数据。因为UDP是一种无连接的数据报投递服务,它就不保证可靠投递。它跟远程的UDP实体不建立端到端的连接,而只是将数据报送上网络,或者从网上接收数据报。UDP根据端口号对若干个应用程序进行多路复用,并能利用检验和检查数据的完整性。UDPUDP保留应用程序定义的报文边界,它从不把两个应用程序报文组合在一起,也不把单个应用报文划分成几个部分。也就是说,当应用程序把一块数据交给UDP发送时,这块数据将作为独立的单元到达对方的应用程序。例如,如果应用程序把5个报文交给本地UDP端口发送,那么接收方的应用程序就需从接收方的UDP端口读5次,而且接收方收到的每个报文的大小和发出的大小完全一样。UDP不具备诸如接收保证和避免重复等有序投递功能,UDP数据报格式UDP数据报格式源端口目的端口UDP数据报的长度校验和:要增加伪首部常见的使用UDP的服务DNS:DNS用的是53端口。域名解析服务。snmp:简单网络管理协议,使用161端口,是用来管理网络设备的。聊天软件Oicq:Oicq的程序既接受服务,又提供服务,这样两个聊天的人才是平等的。oicq用的是无连接的协议,其服务器使用8000端口,侦听是否有信息到来;客户端使用4000端口,向外发送信息。如果上述两个端口正在使用(有很多人同时和几个好友聊天),就顺序往上加。TFTP:端口号69RPC:端口号111传输控制协议(TCP)TCP协议是TCP/IP协议簇中的另一个运输层协议,是面向连接的,因而可提供可靠的、按序传送数据的服务。TCP提供的连接是双向的,即全双工的。TCP的数据传送单位称为“报文段”,记为TPDU。两个应用程序通过TCP连接来交换8bit字节构成的字节流,TCP不在字节流中插入记录标志符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,在传50字节,连接另一方将无法了解发放每次发送了多少自己。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外,TCP对字节流的内容不作任何解释,对字节流的解释由TCP连接双方的应用层解释。TCP的编号与确认机制TCP不是按传送的报文段来编号。TCP将所要传送的整个报文(这可能包括许多个报文段)看成是一个一个字节组成的数据流,然后对每一个字节编号。在连接建立时,双方要商定初始序号。TCP就将每一次所传送的报文段的第一个数据字节的序号放在TCP首部的序号字段中。TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但返回的确认序号是已收到的数据的最高序号加1。也就是说,确认序号表示期望下次收到的第一个数据字节的序号。由于TCP能提供全双工通信,因此通信中的每一方都不必专门发送确认报文段,而可以在传送数据时顺便把确认信息捎带传送,这样作可以提高传输效率,因为确认报文没有传输数据。应适当推迟发回确认报文,并尽量使用捎带确认的方法。Nagle算法若数据是逐个字节地到达发送端,那么发送端不是逐个字节的发送数据,而是先将第一个字符发送出去,将后面到达的字符都缓存起来。当收到对第一个字符的确认后,再将缓冲区中的所有字符装成一个报文段发送出去,同时继续对到达的字符进行缓存。只有在收到确认后才继续发送下一个报文段。当字符到达较快而网络速度较慢时,用这样的方法可明显地减少所用的网络带宽。算法还规定,当到达的字符已达窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。在实时性要求较高的情况下不宜采用Nagle算法:例如在Internet上使用X-window,要将鼠标移动的信息传到远地主机。若采用Nagle算法会使用户感到无法忍受。这时最好关闭这个算法。糊涂窗口综合症描述:接收端的缓冲区已满,而交互式的应用进程一次只从缓冲区中读取一个字符(这样就在缓冲区产生1个字节的空位子),然后向发送端发送确认,并通知窗口大小为1个字符(但发送的数据报是40字节长),接着发送端又发来1个字符(但发来的数据报是41字节长)。接收端发回确认,仍然通知窗口为1个字节。这样下去就使网络的效率很低。解决办法:让接收端等待一段时间,使得或者缓冲区已能有足够的空间容纳一个最长报文段,或者缓冲区已有一半的空间处于空的状态。只要出现这两种中的一种,就发出确认报文,并向发送端通知当前的窗口大小。此外,发送端也不要发送太小的报文段,而是将数据积累成足够大的报文段,或达到接收端缓冲区的空间的一半大小。超时与重发若发送方在规定的设置时间内没有收到确认,就要将未被确认的报文段重新发送。接收方若收到有差错的报文段,则丢弃次报文段(不发送否认信息)。若收到重复的报文段,也要将其丢弃,但要发回(或捎带发送)确认信息,也就是对该重复报文的确认。超时定时器的重发时间计算采用自适应算法——该算法记录每一个报文段发出的时间,以及收到相应的确认报文段的时间。这两个时间之差就是报文段的往返时延。将各个报文段的往返时延样本加权平均,就得出报文段的平均往返时延T。每测量到一个新的往返时延样本,就按下式重新计算一次平均往返时延:平均往返时延T=α(旧的往返时延样本T)+(1-α)(新的往返时延样本)Karn算法在计算平均往返时延时,只要报文段重发了,就不采用器往返时延样本。这样得出的平均往返时延和重发时间就会比较准确。Karn算法的修正:新的重发时间=r(旧的重发时间)系数r的典型值是2TCP的流量控制TCP采用可变发送窗口的方式进行流量控制。窗口的大小是以字节为单位的。在TCP报文段首部的窗口字段写入的数据就是当前设定的接收窗口数值。发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口(可增大或减小),然后告诉对方,使对方的发送和自己的接收窗口一致。这是一种由接收端控制发送端的做法滑动窗口表示发送端要发送的数据共9个报文段,每个报文段100字节长,而接收端许诺的发送窗口为500字节。发送窗口当前的位置表示有两个报文段(其字节序号为1-200)已经发送过并已收到了接收端的确认。发送端在当前的情况下,可连续发送5个报文段而不必收到确认。假定发送端已发送了两个报文段但未收到确认,那么它还能发送3个报文段。发送端在收到接收端发来的确认后,就可将发送窗口向前移动了。滑动窗口使用TCP滑动窗口协议时,接收方不必确认每一个收到的分组。在TCP中,ACK是积累的——它们表示接收方已经
本文标题:运输层概述
链接地址:https://www.777doc.com/doc-238982 .html