第六章传输层传输层是整个协议层次结构的核心。传输服务传输协议要素传输层在OSI中的地位6.1传输服务传输层的最终目标是向其用户——一般是指应用层的进程,提供有效、可靠且价格合理的服务。为了达到这一目标,传输层利用了网络层所提供的服务。传输实体:传输层中完成上述工作的实体。传输实体可能在操作系统内核中,或在一个单独的用户进程内,也可能包含在网络应用的程序库中,或是位于网络接口卡上。网络层、传输层、应用层的逻辑关系传输实体应用(或会话)层传输地址网络地址网络层应用/传输接口传输/网络接口传输实体应用(或会话)层传输地址网络地址网络层TPDU传输协议主机1主机2从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。物理层网络层运输层应用层数据链路层面向信息处理面向通信用户功能网络功能应用进程之间的通信两个主机进行通信实际上就是两个主机中的应用进程互相通信。应用进程之间的通信又称为端到端的通信。运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层协议和网络层协议的主要区别应用进程…应用进程…IP协议的作用范围(提供主机之间的逻辑通信)TCP和UDP协议的作用范围(提供进程之间的逻辑通信)因特网运输层的主要功能运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。运输层还要对收到的报文进行差错检测。运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。TCP/IP的运输层有两个不同的协议:(1)用户数据报协议UDP(UserDatagramProtocol)(2)传输控制协议TCP(TransmissionControlProtocol)两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU(TransportProtocolDataUnit)。TCP传送的数据单位协议是TCP报文段(segment)UDP传送的数据单位协议是UDP报文或用户数据报。TCP与UDPTCP/IP体系中的运输层协议TCPUDPIP应用层与各种网络接口运输层TCP与UDPUDP在传送数据之前不需要先建立连接。对方的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP是一种最有效的工作方式。TCP则提供面向连接的服务。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。还要强调两点运输层的UDP用户数据报与网际层的IP数据报有很大区别。IP数据报要经过互连网中许多路由器的存储转发,但UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。TCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了TCP连接。网络地址与传输地址网络地址:主机的标识(IP地址)传输地址:进程的标识(端口)一个主机内可有多个进程在进行通信,传输层负责接收某个进程发送的数据包,或将数据包交给指定的进程。两种传输服务在网络层,有两种网络服务:面向连接、无连接在传输层,也有两种服务:面向连接的传输服务,无连接的传输服务两层的面向连接服务在很多方面类似:都包括三个阶段:建立连接、数据传输、释放连接寻址和流量控制方式也类似。两层的无连接服务也类似。6.1.2传输协议要素传输服务是通过建立连接的两个传输实体之间所用的传输协议来实现的。在某些方面,传输协议类似于数据链路层协议。两者都必须解决差错控制、分组顺序、流量控制等问题。但两者也存在显著的差异:主要由协议运行的环境造成的。在链路层,两个路由器通过物理通道直接通信;而在传输层,这个物理通道由整个子网所取代。首先,在数据链路层,不必为一个路由器指明它要与哪个路由器通话,而在传输层则需要显示指出。其次,在数据链路层,建立连接的过程很简单,而在传输层,初始连接的建立要复杂得多。再次,子网的存储能力。数量上的差别:在两层中都需要有数据缓冲和流量控制,但在传输层中出现的大量的、动态变化的连接要求可能需要使用与在数据链路层中不同的处理方法。1.寻址当一个应用程序希望与一个远程应用程序建立连接时,必须指定与哪个应用程序相连,一般采用的方法是定义进程可以侦听连接请求的传输地址。传输地址:这些端点是(IP地址,本地端口)对。编址方式:层次型地址:国家/网络/主机/端口平面地址:随机分配2.建立连接初看起来,一个传输实体似乎只需向目的机器发送一个连接请求,并等待对方接受连接的应答就足够了,但当网络可能丢失、存储、出现重复分组时,问题会变得复杂。递增的报文序列号计时器:超时认为已经丢失解决的方法:三次握手三次握手主机1选择一个序号X并向主机2发送一包含了该序号的连接请求报文;接着,主机2回应一个接受连接报文,确认X并声明自己所选用的初始序号Y;最后,主机1在其发送的第一个数据报文中确认主机2所选择的初始序号。t主机1主机2CR(SEQ=X)ACC(SEQ=Y,ACK=X)DATA(SEQ=X,ACK=Y)正常操作3.释放连接终止连接有两种方式:对称、非对称非对称释放很突然,因而可能导致丢失数据当连接建立后,主机1发送了一个数据报文并正确抵达主机2,接着,主机1发送了另一个数据报文,这次很不幸,主机2在收到第二个报文之前先发出了释放连接,结果连接被释放,数据被丢失。t主机1主机2CRACCDATA在一个断开请求后没有提交数据DATADR1对称释放一方执行释放连接之后,不再发送数据,但仍可以接收数据,同时向对方发送释放连接报文。只有双方均执行释放连接之后,整个连接才释放。也使用三次握手。2非对称释放与电话类似,相互连接的双方任何一方都能执行释放连接,断开连接并向对方发送释放连接报文,报文到达对方,整个连接即释放。很容易造成数据丢失6.1.3传输层在OSI中的地位和作用传输层是整个协议层次结构的核心,是惟一负责总体数据传输和控制的一层。在OSI七层模型中传输层是负责数据通信的最高层,又是面向网络通信的低三层和面向信息处理的高三层之间的中间层。因为网络层不一定保证服务的可靠,而用户也不能直接对通信子网加以控制,因此在网络层之上,加一层即传输层以改善传输质量。传输层利用网络层提供的服务,并通过传输层地址提供给高层用户传输数据的通信端口,使系统间高层资源的共享不必考虑数据通信方面和不可靠的数据传输方面的问题。它的主要功能是:对一个进行的对话或连接提供可靠的传输服务,在通向网络的单一物理连接上实现该连接的复用,在单一连接上提供端到端的序号与流量控制、差错控制及恢复等服务。6.2传输控制协议TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。6.2.1TCP服务模型TCP所提供服务的主要特征:1.面向连接的传输;2.端到端的通讯;3.高可靠性,确保传输数据的准确性,不出现丢失或乱序;4.全双工方法传输;5.采用字节流方法,即以字节为单位传输字节序列;6.急迫数据传送功能;6.2.2TCP传输机制比特0816243120字节的固定头部TCP首部源端口目的端口序号确认号数据偏移保留URGACKPSHRSTSYNFIN窗口检验和紧急指针选项(长度可变)填充TCP首部TCP数据部分IP首部IP数据部分TCP报文TCP报文段的首部1.TCP的段结构TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充源端口和目的端口字段——各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充数据偏移——占4bit,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充保留字段——占6bit,保留为今后使用,但目前应置为0。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充紧急比特URG——当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充确认比特ACK——只有当ACK1时确认号字段才有效。当ACK0时,确认号无效。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充推送比特PSH(PuSH)——接收TCP收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充复位比特RST(ReSeT)——当RST1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充终止比特FIN(FINal)——用来释放一个连接。当FIN1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。TCP首部20字节固定首部目的端口数