Transcript PPT
计算机网络基础 Ⅲ Week 04 目录 1 运输层协议概述 1.1 进程之间的通信 1.2 运输层的两个主要协议 1.3 运输层的端口 2 用户数据报协议UDP 2.1 UDP 概述 2.2 UDP 的首部格式 目录 3 传输控制协议TCP 概述 3.1 TCP 最主要的特点 3.2 TCP 的连接 4 可靠传输的工作原理 4.1 停止等待协议 4.2 连续ARQ 协议 5 TCP 报文段的首部格式 目录 6 TCP 可靠传输的实现 6.1 以字节为单位的滑动窗口 6.2 超时重传时间的选择 7 TCP的流量控制 7.1 利用滑动窗口实现流量控制 7.2 必须考虑传输效率 目录 8 TCP 的拥塞控制 8.1 拥塞控制的一般原理 8.2 几种拥塞控制方法 9 TCP 的运输连接管理 9.1 TCP 的连接建立 9.2 TCP 的连接释放 进程之间的通信 • 从通信和信息处理的角度看,运输层向它上面的应用层 提供通信服务,它属于面向通信部分的最高层,同时也 是用户功能中的最低层。 • 当网络的边缘部分中的两个主机使用网络的核心部分的 功能进行端到端的通信时,只有位于网络边缘部分的主 机的协议栈才有运输层,而网络核心部分中的路由器在 转发分组时都只用到下三层的功能。 进程之间的通信 运输层为相互通信的应用进程提供了逻辑通信 应用进程之间的通信 • 两个主机进行通信实际上就是两个主机中的应用进程互 相通信。 • 应用进程之间的通信又称为端到端的通信。 • 运输层的一个很重要的功能就是复用和分用。 • 应用层不同进程的报文通过不同的端口向下交到运输层, 再往下就共用网络层提供的服务。 • “运输层提供应用进程间的逻辑通信”。“逻辑通信”的意 思是:运输层之间的通信好像是沿水平方向传送数据。 但事实上这两个运输层之间并没有一条水平方向的物理 连接。 运输层协议和网络层协议的主要区别 运输层的主要功能 • 运输层为应用进程之间提供端到端的逻辑通信(但网络 层是为主机之间提供逻辑通信)。 • 运输层还要对收到的报文进行差错检测。 • 运输层需要有两种不同的运输协议,即面向连接的TCP 和无连接的UDP。 两种不同的运输协议 • 运输层向高层用户屏蔽了下面网络核心的细节(如网络 拓扑、所采用的路由选择协议等),它使应用进程看见 的就是好像在两个运输层实体之间有一条端到端的逻辑 通信信道。 • 当运输层采用面向连接的TCP 协议时,尽管下面的网络 是不可靠的(只提供尽最大努力服务),但这种逻辑通 信信道就相当于一条全双工的可靠信道。 • 当运输层采用无连接的UDP协议时,这种逻辑通信信道 是一条不可靠信道。 运输层的两个主要协议 TCP/IP 的运输层有两个不同的协议: (1) 用户数据报协议UDP (User Datagram Protocol) (2) 传输控制协议TCP (Transmission Control Protocol) TCP 与UDP • 两个对等运输实体在通信时传送的数据单位叫作运输协 议数据单元TPDU (Transport Protocol Data Unit)。 • TCP 传送的数据单位协议是TCP 报文段(segment) • UDP 传送的数据单位协议是UDP 报文或用户数据报。 TCP/IP 体系中的运输层协议 TCP 与UDP • UDP在传送数据之前不需要先建立连接。对方的运输层 在收到UDP报文后,不需要给出任何确认。虽然UDP不 提供可靠交付,但在某些情况下UDP是一种最有效的工 作方式。 • TCP则提供面向连接的服务。TCP不提供广播或多播服务。 由于TCP要提供可靠的、面向连接的运输服务,因此不 可避免地增加了许多的开销。这不仅使协议数据单元的 首部增大很多,还要占用许多的处理机资源。 还要强调两点 • 运输层的UDP用户数据报与网际层的IP数据报有很大区 别。IP数据报要经过互连网中许多路由器的存储转发, 但UDP用户数据报是在运输层的端到端抽象的逻辑信道 中传送的。 • TCP报文段是在运输层抽象的端到端逻辑信道中传送, 这种信道是可靠的全双工信道。但这样的信道却不知道 究竟经过了哪些路由器,而这些路由器也根本不知道上 面的运输层是否建立了TCP连接。 运输层的端口 • 运行在计算机中的进程是用进程标识符来标志的。 • 运行在应用层的各种应用进程却不应当让计算机操作系 统指派它的进程标识符。这是因为在因特网上使用的计 算机的操作系统种类很多,而不同的操作系统又使用不 同格式的进程标识符。 • 为了使运行不同操作系统的计算机的应用进程能够互相 通信,就必须用统一的方法对TCP/IP 体系的应用进程进 行标志。 需要解决的问题 • 由于进程的创建和撤销都是动态的,发送方几乎无法识 别其他机器上的进程。 • 有时我们会改换接收报文的进程,但并不需要通知所有 发送方。 • 我们往往需要利用目的主机提供的功能来识别终点,而 不需要知道实现这个功能的进程。 端口号(protocol port number) • 解决这个问题的方法就是在运输层使用协议端口号 (protocol port number),或通常简称为端口(port)。 • 虽然通信的终点是应用进程,但我们可以把端口想象是 通信的终点,因为我们只要把要传送的报文交到目的主 机的某一个合适的目的端口,剩下的工作(即最后交付 目的进程)就由TCP 来完成。 软件端口与硬件端口 • 在协议栈层间的抽象的协议端口是软件端口。 • 路由器或交换机上的端口是硬件端口。 • 硬件端口是不同硬件设备进行交互的接口,而软件端口 是应用层的各种协议进程与运输实体进行层间交互的一 种地址。 TCP 的端口 • 端口用一个16位端口号进行标志。 • 端口号只具有本地意义,即端口号只是为了标志本计算 机应用层中的各进程。在因特网中不同计算机的相同端 口号是没有联系的。 三类端口 • 熟知端口:数值一般为0~1023。 • 登记端口号:数值为1024~49151,为没有熟知端口号的 应用程序使用的。使用这个范围的端口号必须在”互联网 编号分配机构”IANA (Internet Assigned Numbers Authority) 登记,以防止重复。 • 客户端口号或短暂端口号:数值为49152~65535,留给 客户进程选择暂时使用。当服务器进程收到客户进程的 报文时就知道了客户进程所使用的动态端口号。通信结 束后,这个端口号可供其他客户进程以后使用。 常见端口号 TCP 21端口:FTP 文件传输服务 TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 TCP 1863端口:MSN Messenger的文件传输功能所使用的端口 TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口 TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 TCP 5000端口:MS SQL Server使用的端口 UDP 8000端口:腾讯QQ 用户数据报协议UDP • UDP只在IP的数据报服务之上增加了很少一点的功能, 即端口的功能和差错检测的功能。 • 虽然UDP用户数据报只能提供不可靠的交付,但UDP在 某些方面有其特殊的优点。 UDP 的主要特点 • UDP 是无连接的,即发送数据之前不需要建立连接。 • UDP 使用尽最大努力交付,即不保证可靠交付,同时也 不使用拥塞控制。 • UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体 通信的要求。 • UDP 支持一对一、一对多、多对一和多对多的交互通信。 • UDP 的首部(不包括伪首部)开销小,只有8 个字节。 面向报文的UDP 发送方UDP 对应用程序交下来的报文,在添加首部后就向 下交付IP 层。UDP 对应用层交下来的报文,既不合并,也 不拆分,而是保留这些报文的边界。 应用层交给UDP 多长的报文,UDP 就照样发送,即一次发 送一个报文。 接收方UDP 对IP 层交上来的UDP 用户数据报,在去除首部 后就原封不动地交付上层的应用进程,一次交付一个完整 的报文。 应用程序必须选择合适大小的报文。 面向报文的UDP UDP的首部格式 UDP的首部格式 用户数据报用户数据报UDP 有两个字段:数据字段和首部 字段。首部字段有8 个字节,由4 个字段组成,每个字段都 是两个字节。 UDP的首部格式 在计算检验和时,临时把“伪首部”和UDP 用户数据报连接 在一起。伪首部仅仅是为了计算检验和。 传输控制协议TCP • • • • • • TCP 是面向连接的运输层协议。 每一条TCP 连接只能有两个端点(endpoint) 每一条TCP 连接只能是点对点的(一对一)。 TCP 提供可靠交付的服务。 TCP 提供全双工通信。 面向字节流。 理解TCP • 所谓面向连接的,是指在彼此通信前要先建立连接。同 时这种点对点的连接表明了TCP不支持多播和广播。 • 所谓可靠的,是指TCP有一堆保证数据传输准确的机制。 • 所谓字节流,是指TCP接收端并不知道发送端每次向该 连接写入了多少数据,只关心通过限制能从连接中最大 字节数。 TCP面向流的概念 应当注意 • TCP 连接是一条虚连接而不是一条真正的物理连接。 • TCP 对应用进程一次把多长的报文发送到TCP 的缓存中 是不关心的。 • TCP 根据对方给出的窗口值和当前网络拥塞的程度来决 定一个报文段应包含多少个字节(UDP 发送的报文长度 是应用进程给出的)。 • TCP 可把太长的数据块划分短一些再传送。TCP 也可等 待积累有足够多的字节后再构成报文段发送出去。 TCP 的连接 • TCP 把连接作为最基本的抽象。 • 每一条TCP 连接有两个端点。 • TCP 连接的端点不是主机,不是主机的IP 地址,不是应 用进程,也不是运输层的协议端口。TCP 连接的端点叫 做套接字(socket)或插口。 • 端口号拼接到(contatenated with) IP 地址即构成了套接字。 套接字(socket) 每一条TCP 连接唯一地被通信两端的两 个端点(即两个套接字)所确定。即: 可靠传输的工作原理 停止等待协议 请注意 • 在发送完一个分组后,必须暂时保留已发送的分组的副 本。 • 分组和确认分组都必须进行编号。 • 超时计时器的重传时间应当比数据在分组传输的平均往 返时间更长一些。 确认丢失和确认迟到 可靠通信的实现 • 使用上述的确认和重传机制,我们就可以在不可靠的传 输网络上实现可靠的通信。 • 这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。 • ARQ 表明重传的请求是自动进行的。接收方不需要请求 发送方重传某个出错的分组。 TCP 报文段的首部格式 字段说明 • 16位源端口号:指建立连接(或发送数据)的端口号 • 16位目的端口号:指连接另一端(或接受数据)的端口 号 • 32位序号:发送的字节序号,如果是新建立的连接,则 第一个包的seq为0,否则为上一个数据包的确认序号。 同一个包中的序号和确认序号是不同的。 • 32位确认序号:等于接收到数据包的序号seq+数据包的 长度len。同时告诉对端,下一个数据包的开头字节序号。 • 4位首部长度:tcp包首部的长度。 字段说明 • URG:紧急指针有效。它使一端可以告诉另一端有些具 有某种方式的“紧急数据”已经放置在普通的数据流中。 • ACK:确认序号有效 • PSH:接收方应尽快将这个报文段交给应用层。发送方 使用PUSH标志通知接收方将所收到的数据全部提交给接 收进程。这里的数据包括与PUSH一起传送的数据以及接 收方TCP已经为接收进程收到的其他数据(还在TCP的缓 冲区中)。 • RST:重置连接 字段说明 SYN:同步信号,用于发起一个连接 FIN:发端完成发送任务,关闭连接 16位窗口大小:TCP的流量控制由连接的每一端通过声明的 窗口大小来提供。窗口大小为字节数,起始于确认序号字 段指明的值,这个值是接收端正期望接收的字节。窗口大 小是一个16 bit字段,因而窗口大小最大为65535字节。 16位校验和:检验和覆盖了整个的TCP报文段:TCP首部和 TCP数据。 16位紧急指针:只有当URG标志置1时紧急指针才有效。紧 急指针是一个正的偏移量,和序号字段中的值相加表示紧 急数据最后一个字节的序号。TCP的紧急方式是发送端向另 一端发送紧急数据的一种方式。 字段说明 选项:部分可选配置,主要有以下几种: 每个选项的开始是1字节kind字段,说明选项的类型。kind字段 为0和1的选项仅占1个字节。其他的选项在kind字节后还有len 字节。它说明的长度是指总长度,包括kind字节和len字节。 TCP可靠性传输 为方便描述可靠传输原理,假定数据传输只在一个方向上 进行,即A发 TCP的滑动窗口是以字节为单位的。为了便于说明,字节编 号取得很小。先假定A收到B发来的确认报文字段,其中窗 口是20字节,而确认号是31字节。(表明B期望接收到的下 一个序号是31,序号30之前的数据已经收到了)。如图所 示。送数据,B给出确认 TCP可靠性传输 发送窗口表示:在没有收到B的确认的情况下,可以连续把 窗口内的数据发送出去。凡是已经发送过的数据,在未收 到确认之前都必须暂时保留,以便超时重传使用。 发送窗口有如下特点: 1)发送窗口里面的序号表示允许发送的序号(如 31~50) 2)发送窗口的位置由窗口的前沿和后沿的位置共同 确定。发送窗口的后沿可能不动(没有收到确认),或者 前移(收到新的确认)。发送窗口的前沿通常是不断的向 前移动,但也可能不动。 TCP可靠性传输 现在假定A发送了序号为31-41的数据,如上图所示,图中可以 看出要描述一个发送窗口的状态需要三个指针P1, P2, P3。 小于P1的是已发送并收到确认的部分,大于P3的是不允许发 送部分。 P3-P1 = A的发送窗口(又称为通知窗口) P2-P1 = 已发送但尚未收到确认的字节数 P3-P2 = 允许发送但尚未收到的字节数(又称为可用窗口或有 效窗口) TCP可靠性传输 B的接收窗口大小为20。在接收窗口外面,到30号为止 的数据均发送过确认并交付主机使用,因此B不再保留(之 前的数据)。 如图所示,B收到了32和33的数据。这些数据没有按序到达, 因为序号为31的数据没有收到。由于B只能对按序到达的数 据中的最高序号给出确认,因此B的发送的确认号仍然是31, 而不能是32或33。 TCP可靠性传输 现在假定B收到序号为33的数据并把序号为31-33的数据交付给主机,然后B删 除这些数据。接着把接收窗口向前移动3个序号,同时给A发出确认。其窗口值 仍未20,但确认号34,表明B已经接收到序号33为止的数据。而B收到的37 38 40 的数据没有按序到达,先暂存在接收窗口中。 如果按照以上的方式进行发送数据。当发送窗口已满,可用窗口减小到0, 因此发送停止。如果发送窗口内所有数据都正确到达B,而发出的确认由于网络 问题没 有到达A,为保证传输,此时A只能认为B还没有收到这部分数据。于是 A经过一段时间过(由超时计时器控制)重传这部分数据,直到收到B的确认 为止。 利用滑动窗口实现流量控制 • 如果发送方把数据发送得过快,接收方可能会来不及接 收,这就会造成数据的丢失。所谓流量控制就是让发送 方的发送速率不要太快,要让接收方来得及接收。 • 利用滑动窗口机制可以很方便地在TCP连接上实现对发 送方的流量控制。 必须考虑传输速率 可以用不同的机制来控制TCP报文段的发送时机。如: • TCP维持一个变量,它等于最大报文段长度MSS。只要缓 存中存放的数据达到MSS字节时,就组装成一个TCP报文 段发送出去。 • 由发送方的应用进程指明要求发送报文段,即TCP支持 的推送( push )操作。 • 发送方的一个计时器期限到了,这时就把已有的缓存数 据装入报文段(但长度不能超过MSS)发送出去。 拥塞控制 • 拥塞:即对资源的需求超过了可用的资源。若网络中许 多资源同时供应不足,网络的性能就要明显变坏,整个 网络的吞吐量随之负荷的增大而下降。 • 拥塞控制:防止过多的数据注入到网络中,这样可以使 网络中的路由器或链路不致过载。拥塞控制所要做的都 有一个前提:网络能够承受现有的网络负荷。拥塞控制 是一个全局性的过程,涉及到所有的主机、路由器,以 及与降低网络传输性能有关的所有因素。 • 流量控制:指点对点通信量的控制,是端到端正的问题。 流量控制所要做的就是抑制发送端发送数据的速率,以 便使接收端来得及接收。 拥塞控制代价 • 需要获得网络内部流量分布的信息。 • 在实施拥塞控制之前,还需要在结点之间交换信息和各 种命令,以便选择控制的策略和实施控制。这样就产生 了额外的开销。 • 拥塞控制还需要将一些资源分配给各个用户单独使用, 使得网络资源不能更好地实现共享。 几种拥塞控制方法 慢开始和拥塞避免: • 发送方维持一个拥塞窗口 cwnd ( congestion window )的 状态变量。拥塞窗口的大小取决于网络的拥塞程度,并 且动态地在变化。发送方让自己的发送窗口等于拥塞。 • 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞, 拥塞窗口就再增大一些,以便把更多的分组发送出去。 但只要网络出现拥塞,拥塞窗口就减小一些,以减少注 入到网络中的分组数。 慢开始算法 慢开始算法:当主机开始发送数据时,如果立即所大量数 据字节注入到网络,那么就有可能引起网络拥塞,因为现 在并不清楚网络的负荷情况。因此,较好的方法是 先探测 一下,即由小到大逐渐增大发送窗口,也就是说,由小到 大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时, 先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而 在每收到一个对新的报文段的确认后,把拥塞窗口增加至 多一个MSS的数值。用这样的方法逐步增大发送方的拥塞 窗口 cwnd ,可以使分组注入到网络的速率更加合理。 拥塞避免算法 • 让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间 RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样 拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥 塞窗口增长速率缓慢得多。 • 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判 断网络出现拥塞(其根据就是没有收到确认),就要把 慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的 一半(但不能小于2)。然后把拥塞窗口cwnd重新设置 为1,执行慢开始算法。这样做的目的就是要迅速减少 主机发送到网络中的分组数,使得发生拥塞的路由器有 足够时间把队列中积压的分组处理完毕。 拥塞避免算法 快重传和快恢复 • 如果发送方设置的超时计时器时限已到但还没有收到确 认,那么很可能是网络出现了拥塞,致使报文段在网络 中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小 到1,并执行慢开始算法,同时把慢开始门限值ssthresh 减半。这是不使用快重传的情况。 • 快重传算法首先要求接收方每收到一个失序的报文段后 就立即发出重复确认(为的是使发送方及早知道有报文 段没有到达对方)而不要等到自己发送数据时才进行捎 带确认。 快重传 快重传 接收方收到了M1和M2后都分别发出了确认。现在假定接 收方没有收到M3但接着收到了M4。显然,接收方不能确 认M4,因为M4是收到的失序报文段。根据 可靠传输原理, 接收方可以什么都不做,也可以在适当时机发送一次对M2 的确认。但按照快重传算法的规定,接收方应及时发送对 M2的重复确认,这样做可以让 发送方及早知道报文段M3 没有到达接收方。发送方接着发送了M5和M6。接收方收 到这两个报文后,也还要再次发出对M2的重复确认。这样, 发送方共收到了 接收方的四个对M2的确认,其中后三个 都是重复确认。快重传算法还规定,发送方只要一连收到 三个重复确认就应当立即重传对方尚未收到的报文段M3, 而不必继续等待M3设置的重传计时器到期。由于发送方尽 早重传未被确认的报文段,因此采用快重传后可以使整个 网络吞吐量提高约20%。 快恢复 • 当发送方连续收到三个重复确认,就执行“乘法减小”算 法,把慢开始门限ssthresh减半。这是为了预防网络发生 拥塞。请注意:接下去不执行慢开始算法。 • 由于发送方现在认为网络很可能没有发生拥塞,因此与 慢开始不同之处是现在不执行慢开始算法(即拥塞窗口 cwnd现在不设置为1),而是把cwnd值设置为慢开始门 限ssthresh减半后的数值,然后开始执行拥塞避免算法 (“加法增大”),使拥塞窗口缓慢地线性增大。 快恢复 运输连接管理 主动建立连接 被动建立连接 主动关闭连接 被动关闭连接 建立连接 关闭连接