第7章 传输层协议PPT课件_第1页
第7章 传输层协议PPT课件_第2页
第7章 传输层协议PPT课件_第3页
第7章 传输层协议PPT课件_第4页
第7章 传输层协议PPT课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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 known 1024 49151Registered 49152 65535Dynamic 面向报文的UDP 发送方UDP对应用程序交下来的报文 在添加首部后就向下交付IP层 UDP对应用层交下来的报文 既不合并 也不拆分 而是保留这些报文的边界 应用层交给UDP多长的报文 UDP就照样发送 即一次发送一个报文 接收方UDP对IP层交上来的UDP用户数据报 在去除首部后就原封不动地交付上层的应用进程 一次交付一个完整的报文 应用程序必须选择合适大小的报文 TCP要将数据分为分组 TCP所采用的分组称为TCP段 TCP段不定长 被封装在IP数据报中传输 IP数据报不能保证数据的按序到达 还可能造成数据的丢失或毁坏 这些问题经过TCP协议的处理后 对上层提供的是可靠的无差错的服务 返回 TCP面向流的概念 TCP面向流的概念 发送TCP报文段 发送方 接收方 把字节写入发送缓存 从接收缓存读取字节 应用进程 应用进程 18 17 16 15 14 H 加上TCP首部构成TCP报文段 TCP TCP 字节流 字节流 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字节的固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN 32位 SYN RST PSH ACK URG 位08162431 填充 TCP数据部分 TCP首部 TCP报文段 IP数据部分 IP首部 发送在前 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 源端口和目的端口字段 各占2字节 端口是运输层与应用层的服务接口 运输层的复用和分用功能都要通过端口才能实现 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 序号字段 占4字节 TCP连接中传送的数据流中的每一个字节都编上一个序号 序号字段的值则指的是本报文段所发送的数据的第一个字节的序号 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 确认号字段 占4字节 是期望收到对方的下一个报文段的数据的第一个字节的序号 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 数据偏移 即首部长度 占4位 它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远 数据偏移 的单位是32位字 以4字节为计算单位 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 保留字段 占6位 保留为今后使用 但目前应置为0 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 紧急URG 当URG 1时 表明紧急指针字段有效 它告诉系统此报文段中有紧急数据 应尽快传送 相当于高优先级的数据 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 确认ACK 只有当ACK 1时确认号字段才有效 当ACK 0时 确认号无效 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 推送PSH PuSH 接收TCP收到PSH 1的报文段 就尽快地交付接收应用进程 而不再等到整个缓存都填满了后再向上交付 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 复位RST ReSeT 当RST 1时 表明TCP连接中出现严重差错 如由于主机崩溃或其他原因 必须释放连接 然后再重新建立运输连接 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 同步SYN 同步SYN 1表示这是一个连接请求或连接接受报文 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 终止FIN FINis 用来释放一个连接 FIN 1表明此报文段的发送端的数据已发送完毕 并要求释放运输连接 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 窗口字段 占2字节 用来让对方设置发送窗口的依据 单位为字节 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 检验和 占2字节 检验和字段检验的范围包括首部和数据这两部分 在计算检验和时 要在TCP报文段的前面加上12字节的伪首部 TCP首部 20字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 比特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字节固定首部 目的端口 数据偏移 检验和 选项 长度可变 源端口 序号 紧急指针 窗口 确认号 保留 FIN SYN RST PSH ACK URG 位08162431 填充 填充字段 这是为了使整个首部长度是4字节的整数倍 TCP伪首部的信息来自IP数据报的首部 协议字段指明当前协议为TCP 6 TCP段的发送端和接收端在计算校验和时都会加上伪首部信息 若接收端验证校验和是正确的 则说明数据到达了正确主机上正确协议的正确端口 8 3TCP连接的建立和拆除 8 3 1TCP连接的建立为了实现数据的可靠传输 TCP要在应用进程间建立传输连接 从理论上讲 建立传输连接只需要一个请求和一个响应就可以了 但是由于通信子网的问题 请求有可能丢失 为了解决请求的丢失问题 常用的办法是超时重传 客户发出连接请求时 启动一个定时器 一旦定时器超时 客户将被迫再次发起连接请求 会导致重复连接 解决重复连接的办法 三次握手方法 三次握手方法要求对所有报文进行编号 TCP采用的方法是给每个字节一个32比特的序号 每次建立连接时都产生一个新的初始序号 序号字段位数定长 序号循环使用 序号字段位数较长 当序号循环一周回来时 使用同一序号的旧报文段早已传输完 这样 保证网络中不会同时出现来自同一源主机的相同序号的两个不同报文段 建立连接前 服务器端首先被动打开其熟知的端口 对端口进行监听 当客户端要和服务器建立连接时 发起一个主动打开端口的请求 临时端口 然后进入三次握手过程 第一次握手 由要建立连接的客户向服务器发出连接请求段 该段首部的同步标志SYN被置为1 并在首部中填入本次连接的客户端的初始段序号SEQ 例如SEQ 26500 第二次握手 服务器收到请求后 发回连接确认 SYN ACK 该段首部中的同步标志SYN被置为1 表示认可连接 首部中的确认标志ACK被置为1 表示对所接收的段的确认 与ACK标志相配合的是准备接收的下一序号 ACK26501 该段还给出了自己的初始序号 例如SEQ 29010 对请求段的确认完成了一个方向上连接 第三次握手 客户向服务器发出的确认段 段首部中的确认标志ACK被置为1 表示对所接收的段的确认 与ACK标志相配合的准备接收的下一序号被设置为收到的段序号加1 ACK29011 完成了另一个方向上的连接 8 3 2TCP连接的拆除连接双方都可以发起拆除连接操作 简单地拆除连接可能会造成数据丢失 例如 A B两主机已建立连接并传输报文 A主机在B主机没有准备的情况下 单方面发出断开连接请求 并停止接收该连接上的数据 但断开连接请求的传输要有一段时间 而在B主机未收到断开连接请求之前 随时可能向A主机发送数据 会有丢失数据的可能性 解决 TCP采用和三次握手类似的方法 这里可以将断开连接操作视为在两个方向上分别断开连接操作构成 一方发出断开连接请求后并不马上拆除连接 而是等待对方的确认 对方收到断开连接请求后 发送确认报文 这时拆除的只是单方向上连接 半连接 对方发送完数据后 再通过发送断开连接请求来断开另一个方向上的半连接 返回 8 4TCP流量控制 TCP除了提供进程通信能力外 主要特点是具有高可靠性 TCP在发送端与接收端之间建立一条连接 报文需要得到接收端的确认 TCP传输的是一个无报文丢失 重复和失序的正确的数据流 TCP采用的最基本的可靠性技术 流量控制拥塞控制差错控制 问题 在面向连接的传输过程中 发送方与接收方在发送报文的速率方面要协调一致 若发送方一味地向网络注入数据 则可能造成网络拥塞或因接收方来不及处理而丢失数据 若发送方每发出一个报文都等待对方的确认 势必造成效率低下 解决 滑动窗口协议 采用滑动窗口协议既能够保证可靠性 又可以充分利用网络的传输能力 这种方案允许连续传输多个报文而不必等待各个报文的确认 能够连续发送的报文数受到窗口大小的限制 滑动窗口协议通过发送方窗口和接收方窗口的配合来完成传输控制 发送缓存中是一组顺序编号的字节数据 这些数据的一部分在发送窗口中 另一部分在发送窗口外 图中发送缓存左端和右端空白处表示可以填入数据的空闲缓存 实际上可以将缓存视为左端和右端相连的环 一旦窗口内的部分数据得到确认 窗口便向右滑动 将已确认的数据移到窗口的外面 这些数据所对应的缓冲单元成为空闲单元 窗口右边沿的移动使新的数据又落入到窗口中 成为可以被连续发送的数据的一部分 接收方的窗口反映当前能够接收的数据的数量 图8 9给出了接收方缓存与窗口的示意图 接收端窗口的大小W对应接收端缓存可以继续接收的数据量 它等于接收缓存大小M减去缓存中尚未提交的数据字节数N 即W M N 接收方窗口的大小取决于接收方处理数据的速度和发送方发送数据的速度 当从缓存取走数据的速度低于数据进入缓存的速度时 接收窗口逐渐缩小 反之则逐渐扩大 接收方将当前窗口大小通告给发送方 利用TCP段首部的窗口大小字段 发送方根据接收窗口调整其发送窗口 使发送方窗口始终小于或等于接收方窗口的大小 通过使用滑动窗口协议限制发送方一次可以发送的数据量 就可以实现流量控制的目的 这里的关键是要保证发送方窗口小于或等于接收方窗口的大小 当发送方窗口大小为1时 每发送一个字节的数据都要等待对方的确认 这便是简单停等协议 流量控制可以在网络协议的不同层次上实现 TCP的流量控制是在传输层上实现的端到端的流量控制 返回 8 5TCP拥塞控制 流量控制是由于接收端不能及时处理数据而引发的控制机制 拥塞是由于网络中的路由器超载而引起的严重延迟现象 拥塞的发生会造成数据的丢失 数据的丢失会引起超时重传 而超时重传的数据又会进一步加剧拥塞 如果不加以控制 最终将会导致系统的崩溃 拥塞造成的数据丢失 仅仅靠超时重传是无法解决的 因此 TCP提供了拥塞控制机制 TCP的拥塞控制 仍然是利用发送方的窗口来控制注入网络的数据流的速度 减缓注入网络的数据流后 拥塞就会被解除 引入拥塞控制后 发送窗口的大小取决于两个方面的因素 接收方的处理能力 确认报文所通告的窗口大小 即可用的接收缓存的大小 来表示 网络的处理能力 发送方所设置的变量 拥塞窗口来表示 发送窗口的大小取通告窗口和拥塞窗口中小的一个 发送窗口大小 min 接收方通告窗口大小 拥塞窗口大小 和接收窗口一样 拥塞窗口也处于不断的调整中 一旦发现拥塞 TCP将减小拥塞窗口 为了避免和消除拥塞 TCP周而复始地采用三种策略来控制拥塞窗口的大小 首先是使用慢启动策略 在建立连接时拥塞窗口被设置为一个最大段大小MSS 对于每一个段的确认都会使拥塞窗口增加一个MSS 实际上这种增加方式是指数级的增加 例如 开始时只能发送一个数据段 当收到该段的确认后拥塞窗口加大到两个MSS 发送方接着发送两个段 收到这两个段的确认后 拥塞窗口加大到4个MSS 接下来发送4个段 拥塞窗口加大到8个MSS 当拥塞窗口加大到门限值 拥塞发生时拥塞窗口的一半 时 进入拥塞避免阶段 在这一阶段 使用的策略是 每收到一个确认 拥塞窗口加大1个MSS 即使确认是针对多个段的 拥塞窗口也只加大1个MSS 这在一定程度上减缓了拥塞窗口的增长 但在此阶段 拥塞窗口仍在增长 最终可能导致拥塞 拥塞使重传定时器超时 发送方进入拥塞解决阶段 发送方在进行重传的同时 将门限值调整为拥塞窗口的一半 并将拥塞窗口恢复成一个MSS 然后进入新一轮的循环 返回 8 6TCP差错控制 差错控制是TCP保证可靠性的手段之一 TCP的差错控制包括差错检测和纠正 TCP处理的差错有数据被破坏 重复 失序和丢失 数据被破坏可以通过TCP的校验和检测出来 接收方丢弃出错的数据 而且不给出确认 发送方定时器超时后 重发该数据 重复数据段一般是由超时重传造成的 接收方可以根据序号判断是否是重复数据段 对于重复数据段只需要简单地丢弃即可 数据失序是由于TCP下面的IP协议是无连接的数据报协议 不能保证数据报的按序到达 TCP对于提前到达 前面的数据还未到达 的数据 暂不确认 直到前面的数据到达后再一起确认 数据丢失错误也是通过超时重传来进行恢复 但是确认报文段的丢失一般不会造成任何影响 因为TCP采用的是累计确认 TCP确认针对流中的字节序号 而不是段号 一般情况下 接收方确认已正确收到的 连续的流前部 对于接下去的数据段的确认也就包含了对前面数据的确认 若下一个确认未能在重传定时器超时之前到达发送方 则会出现重复报文段 重复数据会被接收方鉴别出来 根据序号 并被丢弃 超时重传最关键的因素是重传定时器的定时时间片的大小 由于在因特网这种大型网络中传输延迟变化范围很大 从发出数据到收到确认所需的往返时间 RoundTriptTime RTT 动态变化 很难确定 为了适应传输延迟的动态变化 TCP的重传定时值也要不断调整 TCP通过测试连接的往返时间 对重传定时值进行修正 TCP的重传定时值根据下式进行计算 Timeout RTT 1 为大于1的常数加权因子 推荐 2 RTT为估算的往返时间 RTT根据下式进行计算 RTT RTTo 1 RTTn 2 返回 8 7TCP状态转换图 TCP建立连接 传输数据和断开连接是一个复杂的过程 为了准确地描述这一过程 可以采用有限状态机 有限状态机包含有限个状态 在某一时刻 机器必然处于某一特定状态 当在一个状态下发生特定事件时 机器会进入一个新的状态 在进行状态转换时 机器可以执行一些动作 图8 11是TCP的有限状态机 图中状态用方框表示 状态转移用带箭头的线表示 线旁的说明用斜线分为两部分 斜线前是引起状态转移的事件 斜线后是状态转移时所发出的动作 返回 8 8用户数据报协议UDP 用户数据报协议UDP UserDatagramProtocol 是TCP IP传输层的另一个协议 TCP IP同时提供TCP服务和UDP服务的目的是为了给用户更加灵活的选择 UDP同IP协议一样提供无连接数据报传输 UDP在IP协议上增加了进程通信能力 UDP除了提供进程间的通信能力外 还提供了简单的差错控制 但UDP不提供流量控制 也不对UDP数据报进行确认 8 8 1UDP数据报格式UDP将应用层的数据封装成UDP数据报进行发送 UDP数据报由首部和数据构成 UDP采用定长首部 长度为8个字节 UDP数据报格式如图8 13所示 UDP建立在IP之上 整个UDP数据报被封装在IP数据报中传输 虽然16比特的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论