您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数据通信笫二十一讲TCP协议和UDP协议
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提供紧急数据功能。88.3.2TCP协议•TCPPDU称为TCP数据段(Segment)–一个TCP数据段由一个20字节的头部、一个可选部分、和一个用户数据部分组成。–整个TCP段的长度限制•IP包64K-1(65535)字节长度限制;•网络MTU(MaximumTransferUnit,最大传送单位)限制;•TCP协议中用户数据大小受MSS(MaximumSegmentSize,最大分段大小)限制。98.3.2TCP协议•TCP协议是通过段格式来表达的。源端口号目的端口号顺序号确认号窗口大小校验和紧急指针选项(0个或多个字节)数据(可选)保留URGACKPSHRSTSYNFIN数据偏移32位填充108.3.2TCP协议•TCP段的固定头部长度为20个字节,同时支持最多40个字节的TCP选项。–源端口号(SourcePort,16比特)和目的端口号(DestinationPort,16比特):分别表示发送方和接收方的端口号。–顺序号(SequenceNumber,32比特):该TCP段中携带的用户数据中第一个字节的编号,编号是以数据字节为单位的。–确认号(AcknowledgmentNumber,32比特):对顺序号之前的数据已可靠收到的确认,即下一个期望接收的字节的顺序号。118.3.2TCP协议–数据偏移(DataOffset,4比特):指示TCP数据开始的位置,也即TCP头部长度,以32比特为单位。–保留(Reserved,6比特)–控制标志(ControlBits,6比特)•URG:紧急数据标志•ACK:确认字段有效标志•PSH:要求马上发送数据•RST:对TCP连接进行复位•SYN:建立TCP连接•FIN:连接释放128.3.2TCP协议–窗口大小(WindowSize,16比特):指示接收方滑动窗口的大小,用于实现TCP流量控制和差错恢复。–校验和(Checksum,16比特):实现对TCP头部的校验。在计算检验和时包括TCP头部、用户数据以及一个TCP伪头部。•伪头部格式:•检验和的计算:所有16位字以补码形式相加,然后对和取反。IP源地址32比特IP目的地址0协议TCP长度138.3.2TCP协议–紧急指针(UrgentPointer,16比特):当URG位有效时,紧急指针指示紧急数据的位置。–选项(Options,变长:0~40字节):提供了相应的扩展机制,用于实现除TCP基本头部指定功能外的扩展功能。•选项以8位的字节为单位,有2种组成情况:–单字节(类型)–多字节(类型+长度+N个选项)•如:–类型0–类型1–类型2148.3.2TCP协议–填充(Padding,变长):总是以0作填充,可确保TCP头部以32比特边界结束。–数据(Data,变长):数据部分用于传送TCP用户数据。•由于IP分组长度的限制(最大64K),因此TCP最大有效数据载荷长度是65535-20-20=65495。158.3.3TCP连接管理•建立连接–TCP连接建立是一个不对称的过程•一方处于被动方式(listen),一方为主动方式(connect)。即主动方式的客户方要求和被动方式打开的服务方建立运输连接(通过一系列的消息交换)。–建立连接就互相确认了对方的初始顺序号(ISN)•ISN不是采用固定的取值,以减少前后两条连接干扰的可能性。168.3.3TCP连接管理–TCP使用三次握手方法建立连接SYN(SEQ=x)SYN(SEQ=x+1,ACK=y+1)SYN(SEQ=y,ACK=x+1)时间主机1主机2这里,SYN(SEQ=x)表示一个TCP段,它的序号是x,它的SYN标志为1,它的ACK标志为0;SYN(SEQ=y,ACK=x+1表示ACK标志为1,并且确认号为x+1。客户方服务方178.3.3TCP连接管理SYN(SEQ=x)SYN(SEQ=x,ACK=y+1)SYN(SEQ=y,ACK=x+1)时间主机1主机2SYN(SEQ=y)客户方服务方–使用三次握手,即使两台主机同时想在相同的套接字之间建立一条TCP连接而发生冲突,也可以正常工作。18•释放连接–TCP的正常的连接释放也采用了三次握手过程。–把TCP连接看成由两个方向的单工连接组成:释放时,两个方向的连接都要关闭。•两方发送一个FIN标志置为1的TCP段,表示没有数据要发送,当FIN被确认后,那个方向的连接就被关闭。•只有当两个方向的连接均关闭后,该TCP连接才被完全释放。•把一个FIN和ACK合并,就是三次握手过程。8.3.3TCP连接管理198.3.3TCP连接管理–这样,实际上就有多种释放连接的顺序:•都能正常工作!–最后的ACK可能丢失带来的问题•使用超时计时器FINACKFINACKFINACKFINACKFINACKFINACKFINFIN,ACKACK20•TCP连接管理状态图8.3.3TCP连接管理ClosedListenSYNReceivedSYNSentEstablishedFINWait1FINWait2TimedWaitClosingCloseWait开始ACK/-LISTEN/-CLOSE/-CLOSE/-CONNECT/SYNSYN/SYN+ACKRST/-SYN/SYN+ACKCLOSE/FINACK/-SYN+ACK/ACKFIN/ACKACK/-CLOSE/FINFIN/ACKFIN+ACK/ACKFIN/ACKACK/-主动释放被动释放超时LastAckCLOSE/FIN218.3.3TCP连接管理•TCP连接状态状态描述Closed无TCP连接,也不在建立连接Listen用户开始LISTEN,等待对方的呼入连接SYNReceivedSYN收到,等待ACKSYNSentSYN发出,开始与对方建立连接Established连接建立成功,可以传送数据FINWait1用户释放连接,已经发出FINFINWait2对方同意释放连接Closing双方同时开始释放连接TimedWait等待全部TCP段传送完毕CloseWait等待用户释放连接LastAck用户释放连接,等待对方最后同意228.3.4TCP流量控制•为了防止发送方的数据发送得过快,以致接收方来不及处理的情况。TCP采取一种可变大小的滑动窗口机制来进行流量控制。–接收方维护一个可变的接收窗口,这是接收方向发送方指出的目前剩余接收缓冲区的大小(数据段中的窗口大小字段)。RecvWindow网络来的数据空缓冲区缓冲的TCP数据RecvBuffer用户进程读取238.3.4TCP流量控制–接收缓冲区是环形、循环使用的。–接收窗口大小满足:•其中LastByteRead和LastByteRcvd是接收方定义的两个指针,满足:•发送方定义变量LastByteSent和LastByteAcked用于发送控制,满足:–LastByteSent-LastByteAcked即发送方发送的但是没有得到确认的数据的大小。•探测(probe)消息)Re(ReReadLastBytevdLastByteRccvBuffercvWindowcvWindowkedLastByteAcntLastByteSeRecvBufferadLastBytevdLastByteRcReRe248.3.4TCP流量控制•例发送方接收方应用进程发送2K数据04k缓冲区(窗口)空2K4K应用进程读2K2KSEQ=0ACK=2048WIN=2048ACK=4096WIN=0ACK=4096WIN=2048SEQ=02KSEQ=20481KSEQ=40962K2K1K发送方TCP进程停止发送数据直到收到非0的WIN值发送方TCP进程可以发送2K数据应用进程发送2K数据258.3.5TCP拥塞控制•TCP通过拥塞控制来防止网络过载。–TCP拥塞控制采用慢启动(slow-start)和拥塞避免(congestionavoidance)的策略。–TCP连接维护两个变量:•拥塞窗口CongWindow反映了网络的容量,限制发送方向网络注入数据的速度,这样发送方发送的尚未得到确认的数据大小必须小于接收窗口和拥塞窗口,即:•慢启动阈值ssthresh当拥塞窗口小于该阈值时进入慢启动阶段,而大于时进入拥塞避免阶段。)Re,min(cvWindowCongWindowkedLastByteAcntLastByteSe268.3.5TCP拥塞控制•慢启动–TCP慢慢探测以决定网络的容量。–初始时•CongWindow设置为一个MSS(最大分段大小);•慢启动阈值ssthresh设置为一个较高的值(比如接收窗口的大小)。–每收到一个确认ACK时,就把拥塞窗口大小加1个MSS大小:CongWindow+=MSS。•这样实际的结果是:拥塞窗口的增加是成指数增加的。–当拥塞窗口超过慢启动阈值ssthresh时,就进入拥塞避免阶段。278.3.5TCP拥塞控制•拥塞避免–不是每收到一个ACK,就把拥塞窗口增加一个MSS,而是每个往返传输时间(Round-TripTime,RTT)才把拥塞窗口增加一个MSS。–RTT是动态变化的,在TCP的实现中通常采用一种变通的方法,每收到一个不重复的ACK时,拥塞窗口按照如下公式增加:–这样拥塞窗口缓慢、线性地增加,直到出现拥塞。)1,/(CongWindowMSSMSSMaxCongWindow288.3.5TCP拥塞控制•出现拥塞–发送方TCP段超时,需要重传。–这时,慢启动阈值ssthresh缩减为拥塞窗口的一半,并且拥塞窗口恢复到原来的初始窗口大小,并且进入慢启动过程,重新探测目前网络的状况。•空闲后的拥塞窗口–TCP连接空闲较长一段时间后,在重新开始传输数据时进入如同拥塞后的慢启动过程。MSSCongWindowMSSCongWindowMaxssthresh),2/(298.3.5TCP
本文标题:数据通信笫二十一讲TCP协议和UDP协议
链接地址:https://www.777doc.com/doc-2429766 .html