1《数据通信与计算机网络(第二版)》电子教案笫二十一讲TCP协议和UDP协议2本讲内容第八章运输层8.3TCP协议8.3.1TCP服务8.3.2TCP协议8.3.3TCP连接管理8.3.4TCP流量控制8.3.5TCP拥塞控制8.3.6TCP计时器8.3.7UDP协议38.3TCP协议•IP层提供的是无连接的、“尽力而为”的、不可靠的网络服务(C类网络)。•TCP/IP体系结构中,运输层就是利用IP提供的不可靠的服务来提供端到端的运输服务。主要包括:–面向连接的、可靠的TCP协议–无连接的UDP协议48.3.1TCP服务•传输控制协议(TransmissionControlProtocol,TCP)的主要作用是在不可靠的网络服务上为应用层提供面向连接的、端到端的可靠字节流服务。–RFC793:基本TCP定义–RFC1122:修改和改进–RFC1323:扩展定义–RFC2018、RFC2581:最新改进58.3.1TCP服务•TCP是一种面向连接的运输协议,在进行数据传输时首先必须建立一条运输连接,数据传输完成之后把连接释放掉。•TCP连接标识–套接字(Socket):主机的IP地址和一个16比特的端口号(Port)。•TCP端口号–一条TCP连接是由发送方套接字和接收方套接字来唯一标识的,即TCP连接用四元组源端IP地址、源端口号、目的IP地址、目的端口号来唯一标识。68.3.1TCP服务•TCP最初是在Unix环境下实现的,它通过Socket调用来提供服务。Socket调用功能含义socket建立一个Socketbind为建立的Socket建立一个标识listen在一个Sokcet上监听外来的连接请求accept接受Socket上到来的连接connect在一个Socket上建立连接shut_down关闭连接send在一条连接上发送数据receive在一条连接上接受数据select检查一组Socket是否有数据或异常78.3.1TCP服务•TCP服务的特征–TCP数据传输服务是全双工的;–TCP连接是点对点的;–TCP连接是面向字节流的;–TCP实体支持数据缓冲和立即发送;–TCP提供紧急数据功能。8768HTCP面向流的概念发送TCP报文段发送方接收方把字节写入发送缓存从接收缓存读取字节应用进程应用进程1230181716151419202145131211H109H加上TCP首部构成TCP报文段TCPTCP字节流字节流H表示TCP报文段的首部x表示序号为x的数据字节TCP连接9应当注意•TCP连接是一条虚连接而不是一条真正的物理连接。•TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。•TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。•TCP可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。108.3.2TCP协议端口…发送TCP报文段TCP…TCP接收缓存发送缓存报文段…报文段报文段端口发送端接收端向发送缓存写入数据块从接收缓存读取数据块应用进程应用进程11TCP首部20字节的固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FIN32位SYNRSTPSHACKURG位08162431填充TCP数据部分TCP首部TCP报文段IP数据部分IP首部发送在前12TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充源端口和目的端口字段——各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。13TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。14TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。15•主机A向主机B连续发送了两个TCP报文段,其序号分别是70和100.试问:•1.第一个报文携带了多少字节数据?•2.主机B收到第一个报文后发回的确认中的确认号是多少?•3.如果主机B收到第二个报文段后发送的确认中的确认序号是180,试问A发送的第二个报文段中的数据有多少字节?•4.如果主机A发送的第一个数据报文段丢失了,但第二个报文段到达B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?16应当记住•若确认号=N,则表明:到序号N–1为止的所有数据都已正确收到。•设B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。请注意,现在的确认号不是501,也不是700,而是701。17TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充数据偏移(即首部长度)——占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位字(以4字节为计算单位)。18TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充保留字段——占6位,保留为今后使用,但目前应置为0。19TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充紧急URG——当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。20TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充确认ACK——只有当ACK1时确认号字段才有效。当ACK0时,确认号无效。21TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充推送PSH(PuSH)——接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。22TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充复位RST(ReSeT)——当RST1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。23TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充同步SYN——同步SYN=1表示这是一个连接请求或连接接受报文。24TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充终止FIN(FINis)——用来释放一个连接。FIN1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。25TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充窗口字段——占2字节,用来让对方设置发送窗口的依据,单位为字节。26TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。27TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充紧急指针字段——占16位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。28TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG比特08162431填充选项字段——长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”MSS(MaximumSegmentSize)是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。29TCP首部20字节固定首部目的端口数据偏移检验和选项(长度可变)源端口序号紧急指针窗口确认号保留FINSYNRSTPSHACKURG位08162431填充填充字段——这是为了使整个首部长度是4字节的整数倍。30TCP的数据编号与确认•TCP协议是面向字节的。TCP将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。•在连接建立时,双方要商定初始序号。TCP每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。•TCP的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。31•习题8.19•TCP携带的用户数据最多65495B,为什么?328.3.3TCP的运输连接管理•运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。331.TCP的连接建立阶段•连接建立过程中要解决以下三个问题:–要使每一方能够确知对方的存在。–要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。–能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。34客户–服务器方式•TCP连接的建立都是采用客户–服务器方式。•主动发起连接建立的应用进程叫做客户(client)。•被动等待连接建立的应用进程叫做服务器(server)。35服务器用三次握手建立TCP连接CLOSEDCLOSED主动打开被动打开AB客户TCP的连接建立A的TCP向B发出连接请求报文段,其首部中的同步位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x+1。36服务器用三次握手建立TCP连接TCP的连接建立•B的TCP收到连接请求报文段后,如同意,则发回确认。•B在确认报文段中应使SYN=1,使ACK=1,其确认号ack=x1,自己选择的序号seq=y。CLOSEDCLOSED主动打开被动打开A客户B37服务器•A收到此报文段后向B给出确认,其ACK=1,确认号ack=y1。•A的TCP通知上层应用进程,连接已经建立。CLOSEDCLOSED主动打开被动打开A客户B通知应用进程38服务器数据传送•B的TCP收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立。•以后就可以传送数据了。CLOSEDCLOSED主动打开被动打开A客户B通知应用进程39CLOSED主动关闭数据传送AB客户服务器CLOSEDTCP的连接释放•数据传输结束后,通信的双方都可释放连接。现在A的应用进程