计算机网络知识点汇总(考研用)——第五章:传输层

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。计算机网络知识点汇总(考研用)——第五章:传输层,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

计算机网络知识点汇总(考研用)——第五章:传输层

 本文参考于《2021年计算机网络考研复习指导》(王道考研),《计算机网络》
思维导图:
在这里插入图片描述

5.传输层

5.1 传输层提供的服务

 5.1.1 传输层的功能

  从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
  传输层位于网络层之上,它为运行在不同主机上的进程之间提供了逻辑通信,而网络层提供主机之间的逻辑通信。 显然,即使网络层协议不可靠(网络层协议使分组丢失、混乱或重复),传输层同样能为应用程序提供可靠的服务。
  在这里插入图片描述
  从上图可以看出,网络的边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,只有主机的协议栈才有传输层和应用层,而路由器在转发分组时都只用到下三层的功能(即在通信子网中没有传输层,传输层只存在于通信子网以外的主机中)

  传输层的功能如下:
  (1)传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是,网络层提供的是主机之间的逻辑通信。
  从网络层来说,通信的双方是两台主机,IP数据报的首部给出了这两台主机的IP地址。但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信,应用进程之间的通信又称端到端的逻辑通信。 这里“逻辑通信”的意思是:传输层之间的通信好像是沿水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接。
  (2)复用和分用
  复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。


  注意传输层的复用分用功能与网络层的复用分用功能不同。网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去,分用是指接收方的网络层在剥去首部后把数据交付给相应的协议。


  (3)传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP数据报的首部,不检验数据部分是否出错

  (4)提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。 而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)

  传输层向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程看见的好像在两个传输层实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议的不同而有很大的差别。当传输层采用面向连接的TCP时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当传输层采用无连接的UDP时,这种逻辑通信信道仍然是一条不可靠信道。


  QQ聊天:UDP
  QQ传文件:TCP
  访问网站:TCP


 5.1.2 传输层的寻址与端口

  1.端口的作用

  端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。 端口是传输层服务访问点(TSAP), 它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程
  数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口
  在协议栈层间的抽象的协议端口是软件端口,它与路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。

  2.端口号

  应用进程通过端口号进行标识, 端口号长度为16bit,能够表示65536(2^16)个不同的端口号。端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程, 在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:
  (1)服务端使用的端口号
  这里又分为两类,最重要的一类是熟知端口号,数值为0~1023,IANA(互联网地址指派机构)把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。另一类称为登记端口号,数值为1024 ~49151,它是供没有熟知端口号的应用程序使用的,使用这类端口号必须在IANA登记,以防止重复。
  一些常用的熟知端口号如下:
在这里插入图片描述

  (2)客户端使用的端口号
  数值为49152~65535。由于这类端口号仅在客户进程运行时才动态地选择,因此又称短暂端口号(也称临时端口)。通信结束后,刚用过的客户端口号就不复存在,从而这个端口号就可供其他客户进程使用。

  3.套接字

  在网络中通过IP地址来标识和区分不同的主机,通过端口号来标识和区分一台主机中的不同应用进程。在网络中采用发送方和接收方的套接字(Socket)组合来识别端点所谓套接字,实际上是一个通信端点,即
  套接字=(主机IP地址,端口号)
  它唯一地标识网络中的一台主机和其上的一个应用(进程)
  在网络通信中,主机A发给主机B的报文段包含目的端口号和源端口号,源端口号是“返回地址”的一部分,即当B需要发回一个报文段给A时,B到A的报文段中的目的端口号便是A到B的报文段中的源端口号(完全的返回地址是A的IP地址和源端口号)

 5.1.3 无连接服务与面向连接服务

  面向连接服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。通信结束后,应该释放这个连接。
  无连接服务是指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到网络中,让该信息的传递在网上尽力而为地往目的地传送。
  TCP/IP协议族在IP层之上使用了两个传输协议:一个是面向连接的传输控制协议TCP,采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道;另一个是无连接的用户数据报协议UDP,采用UDP时,传输层向上提供的是一条不可靠的逻辑信道。
  TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP不提供广播或组播服务。 由于TCP提供面向连接的可靠传输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器及连接管理等。这不仅使协议数据单元的头部增大很多,还要占用许多的处理机资源。因此TCP主要适用于可靠性更重要的场合,如文件传输协议FTP、超文本传输协议HTTP、远程登录TLENET等
  UDP是一个无连接的非可靠传输层协议。它在IP之上仅提供两个附加服务:多路复用和对数据的错误检查。 IP知道怎样把分组投递给一台主机,但不知道怎样把它们投递给主机上的具体应用。UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出任何确认。由于UDP比较简单,因此执行速度比较快、实时性好。使用UDP的应用主要包括小文件传送协议TFTP、DNS、SNMP和实时传输协议(RTP)


  IP数据报和UDP数据报的区别:
  IP数据报在网络层要经过路由的存储转发;而UDP数据报在传输层的端到端的逻辑信道中传输,封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。

  TCP和网络层虚电路的区别:
  TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP不影响网络层提供无连接服务


5.2 UDP协议

 5.2.1 UDP数据报

  1.UDP概述

  RFC 768定义的UDP只是做了传输协议能够做的最少工作,它仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。
  很多应用更适合用UDP,主要是因为UDP具有如下优点:
  (1)UDP无须建立连接。因此UDP不会引入建立连接的时延。
  (2)无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数和序号与确认号的参数。而UDP不维护连接状态,也不跟踪这些参数。因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。
  (3)分组首部开销小。TCP有20B的首部开销,而UDP仅有8B的首部开销
  (4)应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求

  UDP常用于一次性传输较少数据的网络应用,如DNS、SNMP等, 因为对于这些应用,若采用TCP,则将为连接创建、维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的。
  UDP提供尽最大努力的交付,即不保证可靠交付,但这并不意味着应用对数据的要求是不可靠的,因此所有维护传输可靠性的工作需要用户在应用层来完成。 应用实体可以根据应用的需求来灵活设计自己的可靠性机制。
  UDP是面向报文的。发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,既不合并,也不拆分,而是保留这些报文的边界。 接收方UDP对IP层交上来的UDP数据报,在去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文。 因此报文不可分割,是UDP数据报处理的最小单位。

  2.UDP的首部格式

  UDP数据报包含两部分:UDP首部和用户数据,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中。
在这里插入图片描述
  UDP首部有8B,由4个字段组成,每个字段的长度都是2B,各字段意义如下:
  (1)源端口
  源端口号。在需要对方回信时选用,不需要时可用全0
  (2)目的端口
  目的端口号。这在终点交付报文时必须使用到
  (3)长度
  UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部)
  (4)校验和
  检测UDP数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全0

  当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程,如图所示:
在这里插入图片描述
  如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方

 5.2.2 UDP校验

  在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部,只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报计算的。伪首部既不向下传送也不向上递交,而仅为了计算校验和。 这样的校验和,既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了检验。 下图给出了UDP数据报的伪首部各字段的内容:
在这里插入图片描述
  UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都使用二进制反码运算求和再取反。但不同的是,IP数据报的校验和只检验IP数据报的首部,但UDP的校验和则检查首部和数据部分。
  发送方首先把全零放入校验和字段并添加伪首部,然后把UDP数据报视为许多16位的字连接起来。若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(但此字节不发送)。接下来按二进制反码计算出这些16位字的和,并将此和的二进制反码写入校验和字段。接收方把收到的UDP数据报加上伪首部(如果不为偶数个字节,那么还需补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果应为全1,否则表明有差错出现,接收方应该丢弃这个UDP数据报。
  下图给出了一个计算UDP校验和的例子。例子中,UDP数据报的长度是15B(不含伪首部),因此需要添加一个全0字节
在这里插入图片描述


  所谓的二进制反码求和,即对一个无符号的数,先求其反码,然后从低位到高位,按位相加,有溢出则向高位进1(跟一般的二进制加法规则一样),若最高位有进位,则向最低位进1。也可简单理解为为先进行二进制求和,然后对和取反,不过如果最高位进1就把那个1 拿下来 加到最后面去

  为什么使用二进制反码求和:IP、ICMP、UDP、TCP 校验和算法分享

原文链接:http://www.cppcns.com/zhishi/wangluoxieyi/23626.html
  图片来源:二进制反码求和运算
  原文链接:https://www.cnblogs.com/jcchan/p/10400504.html
在这里插入图片描述



  注意:
  (1)校验时,若UDP数据报部分的长度不是偶数个字节,则需填入一个全0字节,但是此字节和伪首部一样,是不发送的
  (2)如果UDP校验和校验出UDP数据报是错误的,那么可以丢弃,也可以交付给上层,但是需要附上错误报告,即告诉上层这是错误的数据报
  (3)通过伪首部,不仅可以检查源端口号、目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。


  这种简单的差错检验方法的检错能力并不强,但它的好处是简单、处理速度快。


  例题:下列网络应用中,()不适合使用UDP协议
  A.客户机/服务器领域  B.远程调用
  C.实时多媒体应用  D.远程登录

  答案:D;远程登录需要依靠一个客户端到服务器的可靠连接,telnet使用TCP协议

  例题:为什么要使用UDP?让用户进程直接发送原始的IP分组不就足够了吗?

  答案:仅仅使用IP分组还不够。IP分组包含IP地址,该地址指定一个目的机器。一旦这样的分组到达目的机器,网络控制程序还需知道把它交给哪个进程。UDP分组包含一个目的端口,这一信息是必须的,因为有了它,分组才能被投递给正确的进程。此外,UDP可以对数据报做包括数据段在内的差错检测,而IP只对其首部做差错检测。

  例题:使用TCP对实时语音数据的传输有没有问题?使用UDP在传送数据文件时会有什么问题?

  答案:实时传输不宜重传,必须使用UDP。UDP不保证可靠递交,没有重传机制,因此在传输数据时可能会丢失数据,但UDP比TCP的开销要小很多,实时性好。

  例题:一个应用程序用UDP,到了IP层将数据报再划分为4个数据报片发送出去。结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而IP层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成为完整的数据报?假定目的站第一次收到的后两个数据片仍然保存在目的站的缓存中

  答案:不能。重传时,IP数据报的标识字段会有另一个标识符。仅当标识符相同的IP数据报片才能组装成一个IP数据报。

  例题:一个UDP用户数据报的数据字段为8192B,要使用以太网来传送。假定IP数据报无选项。试问应当划分为几个IP数据报片?说明每个IP数据报片的数据字段长度和片偏移字段的值

  答案:在这里插入图片描述


5.3 TCP协议

 5.3.1 TCP协议的特点

  TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。 TCP的主要特点如下:
  (1)TCP是面向连接的传输层协议
  (2)每条TCP连接只能有两个端点,每条TCP连接只能是点对点的(一对一)
  (3)TCP提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序
  (4)TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
  发送缓存用来暂时存放以下数据:①发送应用程序传送给发送方TCP准备发送的数据;②TCP已发送但尚未收到确认的数据。
  接收缓存用来暂时存放以下数据:①按序到达但尚未被接收应用程序读取的数据;不按序到达的数据
  (5)TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流

 5.3.2 TCP报文段

  TCP传送的数据单元称为报文段。一个TCP报文段分为TCP首部和TCP数据两部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中其首部的前20B是固定的。TCP报文段的首部最短为20B,后面有4N字节是根据需要而增加的选项,通常长度为4B的整数倍。
  在这里插入图片描述
  TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。
  各字段意义如下:
  (1)源端口和目的端口字段
  各占2B。 端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现
  (2)序号字段
  占4B。 TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
  例如,一个报文段的序号字段值是301,而携带的数据共有100B,表明本报文段的数据的最后一个字节的序号是400,因此下一个报文段的数据序号应从401开始。
  (3)确认号字段
  占4B。 是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到。
  例如,B正确收到了A发送过来的一个报文段,其序号字段是501,而数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701
  (4)数据偏移(即首部长度)
  占4位。 这里不是IP数据报分片的那个数据偏移,而是表示首部长度, 它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
  数据偏移的单位是32位(以4B为计算单位)。 因此当此字段的值为15时,达到TCP首部的最大长度60B
  (5)保留字段
  占6位,保留为今后使用,但目前应置为0,该字段可以忽略不计
  (6)紧急位URG
  URG=1时,表明紧急指针字段有效。它告诉系统报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。但URG需要和紧急指针配套使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。
  (7)确认位ACK
  只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  (8)推送位PSH(Push)
  接收TCP收到PSH=1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
  (9)复位位RST(Reset)
  RST=1时,表明TCP连接中出现了严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。
  (10)同步位SYN
  同步SYN表明这是一个连接请求或连接接收报文。
  当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。 即SYN=1表示这是一个连接请求或连接接收报文
  (11)终止位FIN(Finish)
  用来释放一个连接。FIN=1表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
  (12)窗口字段
  占2B。 它指现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据,单位为字节。
  例如,假设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的一方还有接收1000B的数据(字节序号为701~1700)的接收缓存空间。
  (13)校验和
  占2B。校验和字段检验的范围包括首部和数据两部分。在计算校验和时,和UDP一样,要在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)
  (14)紧急指针字段
  占16位。指出在本报文段中紧急数据共有多少字节(紧急数据放在本报文段数据的最前面)
  (15)选项字段
  长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。 MSS是TCP报文段中的数据字段的最大长度。
  (16)填充字段
  这是为了使整个首部长度是4B的整数倍

 5.3.3 TCP连接管理

  TCP是面向连接的协议,因此每个TCP连接都有三个阶段:连接建立、数据传送和连接释放。 TCP连接的管理就是使传输连接的建立和释放都能正常进行。
  在TCP连接建立的过程中,要解决以下三个问题:
  (1)要使每一方都能够确知对方的存在
  (2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)
  (3)能够对传输实体资源(如缓存大小、连接表中的项目等)进行分配
  TCP把连接作为最基本的抽象,每条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。TCP连接的端口称为套接字(socket)或插口。端口拼接到IP地址即构成套接字。
  每条TCP连接唯一地被通信两端的两个端点(即两个套接字)确定。
  TCP连接的建立采用客户机/服务器方式。主动发起连接请求的应用进程称为客户机(client),而被动等待连接建立的应用进程称为服务器(Server)

  1.TCP连接的建立

  连接的建立经历以下三个步骤,通常称为三次握手,如图所示:
在这里插入图片描述
  第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗一个序号)
  第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1,并且服务器随机产生起始序号seq=y(确认报文不携带数据,但也要消耗一个序号)。确认报文段同样不包含应用层数据。
  第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位被置1,序号字段为x+1,确认号字段ack=y+1。该报文段可以携带数据,若不携带数据则不消耗序号。

  成功进行以上三步后,就建立了TCP连接,接下来就可以传送应用层数据。TCP提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。
  另外,值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的, 这就使得服务器易于受到SYN洪泛攻击


  三次握手的目的是为了检验通信双方的收发功能是否都正常。如A与B要建立TCP连接,A向B发送建立连接请求,B收到连接请求,B得知了自己的收信能力和A的发送能力是正常的。接着B向A发送连接确认,A收到连接确认,A知道自己的接收能力和发送能力(收发能力)均正常,以及B的收发能力也正常。这时还需要第三次握手,因为B还不知道自己的发送能力和A的接收能力是否正常,第三次握手A发送确认报文,B收到确认,这时B知道自己的发送能力和A的接收能力正常。至此,A和B都知道了自己和对方的接收功能都正常。三次握手实现了它的目的。

在这里插入图片描述

  不采用两次握手的原因:
  防止两次握手情况下已失效的连接请求报文段突然又传送到服务器而产生错误。若客户A向服务器B发出TCP连接请求,第一个连接请求报文在网络的某个结点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达服务器B,而B认为A又发来连接请求,此时若使用三次握手,则B向A返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。若采用两次握手,则这种情况下B认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源浪费。


  2.TCP连接的释放

  参与TCP连接的两个进程中的任何一个都能终止该连接。TCP连接释放的过程通常称为四次握手(四次挥手)
在这里插入图片描述
  第一步:客户机打算关闭连接时,向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文段的FIN标志位被置1,seq=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。 TCP是全双工的,即可以想象为一条TCP连接上有两条数据通路。发送FIN报文时,发送FIN的一端不能再发送数据,即关闭了其中一条数据通路,但对方还可以发送数据。
  第二步:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
  第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。
  第四步:客户机收到连接释放报文段后,必须发出确认。 在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。此时TCP连接还未释放,必须经过等待计时器设置的时间2MSL后,A才进入连接关闭状态。


  四次挥手的目的即为释放客户机到服务器方向的连接以及服务器到客户机方向的连接(释放双向连接),释放客户机到服务器方向的连接需要客户机向服务器发出释放连接请求、服务器向客户机发送释放确认。而释放服务器到客户机方向的连接需要服务器向客户机发送释放请求、客户机向服务器发送确认。

  服务器结束TCP连接的时间要比客户机早一些,因为客户机最后要等待2MSL后才可进入CLOSED状态。客户机等待2MSL时间的原因:
  (1)保证A发送的最后一个确认报文段能够到达B。如果A不等待2MSL,若A返回的最后确认报文段丢失,则B不能进入正常关闭状态,而A此时已经关闭,也不可能再重传。
  (2)防止出现“已失效的连接请求报文段”。A在发送最后一个确认报文段后,再经过2MSL可保证本连接持续的时间内所产生的所有报文段从网络中消失(有可能存在在某个结点长期滞留的连接请求报文段)


  TCP连接建立和释放时:
  (1)连接建立。分为三步:
  ①SYN=1,seq=x,ACK=0  ②SYN=1,ACK=1,seq=y,ack=x+1
  ③ACK=1,seq=x+1,ack=y+1

  (2)释放连接。分为四步:
  ①FIN=1,seq=u
  ②ACK=1,seq=v,ack=u+1
  ③FIN=1,ACK=1,seq=w,ack=u+1
  ④ACK=1,seq=u+1,ack=w+1

 5.3.4 TCP可靠传输

  TCP的任务是在IP层不可靠的、尽力而为服务的基础上建立一种可靠数据传输服务。TCP提供的可靠数据传输服务保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。TCP使用了校验、序号、确认和重传等机制来达到这一目的。 其中,TCP的校验机制和UDP校验一样。

  1.序号

  TCP首部的序号字段用来保证数据能有序提交给应用层,TCP把数据视为一个无结构但有序的字节流,序号建立在传送的字节流之上,而不建立在报文段之上。
  TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。
在这里插入图片描述
  如上图所示,假设A和B之间建立了一条TCP连接,A的发送缓存区中共有10B,序号从0开始标号,第一个报文包含第0~2个字节,则该TCP报文段的序号是0,第二个报文段的序号是3

  2.确认

  TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。 在上图中,如果接收方B已收到第一个报文段,此时B希望收到的下一个报文段的数据是从第3个字节开始的,那么B发送给A的报文中的确认号字段应为3。发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便在需要时重传。
  TCP默认使用累计确认,即TCP只确认数据流中至第一个丢失字节为止的字节。例如,在上图中,若接收方B收到了A发送的包含字节0~2及字节6 ~7的报文段。B还未收到字节3 ~ 5的报文段,此时B仍在等待字节3(和其后面的字节),因此B到A的下一个报文段将确认号字段置为3

  3.重传

  有两种事件会导致TCP对报文段进行重传:超时和冗余ACK
  (1)超时
  TCP每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段。
  由于TCP的下层是一个互联网环境,IP数据报所选择的路由变化很大,因而传输层的往返时延的方差也很大。为了计算超时计时器的重传时间,TCP采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间(Round-Trip Time,RTT)。 TCP保留了RTT的一个加权平均往返时间RTTs,它会随新测量RTT样本值的变化而变化。 显然,超时计时器设置的超时重传时间(Retransmission Time-Out,RTO)应略大于RTTs,但也不能大太多,否则当报文段丢失时,TCP不能很快重传,导致数据传输时延大。

  (2)冗余ACK(冗余确认)
  超时触发重传存在的一个问题是超时周期往往太长。发送方通常可在超时事件发生之前通过注意冗余ACK来较好地检测丢包情况。冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认。 例如,发送方A发送了序号为1、2、3、4、5的TCP报文段,其中2号报文段在链路中丢失,它无法到达接收方B。因此3、4、5号报文段对于B来说就成了失序报文段。TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号。 在本例中,3、4、5号报文到达B,但它们不是B所期望收到的下一个报文,于是B就发送3个对1号报文段的冗余ACK,表示自己期望接收2号报文段。TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。 就前例而言,当A收到对于1号报文段的3个冗余ACK时,它可以认为2号报文段已经丢失。这时发送方A可以立即对2号报文执行重传,这种技术通常称为快速重传。冗余ACK还被用在拥塞控制中。

 5.3.5 TCP流量控制

  TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)
  TCP提供一种基于滑动窗口协议的流量控制机制。
  在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口rwnd,即调整TCP报文段首部中的窗口字段值,来限制发送方向网络注入报文的速率。 同时,发送方根据其对当前网络拥塞程度的估计而确定的窗口值,称为拥塞窗口cwnd, 其大小与网络的带宽和时延密切相关。
  例如,在通信中,有效数据只从A发往B,而B仅向A发送确认报文,这时B可以通过设置确认报文段首部的窗口字段来将rwnd通知给A。rwnd即接收方允许连续接收的最大能力,单位是字节。 发送方A总是根据最新收到的rwnd值来限制自己发送窗口的大小,从而将未确认的数据量控制在rwnd大小之内,保证A不会使B的接收缓存溢出。当然,A的发送窗口的实际大小取rwnd和cwnd中的最小值。
  在这里插入图片描述
  以上图为例说明滑动窗口机制进行流量控制的过程,设主机A向主机B发送数据,在连接建立时,B告诉A其接收窗口rwnd=400。
  传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。 另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。

 5.3.6 TCP拥塞控制

  所谓拥塞控制,是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。出现拥塞时,端点并不了解到拥塞发生的细节,对通信连接的端点来说,拥塞往往表现为通信时延的增加。当然,拥塞控制和流量控制也有相似的地方,即它们都通过控制发送方发送数据的速率来达到控制效果。
  拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。 相反,流量控制往往是指点对点的通信量的控制,即接收端控制发送端,它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收
  例如,某个链路的传输速率为10Gb/s,某巨型机向一台PC以1Gb/s的速率传送文件,显然网络的带宽是足够大的,不存在拥塞问题,但如此高的发送速率将导致PC可能来不及接收,因此必须进行流量控制。但若有100万台PC在此链路上以1Mb/s的速率传送文件,则现在的问题就变为网络的负载是否超过了现有网络所能承受的范围。
  为了更好地对传输层进行拥塞控制,因特网建议标准定义了以下4种算法:慢开始、拥塞避免、快重传、快恢复。
  发送方在确定发送报文段的速率时,既要根据接收方的接收能力,又要从全局考虑不要使网络发生拥塞。因此,TCP协议要求发送方维护以下两个窗口:
  (1)接收窗口rwnd
  接收窗口指接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方。
  (2)拥塞窗口cwnd
  发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量。 只要网络未出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入网络的分组数。

  发送窗口的上限值应取接收窗口rwnd和拥塞窗口cwnd中较小的一个,
  发送窗口的上限值=min[rwnd,cwnd]

  1.慢开始和拥塞避免

  (1)慢开始算法
  在TCP刚刚连接好并开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。每收到一个对新报文段的确认后,将cwnd加1,即增大一个MSS。用这样的方法逐步增大发送方的拥塞窗口cwnd, 可使分组注入网络的速率更加合理
  例如,A向B发送数据,发送时A的拥塞窗口为2,那么A一次可以发送两个TCP报文段,经过一个RTT后(也称一个传输轮次),A收到B对刚才两个报文的确认,于是把拥塞窗口调整为4,下一次发送时就可以一次发送4个报文段。
  使用慢开始算法后,每经过一个传输轮次(即往返时延RTT),拥塞窗口cwnd就会加倍,即cwnd的大小指数式增长。 这样,慢开始一直把拥塞窗口cwnd增大到一个规定的慢开始门限ssthresh(阈值),然后改用拥塞避免算法。

  (2)拥塞避免算法
  拥塞避免算法的做法如下:发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,而不是加倍,使cwnd按线性规律缓慢增长(即加法增大),而当出现一次超时(网络拥塞)时,令慢开始门限ssthresh等于当前cwnd的一半(即乘法减小)

  根据cwnd的大小执行不同的算法,可归纳如下:
  当cwnd<ssthresh时,使用慢开始算法
  当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法
  当cwnd=ssthresh时,既可以使用慢开始算法,又可以使用拥塞避免算法(通常做法是使用拥塞避免算法)

  (3)网络拥塞的处理
  网络出现拥塞时,无论是在慢开始阶段还是在拥塞避免阶段,只要发送方检测到超时事件的发生(未按时收到确认,重传计时器超时),就要把慢开始门限ssthresh设置为出现拥塞时的发送方的cwnd值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。 这样做的目的是迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完。
  拥塞避免并不能完全避免拥塞。利用以上措施要完全避免网络拥塞是不可能的。拥塞避免是指在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
在这里插入图片描述
  慢开始和拥塞避免的实现过程如上图所示
  初始时,拥塞窗口置为1,即cwnd=1,慢开始门限置为16,即ssthresh=16。慢开始阶段,cwnd的初值为1,以后发送方每收到一个确认ACK,cwnd值加1,也即经过每个传输轮次(RTT),cwnd呈指数规律增长。
  拥塞窗口cwnd增长到慢开始门限ssthresh时(即当cwnd=16时),就改用拥塞避免算法,cwnd按线性规律加法增大
  假定cwnd=24时网络发生拥塞,更新ssthresh的值为12(即变为超时时cwnd值24的一半),cwnd重置1,并执行慢开始算法,cwnd=12时,改为拥塞避免算法

  注意在慢开始(指数级增长)阶段,若2cwnd>ssthresh,则下一个RTT的cwnd等于ssthresh,而不等于2cwnd,即cwnd不能跃过ssthresh值。在上图中,在第16个轮次时cwnd=8、ssthresh=12,在第17个轮次时cwnd=12,而不等于16

  在慢开始和拥塞避免算法中使用了“乘法减小”和“加法增大”方法。“乘法减小”是指不论是在慢开始阶段还是在拥塞避免阶段,只要出现一次超时(即很可能出现了网络拥塞),就把慢开始门限值ssthresh设置为当前拥塞窗口值的一半。 网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入网络的分组数。而 “加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个RTT),就把拥塞窗口cwnd增加一个MSS大小 ,使拥塞窗口缓慢增大,以防止网络过早出现拥塞

  2.快重传和快恢复

  快重传和快恢复算法是对慢开始和拥塞避免算法的改进
  (1)快重传
  冗余ACK不仅可以检测丢包的发生,也可用于网络拥塞的检测(丢了包当然意味着网络可能出现了拥塞)。快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。
  当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
  (2)快恢复
  快恢复算法的原理如下:发送端收到连续三个冗余ACK(即重复确认)时,执行乘法减小算法,把慢开始门限ssthresh设置为出现拥塞时发送方cwnd的一半。 与慢开始(慢开始算法将拥塞窗口cwnd设置为1)的不同之处是,它把cwnd的值设置为慢开始门限ssthresh改变后的数值,然后开始执行拥塞避免算法(加法增大),使拥塞窗口缓慢地线性增大。
  由于跳过了cwnd从1起始的慢开始过程,所以被称为快恢复。 快恢复算法的实现过程如下图所示(虚线为慢开始的处理过程作为对比):
在这里插入图片描述

  在流量控制中,发送方发送数据的量由接收方决定,而在拥塞控制中,则由发送方自己通过检测网络状况来决定。实际上,慢开始、拥塞避免、快重传和快恢复几种算法应是同时应用在拥塞控制机制之中的,当发送方检测到超时的时候,就采用慢开始和拥塞避免,当发送方接收到冗余ACK时,就采用快重传和快恢复。


  超时发生时cwnd被置为1,而受到3个冗余ACK时cwnd减半的原因:
  超时事件发生时说明拥塞程度更严重,在收到3个冗余ACK的情况下,网络虽然拥塞,但至少还有ACK报文段能被正确交付


  例题:为保证数据传输的可靠性,TCP采用了对()确认的机制
  A.报文段  B.分组  C.字节  D.比特

  答案:A;TCP是面向字节的。对每个字节进行编号,但并不是接收到每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认,所以TCP采用的是对报文段的确认机制

  例题:滑动窗口的作用是()
  A.流量控制  B.拥塞控制  C.路由控制  D.差错控制

  答案:A;

  例题:TCP中滑动窗口的值设置太大,对主机的影响是()
  A.由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组
  B.产生过多的ACK
  C.由于接收的数据多,而是主机的工作速度加快
  D.由于接收的数据多,而是主机的工作速度变慢

  答案:A;如果滑动窗口值设置得太小,那么会产生过多的ACK(因为窗口大可以累计确认,因此会有更少的ACK);如果设置得太大,那么又会由于传送的数据过多而使路由器变得拥挤,导致主机可能丢失分组

  例题:A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ack=201,数据部分有2个字节,那么在B对该报文的确认报文段中,seq和ack的值为多少

  答案:201,202

  例题:在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时发生了超时事件。如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是

  答案:16KB

  例题:设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口的大小为

  答案:7

  例题:在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了3个冗余ACK报文。如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是()
  A.8KB  B.16KB  C.20KB  D.21KB

  答案:D

  例题:一个TCP连接总以1KB的最大段长发送TCP段,发送方有足够多的数据要发送,当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是

  答案:9KB

  例题:主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000B,则此时主机甲还可以向主机乙发送的最大字节数是()

  答案:1000B

  例题:在使用TCP传输数据时,如果有一个确认报文段丢失,那么也不一定会引起与该确认报文段对应的数据的重传。说明理由

  答案:这是因为发送方可能还未重传时,就收到了对更高序号的确认。例如主机A连续发送两个报文段(seq=92,DATA共8B)和(seq=100,DATA共20B),均正确到达主机B。B连续发送两个确认(ack=100和ack=120),但前一个确认帧在传送时丢失。例如A在第一个报文段(seq=92,DATA共8B)超时之前收到了对第二个报文段的确认(ack=120),此时A知道,119号和在119号之前的所有字节(包括第一个报文段中的所有字节)均已被B正确接收,因此A不会再重传第一个报文段

  例题:如果收到的报文段无差错,只是报文段失序,那么TCP对此未作明确规定,而是让TCP的实现者自行确定。试讨论两种可能的方法的优劣:
  (1)将失序报文段丢弃
  (2)先将失序报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层

  答案:第一种方法将失序报文段丢弃,会引起被丢弃报文段的重复传送,增加对网络带宽的消耗,但由于用不着将该报文段暂存,可避免对接收方缓冲区的占用
  第二种方法先将失序报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层;这样有可能避免发送方对已被接收方收到的失序报文段的重传,减少对网络带宽的消耗,但增加了接收方缓冲区的开销

  例题:设TCP使用的最大窗口尺寸为64KB,TCP报文在网络上的平均往返时间为20ms,问TCP协议所能得到的最大吞吐量是多少?(假设传输信道的带宽是不受限的)

  答案:26.2Mb/s

  例题:网络允许的最大报文段的长度为128B,序号用8位表示,报文段在网络中的寿命为30s。求每条TCP连接所能达到的最高数据率

  答案:具有相同编号的报文段不应同时在网络中传输,必须保证当序列号循环回来重复使用时,具有相同序列号的报文段已从网络中消失。当每个报文段存放一个B数据时,能达到最高数据率,在接收窗口大小为1时(需满足类似于GBN的条件),为了能区分确认的报文段是哪一轮的,发送的报文段序列号只可用2^n-1个。:
  255x128x8/30=8704b/s

  例题:在一个TCP连接中,信道带宽为1Gb/s,发送窗口固定为65535B,端到端时延为20ms。可以取得的最大吞吐率是多少?线路效率是多少?(发送时延忽略不计,TCP及其下层协议首部长度忽略不计,最大吞吐率=一个RTT传输的有效数据/一个RTT的时间)

  答案:13.107Mb/s;1.31%

  例题:设TCP的拥塞窗口的慢开始门限初始为12(单位为报文段),当拥塞窗口达到16时出现超时,再次进入慢启动过程。从此时起若恢复到超时时刻的拥塞窗口大小,需要的往返次数是多少?

  答案:12;注意从出现超时时开始算起

  例题:假定TCP报文段载荷是1500B,最大分组存活时间是120s,那么要使得TCP报文段的序列号不会循环回来而重叠,线路允许的最快速度是多大?(不考虑帧长限制)

  答案:载荷即承载的信息(数据)。在此题中接收窗口大小不为1,序列号为32位,在120s内最多发送2^32B(若接收窗口为1,只能发送2 ^32-1B)。TCP报文段载荷为1500B,最多发送23861个报文段。TCP开销是20B,IP开销是20B,以太网开销是26B(18B的首部和尾部,7B的前同步码,1B的帧开始定界符)。1566 x 8 x 23861/120=2.5Mb/s。

  例题:一个TCP连接使用256kb/s的链路,其端到端时延为128ms。经测试发现吞吐率只有128kb/s。问窗口是多少?忽略PDU封装的协议开销及接收方应答分组的发送时间(假定应答分组长度很小)

  答案:8192

  例题:假定TCP最大报文段的长度是1KB,拥塞窗口被置为18KB,并且发生了超时事件,如果接着的4次迸发量传输都是成功的,那么该窗口将是多大

  答案:9KB

  例题:在这里插入图片描述
1.源端口号和目的端口号各是多少?

2.发送序列号是多少,确认号是多少?

3.TCP首部长度是多少?

4.这是一个使用什么协议的TCP连接?该TCP连接的状态是什么?

  答案:(1)0D28H、0015H;(2)50 5F A9 06H、00 00 00 00H
  (3)数据偏移字段为7,单位为4B,首部长度28B
  (4)FTP;第一次握手时发出的TCP连接

  例题:在这里插入图片描述
(1)上表中的IP分组中,哪几个是由H发送的?哪几个完成了TCP连接建立过程?哪几个在通过快速以太网传输时进行了填充?
注:IP分组头和TCP段头结构分别如图1和图2所示。

在这里插入图片描述
(2)根据上表中的IP分组,分析S已经收到的应用层数据字节数是多少?
(3)若上表中的某个IP分组在S发出时的前40B如下表所示,则该IP分组到达H时经过了多少个路由器?
在这里插入图片描述
  答案:(1)H发送的:1,3,4;完成连接建立:1,2,3(4的标识比3大1,说明4比3后发,3是第三次握手);由于快速以太网数据帧有效载荷的最小长度为46B,表中3、5号分组的总长度为40B,因此3、5号分组通过快速以太网传输时需要填充。
  (2)84 6b 41 d6 H-84 6b 41 c6 H =16B
  (3)15

  例题:在这里插入图片描述
假设题上图中的H3访问Web服务器S时,S为新建的TCP连接分配了20KB(K=1024)的接收缓存,最大段长MSS=1KB,平均往返时间RTT=200ms。H3建立连接时的初始序号为100,且持续以MSS大小的段向S发送数据,拥塞窗口初始阈值为32KB;S对收到的每个段进行确认,并通告新的接收窗口。假定TCP连接建立完成后,S端的TCP接收缓存仅有数据存入而无数据取出。请回答下列问题。

(1)在TCP连接建立过程中,H3收到的S发送过来的第二次握手TCP段的SYN和ACK标志位的值分别是多少?确认序号是多少?

(2)H3收到的第8个确认段所通告的接收窗口是多少?此时H3的拥塞窗口变为多少?H3的发送窗口变为多少?

(3)当H3的发送窗口等于0时,下一个待发送的数据段序号是多少?H3从发送第1个数据段到发送窗口等于0时刻为止,平均数据传输速率是多少(忽略段的传输延时)?

(4)若H3与S之间通信已经结束,在t时刻H3请求断开该连接,则从t时刻起,S释放该连接的最短时间是多少?

  答案:(1)1,1,101  (2)12KB,9KB,9KB
  (3)20K+101(第一个携带数据的数据段序号是101)=20581;163.48kb/s
  (4)注意是S释放连接的最短时间,1.5RTT=300ms

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153798.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!