tcp连接的端点为(TCP的连接端点是)

      最后更新:2023-03-25 13:59:22 手机定位技术交流文章

      [计算机网络之六] 传输层

      传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。从传输层的角度,通信的真正端点并不是主机而是主机中的进程。传输层有分用和复用的功能。“复用”是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据,“分用”是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。网络层和运输层有明显的区别,网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。知名端口号:0~1023登记端口号:1024~49151客户端短暂端口号:49152~65535① 无连接。发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。② 尽最大努力交付。即不保证可靠交付,因此主机不需要维持复杂的连接状态表。③ 面向报文的。对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,UDP 一次交付一个完整的报文。用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有 8 个字节,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:① 源端口在需要对方回信时选用。不需要时可用全0。② 目的端口目的端口号。这在终点交付报文时必须使用。③ 长度用户数据报的长度,最小值为 8 (仅有首部)。④ 检验和检测用户数据报在传输中是否有错。有错就丢弃。用户数据报首部检验和的计算和校验都要计算出一个伪首部。① 面向连接。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接;传送数据完毕后,必须释放已经建立的 TCP 连接。类似于打电话:通话前要先拨号建立连接,通话结束后要挂机释放连接。② 一对一。TCP 连接只能是点对点的(一对一)。③ 可靠交付。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达。④ 全双工通信。通信双方的应用进程在任何时候都能发送和接收数据,TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。⑤ 面向字节流。TCP 中的 “流” 指的是流入到进程或从进程流出的字节序列。“面向字节流” 的含义:虽然应用程序和 TCP 的交互式一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串无结构的字节流。TCP 并不知道所传送的字节流的含义。TCP 不保证接收方应用程序锁收到的数据块和发送方应用程序所发出的数据块具有对应的大小关系。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样,当然接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层数据。TCP 连接是协议软件提供的一种抽象,每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定,即:TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}IP1 和 IP2 分别是两个端点主机的 IP 地址,port1 和 port2 分别是两端端点主机中的端口号。网络只能提供最大努力的服务,是不可靠的,因此 TCP 必须采用适当的措施才能使得两个运输层之间的通信变得可靠。当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告知发送方适当降低发送数据的速度,这样就可以在不可靠的传输信道实现可靠传输。ARQ(Auto Repeat-reQuest):自动重传请求。发送方每发送完一个分组就停止发送,等待接收方确认,在收到确认后再发送下一个分组。A 是发送方,B 是接收方。A 每发送一个分组后,等待 B 对该分组的确认后,再接着发送下一个分组。【发送方】A 发送的分组在传输过程中出错,可能是丢失了,也可能是分组受到干扰出错了【接收方】这时 B 直接丢弃分组,什么也不做(也不通知 A 受到的分组有差错)。【解决方案】发送方在每发送完一个分组时设置一个超时计数器,只要超过一段时间仍然没有接收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,这叫超时重传。反之在超时计时器到期之前收到了相应的确认,就撤销该超时计时器。第一,A 在发送完一个分组后,必须暂时保留已发送的分组的副本(在发生超时重传时使用)。只有在收到相应的确认后才能清楚暂时保留的分组副本。第二,分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组受到了确认,而哪一个分组还没有收到确认。第三,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。【发送方】超时重传时间内没有收到确认报文,无法确认是发送出错、丢失,还是接收方的确认丢失,超时计时器到期后就要重传。【接收方】丢弃收到的重复分组,不向上层交付;向发送方发送确认。【发送方】收下迟到的确认,并且丢弃发送方大部分时间都在等待确认,信道的利用率低使用流水线的 ARQ 可以提高信道利用率【发送方】维持一个发送窗口,位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。回退N帧协议:如果发送方发送了多个分组,但中间的某个分组丢失了,这时接收方只能对丢失分组之前的分组发出确认,而发送方无法知道丢失分组及后面分组的接收情况,只好把丢失分组及后面的分组重传一次,这叫Go-back-N,表示需要再退回来重传已发送过的 N 个分组。前面 20 个字节固定,因此 TCP 首部最小长度是 20 字节。TCP 的滑动窗口以字节为单位,窗口后沿的部分表示已发送且已收到通知,窗口里的序号表示允许发送的序号,窗口前沿之前的数据暂时不允许发送,需要等待收到接收方的确认后前沿往前移才可发送。描述一个发送窗口需要三个指针:P1、P2 和 P3,如图所示:小于 P1 的是已发送并已收到确认的部分,而大于 P3 的是不允许发送的部分。P3 - P1 = A 的发送窗口P2 - P1 = 已发送但尚未收到确认的字节数P3 - P2 = 允许发送但当前尚未发送的字节数(又称为可用窗口或有效窗口)接收方 B 接收窗口大小为20,因为未收到 31 的数据,即使已收到后面的序号 32、33 的数据,返回的确认号仍然是 31。现在接收方收到了 31、32、33,并返回确认号 33,接收窗口往前滑动 3 个序号,发送方接收到确认,发送窗口也向前滑动 3 个序号大小,现在 A 可以发送序号 51~53 的数据了。当发送方将发送窗口内的数据都发送出去,但是接收方的确认可能由于网络拥塞滞留,这时发送方发送窗口已满,可用窗口为 0,只能等待接收方的确认报文到达。TCP 为了保证可靠传输,要求必须受到对已发送报文的确认,如果超过一定时间未受到确认报文,则重传已发送的报文。这个时间就叫超时重传时间,很明显超时重传时间的大小设置应该更贴近网络的实际情况,如果网络状况好,就设短一点,否则使网络的空闲时间增大,降低了传输效率;网络差就设长一点,否则会引起很多不必要的重传,使网络负荷增大。TCP 采用了一种自适应的算法:RTT(报文段的往返时间)、RTTs(加权平均往返时间),RTTs 的计算公式:RTTd(RTT 的偏差的加权平均值)、RTO(RetransmissionTime-Out 超时重传时间):【场景】TCP 的接收方在接收对方发送过来的数据字节流的序号不连续,形成一些不连续的字节块,如果简单按照回退N帧协议处理,意味着要重传第一个未收到的序号数据块及之后的数据,如果能通知发送方已收到了哪些数据(选择确认),就可以让发送方只发送接收方未收到的数据。流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。当发送方收到接收方通知,将窗口缩小为 0 时,发送方将暂时不能发送数据了,必须等接收方通知更新接收窗口大小,但是这个通知又有可能丢失,导致发送方没收到通知。为了避免双方互相等待死锁,TCP 为每个链接设有一个持续计时器,只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是零,那么受到这个报文段的一方就重新设置持续计时器;如果窗口不是零,那么死锁的僵局就可以打破了。【优点】提高网络利用率【缺点】可能会发生某种程度的延迟【场景】接收数据的主机如果每次都立刻回复确认应答的话,可能会返回一个较小的窗口,因为接收方刚接收完数,缓冲区已满。【糊涂窗口综合征问题】TCP 接收方缓存已满,而交互式的应用进程一次只从接收缓存中读取 1 个字节(这样就使接收缓存空间仅腾出 1 个字节),然后向发送方发送确认,并把窗口设置为 1 个字节(但发送的数据报是 40 字节长,TCP 首部 + IP 数据报首部)。接着,发送方又发来 1 个字节的数据(注意发送方发送的 IP 数据报是 41 字节长)。接收方发回确认,仍然将窗口设置为 1 个字节。这样进行下去,使网络的效率很低。TCP 文件传输中,就采用了两个数据段返回一次确认应答,并且等待一定时间后没有其他数据包到达时也依然发送确认应答。当对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。【算法思路】当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入网络,那么就有可能引起网络发生拥塞。较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。【处理过程】慢开始门限值 ssthresh决定了拥塞窗口达到多大时要执行什么算法。① 当 cwnd < ssthresh 时,使用慢开始算法;② 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法;③ 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。在拥塞窗口 cwnd 达到门限值之前,发送方每一轮次收到确认应答后,cwnd 就增大为原来的两倍;达到门限值后,执行拥塞避免算法。PS. 慢开始只是表示初始发送数据少,不代表发送速率增长速度慢,实际上是指数级增长非常快。【算法思路】让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是像慢开始阶段那样加倍增长。拥塞避免阶段有“加法增大” 的特点,按线性规律缓慢增长,使网络比较不容易出现拥塞。【处理过程】在执行拥塞避免算法阶段,当网络出现超时时,发送方判断为网络拥塞,调整门限值为当前拥塞窗口的一半,即 ssthresh = cwnd / 2,同时拥塞窗口重置为 1,即 cwnd = 1,进入慢开始阶段。【算法原理】① 快重传【场景】有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。如果发送方迟迟收不到确认,就会产生超时,就会误认为网络发生了拥塞,导致发送方错误地启动慢开始,把拥塞窗口 cwnd 又设置为 1,因而降低了传输效率。【方案】接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认,当发送方一连收到 3 个重复确认,就知道接收方确实没有收到某个报文段,因而应当立即进行重传。② 快恢复:发送方知道只是丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法,调整发送方门限值 ssthresh = cwnd / 2,同时设置拥塞窗口 cwnd = ssthresh = 8,并开始执行拥塞避免算法。拥塞控制的流程如下:拥塞窗口 cwnd,接收方窗口 rwnd,发送方发送窗口的上限值 = Min[rwnd, cwnd]。① 当 rwnd < cwnd,接收方的接收能力限制发送方窗口大小;② 当 cwnd < rwnd,网络的拥塞程度限制发送方窗口大小。【问题背景】路由器采取分组丢弃策略,即按照先进先出(FIFO)规则处理分组,当队列已满时,则丢弃后面到达的分组,这叫尾部丢弃策略。丢失的分组会导致发送方出现超时重传,发送方转而执行慢开始算法,不同分组属于不同 TCP 连接,导致很多 TCP 同时进入慢开始状态,这种现象称为全局同步。【解决方案】主动队列管理 AQM:不等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组,而是在队列长度达到某个警惕值时就主动丢弃到达的分组,这样就提醒了发送方放慢发送的速率,因而有可能使网络拥塞的程度减轻,甚至不出现网络拥塞。TCP 是面向连接的协议,运输连接有三个阶段:连接建立、数据传送、连接释放。TCP 连接建立过程要解决的几个问题:① 使每一方能够确知对方的存在;② 允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);③ 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个 TCP 报文段,即三次握手。最初客户端和服务端都处于CLOSED(关闭)状态,A(Client)主动打开连接,B(Server)被动打开连接。一开始,B 的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。然后服务器进程就处于 LISTEN(收听)状态,等待客户端的连接请求。如有,即作出响应。第一次握手:A 的 TCP 客户进程也是首先创建传输控制块 TCB,准备接受客户进程的连接请求。然后在打算建立 TCP 连接时,向 B 发出连接请求报文段,这时首部中的同步位 SYN = 1,同时选择一个初始序号 seq = x。TCP 规定,SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP 客户进程进入SYN-SENT(同步已发送)状态。第二次握手:B 收到连接请求报文段后,如同意建立连接,则向 A 发送确认。在确认报文段中应把 SYN 位和 ACK 位都置 1,确认号是 ack = x + 1,同时也为自己选择一个初始序号 seq = y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时 TCP 服务器进程进入SYN-RCVD(同步收到)状态。第三次握手:TCP 客户进程收到 B 的确认后,还要向 B 给出确认。确认报文段的 ACK 置 1,确认号 ack = y + 1,而自己的序号 seq = x + 1。TCP 的标准规定,ACK 报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是 seq = x + 1。这时,TCP 连接已经建立,A 进入ESTABLISHED(已建立连接)状态。当 B 收到 A 的确认后,也进入 ESTABLISHED(已建立连接)状态。数据传输结束后,通信的方法都可释放连接。现在 A 和 B 都处于 ESTABLISHED 状态。第一次挥手:A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。A 把连接释放报文段首部的终止控制位 FIN 置 1,其序号 seq = u,它等于前面已传送过的数据的最后一个字节的序号加 1。这时 A 进入 FIN-WAIT-1(终止等待 1)状态,等待 B 的确认。请注意,TCP 规定,FIN 报文段即使不携带数据,它也消耗掉一个序号。第二次挥手:B 收到连接释放报文后即发出确认,确认号是 ack = u + 1,而这个报文段自己的序号是 v,等于 B 前面已传送过的最后一个字节的序号加 1。然后 B 就进入 CLOSE-WAIT(关闭等待)状态。TCP 服务器进程这时应通知高层应用程序,因而从 A 到 B 这个方向的连接就释放了,这时的 TCP 连接处于半关闭(half-close)状态,即 A 已经没有数据要发送了,但 B 若发送数,A 仍要接收。也就是说,从 B 到 A 这个方向的连接并未关闭,这个状态可能会持续一段时间。A 收到来自 B 的确认后,就进入 FIN-WAIT-2(终止等待 2)状态,等待 B 发出的连接释放报文段。第三次挥手:若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。这时 B 发出的连接释放报文段必须使 FIN = 1。现假定 B 的序号为 w(在半关闭状态 B 可能又发送了一些数据)。B 还必须重复上次已发送过的确认号 ack = u + 1。这时 B 就进入 LAST-ACK(最后确认)状态,等待 A 的确认。第四次挥手:A 在收到 B 的连接释放报文段后,必须对此发出确认。在确认报文段中把 ACK 置 1,确认号 ack = w + 1,而自己的序号是 seq = u + 1(根据 TCP 标准,前面发送过的 FIN 报文段要消耗一个序号)。然后进入 TIME-WAIT(时间等待)状态。请注意,现在 TCP 连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间 2MSL 后,A 才进入到 CLOSED 状态,然后撤销传输控制块,结束这次 TCP 连接。当然如果 B 一收到 A 的确认就进入 CLOSED 状态,然后撤销传输控制块。所以在释放连接时,B 结束 TCP 连接的时间要早于 A。
      [计算机网络之六] 传输层

      运输层知识要点——谢希仁《计算机网络》

      为了在计算机网络中有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所 交换数据的格式 以及有关的 同步 问题。 同步的含义:在一定条件下应当发生什么事件,因而含有时序的意思。网络协议:为进行网络中的数据交换而建立的规则、标准或约定。网络协议由以下三个要素组成:1)语法:即数据与控制信息的结构或格式2)语义:即需要发出何种控制信息,完成何种动作以及做出何种反应3)同步:即事件实现顺序的详细说明一、运输层协议的概述1.1 进程之间的通信1.2 运输层的两个主要协议1.3 运输层的端口二、用户数据报协议UDP2.1 UDP概述2.2 UDP的首部格式三、传输控制协议TCP概述3.1 TCP的最主要的特点3.2 TCP的连接四、可靠传输的工作原理4.1 停止等待协议4.2 连续ARQ协议五、TCP报文段的首部格式六、TCP可靠传输的实现6.1 以字节为单位的滑动窗口6.2 超时重传时间的选择6.3 选择确认SACK七、TCP的流量控制7.1 利用滑动窗口实现流量控制7.2 必须考虑传输效率八、TCP的拥塞控制8.1 拥塞控制的一般原理8.2 几种拥塞控制方法8.3 随机早期检测RED九、TCP的运输连接管理9.1 TCP的连接建立9.2 TCP的连接释放9.3 TCP的有限状态机//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1.1 进程之间的通信1.只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到了下三层的功能2.两个主机进行通信就是两个主机中的应用进程互相通信。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。(IP协议能把分组送到目的主机)网络层时为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。3.运输层一个重要功能——复用、分用。 (应用进程复用、分用运输层)1.2 运输层的两个主要协议1.UDP—User Datagram Protocol 用户数据报协议(无连接):DNS/RIP/DHCP/SNMP/NFSTCP—Transmission Control Protocol 传输控制协议(面向连接):SMTP/TELNET/HTTP/ FTP1.3 运输层的端口问题:为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须使用统一的方法(而这种方法必须与特定操作系统无关)对TCP/IP体系的应用进程进行标识。为什么不用进程号来区分?(第一,不同操作系统的进程标识符不同;第二,用功能来识别,而不是进程,例如邮件服务功能,而不管具体是哪个进程)解决方案:在运输层使用协议端口号,即端口。软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。(端口号只具有本地意义,只是为了标识本计算机应用层中各个进程在和运输层交互时的层间接口。)端口分为两大类:1)服务器使用的端口号:熟知端口号或系统端口号(0~1023);登记端口号(1024~49151)2)客户端使用的端口号:49152~655352.1 UDP概述1.UDP只在IP的数据报服务至上增加了很少一点功能,就是复用、分用以及差错检测功能2.特点1)无连接2)尽最大努力交付3)面向报文 (不合并、不拆分、保留这些报文的边界)4)UDP没有拥塞控制5)UDP支持一对一、一对多、多对一和多对多的交互通信6)UDP的首部开销小,只有8字节应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。2.2 UDP的首部格式1.traceroute 让发送的UDP用户数据报故意使用一个非法的UDP端口号,接收方丢弃报文,并由ICMP(网络控制报文协议)发送“端口不可达”差错报文给发送方。2.计算检验和。IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。(12字节的首部+真正的首部+数据来进行校验和的计算)Q1.为什么计算校验和要加12字节的伪首部Q2.计算校验和的原理是什么?3.1 TCP的最主要的特点1.面向连接的运输层协议(建立连接、传输数据、释放连接)2.点对点,每一条TCP连接只能有两个端点3.可靠交付(无差错、不丢失、不重复、并且按序到达)4.全双工通信。TCP连接的两端都设有发送缓存和接收缓存。5.面向字节流。(流指的是流入到进程或从进程流出的字节序列;面向字节流:TCP把应用程序交下来的数据看成是一连串的无结构字节流。 接收方的应用程序必须有能力识别接收到的字节流,把它还原成有意义的应用层数据。 因此TCP可以根据窗口值和当前网络状况调整发送的报文长度。划分短一点,或者积累到足够多再发送出去。)3.2 TCP的连接1.TCP把连接作为最基本的抽象。2.每一条TCP连接有两个端点。TCP连接的端点叫作套接字。套接字soket = (IP地址:端口号)每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。TCP连接 ::= {socket1, socket2}理想的传输条件有以下两个特点:1)传输信道不产生差错2)不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据实际的网络并不具备,因此:1)出现差错时,让发送方重传2)接收方来不及处理时,及时告诉发送方适当降低发送数据的速度4.1 停止等待协议1.“停止等待”就是没发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。2.超时重传。在每发完一个分组就设置一个超时计时器,如果在超时计时器之前收到对方的确认,就撤销已设置的超时计时器。如果未收到,就认为刚才的分组丢失,并重传。3.三种情况:A发送的分组出错、丢失;B发送的确认丢失;B发送的确认迟到确认丢失:B丢弃重复的分组,向A重传确认确认迟到:A丢弃重复的确认,B丢弃重复分组,并向A重传确认4.常称为自动重传请求ARQ,重传时自动进行的(超时即重传)5.缺点:信道利用率太低U=Td/(Td+RTT+Ta)为了提高传输效率,发送方不使用停止等待协议,而是采用流水线传输。流水线传输就是发送发可连续发送多个分组,不必等每发完一个分组就停顿下来等待对方的确认。(连续ARQ协议和滑动窗口协议)4.2 连续ARQ协议1.位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。2.累积确认:接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。3.缺点:Go-back-N (发送前5个分组,第3个分组丢失,后面三个要重传)1.源端口和目的端口2.序号。 每个字节都按顺序编号。3.确认号。 期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。4.数据偏移。 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远(也即TCP报文段首部长度)。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。5.窗口。窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着。6.1 以字节为单位的滑动窗口1.发送缓存用来暂存:1)发送应用程序传送给发送方TCP准备发送的数据;2)TCP已发送但未收到确认德尔数据2.接收缓存用来存放:1)按序到达的、但尚未被接收应收程序读取的数据;2)未按序到达的数据3.注意三点:1)A的发送窗口是根据B的接收窗口设置的,但是在同一时刻,由于网络传输的滞后,A的发送窗口并不总是B的接收窗口一样大2)TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程3)TCP接收方有累计确认功能(不能过分推迟发送确认,否则会导致发送方不必要的重传)6.2 超时重传时间的选择1.超时重传时间设置太短,会引起很多不必要的重传;如果设置太长,使网络的空闲时间增大,降低传输效率。2.新的RTTs = (1-a)x(旧的RTTs) + ax(新的RTT样本),其中RTT样本的时间为:记录一个报文段发出的时间,以及收到相应的确认时间,时间差就是报文段的往返时间RTT。3.RTO = RTTs + 4 x RTTd,其中RTO为超时重传时间,RTTd是RTT的偏差的加权平均值。新的RTTd = (1-b) x (旧的RTTd)+ b x |RTTs - 新的RTT样本|4.一个问题:发送一个报文段,设定的重传时间到了,还没有收到确认。于是重传报文段。经过一段时间,收到了确认报文段。现在的问题是:如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?1)解决方法1,在计算加权平均值RTTs时,只要报文段重传了,就不采用其往返时间样本。引入的问题:报文段的时延突然增大的情况2)解决方法2,报文段每重传一次,就把超时重传时间RTO增大一些(一般是2倍)。当不在发生报文段的重传时,再根据加权平均计算。6.3 选择确认SACKSACK文档并没有指明发送发应当怎样响应SACK。因此大多数的实现还是重传所有未被确认的数据块。7.1 利用滑动窗口实现流量控制1.流量控制:就是让发送方的发送速率不要太快,要让接收方来得及接收。2.利用滑动窗口机制可很方便地在TCP连接上实现对发送方的流量控制。发送方的发送窗口不能超过接收方给出的接收窗口的数值。3.死锁情况:B向A发送了零窗口的报文段后不久,B又有了一些缓存空间,因此B向A发送rwnd = 400.然而该报文段在传送过程中丢失。A一直等待B发送的非零窗口的通知,B也一直等待A发送的数据。( 窗口通知不超时重传?为什么? )解决方法:TCP为每个连接设有一个持续计时器。只要一方收到对方的零窗口通知,就启动计时器。计时器到期后,发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出了现在的窗口值。若仍为零,收到报文段的一方重新设置持续计时器。7.2 必须考虑传输效率1.应用程序把数据传送到TCP的发送缓存后,剩下的发送任务就由TCP来控制了。2.三种不同的机制来控制TCP报文段的发送时机:1)TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中的存放的数据达到MSS,就组装成一个TCP报文段发送出去2)由发送方的应用进程指明要求发送报文段,即TCP支持推送操作3)发送方设置一个定时器3.问题一、若用户只发送一个字节,则非常浪费带宽。解决方法:若发送应用程序把要发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去。(采用收到确认就发送+并开始缓存的方式;同时当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。)4.问题二、糊涂窗口综合症。接收缓存已满,应用程序一次只读取一个字节,然后向发送方发送确认。解决方法:让接收方等待一段时间,使得接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。则接收方就发出确认报文。8.1 拥塞控制的一般原理1.拥塞的定义:对资源的需求 > 可用资源。 在计算机网络中的链路带宽、交换结点中的缓存和处理机等,都是网络中的资源。2.拥塞解决不能靠解决某一个部分的问题。因为这会将瓶颈转移到其他地方。问题的实质往往是整个系统的各个部分不匹配。只有所有部分都平衡了,问题才会得到解决。3.拥塞控制与流量控制的比较。1)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制有个前提:网络能够承受现有的网络负荷拥塞控制是一个全局性过程。(发送拥塞时,不知道在某处、什么原因造成的)2)流量控制:点对点通信量的控制,是个端到端的问题流量控制:抑制发送端发送数据的速率,以便使接收端来得及接收。4.寻找拥塞控制的方案无非就是使不等式 “对资源的需求 > 可用资源 ”不再成立的条件。但是必须考虑该措施带来的其他影响。5.计算机网络是个复杂的系统。从控制理论的角度来看拥塞控制,可以分为开环控制和闭环控制两种方法。1)开环控制:设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦系统运行起来,就不再中途改正。2)闭环控制:基于反馈环路。步骤一、监测网络系统以便检测到拥塞在何时、何处发生;步骤二、把拥塞发生的信息传送到可采取行动的地方步骤三、调整网络系统的运行以解决出现的问题8.2 几种拥塞控制方法(只考虑网络拥塞程度,即假设接收方总是有足够大的缓存空间)1.慢开始和拥塞避免1)发送方维持一个拥塞窗口。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口增大;如果网络出现拥塞,则减小。2)慢开始的思路:由小到大逐渐增大拥塞窗口数值。每收到一个对新的报文段的确认,把拥塞窗口增加至多一个MSS的数值。(没经过一个传输轮次,拥塞窗口cwnd就加倍)轮次:把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一字节的确认。慢开始的“慢”并不是指cwnd的增长速率慢,而是指TCP开始发送报文段时先设置cwnd=1(一个MSS数值)。3)慢开始门限ssthresh为防止拥塞窗口增长过大,引入一个慢开始门限ssthresh。当cwnd < ssthresh时,使用上述的慢开始算法当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法4)拥塞避免算法思路:让拥塞窗口cwnd缓慢增大,即没经过一个往返时间RTT就把发送方的拥塞窗口cwnd增加1,而不是加倍。5)慢开始门限的设置只要发送方判断网络出现拥塞(没有按时收到确认),就把慢开始门限ssthresh设置为出现拥塞时发送方窗口值的一半,然后把拥塞窗口cwnd重置为1,执行慢开始算法。6)乘法减小和加法增大乘法减小:网络出现拥塞时,把慢开始门限ssthresh减半(当前的ssthresh的一半),并执行慢开始算法。加法增大:执行拥塞避免方法2.快重传和快恢复1)快重传(尽快重传未被确认的报文段)首先,要求接收方每收到一个失序的报文段后就立即发出重复确认。(如接收方收到了M1和M2后都分别发出了确认,但接收方没有收到M3但接着收到了M4。此时接收方立即发送对M2的重复确认。)其次,发送方只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段M3.2)快恢复要点一、当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。要点二、由于发送方认为网络很可能没有发生拥塞(因为收到了连续的重复确认),把cwnd设置为慢开始门限ssthresh减半后的值,然后开始执行拥塞避免算法慢开始算法只在TCP连接建立时和网络出现超时才使用。3.发送方的窗口发送方窗口的上限值 = Min [rwnd, cwnd]8.3 随机早期检测RED(IP层影响TCP层的拥塞控制)1.网络层的分组丢弃策略网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。如果路由器队列已满,则后续到达的分组将都被丢弃。这就叫做尾部丢弃策略。2.全局同步由于TCP复用IP,若发生路由器中的尾部丢弃,就可能会同时影响到很多条TCP连接,结果就使许多TCP连接在同一时间突然都进入到慢开始状态。全局同步使得全网的通信量突然下降了很多,网络恢复正常后,其通信量又突然增大很多。3.随机早期检测RED使路由器的队列维持两个参数,即队列长度最小门限THmin和最大门限THmax。当每一个分组到达时,RED就先计算平均队列长度Lav。RED算法是:1)若平均队列长度小于最小门限THmin,则把新到达的分组放入队列进行排队2)若平均队列长度超过最大门限THmax,则把新到达的分组丢弃3)若平均队列长度在最小门限THmin和最大门限THmax之间,则按照某一概率p将新到达的分组丢弃。随机体现在3),在检测到网络拥塞的早期征兆时(即路由器的平均队列长度超过一定的门限值时),就先以概率p随机丢弃个别的分组,让拥塞控制只在个别的TCP连接上进行,因而避免发生全局性的拥塞控制。4.平均队列长度Lav和分组丢弃概率pLav = (1-d) x (旧的Lav) +d x (当前的队列长度样本)p = ptemp / (1- count x ptemp)ptemp = pmax x (Lav - THmin) / (THmax - THmin)TCP时面向连接的协议。运输连接就有三个阶段:连接建立、数据传送和连接释放运输连接的管理:使运输连接的建立和释放都能正常地进行。在TCP连接建立过程中要解决以下三个问题:1)要使每一方能够确知对方的存在2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳等等)3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配9.1 TCP的连接建立1.TCP规定,SYN=1报文段不能携带数据,但消耗一个序号2.TCP规定,ACK=1报文段可以携带数据,如果不携带数据则不消耗序号3.为什么A还要发送一次确认?为了防止已失效的连接请求报文突然又传送到B,因而产生错误。“已失效的连接请求报文段”A发出第一个连接请求报文段,在网络中滞留超时,又发出了第二个连接请求。但B收到第一个延迟的失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立。此时A不会理睬B的确认,也不会发数据,但B一直等A发送数据,B的许多资源就浪费了。采用三次握手,A不会向B发送确认,因此B就知道A并没有要求建立确认。9.2 TCP的连接释放1.TCP规定,FIN报文段基石不携带数据,也消耗一个序号2.第二次握手后,TCP通知高层应用程序,因而从A到B这个方向的连接就释放,TCP连接处于半关闭状态3.为什么A在TIME-WAIT状态必须等待2MSL的时间1)为了保证A发送的最后一个ACK报文段能够到达B。因为ACK可能丢失,此时B可能会超时重传,然后A重传确认,并重新启动2MSL计时器2)防止“已失效的连接请求报文段”出现在本连接中。可以使本连接持续时间内所产生的所有报文段都从网络中消失。 9.3 TCP的有限状态机
      运输层知识要点——谢希仁《计算机网络》

      Internet(因特网)上最基本的通信协议是?

      TCP/IP协议。TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。TCP/IP起源于60年代末美国政府资助的一个分组交换网络的研究项目,到90年代已经发展成为计算机之间最常应用的组网形式,是一个真正的开放系统。扩展资料CP与UDP的比较:UDP(User Datagram Protocol),用户数据报协议,1、提供无连接的,不可靠的传输。传输速度较快。缺点是不可靠、不稳定。2、发送数据之前不需要建立连接,减少了开销和时延。UDP没有阻塞机制,宁愿阻塞时丢弃数据不传,也不阻塞造成延时。3、UDP支持一对一、一对多、多对一、多对多通信。TCP(Transmission Control Protocol)传输控制协议。1、面向连接的、提供可靠的数据传输服务,但是开销较大、传输速度较慢。2、使用TCP通信之前,需要进行“三次握手”建立连接,通信结束后需要“四次挥手”断开连接。3、TCP是点对点的连接,一条TCP连接只能连接两个端点。4、TCP是全双工通信,允许通信双方任何时候都能发送数据,发送数据按顺序、不丢失、不重参考资料来源:百度百科—TCP/IP协议
      Internet(因特网)上最基本的通信协议是TCP/IP协议。其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享。网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。扩展资料TCP/IP协议能够迅速发展起来并成为事实上的标准,是它恰好适应了世界范围内数据通信的需要。它有以下特点:(1)协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。(3)网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。(4)高层协议标准化,可以提供多种多样可靠网络服务。参考资料来源:百度百科-TCP/IP协议
      Internet(因特网)上最基本的通信协议是TCP/IP协议。 它是一种应用最为广泛的网络通信协议,也是Internet的标准连接协议。它提供了一整套方便实用、并能应用于多种网络上的协议,使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。准确的说TCP/IP协议是一个协议组(协议集合),其中包括了TCP协议和IP协议以及其他一些协议。
      TCP/IP协议TCP/IP协议,即TransmissionControl Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。为了减少网络设计的复杂性,大多数网络都采用分层结构。对于不同的网络,层的数量、名字、内容和功能都不尽相同。在相同的网络中,一台机器上的第N层与另一台机器上的第N层可利用第N层协议进行通信,协议基本上是双方关于如何进行通信所达成的一致。不同机器中包含的对应层的实体叫做对等进程。在对等进程利用协议进行通信时,实际上并不是直接将数据从一台机器的第N层传送到另一台机器的第N层,而是每一层都把数据连同该层的控制信息打包交给它的下一层,它的下一层把这些内容看做数据,再加上它这一层的控制信息一起交给更下一层,依此类推,直到最下层。最下层是物理介质,它进行实际的通信。相邻层之间有接口,接口定义下层向上层提供的原语操作和服务。相邻层之间要交换信息,对等接口必须有一致同意的规则。层和协议的集合被称为网络体系结构。
      Internet(因特网)上最基本的通信协议是?

      tcp和udp的特点和区别

      TCP协议的主要特点(1)TCP是面向连接的运输层协议;(2)每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;(3)TCP提供可靠的传输服务。传送的数据无差错、不丢失、不重复、按序到达;(4)TCP提供全双工通信。允许通信双方的应用进程在任何时候都可以发送数据,因为两端都设有发送缓存和接受缓存;(5)面向字节流。虽然应用程序与TCP交互是一次一个大小不等的数据块,但TCP把这些数据看成一连串无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系,例如,发送方应用程序交给发送方的TCP10个数据块,但就受访的TCP可能只用了4个数据块久保收到的字节流交付给上层的应用程序,但字节流完全一样。UDP协议特点(1)UDP是无连接的传输层协议;(2)UDP使用尽最大努力交付,不保证可靠交付;(3)UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界;(4)UDP没有拥塞控制,因此即使网络出现拥塞也不会降低发送速率;(5)UDP支持一对一 一对多 多对多的交互通信;(6)UDP的首部开销小,只有8字节。TCP和UDP的区别(1)TCP是可靠传输,UDP是不可靠传输;(2)TCP面向连接,UDP无连接;(3)TCP传输数据有序,UDP不保证数据的有序性;(4)TCP不保存数据边界,UDP保留数据边界;(5)TCP传输速度相对UDP较慢;(6)TCP有流量控制和拥塞控制,UDP没有;(7)TCP是重量级协议,UDP是轻量级协议;(8)TCP首部较长20字节,UDP首部较短8字节;扩展资料:TCP的可靠性原理可靠传输有如下两个特点:a.传输信道无差错,保证传输数据正确;b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。基于TCP和UDP的常用协议HTTP、HTTPS、FTP、TELNET、SMTP(简单邮件传输协议)协议基于可靠的TCP协议。TFTP、DNS、DHCP、TFTP、SNMP(简单网络管理协议)、RIP基于不可靠的UDP协议常见协议的端口号FTP的20、21端口,21端口用来侦听用户的连接请求,而20端口用来传送用户的文件数据。TELNET 23SMTP 25DNS 53TFTP 69HTTP 80SNMP的161、162端口。SNMP的161端口用于SNMP管理进程获取SNMP代理的数据,而162端口用于SNMP代理主动向SNMP管理进程发送数据
      tcp:提供面向连接的服务,数据传输前先建立连接,传输完毕后释放连接,提供可靠连接; udp:发送数据前不需要先建立连接,发送后也不需要释放连接,减少开销和延迟,但不保证可靠交付。
      tcp和udp的特点和区别

      计算机网络_运输层

      在IP层看来,通信的两端是两个主机,IP数据报的首部明确的标志了这两个主机的IP地址。但是两个主机之间的通信这种说法还不够清楚,这是因为真正进行通信的实体是在主机中的进程,是两个进程之间在交换数据。从而引出了运输层,从运输层的角度看来,通信的真正端点并不是主机而是主机中的进程(端到端的通信)。在一个主机中经常有多个应用进程同时分别和另一个主机的多个应用进程通信。这就表明了运输层有一个很重要的功能,复用和分用,应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。TCP/IP 的运输层有两个不同的协议:由此可见两个计算机中的进程要相互通信,不仅要知道对方的IP地址,还要知道对方的端口号。如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口的号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送端口不可达差错报文给发送方。在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起得到一个临时的数据报,它不向下传递也不向上递交。伪首部仅仅是为了计算检验和。UDP计算检验和的方法和IP数据报首部检验和方法相类似。但不同的是,IP数据报的检验和只检验IP数据报的首部,但UDP的检验和是把首部和数据部分一起检验计算UDP检验和的例子:在发送方,先把全0放入检验和字段,再把伪首部以及UDP用户数据报看成是许多16位的字串接起来。若UDP用户报的数据部分不是偶数个字节,则要填入一个全零字节(先不发送)。然后按照二进制反码计算出这些16位字的和。将此和的二进制反码写入检验和字段后,就发送这样的UDP数据报。在接收方,把收到的UDP数据报连通伪首部(以及可能填充全零字节)一起,按二进制反码求这些16位字的和。当无差错时其结果应为全1(原本的检验和为0,封装成数据报后再次相加的时候就多个检验和反码相加,所以无差错时结果为1)。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定,即:TCP发送的报文段是交给IP层传输的。但IP层只提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠传输,因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。然而实际的网络都不具备以上两个理想的条件。但我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当的降低发送数据的速度,这样一来,本来是不可靠的传输信道就能够实现可靠传输。停止等待协议的优点是简单,但缺点是信道利用率太低。假定AB之间有一条直通的信道来传送分组这里的TD是A发送分组所需要的时间(显然TD = 分组长度 / 数据速率)再假定TA是B发送确认分组所需要的时间(A和B处理分组的时间都忽略不计)那么A在经过TD+RTT+TA时间后才能发送下一个分组,这里的RTT是往返时间,因为只有TD是采用来传输有用的数据(这个数据包括了分组首部,如果可以知道传输更精确的数据的时间,可以计算的更精确),所有信道利用率为为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输:就是发送方可以连续的发送多个分组,不必每发完一个分组就停下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然这种传输方式可以获得很高的信道利用率当时使用流水线传输时,就要使用下面介绍的连续ARQ协议和滑动窗口协议滑动窗口协议比较复杂,是TCP协议的精髓所在,在这里先给出ARQ协议最基本的概念,但不涉及到许多细节问题。位于发送窗口的分组都可以连续的发送出去,而不需要等待对方的确认,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。详细可以见P201TCP虽然是面向字节流的,但是TCP传送的数据单元却是报文段(可以看上述TCP面向流的概念),而且TCP的全部功能都体现在它的首部中各个字段。详解请见P206,注意图中的后沿,前沿从下图可以看出来,要描述一个发送窗口的状态需要三个指针:P1,P2,P3有很多信息见P208,这里不赘述发送方的应用进程把字节流写入TCP的发送缓存,接收方的应用进程从TCP的接收缓存中读取字节流。下面进一步讨论前面讲的窗口和缓存的关系发送缓存发送窗口通常只是发送缓存的一部分,已被确认的数据应当从发送缓存中删除,因此发送缓存和发送窗口的后沿是重合的。发送应用程序最后写入发送缓存的字节减去最后被确认的字节,就是还保留在发送缓存中被写入的字节。发送应用程序必须控制写入缓存的速率,不能太快 ,否则发送缓存就会没有存放数据的空间。如果收到的分组被检测出有差错,则要丢弃。如果接收应用程序来不及读取收到的数据,接收缓存最终就会被填满,使接收窗口减少到零。反之,如果接收应用程序能够及时从接收缓存中读取收到的数据,接收窗口就可以增大,但最大不能超过接收缓存的大小。TCP才用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。TCP 保留了 RTT 的一个加权平均往返时间 RTTs(这又称为平滑(smooth)的往返时间,因为是加权平均,所以是平滑的)。第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS:显然,RTO 应略大于上面得出的加权平均往返时间 RTTsRFC 2988 建议使用下式计算 RTO:RTTD 是 RTT 的偏差的加权平均值,他与RTTs和新的RTT样本之差有关。RFC 2988 建议这样计算 RTTD。第一次测量时,RTTD 值取为测量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:β是个小于 1 的系数,其推荐值是 1/4,即 0.25。为了解决上面那个问题,Karn提出了一个算法在计算平均往返时间 RTT 时,只要**报文段重传了,就不采用其往返时间样本。这样得出的加权平均平均往返时间 RTTS 和超时重传时间 RTO 就较准确。 **但是,这又有了新的问题、设想出现这样的情况:报文段的时延突然增大了很多。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据Karn算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。报文段每重传一次,就把 RTO 增大一些:系数 γ 的典型值是 2 。当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTT 和超时重传时间 RTO 的数值。实践证明,这种策略较为合理。接收方收到了和前面的字节流不连续*的两个字节块(只是未按序号,它是无差错的)如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据。和前后字节不连续的每一个字节块都有两个边界:左边界和右边界。图中用四个指针标记这些边界。第一个字节块的左边界 L1 = 1501,但右边界 R1 = 3001。左边界指出字节块的第一个字节的序号,但右边界减 1 才是字节块中的最后一个序号。第二个字节块的左边界 L2 = 3501,而右边界 R2 = 4501。详见P211一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。A 向 B 发送数据。在连接建立时,�B 告诉 A:“我的接收窗口 rwnd = 400(字节)”。看下TCP首部窗口字段的用处接收方的主机B一共进行了3次流量控制(蓝线)考虑一种情况,B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwnd = 400的报文段,然而这个报文段在传输过程中丢失了。A一直等收到B发送非零窗口的通知,B也一直等A发送数据来,就形成了死锁。下面的持续计时器就是为了打破死锁僵局的应用进程把数据传送到TCP发送缓存后,剩下的发送任务就由TCP来控制了。可以用不同的机制来控制 TCP 报文段的发送时机:至于如何控制发送的 时机 详见P213在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)出现资源拥塞的条件: 对资源需求的总和> 可用资源若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。解决拥塞的要点是平衡,要让整个系统的性能想匹配(P214)。横坐标为提供的负载,代表单位时间内输入给网络的分组的数目(也叫作输入负载或网络负载),纵坐标是吞吐量,代表单位时间内从网络输出的分组数目。由于缺少缓存空间而被丢弃的分组的百分数,平均队列长度,超时重传的分组数,平均分组时延,分组时延的标准差等,这些指标的上升都标志着拥塞的增长。方便起见,我们用报文段的个数作为窗口大小的单位慢开始门限 ssthresh 的用法如下:拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢很多。网络出现拥塞时当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。下面的执行步骤就是按照折现上的点的顺序
      计算机网络_运输层

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/60151.html

          热门文章

          文章分类