第四章运输层本章知识点运输层的功能和任务端口机制UDP协议特点、UDP报文结构TCP协议特点、TCP报文结构、TCP连接管理、可靠性传输、流量控制、差错控制概述运输层为应用进程提供逻辑通道。Internet局域网局域网路由器路由器应用层运输层AP1网络层数据链路层物理层应用层运输层AP2网络层数据链路层物理层逻辑通道概述网络层、运输层和应用层关系。Internet局域网局域网路由器路由器应用层运输层网络层数据链路层物理层datadataH4dataH4H3网络层数据链路层物理层网络层数据链路层物理层dataH4H3应用层运输层网络层数据链路层物理层dataH4H3datadataH4主机主机概述网络层不能直接为应用层服务,因为分组交换技术可能会带来数据的丢失、乱序、重复等问题。另外如何确定应用程序的地址也是网络层所不能解决的。运输层的功能运输层要为应用层提供一条逻辑通道,好像在两个应用进程间连接了一个管道,数据从管道的一端进去,从另外一端出来。运输层的主要功能应用进程寻址提供数据的可靠传递流量控制拥塞控制TCP/IP的运输层在TCP/IP协议体系中,运输层有两个协议:传输控制协议(TransferControlProtocol,TCP)用户数据报协议(UserDatagramProtocol,UDP)TCP/IP的运输层UDP只提供应用进程寻址和简单的差错检测功能,它不能向应用层保证数据传输的可靠性。TCP除了应用进程寻址的功能外,还能为应用层提供可靠的数据传输服务,并具有流量控制和拥塞控制的能力。端口机制——应用进程寻址运输层是为应用层服务的,多个应用层协议可能会使用同一个运输层协议。运输层如何将收到的数据交给正确的应用层进程?TCP/IP提供了端口机制来解决这个问题。端口机制端口是一种软件结构,是运输层协议和应用层协议交互时的接口,每个端口有一个唯一的端口号,并且有相应的输入和输出缓存。一个应用进程通过系统调用可以绑定到运输层协议(UDP或TCP)的一个端口上。端口和应用进程是一一对应的,通过端口号能确定主机内的一个应用进程。端口机制AP1AP2运输层协议Data1Data2AP3AP4运输层协议Data1Data2Data2HData1Hport1port2port3port4发送数据时,传输层首部中包含源端口号(发送方进程端口号)和目的端口号(接收方进程端口号)。端口机制接收方的运输层根据目的端口号将数据交给正确的应用进程。对于知名的服务,如Web服务、FTP服务等,使用的运输层协议和端口号都是固定的,这些端口称为熟知端口,其数值一般都小于1024。而对于客户进程,操作系统通常会随机给它分配一个大于1024的端口号。端口机制TCP/IP协议体系中,每个端口都有一个端口号,这个端口号是一个16比特的数字,所以最多可以有64K个端口。TCP和UDP的端口是各自独立的,TCP可以有64K个端口,UDP也可以有64K个端口。UDP用户数据报协议(UDP)是TCP/IP协议体系中运输层协议之一,在RFC768中定义。UDP为应用层提供了无连接的数据传输服务,利用端口机制为应用程序提供多路复用和多路分解,并支持简单的差错检测。UDP不能向应用层提供可靠的数据传输,也没有流量控制和拥塞控制的功能。UDP数据报UDP接收应用层的数据,加上UDP首部后封装成UDP数据报,UDP数据报是UDP的传输单元。应用层数据UDP首部应用层数据UDP首部IP首部UDP数据报IP报文UDP特点UDP不提供可靠的数据服务,数据可能会丢失、乱序和重复。UDP采用无连接的工作方式,UDP比较简单,应用层的数据能够被迅速、及时地发送出去。UDP的效率比较高,适合于对实时性要求高,但能够容忍部分数据丢失的应用,如视频会议,音频数据传输等。使用UDP的应用层协议应用应用层协议运输层协议域名解析DNSUDP网络管理SNMPUDP路由信息交换RIPUDP简单文件传输TFTPUDP网络文件系统NFSUDPIP电话专有协议UDP流式多媒体专有协议UDPUDP数据报格式UDP数据报由UDP首部和其封装的应用层数据组成,是UDP协议的传输单元。应用层数据UDP首部UDP数据报源端口目的端口22长度校验和22字节UDP首部UDP数据报格式源端口是指发送方应用进程对应的端口号。目的端口是指接收方应用进程对应的端口号。长度字段的值给出了UDP数据报(包括首部和数据)的字节数。校验和用来检测UDP报文在传输中的错误。UDP报文的校验是可选的,如果校验和的值为0,则表示没有校验。UDP的差错检测UDP提供了首部校验和字段来检测UDP数据报在传输过程中的错误。一旦检测出错误,UDP会丢弃出错的UDP数据报。UDP首部校验和的计算比较特殊,在计算校验和之前,要在UDP报文前面添加一个伪首部。应用层数据UDP首部目的IP地址4417UDP长度12字节0源IP地址1伪首部源端口目的端口长度校验和TCPTCP是TCP/IP协议体系中运输层的重要协议。TCP为应用层提供面向连接的、可靠的数据传递服务。在提供数据可靠性的同时,TCP还为应用层提供了全双工的数据传输服务。TCP还具有流量控制和拥塞控制的功能。TCP报文段的组成和封装TCP接收应用层的数据,添加TCP首部后形成TCP报文段。TCP报文段需要被下层的IP协议封装,发送到目的地。应用层数据TCP首部TCP报文段IP报文应用层数据TCP首部IP首部TCP报文段结构源端口(src_port)序号(seq)确认号(ack)窗口大小FINSYNRSTPSHACKURG保留字段数据偏移目的端口(dst_port)校验和紧急指针可选项应用层数据TCP首部32比特20字节长度可变填充项TCP连接TCP提供面向连接的传输服务。利用TCP通信的两个应用进程要首先建立连接。这个连接是软件意义上的连接,并不是一条实际的物理线路。建立连接的目的是使通信双方在开始传输数据前建立联系,使双方都确定对方愿意与之通信;同时在建立连接的过程中传递和协商一些必要的参数(如发送字节的起始编号和MSS),为后面的数据传递打下基础。建立连接的过程是两端的TCP交换一些特殊的TCP报文段来完成的。使用TCP传输数据的过程1.建立连接。2.传输应用层数据。3.关闭连接。TCP建立连接过程TCP建立连接的过程称为“三次握手”(three-wayhandshanke)src_port=p1,dst_port=p2SYN=1,seq=xsrc_port=p2,dst_port=p1,SYN=1,ACK=1,seq=y,ack=x+1src_port=p1,dst_port=p2ACK=1,seq=x+1,ack=y+1客户端服务器1.CLOSEDLISTEN2.SYN_SENDSYN-RECEIVED3.ESTABLISHEDSYN-RECEIVED4.ESTABLISHEDESTABLISHEDTCP关闭连接过程FIN=1,seq=xACK=1,seq=y,ack=x+1FIN=1,seq=y,ack=x+1客户端服务器ACK=1,seq=x+1,ack=y+1保活定时器一个TCP连接建立后,可能会长时间处于空闲状态,没有任何数据交换。服务器需要知道客户端是否已经关闭或是重启,需要确认是否有必要继续保留这个连接。服务器通过设置保活定时器(keepalivetimer)来达到这个目的。保活定时器保活定时器的时间一般设为2小时。如果服务器在2小时内收到了客户端的信息,那么定时器就复位,重新计时。如果2小时内没有收到任何数据,那么服务器TCP就会给客户端发送一个探测报文。保活定时器客户端可能处于以下的4个状态:(1)客户端依然活跃,并且收到了服务器的探测报文。客户端的TCP便会发出响应报文,使服务器知道自己仍然处于活动状态。服务器的TCP会将保活定时器复位,保持这个连接。(2)客户端已经崩溃,并且已经关机。此时服务器TCP不会收到任何响应。然后服务器TCP每隔75秒发送一个探测报文,如果发送了10个探测报文仍没有回应,那么服务器就关闭连接,释放相应的资源。保活定时器客户端可能处于以下的4个状态:(3)客户端已经重启,这时客户端的TCP不会保留原来连接的信息。当收到服务器的探测报文后,客户端TCP会发送一个复位(RST)的响应,服务器收到后便会关闭连接。(4)客户端依然活跃,但是始终都无法收到服务器的探测报文(可能是由于网络拥塞造成的)。这种情况同(2)类似,服务器收不到响应,也会关闭连接。数据的可靠性传输TCP报文段需要封装在IP的报文中才能到达目的地。应用层协议TCPIP应用层报文IP首部应用层报文TCP首部应用层报文TCP首部IP首部应用层报文TCP首部应用层报文应用层报文TCP首部应用层协议TCPIP数据的可靠性传输IP协议不能提供可靠的数据传输服务,IP报文可能会丢失、重复或者乱序。TCP报文段也会遇到同样的问题。TCP主要使用确认、重传机制实现数据的可靠性传输。确认和重传机制每一方的TCP都要为所传输的数据编号,编号以字节为单位。如果收到了编号正确的数据,那么就要给对方发送确认。确认也可能在中途丢失,从而造成对方无法收到确认的情况。在发出一个TCP报文段后,就启动一个定时器,如果定时器时间到了但确认还没有来,那么就重传一次这个报文。确认和重传机制seq=1Data(400字节)seq=401Data(400字节)ack=801seq=801Data(400字节)seq=801Data(400字节)丢失超时ack=1201时间轴时间轴发送方接收方数据出错的四种情况和处理(1)TCP报文段丢失。发送方定时器超时,重传。(2)TCP报文段里的数据出错。接收方丢弃出错报文段,不发送确认。发送方定时器超时,重传。(3)TCP报文段的重复。接收方直接丢弃重复报文段,同时发送确认。(4)TCP报文段的乱序。TCP通常会选择缓存这些乱序的报文,将其排序再上传给应用进程。重传定时器在发送一个TCP报文后,就会启动重传定时器。如果在定时器截止时间之前收到了确认,就撤销这个定时器。如果定时器时间到了,确认还没有收到,就重传该报文并将定时器复位。随着网络情况不断在发生变化,重传定时器的时间设定也会跟随变化。重传定时器计算RTT4*RTTT重传估计偏差7/8RTTRTT(1)RTT估计估计样本RTT1RTTRTTRTT偏差偏差估计样本0.25推荐值为流量控制在建立连接时,TCP连接的每一端都会为这个连接分配一定数量的缓存。当收到正确的字节后,就会将数据放入缓存。如果发送进程发送数据的速度超过接收进程取走数据的速度,那么接收缓存就会被充满,最后溢出。需要有一种机制来控制发送方发送数据的速度,保证接收缓存不溢出,这种机制称为流量控制。流量控制TCP利用首部中的窗口字段将自己接收缓存大小通知对方,从而保证数据不会溢出。流量控制接收缓存空02048seq=01024字节数据ack=1024,WIN=10241024空应用进程取走512字节seq=10241024字节数据1536空ack=2048,WIN=512seq=2048100字节数据1636空512空ack=2148,WIN=412应用进程写入1024字节应用进程写入1024字节应用进程写入100字节接收方发送方流量控制中的两个问题零窗口通告使用坚持定时器解决。糊涂窗口症状解决方案:接收方不发送接收窗口太小的通告,等到接收缓存有了合适的空余(如一半空闲)再发送窗口更新的通告。发送方也要暂时缓存一下要发送的数据,等数据达到合适的数量(如至少达到接收方窗口的一半)再发送出去。拥塞当大量的数据涌入网络时,网络中的部分路由器就会因为过载而被迫丢弃一些分组,就产生了拥塞。发送方会因为定时器超时重传那些被路由器丢弃的分组,从而