《第八章 运输层要点课件.ppt》由会员分享,可在线阅读,更多相关《第八章 运输层要点课件.ppt(38页珍藏版)》请在三一办公上搜索。
1、8.1运输协议概述,一、运输层在网络体系结构中的地位1、从面向通信和面向信息处理来划分,则运输层属于面向通信的低层中的最高层。 2、从网络功能和用户功能来划分,则运输层又属于用户功能的高层中的最低层。 3、通信子网中无运输层,它只存在于通信子网以外的主机中。,应用层,运输层,网络层,物理层,数据链路层,面向信息处理,面向通信,用户功能,网络功能,8.1运输协议概述,二、运输层的功能1、复用与分用:两个主机进行通信实际上是两个主机中的应用进程互相通信。IP协议虽然能把分组送到目的主机,但这个分组还停留在主机的网络层而没有交付给主机中的应用进程。因IP地址是标志在因特网中的一个主机,而不是标志主机
2、中的应用进程。由于通信的两个端点是源主机和目的主机中的应用进程,因此应用进程之间的通信又称为端到端的通信。,8.1运输协议概述,在一个主机中经常有多个应用进程同时分别和另一个主机中的多个应用进程通信。如,某用户在使用浏览器查找某网站的信息时,其主机的应用层运行浏览器客户进程。如果在浏览网页的同进,还要用电子邮件给网站发送反馈意见,则主机的应用层就还要运行电子邮件的客户进程。运输层一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。当这些报文到达目的主机后,目的主机的运输层就使用其分用功能,通过不同的端口将报文分别交付到相应的进程。下图
3、示出了这个过程。,( ),( ),8.1运输协议概述,AP1,AP2,LAN1,AP3,AP4,WAN,LAN2,R1,R2,IP协议的作用范围,运输层协议TCP和UDP的作用范围,主机A,主机B,AP1,AP2,( ),( ),AP3,AP4,运输层提供应用进程间的逻辑通信,端口,应用进程,端口,应用进程,运输层为相互通信的应用进程提供了逻辑通信,8.1运输协议概述,运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信,如下图所示:,因特网,IP协议的作用范围(提供主机之间的逻辑通信),TCP和UDP协议的作用范围(提供进程之间的逻辑通信),应用进程,应用进程,运输层协
4、议和网络层协议的主要区别,8.1运输协议概述,2、运输层对收到的报文进行差错检测。在网络层,IP数据报首部中的检验和字段只检验首部是否出现差错而不检查数据部分。3、根据应用的不同,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP,而网络层无法同时实现这两种协议。三、运输层与其上下层之间的关系,8.1运输协议概述,运输实体,运输实体,运输协议,应用层,网络层(或网际层),层接口运输层层接口,网络层服务访问点NSAP,运输层服务访问点TSAP,主机A运输服务用户(应用层实体),主机A运输服务用户(应用层实体),运输层中向应用层提供运输服务的是运输实体。使用运输服务的是运输服务用户
5、(即各应用进程或应用层实体)。运输层中两个对等实体之间的通信遵循运输协议。运输协议保证了运输层能够向应用层提供运输服务。运输服务也使用了下面网络层向上提供的网络服务,8.1运输协议概述,再次小结:物理层使链路上能透明地传送比特流。数据链路层使得各条链路能传送无差错的帧(按序、无丢失、不重复)。网络层又提供路由选择、流量控制和网络互连的功能,使主机A发送的分组能按照合理的路由到达主机B。运输层提供端到端的可靠通信服务。所谓端到端即从进程到进程。运输层向高层用户屏蔽了下面通信子网的细节,使高层用户看不见实现通信功能的物理链路是什么,看不见数据链路采用的是什么规程,也看不见下面到底有几个子网以及这些
6、子网是怎样互连起来的,运输层使高层用户看见的就是好像在两个运输层实体之间有一条端到端的可靠的通信通路。,8.2 TCP/IP体系中的运输层,一、TCP/IP体系运输层中的两个协议1、用户数据报协议UDP(User Datagram Protocol)UDP提供无连接、不可靠的服务。在传送数据之前,不需要先建立连接。远地主机的运输层在收到UDP数据报后,不需要给出任何应答。在某些情况下,这是一种最有效的工作方式。TCPIP体系中的应用服务,如TFTP和NFS就使用UDP这种运输方式。2、传输控制协议TCP(Transmission Control Protocol)提供面向连接的服务。不提供广播
7、或组播服务。由于TCP要提供可靠的运输服务,因此TCP就不可避免地增加了许多的开销,如应答、流量控制、定时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。,8.2 TCP/IP体系中的运输层,这两个协议都使用IP协议。也就是说,在发送数据时,这两个协议的协议数据单元PDU,都作为下面IP数据报的数据。在接收数据时,IP数据报将首部去掉后,根据上层使用的是什么运输协议,把数据部分交给上面的UDP或TCP。,8.2 TCP/IP体系中的运输层,二、端口UDP和TCP都使用了端口(port)进行寻址。端口是一个很重要的概念,因为在通信时,只有找到了端口,才能最后找到我
8、们所要找的目的进程。1、概念:即运输层服务访问点TSAP,是UDP和TCP用来同上层的应用进程进行通信的接口,应用层的各种进程是通过相应的商品与运输实体进行交互的。2。功能:让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,让运输层知道应当将其报文段中的数据向上通过端口交付给应用层的进程。因此,端口是用来标志应用层的进程的。如下图所示:,8.2 TCP/IP体系中的运输层,应用层,运输层,网络层,由于使用了复用和分用技术,在运输层与网络层的交互中已看不见各种应用进程,而只有TCP报文段或UDP用户数据报。,8.2 TCP/IP体系中的运输层,3。端口的表示:用一个16位的端口号表示。
9、但端口号只具有本地意义,它只标志本计算机中应用层中的各进程。Internet中不同计算机的相同端口号是没有联系的。4、端口的分类:熟知端口:TCP/IP体系确定并公布,所有用户进程都熟知的端口。数值为0-1023。当一种新的应用程序出现时,必须为它指派一个熟知端口,否则其它的应用进程就无法和它进行交互。在应用层中的各种不同的服务器进程不断地检测分配给它们的熟知端口,以便发现是否有某个客户进程要和它通信。常见的熟知端口如下:一般端口:用来随时分配给请求通信的客户进程。,8.2 TCP/IP体系中的运输层,5、TCP使用“连接”(而不是“端口”)作为最基本的抽象。一个连接由它的两个端点来标识。这样
10、的端点就叫做插口(socket),或套按字。插口的概念并不复杂,但非常重要。插口包括IP地址(32bit)和端口号码(16 bit),共48 bit。在整个Internet中,在运输层通信的一对插口必须是唯一的。如一条连接的一对插口可以为:(131.6.3.13,500)和(130.42.85.15,25)其中,25表示SMTP。,8.3用户数据报协议UDP,一、概述:用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是端口的功能和差错检测的功能。虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点,如:1、发送数据之前不需要建立连接(发送结束无连接需
11、释放),减少了开销和发送数据之前的时延。2、UDP不使用拥塞控制,也不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态表。3、UDP用户数据报只有8个字节的首部开销,比TCP的20个字节的首部要短。4、由于UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据。,8.3用户数据报协议UDP,二、UDP与应用层之间端口的实现机制:报文队列以应用层使用简单文件传送协议TFTP为例讨论。1、TFTP使用UDP传送报文,但TFTP服务器和TFTP客户所使用的端口是不一样的。2、
12、TFTP服务器进程是一直在运行着,等待TFTP客户进程的服务请求。因此,服务器的端口必须使用熟知端口号。TFTP服务器的熟知端口号是69。在TFTP客户端,当进程启动时,就向操作系统请求一个临时的一般端口号,如,5100。然后操作系统就为该进程创建两个队列:入队列和出队列。只要进程在执行,这两个队列就一直存在。当进程终止时,入队列和出队列及临时端口号就一起被撤消。如下图所示:,8.3用户数据报协议UDP,UDP端口5100,TFTP客户,出队列,入队列,应用层,运输层,UDP端口69,TFTP服务器,出队列,入队列,UDP用户数据报,3、客户进程将报文发送到出队列中。UDP按队列中报文的先后顺
13、序进行发送。在传送到IP层之前要给报文加上UDP首部,其中的目的端口号是TFTP的熟知端口69。然后UDP数据报就传送给IP层。,8.3用户数据报协议UDP,4、客户端收到来自IP层的报文时,UDP先检查报文中的目的端口号是否正确。若不正确,UDP就丢弃该报文,并请ICMP发送“端口不可达”差错报文给服务器端。若正确,UDP就将收到的报文放在入队列的队尾,客户进程按报文到达的先后顺序将其一一取走。5、服务器在收到报文时,UDP先检查到达的用户数据报的目的端口号是否为69。若是,将此用户数据报入进入队列队尾。若不是,丢弃此报文。6、服务要回答客户的请求时,将要发送的报文传送到出队列,并使用请求服
14、务的报文的源端口号作为回答报文的目的端口号。在添加上UDP首部后,将其传送给IP层。,8.3用户数据报协议UDP,三、UDP用户数据报的首部格式用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由4个字段组成,每个字段都是两个字节。各字段意义如下:源端口字段,源端口号码目的端口字段,目的端口号码长度字段,UDP数据报的长度检验和字段,防止UDP数据报在传输中出错,UDP数据报首部中检验和的计算方法有些特殊。在计算检验和时在UDP数据报之前要增加12个字节的伪首部。“伪首部”是因为这种伪首部并不是UDP数据报真正的首部。只是在计算检验和时,临时和UDP数据报连接在一起
15、,得到一个新的UDP数据报。检验和就是按照这个新的UDP数据报来计算的。伪首部既不向下传送,也不向上递交。伪首部的第三个字段是全零,第四个字段是IP首部中的协议字段的值。对于UDP,此协议字段值为17。第五个字段是UDP数据报的长度。,8.4传输控制协议TCP,一、概述1、TCP是TCPIP体系中的运输层协议,是面向连接的,因而可提供可靠的、按序传送数据的服务。TCP提供的连接是双向的,即全双工的。2、TCP发送报文段的大致过程(1)TCP的通信是全双工的,因此TCP连接的任何一方(不论是客户端还是服务器)都能够发送和接收数据。(2)发送端的应用进程按照自己产生数据的规律,不断地将数据块陆续写
16、入到TCP的发送缓存中。(3)TCP从发送缓存中取出一定数量的数据,将其组成TCP报文段逐个传送给IP层,然后发送出去。如下图:,8.4传输控制协议TCP,发送端,TCP,发送缓存,向发送缓存写入数据块,端口,应用进程,接收端,TCP,接收缓存,从接收缓存读取数据块,端口,应用进程,报文段,报文段,报文段,(4)接收端从IP层收到TCP报文段后,先将其暂存在接收缓存中,然后让接收端应用进程从接收缓存中将数据块逐个读取。,8.4传输控制协议TCP,二、TCP报文段的首部一个TCP报文共分为首部和数据两个部分(见下页图)。TCP的全部功能都体现在它首部中各字段的作用。首部的前20个字节是固定的,后
17、面有4N字节是根据需要而增加的选项(N为整数)。因此TCP首部的最小长度是20字节。首部固定部分各字段意义如下:源端口和目的端口各占2个字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口都能实现。序号占4字节。TCP是面向数据流的。TCP传送的报文可看成为连续的数据流。TCP把在一个TCP连接中传送的数据流中,8.4传输控制协议TCP,8.4传输控制协议TCP,的每一个字节都编上一个序号。整个数据的起始序号在连接建立时设置。首部中的序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。如,一报文段的序号字段的值是301,而携带的数据共有100字节。这就表明:本报文段
18、的数据的最后一个字节的序号应当是400。下一个报文段的数据序号应当从401开始,因而下一个报文段的序号字段值应为401。确认号占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号,也就是期望收到的下一个报文段首部的序号字段的值。如,A正确收到了B发送过来的一个报文段,其序号字段的值是501,而数据长度是200字节,表明A已正确收到了B发送的序号在501到700之间的数据。因此,A期望收到B的下一个报文段的首部中的序号字段应为701,于是A在发送给B的响应报文段中将首部中的确认号置为701。,8.4传输控制协议TCP,数据偏移占4位,指出TCP报文段的数据起始片距离TCP报文段的起始处
19、有多远。实际上就是TCP报文段首部的长度。注意:其单位不是字节而是32位字(即以4字节长的字为计算单位)。4位能够表示的最大十进制数字是15,故数据偏移的最大值是60字节,这也是TCP首部的最大长度。保留占6位,保留为今后使用,目前置为0。下面6个比特是说明本报文段性质的控制比特,意义如下:紧急比特URG(URGent)当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送。如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出,8.4传输控制协议TCP,中
20、断命令(Control+C)。如果不使用紧急数据,则这两个字符将存储在接收TCP缓存的末尾。只有所有的数据被处理完毕后才被交付到应用进程。这样就浪费了许多时间。当使用紧急比特并将URG置1时,发送应用进程就告诉发送TCP这两个字符是紧急数据。于是发送TCP就将这两个字符插入到报文段的数据的最前面,其余的数据都是普通数据。这时要与首部中第5个32位字中的一半“紧急指针”字段配合使用。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接收方知道紧急数据共有多少个字节。紧急数据到达接收端后,当所有紧急数据都被处理完时,TCP就告诉应用程序恢复到正常操作。即使窗口为0时也可发送紧急数据。确认比
21、特ACK只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。,8.4传输控制协议TCP,推送比特PSH(PuSH)当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。此时,TCP就可以使用推送操作。这时,发送端TCP将推送比特PSH置1,并立即创建一个报文段发送出去。接收TCP收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。复位比特RST(ReSeT) 当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其它原因),必须释放连接,然后再重新建立运输连接。复位比特还用来拒绝一个非法的报
22、文段或拒绝打开一个连接。同步比特SYN在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立,8.4传输控制协议TCP,连接,则应在响应的报文段中使SYN=1和ACK=1。因此,同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。终止比特FIN用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。窗口占2字节。用来控制对方发送的数据量,单位为字节。通过这个报文段告诉对方,“在没有收到我的确认时,你能发送的数据的字节数至多是此窗口的大小。”检验和占2字节。检验的范围包括首部和数据这两部分。其方法和UDP一样。
23、选项长度可变。TCP只规定了一种选项,即最大报文段长度MSS。MSS告诉对方TCP:”我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。“,8.4传输控制协议TCP,三、编号与确认 1、TCP的编号:TCP不是按传送的报文段来编号。TCP将所要传送的整个报文(这可能包括许多个报文段)看成是一个个字节组成的数据流,然后对每一个字节编一个序号。在连接建立时,双方要商定初始序号。TCP就将每一次所传送的报文段中的第一个数据字节的序号,放在TCP首部的序号字段中。2、TCP的确认:TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但返回的确认序号是已收到的数据
24、的最高序号加1。也就是说,确认序号表示期望下次收到的第一个数据字节的序号。,8.4传输控制协议TCP,由于TCP能提供全双工通信,因此通信中的每一方都不必专门发送确认报文段,而可以在传送数据时顺便把确认信息捎带传送。若发送方在规定的设置时间内没有收到确认,就要将未被确认的报文段重新发送。接收方若收到有差错的报文段,则丢弃此报文段而并不发送否认后息。着收到重复的报文段,也要将其丢弃,但要发回(或捎带发回)确认信息。这与数据链路层的情况相似。,8.4传输控制协议TCP,四、TCP的流量控制1、控制方式:采用可变发送窗口的方式进行流量控制。2、窗口大小的单位:字节3、控制方法:发送窗口在连接建立时由
25、双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口(可增大或减小),然后告诉对方,使对方的发送窗口和自己的接收窗口一致。这种由接收端控制发送端的做法,在计算机网络中经常使用。4、流量控制例:设主机A向主机B发送数据,双方商定的窗口值是400,也就是发送端不需要收到接收端的确认就可以发送出400字节的数据。再设每一个报文段发送100字节的数据(用从A到B的箭头表示),并且序号的初始值为1(见图中第一个箭头上的SEQ1),则可能通信过程如下:,8.4传输控制协议TCP,主机A,主机B,A还能发送300字节,A还能发送200字节,允许A再发送300字节,A还能发送2
26、00字节,A还能发送100字节,A超时重发,但不能再发送,允许A再发送200字节,A还能发送100字节,不允许A再发送,SEQ=1,SEQ=101,SEQ=201,ACK=201,Win=300,SEQ=301,SEQ=401,SEQ=201,ACK=1,win200,SEQ=501,ACK=601,win=0,丢失,B进行了三次流控,第一次将窗口减为300字节,第2次减为200字节,后减到0,这种暂停状态将持续到B重新发送一个新的窗口值为止。,8.4传输控制协议TCP,五、TCP的运输连接管理1、连接建立过程中要解决的问题:TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP的运输
27、连接的建立释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。在连接建立过程中要解决以下三个问题:(1)要使每一方都能够确知对方的存在;(2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。(3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。,8.4传输控制协议TCP,2、TCP连接的建立过程TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。(1)设主机B中运行一个服务器进程,它先发
28、出一个被动打开命令,告诉它的TCP要准备接受客户进程的连接。然后服务器进行就处于“听”的状态,不断检测是否有客户进程要发起连接请求。如有,即作出响应。(2)设客户进程运行在主机A中,它先向其TCP发出主动打开命令,表明要向某个IP地址的某个端口建立运输连接。(3)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置为1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x。如下图所示:,8.4传输控制协议TCP,(3)主机B的TCP收到连接请求报文段后,如同意,则发回确认。在确认报文段中应将SYN置为1,确认号应为x+1,同时也为自己选择一个序号y。(4
29、)主机A的TCP收到此报文段后,还要向B给出确认,其确认号为y+1。(5)运行客户进程的主机A的TCP通知上层应用进程,连接已经建立。(6)当运行服务器进程的主机B的TCP收到主机A的确认后,也通知其上层应用进程,连接已经建立。,主机A,主机B,主动打开被动打开,SYN,SEQ=X,SYN,SEQ=Y,ACK=X+1,ACK=Y+1,确认,确认,8.4传输控制协议TCP,连接建立采用的这种过程叫做三次握手。问题:为什么要发送这第三个报文段呢?考虑这样一种情况。主机A发出连接请求,但因连接请求报文丢失而未收到确认。主机A于是再重传一次。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。主
30、机A共发送了两个连接请求报文段,其中的第二个到达了主机B。现假定出现另一种情况,即主机A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点滞留的时间太长,以致延误到在这次的连接释放以后才传送到主机B。本来这是一个已经失效的报文段。但主机B收到此失效的连接请求报文段后,就误认为是主机A又发出一次新的连接请求。于是就向主机A发出确认报文段,同意建立连接。主机A由于并没有要求建立连接,因此不会理睬主机B的确认,也不会向主机B发送数据。但主机B却以为运输连接就这样建立了,并一直等待主机A发来数据。主机B的许多资源就这样白白浪费了。,8.4传输控制协议TCP,采用三次握手的办法可以防止上述现象的发
31、生。例如在刚才的请况下,主机A不会向主机B的确认发出确认。主机B收不到确认,连接就建立不起来。3、TCP的连接释放过程:(1)主机A的应用进程先向其TCP发出连接释放请求,并且不再发送数据。(2)TCP通知双方要释放从A到B这个方向的连接,将发往主机B的TCP报文段首部的终止比特FIN置1,其序号x等于前面已传送过的最后一个字节的序号加1。,主机A,主机B,FIN,SEQ=X,ACK=X+1,ACK=Y+1,应用进程释放连接(A不再发送报文),通知主机应用进程,应用进程释放连接(B不再发送报文),FIN,SEQ=y,ACK=x+1,8.4传输控制协议TCP,(3)主机B的TCP收到释放连接通知
32、后即发出确认,其序号为x+1,同时通知高层应用进程。这样,从A到B的连接就释放了,连接处于半关闭状态,相当于主机A向主机B说:“我已经没有数据发送了。但你如果还发送数据,我仍接收。”(4)主机B不再接收主机A发来的数据。但若主机B还有一些数据要发往主机A,则可以继续发送。主机A只要正确收到数据,仍应向主机B发送确认。(5)在主机B向主机A的数据发送结束后,其应用进程就通知TCP释放连接。主机B发出的连接释放报文段必须将终止比特FIN置1,并使其序号y等于前面已传送过的数据的最后一个字节的序号加1,还必须重复上次已发送过的ACK=x+1。主机A必须对此发出确认,给出ACK=y+1。这样才把从B到A的反方向连接释放掉。主机A的TCP再向其应用进程报告,整个连接已经全部释放。,