精华内容
下载资源
问答
  • 文章主要介绍了运输层协议和网络层协议的主要区别
  • 《计算机网络》谢希仁版--第五章思维导图(适合期末复习或系统理解知识点
  • 资源包括:实验介绍、实验指导书、实验各部分抓的包、我自己的实验报告等
  • 结合课程PPT与第七版计网书籍
  • 运输层协议.xmind

    2019-06-19 17:51:57
    计算机网络课程学习后,整理了运输层的主要知识点,做成了思维导图
  • 计算机网络 第6章 运输层协议 PPT
  • 运输层

    2019-07-26 13:20:34
    运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层 运输层有一个很重要的功能:复用和分用;“复用”指在发送方不同的应用进程都可以使用同一个运输层协议传送数据;...
    1. 运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
    2. 运输层有一个很重要的功能:复用和分用;“复用”指在发送方不同的应用进程都可以使用同一个运输层协议传送数据;“分用”指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
    3. 网络层是为主机之间提供逻辑通信,而运输层是为应用进程之间提供端到端的逻辑通信
    4. 应用层所有的应用程序都可以通过运输层再传送到IP层,这就是复用,运输层从IP层收到数据后必须交付给指明的应用进程,这就是分用
    5. 运输层的端口号分为两大类:一、服务器端使用的端口号,又分为熟知(系统)端口号和登记端口号;二、客户端使用的端口号,又叫短暂端口号
    6. UDP(User Datagram Protocol——用户数据报协议)主要特点:一、UDP是无连接的;二、使用尽最大努力交付;三、面向报文;四、没有拥塞控制;五、支持一对一、一对多、多对一、多对多的交互通信;六、首部开销小
    7. TCP(Transport control Protocol——传输控制协议)主要特点:一、TCP是连接的;二、TCP提供可靠交付的服务;三、面向字节流;四、TCP提供全双工通信;五、每一条TCP连接只能有两个端点,也只能是点对点
    8. TCP连接的端点叫套接字(socket)或插口,套接字 socket=(IP地址:端口号);每一条TCP连接唯一地被通信两端的两个端点(即套接字)所确定,即TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}。若IP地址是192.3.4.5,端口号是80,套接字是:192.3.4.5:80
    9. 使用确认和重传机制,就可以在不可靠的传输网络上实现可靠的通信;可靠传输协议常称为自动重传请求ARQ,意思是重传的请求是自动进行的
    10. 仅当确认ACK=1时确认号字段才有效;TCP规定,在建立连接后所有传送的报文段都必须把ACK置1
    11. 流量控制是让发送方的发送速率不要太快,要让接受方来得及接受;发送方的发送窗口不能超过接收方给出的接收窗口数据
    12. 在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的部分,网络的性能就要变坏,这种情况叫拥塞
    13. 拥塞控制就是为了防止过多的数据注入到网络中,这样可以是网络中的路由器或链路不至于过载;拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷
    14. 拥塞控制的四种方法:慢开始、拥塞避免、快重传、快恢复
    15. TCP连接建立:三次握手;TCP释放连接:四次挥手

     

    展开全文
  • 计算机网络运输层ppt

    2021-01-04 09:27:55
    计算机网络运输层ppt
  • 计算机网络运输层计算机网络运输层计算机网络运输层计算机网络运输层计算机网络运输层
  • 排毒运输 排毒项目的传输实现。 该库通过简单的API为传输实现提供了以下功能: 确保连接时的数据速率恒定 支持发送带有有效载荷的数字命令 压缩某些命令的有效载荷 如何安装 npm install @detox/transport ...
  • 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
  • 1. 运输层概述1.1 课后练习2. 运输层端口、复用与分用的概念 1. 运输层概述   ■ 之前的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到...

    计算机网络系列内容的学习目录 → \rightarrow 谢希仁计算机网络学习系列内容汇总

    1. 运输层概述

      ■ 之前的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
      ■ 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
      ■ 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。

    在这里插入图片描述
       下图从计算机网络体系结构的角度来看运输层。AP1、AP2、AP3、AP4是通信双方应用层中的应用进程,假设AP1与AP4之间进行基于网络的通信,AP2与AP3之间进行基于网络的通信。在运输层使用不同的端口来对应不同的应用进程,然后通过网络层及其下层来传输应用层报文。接收方的运输层通过不同的端囗将收到的应用层报文交付给应用层中相应的应用进程。需要注意的是,这里的端口并不是指看得见摸得着的物理端口,而是指用来区分不同应用进程的标识符。为了简单起见,在学习和研究运输层时,我们可以简单的认为运输层直接为应用进程间的逻辑通信提供服务。“逻辑通信”的意思是,运输层之间的通信好像是沿水平方向传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接,要传送的数据是沿着图中上下多次的虚线方向传送的。

    在这里插入图片描述
       运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用层看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
       根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输层协议,即面向连接的TCP无连接的UDP

    1.1 课后练习

       1. 运输层为( B )之间提供逻辑通信服务。
        A. 主机   B. 进程   C. 路由器   D. 操作系统
        分析: 运输层为进程之间提供逻辑通信服务。

       2. 在TCP/IP体系结构中,运输层的主要作用是在互联网络的源主机和目的主机对等实体之间建立用于会话的( C )
        A. 点到点连接   B. 操作连接   C. 端到端连接   D. 控制连接
        分析: 在TCP/IP体系结构中,运输层的主要作用是在互联网络的源主机和目的主机对等实体之间建立用于会话的端到端连接。

    2. 运输层端口、复用与分用的概念

      ■ 运行在计算机上的进程使用进程标识符PID来标志。
      ■ 因特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows,Linux,Mac oS)又使用不同格式的进程标识符。
      ■ 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识
      ■ TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
        ⋄ \diamond 端口号使用16比特表示,取值范围0~65535;
         ∘ \circ 熟知端口号:0~1023,因特网数字分配机构IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53。
         ∘ \circ 登记端口号: 1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口是3389。
         ∘ \circ 短暂端口号: 49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
        ⋄ \diamond 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的
      ■ 发送方的复用和接收方的分用
       如下图所示,对于收发双方的应用进程,发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,称为UDP复用。而另一些应用进程所发送的不同应用报文,在运输层使用TCP协议进行封装,称为TCP复用
       运输层使用端口号来区分不同的应用进程,不管是使用运输层的UDP协议封装成的UDP用户数据报,还是使用TCP协议封装成的TCP报文段,在网络层都需要使用IP协议封装成IP数据报,称为IP复用
       IP数据报首部中协议字段的值用来表明IP数据报的数据载荷部分封装的是何种协议数据单元,取值为6,表示封装的是TCP报文段;取值为17,表示封装的是UDP用户数据报。接收方的网络层收到IP数据报后进行IP分用,若IP数据报首部中协议字段的值为17,则把IP数据报的数据载荷部分所封装的UDP用户数据报上交运输层的UDP;若协议字段的值为6,则把IP数据报的数据载荷部分所封装的TCP报文段上交运输层的TCP。
       运输层对UDP用户数据报进行UDP分用,对TCP报文段进行TCP分用,也就是根据端口号将它们交付给上层相应的应用进程。

    在这里插入图片描述
      ■ TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

    在这里插入图片描述

    2.1 课后练习

      1. 在TCP/IP中,采用( A )来区分不同的应用进程。
        A. 端口号  B. IP地址  C. 协议类型   D. MAC地址
       分析: 在TCP/IP中,采用端口号来区分不同的应用进程。

      2. 在TCP/IP网络中,为各种熟知应用保留的端口号范围是( B)
        A. 1~255  B. 0~1023  C. 1~1024   D. 1~65535
       分析: 熟知端口号:0~1023,因特网数字分配机构IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议。

      3. 在TCP/IP中,运输层端口号的范围是( D)
        A. 1~255  B. 0~1023  C. 1~1024   D. 1~65535
       分析: TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程,端口号使用16比特表示,取值范围0~65535。

    3. UDP和TCP的对比

      ■ UDP和TCP是TCP/IP体系结构运输层中的两个重要协议
       下图所示的是TCP/IP体系结构,运输层有两个非常重要的协议UDP和TCP。在使用TCP/IP体系结构的网络通信中,这两个协议的使用频率仅次于网际层的IP协议。TCP/IP体系结构应用层中的某些协议需要使用运输层的TCP提供的服务,而另一些协议需要使用运输层的UDP提供的服务,UDP是用户数据报协议的英文缩写词,TCP是传输控制协议的英文缩写词。

    在这里插入图片描述
      下表给出了一些应用和应用层协议主要使用的运输层协议(UDP或TCP)。

    使用UDP和TCP协议的各种应用和应用层协议

    在这里插入图片描述
      接下来从几个方面对这两个协议进行比较。

    • 对比1: 如下图所示,左边是因特网上的两台主机,它们在运输层使用UDP协议进行通信,纵坐标为时间,使用UDP协议的通信双方可以随时发送数据。
            右边是使用TCP协议的情况,使用TCP协议的通信双方在进行数据传输之前,必须使用“三报文握手”来建立TCP连接,TCP连接建立成功后才能进行数据传输。数据传输结束后,必须使用“四报文挥手”来释放TCP连接。“三报文握手”和“四报文挥手”属于TCP的连接管理,其过程比较复杂。需要注意的是,这里所谓的连接是指逻辑连接关系,而不是物理连接。综上所述,UDP是无连接的,而TCP是面向连接的。

      在这里插入图片描述
    • 对比2: 如下图所示,左边是某个局域网上的、使用UDP协议进行通信的四台主机。其中任何一台主机都可向其他三台主机发送广播,也可以向某个多波组发送多波,还可以向某台主机发送单波,也就是说UDP支持单播、多播以及广播。换句话说,UDP支持一对一、一对多以及一对全的通信。
            右边是使用TCP协议的情况,使用TCP协议的通信双方在进行数据传输之前,必须使用“三报文握手”来建立TCP连接,TCP连接建立成功后通信双方之间就好像有一条可靠的通信信道。通信双方使用这条基于TCP连接的可靠信道进行通信。很显然,TCP仅支持单播,也就是一对一的通信。

      在这里插入图片描述
    • 对比3: 接下来对比这两个协议对应用报文的处理。如下图所示,左边是使用UDP协议的情况,发送方的应用进程将应用层报文交付给运输层的UDP。UDP直接给应用层报文添加一个UDP首部,使之成为UDP用户数据报,然后进行发送。需要说明的是,为了简单起见,我们忽略运输层下面的各层处理。接收方的UDP收到该UDP用户数据报后,去掉UDP首部,将应用层报文交付给应用进程,也就是说UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界。换句话说,UDP是面向应用报文的。
            右边是使用TCP协议的情况,发送方的TCP把应用进程交付下来的数据块仅仅看作是一连串的、无结构的字节流。TCP并不知道这些待传送的字节流的含义,仅将它们编号并存储在自己的发送缓存中。TCP根据发送策略,从发送缓存中提取一定数量的字节,构建TCP报文段并发送。接收方的TCP一方面从所接收到的TCP报文段中取出数据载荷部分并存储在接收缓存中,一方面将接收缓存中的一些字节交付给应用进程。TCP不保证接收方应用进程所收到的数据块与发送方应用进程所发出的数据块具有对应大小的关系,例如发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付给了上层的应用进程,但接收方应用进程收到的字节流必须和发送方应用进程发出的字节流完全一样。当然,接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据,也就是说TCP是面向字节流的。这正是TCP实现可靠传输流量控制以及拥塞控制的基础。

      在这里插入图片描述
    • 对比4: 如下图所示,左边是使用UDP协议的情况。TCP/IP体系结构的网际层向其上层提供的是无连接不可靠的传输服务。当运输层使用UDP协议时,向其上层提供的也是无连接不可靠的传输服务。发送方给接收方发送UDP用户数据报,若传输过程中,用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部中的校验和字段的值,检查出产生误码的情况,但仅仅丢弃该数据报,其他什么也不做。发送方给接收方发送UDP用户数据报,如果该数据报被因特网中的某个路由器丢弃了,发送方UDP不做任何处理。因为UDP向上层提供的是无连接不可靠的传输服务,因此对于UDP用户数据报出现的误码和丢失等问题,UDP并不关心。基于UDP的这个特点,UDP适用于实时应用,例如IP电话视频会议等。
            右边是使用TCP协议的情况,尽管网际层中的IP协议向上层提供的是无连接不可靠的传输服务,也就是说IP数据报可能在传输过程中出现丢失或误码,但只要运输层使用TCP协议就可向其上层提供面向连接的可靠传输服务。我们可将其想象成,使用TCP协议的收发双方基于TCP连接的可靠信道进行数据传输,不会出现误码、丢失、乱序以及重复等传输差错。TCP适用于要求可靠传输的应用,例如文件传输。

      在这里插入图片描述
    • 对比5: 最后对比一下UDP用户数据报的首部与TCP报文段的首部。如下图所示,左边是使用UDP协议的情况,一个UDP用户数据报由首部和数据载荷两部分构成。其首部格式如图所示,仅有4个字段,每个字段长度为2个字节。由于UDP不提供可靠传输服务,它仅仅在网际层的基础上添加了用于区分应用进程的端口,因此它的首部非常简单,仅有8个字节。
            右边是使用TCP协议的情况,一个TCP报文段由首部和数据载荷两部分构成。其首部格式如图所示,比UDP用户数据报的首部复杂的多,且最小长度为20字节,最大长度为60字节。这是因为TCP要实现可靠传输、流量控制拥塞控制等服务,其首部自然会比较复杂,首部中的字段比较多,首部长度也比较长。

      在这里插入图片描述

    3.1 总结

    在这里插入图片描述

    3.2 课后练习

      1. 以下字段包含在TCP首部中而不包含在UDP首部中的是( B )
        A. 目标端口号  B. 序号   C. 源端口号   D. 校验和
       分析: 以下字段包含在TCP首部中而不包含在UDP首部中的是序号。

      2. 若接收端收到有差错的UDP用户数据报,则会( A )
        A. 将其丢弃  B. 请求重传   C. 纠错   D. 忽略差错
       分析: 若接收端收到有差错的UDP用户数据报,则会将其丢弃。
           当运输层使用UDP协议时,向其上层提供的是无连接不可靠的传输服务。发送方给接收方发送UDP用户数据报,若传输过程中,用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部中的校验和字段的值,检查出产生误码的情况,但仅仅丢弃该数据报,其他什么也不做。

      3. UDP用户数据报比IP数据报多提供了( C )
        A. 流量控制功能  B. 拥塞控制功能   C. 端口功能   D. 路由转发功能
       分析: UDP用户数据报比IP数据报多提供了端口功能。

      4. 下列不属于TCP特点的是( D )
        A. 面向字节流  B. 全双工   C. 可靠   D. 支持广播
       分析: TCP特点:面向字节流、全双工、可靠。

    展开全文
  • 计算机网络(第6版)课件:CH5 运输层.ppt
  • 运输层功能详解

    千次阅读 2019-06-01 21:31:11
    计算机网络运输层1.概述2. 用户数据报协议UDP2.1 UDP概述2.2 UDP的首部格式3. 传输控制协议TCP3.1 TCP最主要的特点3.2 TCP的连接3.3 可靠传输的工作原理3.3.1 停止等待协议(ARQ协议)3.3.2 滑动窗口协议(连续ARQ协议...

    1.概述

    • 作用:运输层为它上面的应用层提供通信服务。
    • 在OSI七层参考模型中,运输层是面向通信的最高层,也是用户功能的最底层。
    • 传输层两大重要的功能:复用 和 分用。
      1.复用在发送端,多个应用进程公用一个传输层
      2.分用在接收端,传输层会根据端口号将数据分派给不同的应用进程
    • 和网络层的区别:
      1.网络层为不同主机提供通信服务,而传输层为不同主机的不同应用提供通信服务。
      2.网络层只对报文头部进行差错检测,而传输层对整个报文进行差错检测。

    当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑信道任然是一条不可靠信道。

    2. 用户数据报协议UDP

    2.1 UDP概述

    1. UDP只在IP数据报服务的基础上增加了少量的功能:复用与分用、对整个报文的差错检测。
    2. UDP是无连接的
      通信前不需要建立连接,通信结束也无需释放连接。
    3. UDP是不可靠的
      它是尽最大努力交付,不能确保每一个数据报都送达。
    4. UDP是面向报文的
      所谓 面向报文 就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。
      在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。
      在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。
    5. UDP没有拥塞控制
      UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。
      弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。
      优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。
    6. UDP支持一对一、一对多、多对多、多对一通信
      而TCP只支持一对一通信。
    7. UDP首部开销小,只有8字节。
      而TCP头部至少由20字节,相比于TCP要高效很多。

    2.2 UDP的首部格式

    在这里插入图片描述

    • 源端口:源端口号。在需要对方回信时选用。不需要时可用全0。
    • 目的端口:目的端口号。这在终点交付报文时必须要使用到。
    • 长度: UDP用户数据报的长度,其最小值是8(仅有首部)。
    • 校验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。
      在这里插入图片描述
      伪首部
      在 TCP 的分段或 UDP 的数据报格式中,在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。

    3. 传输控制协议TCP

    3.1 TCP最主要的特点

    1. TCP是面向连接
      通信前需要建立连接,通信结束需要释放连接。
    2. 每一条TCP连接只能有两个端点
      TCP只能提供点到点的通信,而UDP可以任意方式的通信。
    3. TCP提供可靠交付的服务
      可靠指的是:TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致。
    4. TCP提供全双工通信
      全双工通信指的是:TCP的两端既可以作为发送端,也可以作为接收端。
    5. TCP是面向字节流
      面向字节流指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报 ,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。

    3.2 TCP的连接

    • TCP连接就是由协议软件所提供的一种抽象。表示一条可通信的链路。每条TCP连接有且仅有两个端点,表示通信的双方。且双发在任意时刻都可以作为发送者和接收者。
    • TCP连接的端点叫做套接字或插口。
      套接字 socket =(IP地址:端口号)
      因此,TCP连接 ::=(套接字1,套接字2)={(IP1:端口号1),(IP2:端口号2)}

    3.3 可靠传输的工作原理

    TCP的可靠性表现在:它向应用层提供的数据无差错的、有序的无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的

    TCP采用了流量控制拥塞控制连续ARQ等技术来保证它的可靠性

    当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度。这样一来,本来是不可靠的传输信道就能够实现可靠传输了。

    3.3.1 停止等待协议(ARQ协议)

    TCP保证其可靠性采用的是更为复杂的滑动窗口协议,但停止等待协议是它的简化版,为了方便理解,这里先介绍停止等待协议。
    AQR协议

    ARQ(Automatic Repeat reQuest)自动重传请求。
    顾名思义,当请求失败时它会自动重传,直到请求被正确接收为止。这种机制保证了每个分组都能被正确接收。停止等待协议是一种ARQ协议。

    停止等待协议的原理

    • 无差错的情况
      A向B每发送一个分组,都要停止发送,等待B的确认应答;A只有收到了B的确认应答后才能发送下一个分组。

    • 分组丢失和出现差错的情况
      发送者拥有超时计时器。每发送一个分组便会启动超时计时器,等待B的应答。若超时仍未收到应答,则A会重发刚才的分组。
      分组出现差错:若B收到分组,但通过检查和字段发现分组在运输途中出现差错,它会直接丢弃该分组,并且不会有任何其他动作。A超时后便会重新发送该分组,直到B正确接收为止。
      分组丢失:若分组在途中丢失,B并没有收到分组,因此也不会有任何响应。当A超时后也会重传分组,直到正确接收该分组的应答为止。
      综上所述:当分组丢失 或 出现差错 的情况下,A都会超时重传分组。

    • 应答丢失 和 确认迟到 的情况
      TCP会给每个字节都打上序号,用于判断该分组是否已经接收。
      应答丢失:若B正确收到分组,并已经返回应答,但应答在返回途中丢失了。此时A也收不到应答,从而超时重传。紧接着B又收到了该分组。接收者根据序号来判断当前收到的分组是否已经接收,若已接收则直接丢弃,并补上一个确认应答。
      确认迟到:若由于网络拥塞,A迟迟收不到B发送的应答,因此会超时重传。B收到该分组后,发现已经接收,便丢弃该分组,并向A补上确认应答。A收到应答后便继续发送下一个分组。但经过了很长时间后,那个失效的应答最终抵达了A,此时A可根据序号判断该分组已经接收,此时只需简单丢弃即可。

    停止等待协议的注意点

    • 每发送完一个分组,该分组必须被保留,直到收到确认应答为止。
    • 必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收。
    • 必须设置超时计时器。每发送一个分组就要启动计时器,超时就要重发分组。
    • 计时器的超时时间要大于应答的平均返回时间,否则会出现很多不必要的重传,降低传输效率。但超时时间也不能太长。

    3.3.2 滑动窗口协议(连续ARQ协议)

    1. 连续ARQ协议
      在ARQ协议发送者每次只能发送一个分组,在应答到来前必须等待。而连续ARQ协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下连续发送窗口中的分组。这样降低了等待时间,提高了传输效率。

    2. 累计确认
      在连续ARQ协议中,接收者也有个接收窗口,接收者并不需要每收到一个分组就返回一个应答,可以连续收到分组之后统一返回一个应答。这样能节省流量

    TCP头部的ack字段就是用来累计确认,它表示已经确认的字节序号+1,也表示期望发送者发送的下一个分组的起始字节号。下面会介绍TCP头部报文段。

    在这里插入图片描述
    发送窗口的大小由接收窗口的剩余大小决定。接收者会把当前接收窗口的剩余大小写入应答TCP报文段的头部,发送者收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小。发送窗口的大小是不断变化的。
    发送窗口由三个指针构成:

    • p1指向发送窗口的后沿,它后面的字节表示已经发送且已收到应答。
    • p2指向尚未发送的第一个字节。
      p1-p2间的字节表示已经发送,但还没收到确认应答。这部分的字节仍需保留,因为可能还要超时重发。
      p2-p3间的字节表示可以发送,但还没有发送的字节。
    • p3指向发送窗口的前沿,它前面的字节尚未发送,且不允许发送。

    接收者收到的字节会存入接收窗口,接收者会对已经正确接收的有序字节进行累计确认,发送完确认应答后,接收窗口就可以向前移动指定字节。
    如果某些字节并未按序收到,接收者只会确认最后一个有序的字节,从而乱序的字节就会被重新发送。

    连续ARQ的注意点

    1. 同一时刻发送窗口的大小并不一定和接收窗口一样大。
      虽然发送窗口的大小是根据接收窗口的大小来设定的,但应答在网络中传输是有时间的,有可能t1时间接收窗口大小为m,但当确认应答抵达发送者时,接收窗口的大小已经发生了变化。
      此外发送窗口的大小还随网络拥塞情况影响。当网络出现拥塞时,发送窗口将被调小。

    2. TCP标准并未规定未按序到达的字节的处理方式。但TCP一般都会缓存这些字节,等缺少的字节到达后再交给应用层处理。这比直接丢弃乱序的字节要节约带宽。

    3. TCP标准规定接收方必须要有累计确认功能。接收方可以对多个TCP报文段同时确认,但不能拖太长时间,一般是0.5S以内。
      此外,TCP允许接收者在有数据要发送的时候捎带上确认应答。但这种情况一般较少,因为一般很少有两个方向都要发送数据的情况。

    3.3.3 流量控制

    什么是流量控制?
    如果发送者发送过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制

    流量控制的目的?
    流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

    如何实现流量控制?
    由滑动窗口协议(连续ARQ协议)实现。
    滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制

    在建立连接时,接收方在报头中会携带接收窗口大小的信息。发送方的发送窗口不能超过接收方的接收窗口的数值。需要注意的是,TCP的窗口单位是字节而不是报文段。

    流量控制引发的死锁
    当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。

    持续计时器
    为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

    3.3.4 拥塞控制

    拥塞控制 和 流量控制 的区别?

    1. 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况
    2. 流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。流量控制往往指点对点通信量的控制,是个端到端的问题

    拥塞控制的目的?

    1. 缓解网络压力
    2. 保证分组按时到达

    慢开始算法 和 拥塞避免算法

    • 发送方维护一个发送窗口,发送窗口的大小取决于网络的拥塞情况和接收窗口的大小,发送窗口是动态变化的
    • 发送方还维护一个慢开始门限
      拥塞窗口 < 慢开始门限:使用慢开始算法
      拥塞窗口 > 慢开始门限:使用拥塞避免算法
      拥塞窗口 = 慢开始门限:使用慢开始算法或拥塞避免算法
    • 算法的具体过程:
      1.通信开始时,发送方的发送窗口设为1,并发送第一个分组M1;
      2.接收方收到M1后,返回确认应答,此时发送方发送窗口扩大两倍,并发送M2、M3;(即,发送方每次收到确认应答后,都将发送窗口设为当前值的两倍
      3.若拥塞窗口>慢开始门限,则使用拥塞避免算法,每次收到确认应答后都将发送窗口+1;
      4.若发送方出现了超时重传,则表明网络出现拥塞,此时:
      a)慢开始门限设为当前发送窗口的一半;
      b)发送窗口设为1;
      c)启用拥塞避免算法;

    发送超时重传时,发送窗口有可能已经超过了慢开始门限,也有可能还没超过;此时不管何种情况,都一律启用拥塞避免算法,并执行上述三步操作!

    • 慢开始算法的作用:慢开始算法将发送窗口从小扩大,而且按指数级扩大,从而避免一开始就往网络中注入过多的分组从而导致拥塞;它将窗口慢慢扩大的过程其实也在探测网络拥塞情况的过程,当发现出现拥塞时,及时降低发送速度,从而减缓网络拥塞。慢开始算法不是增长很慢,只是初始值比较小
    • 拥塞避免算法的作用:拥塞避免算法使发送窗口以线性方式增长,而非指数级增长,从而使网络更加不容易发生拥塞
    • AIMD算法(加法增大乘法减小算法)
      慢开始算法 和 拥塞避免算法 还有个名称叫做加法增大乘法减小算法。
      加法增加:指的是拥塞避免算法,使得发送窗口以线性的方式增长;
      乘法减小:指的是不管当前正使用慢开始算法还是拥塞避免算法,只要发生拥塞时,慢开始门限将会变成当前窗口的一半。

    快重传算法 和 快恢复算法

    • 上述慢开始算法和拥塞避免算法能保证网络出现拥塞时进行相应的处理,而快重传和快恢复是一种拥塞预防的方式,此时网络可能尚未出现拥塞,但已经有拥塞的征兆,因此得作出一些预防措施
    • 快重传原理:因为TCP具有累计确认的能力,因此接收者收到一个分组的时候不会立即发出应答,可能需要等待收到多个分组之后再同一发出累计确认。但快重传算法就要求,接收者如果接收到一个乱序的分组的话,就必须立即发出前一个正确分组的确认应答,这样能让发送者尽早地知道有一个分组可能丢失。
    • 快恢复原理:当发送者收到同一个分组的三个确认应答后,就基本可以判断这个分组已经丢失了;这时候无需等待超时,直接执行乘法减小加法增大(AIMD,将慢开始门限降为当前拥塞窗口的一半,然后直接采用拥塞避免算法,从慢开始门限开始)
      1.将慢开始门限减半;
      2.将发送窗口减半(不设为1);
      3.使用拥塞避免算法;
      在这里插入图片描述

    总结
    我们从上面的阐述可以发现,慢开始门限值是一个动态值,并且为出现超时时,把慢开始门限值设置为当前门限值的一半。此篇博客的内容主要来源依据是谢希仁编著的第六版《计算机网络》教材,在教材中没有见到慢开始门限的初始值的设置,查阅博客:tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式 后发现初始拥塞窗口为10,同时,TCP rcvwnd初始接收窗口也已调为10,此处拿出来仅供参考,实际值与使用的网络设置有关。在讨论原理的时候,部分地方可能将TCP传输的基本单位按照报文来进行讲解,其实TCP的传输基本单位是字节,这个在教材中也有说明。

    并且在上面我们提到的一直是拥塞窗口,而部分博客为了方便理解把拥塞窗口直接改为了发送窗口,其实发送窗口≤拥塞窗口,绝大部分时候相等。

    在TCP建立连接后,在整个传输过程中,发送窗口都小于等于接收窗口,这个在流量控制中有说明。现在假设接收窗口足够大,在发生网络拥塞的情况下还没有达到接收窗口的情况。在连接建立时,根据网络设置来初始化慢开始门限,初始建立连接时,使用慢开始算法,首先发送一个MSS分组,然后发送2个MSS分组,然后是4个,成指数倍增长。假设到达慢开始门限之前未发生网络拥塞,则会以指数倍增长方式加大到慢开始门限值。在达到慢开始门限值以后,采用拥塞避免算法,以线性增长的方式增大拥塞窗口,有的地方在讲解理论时说是增大一个MSS,也有地方说是增大0.1MSS,这对我们理解TCP传输没有影响。当发生网络拥塞后,慢开始门限值会做乘法减小,变为发送拥塞时的拥塞门限的一半,而不是前一个慢开始门限值的一半,刷新慢开始门限值,在TCP
    Reno版本中,在发生网络拥塞之后,采用快重传和快恢复算法,在接收到三个相同的确认后就重传对方尚未确认的报文段,并且采用快速恢复算法而不是重新从慢开始算法开始来发送报文。

    4 TCP报文段首部

    此部分内容参考了博客:TCP三次握手和四次挥手过程
    在这里插入图片描述
    要理解TCP三次握手和四次挥手的过程,首先需要了解TCP报文段的某些首部的含义:

    • 序号 seq:本报文段所发送的数据的第一个字节序号
    • 确认号 ack:期望收到对方下一个报文段的第一个数据字节的序号
    • 确认位 ACK:仅当ACK=1时确认号字段才有效
    • 同步位 SYN:在连接建立时用来同步序号,SYN=1表示这是一个连接请求或是连接接受请求。
    • 终止位 FIN:用来释放一个连接。当FIN=1时,表示此报文段的发送方数据已经发送完毕,并要求释放运输连接

    5 TCP三次握手和四次挥手过程

    此部分引用了博客:TCP三次握手和四次挥手过程

    5.1 TCP三次握手过程

    在这里插入图片描述
    (1)客户端A向服务端B发出连接请求,同步位SYN=1,初始序列seq=x,连接请求报文段不能携带数据,但是要消耗一个序号,这时客户端A进入SYN-SENT(同步已发送状态)。
    (2)服务端B收到请求报文段之后,向A发送后确认。将同部位SYN和确认位都置为1,确认序号ack=x+1,同时自己选择一个初始序号seq=y。连接接收报文也不能携带数据,但是也要消耗一个序号,这时服务端进入SYN-RCVD(同步收到状态)。
    (3)A收到B的确认时候要给B一个确认。确认报文段的确认位ACK=1,确认号ack=y+1,自己的序号seq=x+1。这时,TCP连接已经建立,客户端进入ESTABLISHED(已建立连接状态)。B收到A发出的确认报文之后也进入已建立连接状态。

    5.2 三次握手常见问题

    (1)为什么客户端还需要再发送一次确认?
    主要是为了防止已经失效的连接请求报文段突然又传到了B,因而产生错误。“已失效的连接请求报文段”的产生在这样一种情况下:A发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了(因为网络并发量很大在某结点被阻塞了),以致延误到连接释放以后的某个时间才到达B。但是B收到此失效的报文段后,就认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。如果不采用三次握手,那么只要B发出确认,新的连接就建立了,B的许多资源就白白浪费。
    (2)SYN Flood攻击
    SYN Flood攻击指利用tcp协议缺陷发送大量伪造的TCP连接请求,从而使被攻击方资源耗尽(CPU满负载或者内存不足)的攻击法方式。解决方法:

    • 缩短 SYN Timeout 时间缩短从接收到 SYN 报文到确定这个报文无效并丢弃该连接的时间,但是过低的SYN Timeout可能会影响用户正常访问。
    • 设置 SYN Cookie给每一个请求连接的 IP 地址分配一个 Cookie,如果短时间内连续受到某个IP的重复 SYN 报文,就认定是受到了攻击,以后从这个 IP 地址来的包会被丢弃
    • 使用硬件防火墙

    5.3 TCP四次挥手过程

    在这里插入图片描述
    (1)客户端进程发出连接释放报文,并且停止发送数据。A将连接释放报文的终止位FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1)。此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
    (2)服务器收到连接释放报文后发出确认,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向的连接就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
    (3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
    (4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
    (5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,客户端才进入CLOSED状态
    (6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。

    5.3.4 四次挥手常见问题

    (1) 为什么A在WAIT-TIME状态必须等待2MSL的时间?

    • 为了保证A发送的最后一个确认报文段能够达到B。这个ACK报文段可能丢失,因而使处在LAST-ACK状态的B收不到A发送的FIN+ACK报文段的确认。B会超时重传这个ACK+FIN报文段,而A就能在这个时间内收到这个重传的报文。接着A在再重传一次确认报文,并且重启2MSL计时器。使A和B都能正常的进入释放连接状态。
    • 防止已经关闭的连接报文段出现在新的连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有旧报文段都从网络中消失。这样新的连接中不会出现旧连接的数据报文。

    (2) 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
    这是由于服务端的LISTEN状态下收到SYN报文的建立连接请求后。它能够把ACK和SYN(ACK起应答作用。而SYN起同步作用)放在一个报文里来发送给客户端。
    但关闭连接的时候,当服务端收到客户端的FIN报文段的时候,表示客户端没有数据发送给服务端了,但是服务端可能还有数据要发送给客户端,这时TCP连接处于半连接状态。当服务端没有数据再发送给客户端的时候就会向客户端发送一个FIN报文表示服务端要关闭连接,ACK和FIN一般不会分开发送。这个过程也是由于TCP的通信方式是全双工的,发送和接收方都需要发送FIN和ACK。

    展开全文
  • 计算机网络-浅谈运输层(传输层)

    千次阅读 2020-10-24 18:07:02
    文章目录什么是运输层为什么需要运输层运输层的分用与复用UDP(用户数据报协议)1.特点2.UDP首部格式 什么是运输层 运输层在OSI七层协议中为第4层(在网络层的上层,会话层的下层),在TCP/IP协议中为第三层(网络层上层,...

    (记录学习,有误请一定告知)


    什么是运输层

    运输层在OSI七层协议中为第4层(在网络层的上层,会话层的下层),在TCP/IP协议中为第三层(网络层上层,应用层下层),其功能就是给予不同主机间的应用进程提供分组通信,主要的通信协议为UDP和TCP。

    为什么需要运输层

    从网络层的角度来说,IP数据报的首部明确了两个要通信的主机的地址,并能够将分组数据由发送端主机传送到目的主机端中,实现两台主机间的通信,既然都已经实现了两台主机间的通信那为什么还需要运输层呢? 其实 “两台主机通信” 并不够准却,应该是 “两台主机的应用进程间通信” ,因此IP做的仅仅是将分组数据传送到了目的端主机的网络层中并没有交付到目的主机的进程中,而运输层就是将在网络层中的分组数据交付给应用层达到应用进程间通信的作用。

    说了这么多可以总结两句话:
    网络层:为主机间提供逻辑通信

    传输层:为主机中的应用进程提供逻辑通信

    在这里插入图片描述

    运输层的分用与复用

    上面说到对于运输层而言,所谓的通信是指两台主机间的应用进程间的通信,而不是两台主机间的通信,那么两台主机间不会在一个时刻只相互通信一个进程的数据吧!一定是多个进程与多个进程之间同时的交互,因此,运输层有一个很重要的功能---- 分用复用

    举个平常的例子:
    当一个小区的sf快递小哥收到这个小区所有业主要寄出的sf快递,之后把快递都交到sf的物流中心,这个行为我们就可以说是小区的所有业主复用了小区的快递小哥,而当各地方的sf物流中心包裹要寄来这个小区时,快递小哥收集了包裹后分别的交给对应的业主,这个行为就是分用。

    而在运输层中,应用层的所有应用进程从端口将数据通过运输层传输到网络层,这就是 复用,而运输层收到从网络层要发送给各应用进程的数据后,运输层通过端口号将分别交付到指定的应用进程这就是分用

    端口号

    1. 什么是端口号

    上面说到的端口,端口号就是应用层中各个应用进程的一个号码,端口就像一扇门,在发送端,应用进程通过端口将要交互的数据传给运输层;而在接收端运输层通过端口号将数据传给个应用进程

    2. 端口号分类

    2.1 服务器端口号:
       熟知端口号(系统端口号):数值为 0-1023,详细的对应可在IANA查询
       登记端口号:数值为 1024-49151,可在IANA登记办理

    常见的熟知端口号
                     

    2.2 客户端口号: 数值为 49152-65535,又叫短暂端口号,当客户端和服务器端的通信结束时,
           客户端口号就会消失

    ##注意##端口号的作用范围只在本地,在整个因特网中,不同计算机的相同端口号是没有关联的

    无连接服务和面向连接服务

    所谓的连接指两端在数据传前是否需要建立连接,而面向连接就是在通信之前,必须建立连接,在通信的过程中,会一直被监控和管理,在通信结束后,释放连接;而相对于面向连接,无连接服务就是两个通信设备通信前不建立连接,当要传数据时,直接把数据放到网络上,由系统决定怎么传输数据,无连接服务不能保证数据发送端发送的数据顺序以相同的顺序到达接收端

    UDP(用户数据报协议)

    1. 特点

    1.1 UDP是无连接的:字面上的意思,UDP在发送数据之前不用建立连接(此处可和后面讲到的TCP建立连接做对比)

    1.2 UDP的服务是尽最大努力的服务:就是不可靠的服务,说的在白话一些就是UDP传送的数据不会保证有没有传到,也不会确认到底传到没有,但UDP有简单的差错检验,不过如果检验出错误,会直接丢弃报文所以主机不需要维持连接状态表(节省资源)

    1.3 UDP没有拥塞控制:所以使用UDP传输时当网络出现拥塞时,并不会影响发送端的发送数据,所以对于实时应用要求高的应用进程(视频电话、直播)会使用UDP

    ##注意##虽说实时应用要求高的应用进程会使用UDP,但当很多这类应用进程同时向网络发送数据时,网络就可能会引起拥塞,会造成所有应用进程都没法正常使用##

    2. UDP首部格式

    2.1 每个UDP的数据报有两段格式=>UDP首部+UDP数据部份

    2.2 UDP首部:源端口+目的端口+长度+校验和 (每一个字段占用2字节)

    源端口: 需要对方回信时选用,不需要时可以是全0
    目的端口: 在终点交付报文时必须使用
    长度: 就是数据报长度,最小为8
    校验和: 检测数据报在传输中是否有错,有错就扔

    ##如果目的端UDP发现目的端口号并没有对应的应用进程,则会丢掉数据报,并由ICMP回传
    "端口不可达"差错报文给发送方

    TCP(传输控制协议)

    1. 特点

    1.1 TCP是面向连接的运输层协议: 应用程序再使用TCP协议前必须建立TCP连接,传送完数据后,释放TCP连接

    1.2 每一条TCP连接只能是点到点(一对一的套接字)的连接

    ##注意##端口号拼接到IP地址后就是套接字,每一条TCP的连接的两个端点是套接字,
    TCP ={socket1 , socket2} ={(IP1:port1 . IP2:port2)},

    1.3 TCP提供全双工通信: TCP允许通信的应用进程双方都能够随时传送数据,连接的两端都设有发送缓存和接收缓存

    1.4 面向字节流: 虽然应用进程和TCP交互的是一次一个数据块,但TCP把应用进程交付下来的数据块视为没有意义的字节流,TCP并不明白每一个数据块的含义,也不保证接收方应用程序所接收到的数据块和发送方传送的数据块有大小对应的关系(会根据对方TCP的窗口值和网络拥塞的程度来决定一个报文含有多少字节),但接收方收到的字节流和发送方收到的字节流是一样的

    2. TCP报文首部格式

    废话不多说直接上格式,文字对应着图片看
    在这里插入图片描述
    TCP报文段 = TCP首部+TCP数据, TCP首部代表着TCP的全部功能,和该TCP报文段的状态

    (1) 源端口、目的端口: 2字节,就是源端口号和目的端口号,同UDP的作用一样,TCP分用就是通过端口来实现的

    (2) 序号: 4个字节,(序号的值为0 ~ 2^32-1),代表着该TCP报文段中发送数据的第一个字节的序号,TCP是面向字节流的,所以每个字节的序号是连续的

    例如:TCP序号为100代表发送数据的第一个字节为101,而该数据报文段总共发送100个字节,最后一个字节的序号就是200,下一个数据报文段的数据开始字节就是201

    (3) 确认号: 4个字节,代表期望对方下一个报文段的第一个数据字节的序号,从上面的例子可以知道,此例子中的TCP报文首部的确认号就是201

    (4) 数据偏移: 占4位 ,代表着报文段首部的长度,其记录着TCP报文段的首部位置到TCP报文段数据起始处的距离

    (5) 保留位: 占6位,保留以后使用,现在要至为0

    接着是6个控制位,又叫标志位,说明本报文段的状态性值
    #######
    (6) URG(紧急): URG=1时,紧急指针有效,代表该报文段是紧急的报文段,系统会有先传这一报文段,不会按原来顺序传送(相当于有较高优先级)

    (7) ACK(确认): 只有当ACK=1时,确认号才有效,TCP规定所已建立连接的TCP,ACK都必须标志为1

    (8) PSH(推送): 当接收方收到PSH=1的报文段时,会尽快的将该报文段交付给对应的应用进程,而不会等到缓存满了在一起发送

    (9) RST(复位): 当RST=1,代表TCP连接出现了严重的差错,系统会释放TCP连接再重新建立TCP连接,RST=1也会用来拒绝非法的TCP报文段或者拒绝打开一个链接

    (10) SYN(同步): 代表建立连接时的同步序号,SYN=1,ACK=0时代表这个报文段是一个连接请求报文段;SYN=1,ACK=1代表这个报文段是一个接受请求的确认报文段

    (11) FIN(终止): FIN=1代表数据已经发送完毕,释放连接
    #######

    (12) 窗口: 占2字节,(数值为0 ~ 2^16-1),是代表发送此报文的告知接收此报文的,从报文段首部的确认号算起,我还能接收多少数据,有点绕口其实窗口值就是,发送的那一方告诉接收的那一方,我还可以接收多少字节的数据

    (13) 检验和: 占2字节,用来差错检验

    (14) 紧急指针: 当URG=1时有效,代表紧急数据的字节数,所有紧急数据处里完,进程就会恢复正常操作

    (15) 选项: 最长为40字节,为了满足TCP报文段字节数为4的倍数

    ##以下的内容都以单端为讲解,但实际上,TCP是全双工通信,接收方也是发送方,发送方也是接收方##

    3. 可靠传输

    3.1 可靠传输特点:

    3.1.1 不错: 数据不会出差错
    3.1.2 不丢: 数据不会丢失
    3.1.3 不乱: 数据按造发送端发送的数据顺序以相同的顺序到达接收端

    4. 可靠传输工作原理

    TCP的报文是要下交给IP层传送的,但IP层的做的工作是尽最大努力的服务,是不可以靠的传输服务,所以TCP要使用一些方法满足可靠传输。
    理想的传输条件1.传输信道不产生差错 2.不管发送方发送的多块.接收方都能够来得及处里接收的数据, 然而现实总是差强人意,这种理想是不存在的,因此使用一些可靠传输的协议,可以达成上面两个条件

    4.1 停止等待协议: 就是当发送方传送数据到接收方,接收方能够回传确认信息给发送方,发送方收到后再接着传接下来的数据分组,但在发送和接收通信时往往会有以下情况发生 :

    4.1.1无差错情况:这是最理想的情况了,就是发送端发送的数据分组都能够到达接收端,并且接收端也都可以回传确认信息
    在这里插入图片描述


    4.1.2分组出现差错或丢失 :指得是传送端将数据传送给发送端后,接收端检测数据是有差错的或者压根数据在传输过程丢失,这时接收端会丢弃数据分组,接着啥也不干,而发送端一直没收到接收端的确认信息,则重新在发送一次相同的数据分组,这个过程叫做超时重传, 要达到超时重传需要:

    a. 设置一个超时计时器并且这个计时器的设计需要设计成比分组传输的平均往返时间更长,并且在接收到确认分组后,这个超时计时器就会丢失
    b. 发送端必须暂时保留发送的数据分组的副本,直到接收端回传确认信息再丢弃
    c. 分组和确认分组都要编号,这样才可以确认哪些数据分组已经有回传确认了哪些没有


    图片来源:https://www.cnblogs.com/kikochz/p/13559707.html

    4.1.3确认丢失或迟到: 从字面意思就可以知道,发送端的分组数据到达接收端并没有丢失且没有差错,但接收端返回确认信息时,确认信息丢失或迟到,导致发送端以为是数据没有传到,因此再传了一次,导致接收端收到重复的分组,这时接收端会做:

    a. 将重复的数据丢弃
    b. 再重新传一次确认信息; 而发送端会一直等待确认,如果一直没等到就一直等
    c. 如果是迟到的情况,其实很简单,就是把重复的确认给丢弃掉就行了

    在这里插入图片描述
    图片来源:https://www.cnblogs.com/kikochz/p/13559707.html

    上述的这种可靠传输协议又称为ARQ(自动重传请求),而使用ARQ就可以满足在不可以靠的传输网络上实现可靠的通信

    4.2连续ARQ协议: 从停止等待协议可以得出,停止等待的效率是非常低的,因为分组在信道中往返的时间,占整个分组传输到确认的时间太大,而往返的这段时间,信道又是空闲的,解决这个办法就是使用流水线传输,发送端不等到确认回传才发送,而是发送端连续发送多个分组数据,这样就可以大大提高信道的使用率,而使用流水线传输就要使用连续ARQ协议+滑动窗孔协议来完成

    4.2.1 基本概念:发送方会维持一个发送窗口,在发送窗口内的分组可以连续发送出去,接收方采用的是累积确认方式,累积确认就是接收方会对按序到达的最后一个分组发送确认,代表这个序号之前的所有分组我已经确认收到了
    在这里插入图片描述

    4.2.2 连续ARQ的缺点: 假设今天的发送窗口大小为5,而序号4的分组丢失了,因此接收方回传了序号3的确认,这时发送不知道序号5是否也是丢失了或者差错(就算序号5到达了),也会将4、5两个序号分组重新都发出,这种现象叫做Go-back-N,表示要退回来重传已发送过的N个分组。

    5. 可靠传输的实现

    5.1 滑动窗口以字节为单位: 假定发送端A收到接收端B发送来的确认报文段,窗口值20,确认号31,这时A就会开辟一个序号31-50的发送窗口,再没有收到B的确认之前,A都可以连续的将窗口的分组发送出去,但只要是发送过的数据,都必须保留副本在发送缓存中,以防数据丢失或差错,要超时重传的时后使用,副本直到收到B的确认报文段才抛弃。

    5.1.1 发送窗口中的序号代表可以发送的序号,发送出口后沿的后面,代表已发送且已确认分组,发送前沿的前面代表不允许发送的分组,以下介绍发送窗口发生大小变化的情况:

    后沿前移: 首先后沿是不能后移的,因为不能收回已经确认过的分组,当A接收到B传来的确认序号后,则后沿就到该位置,不然是不会移动的

    前沿不动: 通常是会一直向前移动的,但当 1. 没有收到确认,并且接收放也没有更改窗口大小 2.接收到确认,但窗口值变小

    前沿后移: 首先这是TCP不赞成的方式,会发生这种情况就是因为接收端通知窗口缩小,但不建议的原因是因为当发送端收到窗口缩小的信息时,可能已经把原发送窗口的数据传出去了。
    在这里插入图片描述
    图片来源:
    https://wenku.baidu.com/view/bff09826a36925c52cc58bd63186bceb19e8edfa.html


    5.2 深入发送窗口:我们可以看到有三个指针p1,p2,p3,这三个
    详细参图,其中要注意的是p3-p2

    5.2.1 可用窗口: 可用窗口为p3-p2,代表的是允许发送的分组但还未发送的数据字节数

    5.2.2 同第4点所讲到的,接收端口B回传确认分组采用累积确认的方式回传确认,因此,当B接收到序号32,33的序号,并没有收到31的分组时,是不会传送32或33的确认,B依旧会回传确认31给发送端,并且将32,33缓存在接收缓存中
    在这里插入图片描述
    图片来源:
    https://wenku.baidu.com/view/bff09826a36925c52cc58bd63186bceb19e8edfa.html


    5.2.3发送窗口的移动以及可用窗口的改变:
    从图可以看到假定现在B收到了33以前的分组,并回传了34的确认号,那么发送端的发送窗口后沿就会想前到34(接收端的接收窗口后沿也是会到34),这时发送窗口前沿也会像前到53,但还没有收到42的确认号,此时,发送端的可用窗口就会增加,发送端可以在将可用窗口的数据发送。

    在这里插入图片描述


    当发送端发送了到53以前的分组,但仍然没有收到确认号时,此时可用窗口为0,发送端会一直等到收到B的确认才改变发送窗口的后沿前沿位置

    ##如果一直没有收到B的确认怎么办?##
    如果确认在传输中丢失或者接收端就没有收到分组数据或分组数据有错,当达到超时计时器的时间后,A就会启动超时重传机制,重传发送窗口的分组
    在这里插入图片描述
    图片来源:
    https://wenku.baidu.com/view/bff09826a36925c52cc58bd63186bceb19e8edfa.html

    5.3发送缓存和接收缓存:
    前面说过TCP连接是面向字节流的,在发送端应用进程把字节流写入TCP的发送缓存,在接收端,应用进程从运输层接收字节流,并写入TCP接收缓存

    发送缓存存放:
    a. 发送应用进程写入TCP准备发送的数据分组
    b. TCP已经发送出的分组但未收到确认的数据

    接收缓存存放:
    a. 按序道达,接收应用进程还没来得急读取的数据
    b. 接收端从发送端接收来的没有按序到达的分组数据

    在这里插入图片描述
    图片来源:
    https://wenku.baidu.com/view/bff09826a36925c52cc58bd63186bceb19e8edfa.html

    ##发送窗口的后沿和发送缓存是重合的,已经确认的数据就会被丢弃删除##

    ##如果分组检测出有差错会丢弃分组,如果应用进程来不及读取分组数据,接收缓存就会被填满##

    ##发送端的发送窗口虽然是依据接收端的TCP报文段中的窗口去构造的,但不代表和接收端的窗口是一致的,发送端会考虑如网络拥塞等实际问题去构造发送窗口##

    ##对于没有按序到达接收端的分组数据,TCP没有明确规定该如何处哩,但大部份都会先暂时存在缓存中##

    ##接收端明确规定累计确认机制,延迟传送确认的时间为0.5秒##

    6. TCP流量控制

    6.1目的: 总的来说都会希望数据传的快一些,可是当发送方的数据过快,导致接收方来不急接收,就会造成数据丢失,流量控制就是防止这个状况,抑制发送方的传送速率,而滑动窗口就是我们来实现流量控制的机制

    6.2持续计时器: 发送方的发送窗口是不能大于接收方的接收窗口的,这样会造成一个情况,发送方的所有发送窗口的分组都送出去,而接收方的接收窗口也满了,这时接收方就会传送零窗口值的报文段,这时发送端就不再发送,而过一段时间,接收端口的应用进程接收完接收端口的数据后,接收端回传一个不为0的窗口值确认给发送端,但不幸的是,确认丢失了,因此防止这种状况,TCP的一方接收到窗口0的报文段时,会启动持续计时器,计时器时间到了,就会传送一个零窗口的探测报文段(只有1字节),如果回传的确认仍然是0窗口那么计时器重新计时,如果收到窗口不为0,那么就可以打破这个僵局

    6.3 Nagle算法: 现在有一个例子: 用户只发送了1个字节的数据在到达接收端前这个数据必须加上1.TCP首部(这样就变成21字节)2.IP首部(这时已经41字节),接收方接收到后回传40字节的确认报文段,如果后续用户又要求回传这一字节的话那么可以看出,仅仅一个字节但却占用了80-160个字节,可想而知效率是非常低的,而Nagle算法就是解决这个问题

    6.3.1 Nagle算法实现: 如果发送进程要一个一个字节写到发送缓存的话,那么发送TCP就会先把第一个字节先传出去,等到收到接收方的确认时在一次把缓存给送出去,并继续缓存数据直到收到前一个报文段的确认在继续发送缓存的报文段

    6.3.2 湖涂窗口综合症: 主要是因为接收方应用进程一次只从接收缓存接收一个字节的数据,并将确认发给发送方,这样一来网络的效率就会变得很低,解决这个问题有以下两个方法:

    1.让接收方等待一段时间,使接收缓存有能力接收一个最长的报文段在发送确认

    2.等到接收缓存有一半的空闲

    7. TCP拥塞控制

    7.1 拥塞定义: 对资源的需求总和>可用资源总和,当这个式子成立时则发生拥塞

    7.2拥塞控制vs流量控制:

    拥塞控制: 拥塞控制面向的是整个全局的,是防止过多的数据注入到网络中,使网络中的路由器或者其他数据链路节点不会发生过载

    流量控制: 流量控制更多的是面向点到点的通信量控制,是端到端的问题

    7.3 TCP的拥塞控制方法: 分四种 1. 慢开始 2. 拥塞避免 3. 快重传 4. 快恢复

    拥塞窗口(cwnd): TCP的拥塞控制也是基于窗口的拥塞控制,发送方会维持一个拥塞窗口,发送方的发送窗口等于拥塞窗口,拥塞窗口的大小取决于网络中的拥塞程度

    慢开始: 当主机开始发送’数据时,因不清楚整个网络的负荷量,所以有小到大慢慢增加发送窗口
    初始为:

    1. 当SMSS(发送方最大报文段)>2190字节: cwnd= SMSS*2字节,且不得超过2个报文段
    2. 当SMSS>1095: cwnd=SMSS*3,且不得超过3个报文段
    3. 当SMSS<=1095: cwnd=SMSS*4,且不超过4个报文段

    ##慢开始规定,每当收到一个确认后,拥塞窗口则增加一个SMSS数值##

    从图中可以看出,每当经过一个传输轮次(即分组数据报文段往返时间RTT),cwnd的大小就会加倍

    在这里插入图片描述
    慢开始门限(ssthresh): 那难道拥塞窗口就会这样无止尽的增长吗?当然不是,发送端还会维持一个慢开始门限,当:
    cwnd<ssthresh: 使用慢开始算法
    cwnd=ssthresh: 可用慢开始或拥塞避免
    cwnd>ssthresh: 使用拥塞避免

    拥塞避免: 使cwnd更缓慢的增加,当每经过一个传输轮次,cwnd只增加1

    根据下图TCP拥塞窗口cwnd在拥塞控制的变化情况,来说明整个TCP拥塞控制的过程

    一、拥塞窗口初值为1,ssthresh初值为16,TCP建立连接,发送端进入慢开始阶段直到(1)的位置,发送端进入拥塞避免当到(2)时网络出现超时,此时发送端认为是网络拥塞(此时cwnd=24)

    二、当发送端认为是网络拥塞时,更改ssthresh=cwnd/2=12,发送端拥塞窗口为1,重新进入慢开始状态,一直到拥塞窗口为12,再次进入拥塞避免,一直到(4)此时发送端收到3个相同的确认,这时就会进入快重传的阶段

    三、快重传: 当发送方发送的1,2报文段和4,5,6报文段都到达接收方,但可是,3报文段在过程中丢失或出差错,此时,为了防止发送端一直没有收到3的确认以为是网络超时又回到慢开始导致网络运行效率降低,会出现以下的情况 a.收到2号报文段回传对2号报文段的确认,不同于流量控制中的累积确认机制,拥塞控制的快重传在收到4号报文段马上回传2号报文段的重复确认,5,6号报文段同4号报文段,这时发送端连续接收到3个相同的重复确认(不含最一开始的确认),发送端就会知道3号报文段丢失或差错,这时就会立即重传3号报文段

    四、快恢复: 即图中(5)的地方,发送方知道这个丢失的现象并不是超时,所以发送方不会再进入到慢开始的阶段,而此时的窗口值(16),发送方重新设定ssthresh为16/2=8,拥塞窗口也变为8,进入拥塞避免阶段继续传输
    在这里插入图片描述

    7.4 AIMD算法: 从刚刚的过程可以看到当网络超时或者发送方收到三个重复确认,门限值(ssthresh)变为当时拥塞窗口的一半,并减小拥塞窗口的数值,这种称为乘法减小(MD),而在拥塞避免,拥塞窗口按现行规律增大,这称为加法增大(AI)=>加起来就是AIMD

    7.5 TCP的全局同步: 首先这是一个不好的现象,因为ip的尾部丢弃策略(就是当ip队列已满,则ip抛弃尾部新进的报文段),导致TCP发送端以为是网络发生拥塞,进入了拥塞控制,然而在一个时刻的一个网络中不会只有一个TCP连接,所以影响了多个TCP,此时网络中的TCP都同时进入了拥塞控制的慢开始,导致网络的通信量下降很多,解决这个方法就是建立一个AQM(主动队列管理)

    7.6 AQM(主动队列管理): 就是不等到路由器的队列已满时才开始丢弃报文段,而是先设定一个值,当队列中的报文段到达这个数值是就开始预先主动的丢弃到达的报文段,这样就可以优先的让发送方放慢传输的速率

    8.TCP的连接建立(3次握手)

    (1) 首先,两方都是CLOSED状态,客户端优先打开连接,服务端被动打开连接

    (2) 接着,服务器端率先创建TCB(传输控制模块),准备接受客户端的连接请求,状态变为LISTEN

    (3) 客户端也先创建TCB,当要开始建立连接时向服务器端发送请求报文(第一次握手)

    (4) 第一次握手: 客户端向服务器端发送连接请求报文段,这时TCP首部的同步标志位(SYN)=1,同时选择一个序号seq=x,并进入到SYN_SENT(同步已发送)状态 ##TCP规定: SYN报文段(就是SYN=1)不可以携带数据,但消耗一个序号##

    (5) 第二次握手: 服务器端接收到客户端的请求报文后,如果同意连接,则回传一个SYN=1,ACK=1,确认号ack=x+1,同时也选择一个初始序号seq=y的确认连接报文段,进入SYN_RECV(同步收到)这个确认报文段也不能携带数据但必须消耗一个序号

    (6)第三次握手: 客户端接收到服务器端的确认连接报文后,像服务器端发送确认报文段,ACK=1,ack=y+1,序号seq=x+1,其中ACK报文段是可以携带数据的,如果不携带则不消耗序号,如果携带则下一个数据序号仍然是seq=x+1,此时客户端进入ESTABLISHED(已建立连接)

    (7)B收到确认报文段后也进入(已建立连接)
    在这里插入图片描述
    8.1 为什么客户端还要有最后一次的确认( 为什么是三次连接不能两次吗?): 防止已失效的连接请求报文又传到了服务器端导致资源浪费

    我们假设两个情况 1.客户端的连接请求传给服务器端的过程中不是丢失而是在某个点走了很久直到连接释放了才到B 2.只有两次握手=>

    (1) 客户端发送的请求报文段迷路了没有到服务器端,所以迟迟没有收到服务器端的确认报文

    (2) 这时客户端会启动超时重传机制,重传请求报文给服务器端,这时候服务器端收到了,并回传确认给客户端,因为是两次握手,所以连接建立,传输完毕,释放连接

    (3) 这时候,原先迷路的请求报文到达了服务器端,服务器端会以为这是客户端新发起的连接,在传送确认报文给客户端,两次握手,连接建立,但此时,客户端实际上并没有发起新的连接,所以不会理会服务器端的连接,也不会传输数据,然而服务器端不知道这个情况,所以导致服务器端的资源就这样浪费了

    (4) 我们再设想如果是在三次握手的情况下, 服务器端回传这个迷路的确认报文段给客户端,因为客户端并没有新的请求连接,所以不理会服务器端,这时因为是三次握手,所以服务器端再没有收到客户端的确认报文段的情况下不会建立连接,就不会造成上述二次握手造成的资源浪费问题

    9.TCP的连接释放(4次挥手)

    (1)客户端的应用进程首先向其TCP发出释放连接报文段,停止传送并主动关闭连接,客户端把连接释放报文段的FIN=1,并且序号(seq)=u(其中),u就是传送过的数据的最后一个字节序号+1这时客户端进入FIN-WAIT-1状态
    ##TCP规定,FIN报文就算不携带数据,也要消耗一个字节##

    (2)服务器端收到客户端的连接释放报文时,先立即返回确认释放报文,ACK=1,seq=v,ack=u+1,进入CLOSE-WAIT状态,并且通知服务器端应用进程,此时A->B这一段的连接已经释放

    (3)这时TCP连接处于半关闭状态,A没有数据要发了但如果B还是有数据要发送,还是要接收

    (4)A收到B的释放确认报文段后,进入FIN-WAIT-2阶段,等待B的连接释放报文段

    (5)B数据传输完毕,应用进程通知TCP释放连接,传送释放连接报文段FIN=1,ACK=1,seq=w,ack=u+1,##注意这里的确认好是和,当初传送确认释放连接的确认号相同的##到客户端,进入LAST-ACK状态

    (6)客户端收到服务器端的连接释放报文段后,回传确认报文ACK=1,seq=u+1,ack=w+1并进入TIME-WAIT状态

    (7)服务器端收到确认后,服务器端进入CLOSE状态

    (8)此时TCP连接还没有释放,客户端必须等到时间等待计时器设置的时间2MSL后同时撤销TCB,A才进入到CLOSE状态,自此TCP连接释放

    在这里插入图片描述


    ##为什么TIME-WAIT需要2MSL的时间呢##

    1. 如果客户端收到服务器端传送的释放连接报文段后,回传确认释放报文段后就立即关闭,那么当这个回传的确认释放报文段丢失了,服务器端会一直等待,等到启动了超时重传机制,再发送一次FIN+ACK报文段给客户端,在没有TIME-WAIT的情况下,客户端就接收不到再传来的释放连接报文了,这样也不能再传送确认报文给服务器端,服务器端就不能进入CLOSE状态释放TCB结束连接
    2. 在TIME-WAIT阶段客户端会撤销相关的TCB,这样在结束连接后,网络中已经没有这一次TCP连接的相关的报文段,这样下一次在建立新的连接时,就不会有已失效的连接请求报文段出现在新的连接中

    保活计时器: 现有一个情况,当TCP连接建立了,此时客户端主机故障了,所以服务器就不能在收到客户端的数据,但为了防止客户端明明已经不能传了,服务器端还是傻傻的在等,所以,保活计时器的作用就是,每当收到客户端发来的数据,就重新设置一次保活计时器,但如果没收到,则保活计时器,就开始计算时间,通常为2小时,如果2小时候还是没有收到那么服务器端就会传输一个探测报文段,每隔75秒发送一次,当连续发送10个探测报文段还是没有得到客户端的响应那么,服务端就会判定客户端故障,关闭连接

    展开全文
  • 运输层协议概述 进程之间的通信 下图说明运输层的作用: 可以看出网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。 根据应用程序的不同需求,运输层有两种不同的运输协议: 1.面向...
  • 计算机网络之运输层

    千次阅读 2019-04-01 19:48:09
    本章讨论TCP/IP体系中运输层最重要的两种协议:UDP和TCP。必须弄清TCP的各种机制(如面向连接的可靠服务、流量控制、拥塞控制等),以及TCP连接管理和状态图的概念。 一、运输层协议概述 从TCP开始往后看思维...
  • 计算机网络学习笔记第五章(运输层)超详细整理

    千次阅读 多人点赞 2021-06-07 09:02:31
    这里写目录标题一级目录二级目录三级目录5.1、运输层概述1、概念2、总结5.2、运输层端口号、复用与分用的概念1、为什么用端口号2、发送方的复用和接收方的分用3、TCP/IP体系的应用层常用协议所使用的运输层熟知端口...
  • 计算机网络初学者
  • 运输层是面向通信功能中的最高层,又是面向用户功能中的最底层。 一、运输层的作用 AP~n~代表各个进程,(通讯并不是主机和主机之间的通信,实际上是应用进程之间的通信) IP协议的作用范围:主机和主机之间进行...
  • 运输层(TCP/IP协议)

    千次阅读 2019-10-30 21:39:37
    运输层协议又称为端到端 协议。 运输层的协议概述 进程之间的通信 运输层向它上面的应用层提供端到端通信服务。进行端到端通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层...
  • 文章目录一、概述和运输层服务运输层和网络层的关系运输层概述二、多路复用与多路分解无连接的多路复用与多路分解面向连接的多路复用与多路分解Web服务器与TCP三、无连接运输:UDPUDP报文段结构UDP检验和四、可靠...
  • 计算机网络「五」 运输层

    千次阅读 2021-10-21 19:44:25
    本文为计算机网络系列第五章笔记,...计算机网络「三」 数据链路 ❤ 爆肝 5w 字,多图详解,保姆级教程,附带练习题 ❤ 计算机网络「四」 网络 ❤ 4w 字小白总结 ❤ 帮你搞定复杂难懂的网络知识! ❤   ...
  • 运输层知识梳理

    千次阅读 2018-03-01 22:56:08
    运输层概述 运输层的多路复用与多路分解 运输层协议概述 UDP协议 TCP协议 TCP连接建立与关闭 TCP可靠数据传输问题 TCP拥塞控制问题 运输层概述 定义 运输层,也叫传输层,实现端对端的传输,应用层...
  • 运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。 一、概述和运输层服务 运输层协议为运行在不同主机牛的应用进程之间提供了逻辑通信功能。从应用程序的角度看,通过逻辑通信,运行不同进程的主机...
  • 一、运输层概述: 运输层实体仅存在于计算机中,而且通常会只有一个。 (一)运输层的任务 1、复用与分用:复用指发送计算机的运输层实体收集多个应用进程的数据,再使用网络层实体提供的服务把数据发送出去;分...
  • 第 5 章 运输层 运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。 两个主机进行通信实际上就是两个主机中的应用进程互相通信。 应用...
  • 运输层采用面向连接的TCP协议,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道,但当运输层采用无连接的UDP协议,这种逻辑通信信道是一条不可靠的信道。 UDP在传送数据之前不需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,327
精华内容 21,730
关键字:

运输层