第8章传输层协议8.1进程间通信8.2TCP段格式8.3TCP连接的建立和拆除8.4TCP流量控制8.5TCP拥塞控制8.6TCP差错控制8.7TCP状态转换图8.8用户数据报协议UDP主讲人:8.1进程间通信•由于在一台计算机中同时存在多个进程,要进行进程间的通信,首先要解决进程的标识问题。TCP和UDP采用协议端口来标识某一主机上的通信进程。•必须给出全局惟一的信宿端的进程标识符。主机可以用IP地址进行标识,IP地址是全局惟一的,再给主机上的进程赋予一个本地惟一的标识符—端口号,二者加起来,便形成了进程的全局惟一标识符。•端口:传输层服务访问点TSAP。–从内部实现看,端口是一种抽象的软件结构(数据结构和I/O缓冲区)–从通信对方看,端口是通信进程的标识,应用进程通过系统调用与端口建立关联后,传输层传给该端口的数据都会被相应的应用进程所接收–从本地应用进程看,端口是进程访问传输服务的入口点。•每个端口拥有一个端口号(portnumber),端口号是16比特的标识符,因此,端口号的取值范围是从0到65535。•端口分配有两种基本的方式:全局端口分配和本地端口分配。•TCP和UDP都是提供进程通信能力的传输层协议,各有一套端口号,都是从0到65535。•同一个端口在TCP和UDP中可能对应于不同类型的应用进程,也可能对应于相同类型的应用进程。为了区别TCP和UDP的进程,除了给出主机IP地址和端口号之外,还要指明协议。•因特网中要全局惟一地标识一个进程必须采用一个三元组:(协议,主机地址,端口号)•网络通信是两个进程之间的通信,两个通信的进程构成一个关联。这个关联应该包含两个三元组,由于通信双方采用的协议必须是相同的,可以用一个五元组来描述两个进程的关联:(协议,本地主机地址,本地端口号,远地主机地址,远地端口号)•因特网通信进程间的相互作用模式:客户/服务器模型。客户/服务器模型相互作用的过程是:客户向服务器发出服务请求,服务器完成客户所要求的操作,然后给出响应。•服务器一般先于客户端启动,为了让客户能够找到服务器,服务器必须使用一个客户熟知的地址,客户可以根据此地址向服务器提出服务请求。•熟知地址的含义:协议是双方约定的协议,主机IP地址是固定且公开的,端口号是大家所熟知的。•每一个标准的服务器都拥有一个熟知的端口号,不同主机上相同服务器的端口号是相同的。客户进程一般采用临时端口号,而不采用熟知的端口号。临时端口是使用时向操作系统申请,由操作系统分配,使用完后再交由操作系统管理的端口。因此,只要同一时间同一主机上的应用进程数量不超过可分配的临时端口数量就能保证系统的正常运行。•熟知端口所占端口号不多,以全局方式进行分配。TCP和UDP规定,小于1024的端口号用作熟知端口,熟知端口又称为保留端口。•从1024到65535编号的端口为临时端口,临时端口又称为自由端口。临时端口占全部端口的绝大部分,以本地方式进行分配。当进程要与远地进程通信时,首先申请一个临时端口,然后根据全局分配的熟知端口号与远地服务器建立联系,传输数据。•TCP/IP结合了两种端口分配方式,既保证了灵活性,又方便了建立通信进程间的联系。0—1023Well-known1024—49151Registered49152—65535Dynamic面向报文的UDP•发送方UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。•应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。•接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。•应用程序必须选择合适大小的报文。•TCP要将数据分为分组,TCP所采用的分组称为TCP段。TCP段不定长,被封装在IP数据报中传输。IP数据报不能保证数据的按序到达,还可能造成数据的丢失或毁坏,这些问题经过TCP协议的处理后,对上层提供的是可靠的无差错的服务。返回TCP面向流的概念768HTCP面向流的概念发送TCP报文段发送方接收方把字节写入发送缓存从接收缓存读取字节应用进程应用进程1230181716151419202145131211H109H加上TCP首部构成TCP报文段TCPTCP字节流字节流H表示TCP报文段的首部x表示序号为x的数据字节TCP连接应当注意•TCP连接是一条虚连接而不是一条真正的物理连接。•TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。•TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。•TCP可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。TCP可靠通信的具体实现•TCP连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。•TCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是基于报文段。•TCP两端的四个窗口经常处于动态变化之中。•TCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。8.2TCP段格式TCP将应用层的数据分块并封装成TCP段进行发送。TCP段=段首部+数据•段首部(20到60字节)=定长部分+变长部分•定长部分长度:20字节•变长部分=选项+填充,长度:0到40字节之间。TCP段格式中各个字段的含义和作用:TCP首部20字节的固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FIN32位SYNRSTPSHACKURG位08162431填充TCP数据部分TCP首部TCP报文段IP数据部分IP首部发送在前TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充源端口和目的端口字段——各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充数据偏移(即首部长度)——占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位字(以4字节为计算单位)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充保留字段——占6位,保留为今后使用,但目前应置为0。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充紧急URG——当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认ACK——只有当ACK1时确认号字段才有效。当ACK0时,确认号无效。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充推送PSH(PuSH)——接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充复位RST(ReSeT)——当RST1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充同步SYN——同步SYN=1表示这是一个连接请求或连接接受报文。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充终止FIN(FINis)——用来释放一个连接。FIN1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充窗口字段——占2字节,用来让对方设置发送窗口的依据,单位为字节。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充选项字段——长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”MSS(MaximumSegmentSize)是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。其他选项窗口扩大选项——占3字节,其中有一个字节表示移位值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。时间戳选项——占10字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)。选择确认选项——在后面的5.6.3节介绍。TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充填充字段——这是为了使整个首部长度是4字节的整数倍。源IP地址(32比特)目的IP地址(32比特)全0(8比特)协议(8比特)TCP总长度(16比特)图8-3TCP伪首部格式083116TCP伪首部的信息来自IP数据报的首部,协议字段指明当前协议为TCP(6)。TCP段的发送端和接收端在计算校验和时都会加上伪首部信息。若接收端验证校验和是正确的,则说明数据到达了正确主机上正确协议的正确端口。8.3TCP连接的建立和拆除8.3.1TCP连接的建立•为了实现数据的可靠传输,TCP要在应用进程间建立传输连接。•从理论上讲,建立传输连接只需要一个请求和一个响应就可以了。但是由于通信子网的问题,请求有可能丢失,为了解决请求的丢失问题,常用的办法是超时重传。•客户发出连接请求时,启动一个定时器,一旦定时器超时,客户将被迫再次发起连接请求,会导致重复连接。•解决重复连接的办法:三次握手方法。•三次握手方法要求对所有报文进行编号,TCP采用的方法是给每个字节一个32比特的序号。•每次建立连接时都产生一个新的初始序号。•序号字段位