传输层介绍

目录

端到端与点到点

协议 与 规则

TCP协议

UDP协议

UDP和TCP的比较

TCP协议

报文段

TCP中数据的拆分和组装

怎么理解TCP面向字节流

流量控制与阻塞控制

三次握手和四次挥手

TCP中的重传

多路复用和分用

UDP协议

UDP协议中数据的拆分和组装

怎么理解UDP面向数据报

端到端与点到点

协议 与 规则

TCP协议

UDP协议

UDP和TCP的比较

TCP协议

报文段

TCP中数据的拆分和组装

怎么理解TCP面向字节流

流量控制与阻塞控制

三次握手和四次挥手

TCP中的重传

多路复用和分用

UDP协议

UDP协议中数据的拆分和组装

怎么理解UDP面向数据报


传输层是计算机网络中的第四层,也称为传输协议层。它的主要功能是提供端到端的可靠数据传输服务,负责处理数据包的传输和可靠性问题。传输层通过使用传输层协议(如TCP和UDP)来控制和优化数据包的传输。

以下是传输层的一些基本原理和概念

  1. 端口:传输层通过端口来区分不同的服务或应用程序。每个网络连接都有一个源端口和目的端口,它们共同定义了一个唯一的网络会话。

  2. 协议:传输层定义了两种主要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。

    • TCP:它提供可靠的、面向连接的服务。TCP保证数据包的顺序传输,检测数据包丢失,并重新传输丢失的数据包。它还处理网络拥塞问题,确保网络资源的合理使用。

    • UDP:它提供不可靠的、无连接的服务。UDP不保证数据包的顺序传输或完整性,但它提供了较低的延迟和较小的开销,适用于对实时性要求较高的应用,如视频会议和在线游戏。

  3. 数据传输传输层将来自应用层的字节流分割成适当大小的数据包,为每个数据包添加头部信息(例如,源端口、目的端口、序列号、确认号等),然后将这些数据包发送到网络层。

  4. 传输控制:传输层负责在源主机和目标主机之间建立可靠的连接,并控制数据的传输速率。它使用流量控制和拥塞控制等机制来确保数据的可靠传输。

    • 流量控制:TCP使用流量机制,如滑动窗口协议,以控制发送方的数据传输速率,防止接收方来不及处理。

    • 拥塞控制:TCP还使用拥塞控制机制,如慢启动、拥塞避免、快速传和快速恢复,以防止网络拥塞。

    • 差错控制:传输层使用差错控制机制来检测和纠正数据包在传输过程中的错误。它使用校验和等机制来检测数据的完整性,并在发现错误时采取措施进行纠正。

  5. 数据包分段与重组:传输层将上层应用层的数据分割成适当大小的数据段,以便在网络上进行传输。在目标主机上,传输层将这些数据段重新组合成原始数据。

  6. 错误检测和校正:TCP头包含校验和字段,用于检测数据在传输过程中是否发生错误。如果检测到错误,TCP将重新传输损坏的数据包。

  7. 多路复用和多路分解:传输层允许多个TCP连接共享同一个物理网络连接,这是通过确保每个数据包包含正确的端口信息来实现的。

  8. 会话管理:传输层管理着多个同时进行的网络会话。每个会话都有自己的源IP地址、源端口、目的IP地址和目的端口。

常见的传输层协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol),它们提供了传输控制、差错控制和流量控制等功能。传输层协议的选择取决于应用层协议的要求和网络环境的特点。传输层的功能对于实现可靠的数据传输和优化网络性能至关重要。

端到端与点到点

在网络中,术语“端到端”和“点到点”有不同的含义:

  1. 端到端(End-to-End)

    • 端到端是指数据从源端传输到目的端的完整路径,其中数据在整个传输过程中不会被中间节点修改或处理。

    • 在端到端通信中,数据的处理和控制发生在通信双方的终端设备上,而不是在网络中的中间节点。

    • 端到端通信强调的是通信双方之间的直接连接和数据的完整性。

  2. 点到点(Point-to-Point)

    • 点到点是指两个节点之间直接的连接或通信路径,这两个节点之间没有其他中间节点或干扰。

    • 点到点连接通常是指一对一的通信模式,也可以是两个节点之间建立的专用链路。

    • 点到点通信强调的是通信的直接性和私密性。

虽然端到端和点到点两个术语在网络通信中都有它们独特的意义,但从某种程度上来说,端到端通信可以被视为点到点通信的一种特殊情况,即在两个端点之间的通信路径上没有其他中间节点干扰或修改数据。因此,端到端通信可以被视为一种更严格的点到点通信模式。

协议 与 规则
TCP协议

这个太重要了我们后文一个一个重点讲

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP在因特网协议族(TCP/IP协议族)中担任主要的传输协议,为许多应用程序(如Web浏览器和电子邮件客户端)提供可靠的数据传输服务。

TCP为两台计算机之间的通信提供了一个可靠的连接,它确保数据包的发送和接收顺序恢复,并且在数据传输中允许分组丢失。

TCP通过使用三个重要的属性来实现这些功能:

  1. 连接:TCP在两个通信设备之间创建一个可靠的连接,然后在这个连接上进行数据传输。一旦连接建立,数据可以在两个方向上流动,直到连接被终止。

  2. 报文段:TCP使用被称为“报文段”的数据单元来传输数据。每个报文段包括一些控制信息,如序列号、确认号、数据偏移量和校验和等。

  3. 确认、重传和流量控制:TCP使用确认和流量控制来避免数据包丢失。发送方会等待来自接收方的确认,以确保每个数据包被正确接收。同时,TCP通过控制其发送速率的措施(例如滑动窗口机制)来防止数据包丢失。

补充:

  1. 可靠性:TCP协议提供了高度可靠的数据传输服务。通过序列号、确认号和重传机制,TCP可以检测并纠正丢失的数据包,确保数据的正确性和完整性。

  2. 流量控制:TCP使用滑动窗口机制来控制发送方数据包的发送速率,以适应接收方的处理能力。这种机制可以防止数据包在传输过程中丢失或过载。

  3. 拥塞控制:TCP具有拥塞控制机制,可检测网络拥塞并调整发送速率。它包括慢启动、拥塞避免、快速重传和快速恢复等算法,以确保网络资源的有效利用。当网络拥塞时,TCP会降低发送速率,以减少其他数据包的丢失率。

    拥塞避免算法:TCP使用一种被称为慢启动、拥塞和快重传的算法来控制拥塞避免。这种算法可以检测到网络拥塞,并降低发送方的发送速率,以减少数据包丢失的可能性。

  4. 面向字节流:TCP是一种面向字节流的协议,数据以流的形式传输,没有数据边界。这意味着数据可以被分割成任意大小的数据段进行传输。

  5. 三次握手和四次挥手:TCP使用三次握手建立连接,双方交换连接参数并确认彼此的身份,以确保双方都准备好进行通信。连接终止时,双方使用四次挥手来关闭连接。

  6. 多路复用和分用:TCP允许一个发送方同时与多个接收方建立多个连接,从而提高网络的利用率。TCP能够与其它传输层协议(如UDP)复用,也能够与物理层和链路层协议(如以太网)分用。

  7. 适合长连接:由于TCP连接的建立和维护涉及额外的开销,因此TCP适合长时间持续通信的场景,如Web浏览和文件下载等。

UDP协议

UDP(User Datagram Protocol)即用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP在IP报文的协议号是17。

UDP的特点包括

  1. 无连接的:UDP不会建立连接,也不会维护连接状态,它只是简单地将数据报发送到目标地址。

  2. 支持一对一,一对多,多对一和多对多的通信方式:UDP可以支持多种通信方式,可以根据不同的应用场景选择不同的通信方式。

  3. 数据是不可靠:UDP不会保证数据报的可靠传输,即不会保证数据报能够被正确地接收和处理。

  4. 传输速度快,对CPU损耗小:UDP的传输速度快,因为它没有连接建立和维护的过程,也没有流量控制和拥塞控制等机制,对CPU的损耗也比较小。

  5. 首部开销小,仅8字节:UDP的首部比较短,只有8个字节,相比TCP的20字节首部长度,UDP的首部开销更小。

  6. 面向数据报:UDP数据报包含源端口、目的端口、长度和校验和字段。长度字段指定了UDP数据报的总长度(报头和数据的总长度),校验和字段用于检测数据在传输过程中是否被修改或损坏。校验和不是强制要求,但可以帮助验证数据的完整性。

  7. 低开销和高传输效率:UDP的总体开销比较低,因为它没有连接建立和维护的过程,也没有流量控制和拥塞控制等机制,从而实现了较高的传输效率。DP主要应用于那些对传输性能要求比较高、对数据报的可靠性要求不高的应用场景,例如网络视频会议系统、在线游戏、语音聊天、域名解析等。

  8. 缺点:UDP不提供数据包分组、组装和不能对数据包进行排序,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

适用应用

  1. 适用于对延迟敏感的应用:由于UDP是无连接的,数据包在网络中的传输速度更快,这对于对延迟敏感的应用(如实时游戏、语音和视频通信)非常有用。

  2. 适用于对带宽敏感的应用:UDP协议通常使用尽可能少的带宽来传输数据,这使得它适合于带宽受限的网络环境。

UDP和TCP的比较
  1. 连接方式:TCP是一种面向连接的协议,它需要建立连接、数据传输和关闭连接的三个阶段。而UDP是一种无连接的协议,它直接发送数据报,不经过建立连接和关闭连接的阶段。

  2. 可靠性:TCP提供了数据包的顺序、丢失和重复检测,以及流量控制和拥塞控制等机制,因此它通常比UDP更可靠。而UDP不提供这些可靠性特性,它只是简单地将数据报发送到目标地址。

  3. TCP是面向字节流的,UDP是面向数据报的。

  4. 性能:由于UDP不进行连接和重传机制,因此它的传输速度通常比TCP更快。这对于实时性和对延迟敏感的应用程序(如VoIP、视频流和游戏)来说是非常重要的。

  5. 适用场景:TCP通常用于需要高可靠性和服务质量保证的应用程序,如电子邮件、文件传输和网页浏览。而UDP则适用于对性能要求较高、对数据可靠传输要求较低的应用程序,如VoIP、视频流、域名解析和在线游戏等。

TCP协议
报文段

报文段(Segment)是指在TCP协议中传输数据时的数据单元。TCP协议将数据分割成适当大小的报文段,每个报文段都包含TCP头部和数据部分。报文段的结构如下所示:

  1. TCP头部(20字节):TCP头部包含了传输控制信息,用于控制数据传输和确保数据的可靠性。TCP头部通常包含以下字段:

    • 源端口号:发送方的端口号

    • 目的端口号:接收方的端口号

    • 序列号:用于按照正确的顺序重组数据

    • 确认号:用于确认接收到的数据

    • 数据偏移量:指示TCP头部长度

    • 控制位(例如,SYN、ACK、FIN等):用于建立连接、确认数据和关闭连接

    • 窗口大小:用于流量控制

    • 校验和:用于错误检测

    • 紧急指针:表示紧急数据的位置

  2. 数据部分:数据部分包含要传输的应用层数据。这部分的内容是由应用程序负责生成和处理的。

在TCP通信过程中,数据会被分割成适当大小的报文段,并在每个报文段中封装TCP头部和数据。这些报文段通过网络传输,并在目的地重新组装成完整的数据流。TCP协议通过使用序列号、确认号、校验和等机制来确保数据的可靠传输,同时通过流控制和拥塞控制来优化数据传送过程。

TCP中数据的拆分和组装

在 TCP(传输控制协议)中,数据在传输过程中需要经过拆分和组装的操作,以便在网络中正确传输和接收。这个过程涉及发送端和接收端之间的数据处理。

数据的拆分(Segmentation)过程:

  1. 应用数据: 应用程序生成要发送的数据(例如文件、文本、图像等)。

  2. 数据分段: TCP 将应用数据拆分成适当大小的数据段,每个数据段包含一部分数据,通常以TCP最大段大小(Maximum Segment Size, MSS)为单位。

  3. 添加 TCP 头部: 每个数据段会被 TCP 协议添加一个 TCP 头部,包含控制信息(如序列号、确认号、窗口大小等)。

  4. 拆分的数据包: TCP 生成的数据段称为 TCP 数据包,这些数据包将会被发送到网络中。

数据的组装(Reassembly)过程:

  1. 接收数据包: 接收端收到 TCP 数据包,并按照序列号对数据包进行排序。

  2. 去除 TCP 头部: 接收端去除 TCP 数据包中的 TCP 头部,还原出原始的数据段。

  3. 数据组装: 接收端将得到的数据段按照序列号顺序组装起来,组装成完整的数据流。

  4. 传递给应用: 最终将组装好的数据流传递给对应的应用程序,以供应用程序进一步处理。

通过数据的拆分和组装过程,TCP 协议能够确保数据在网络传输中的正确性、完整性和顺序性,保障了数据的可靠传输和接收。这样的机制是 TCP 协议保证可靠性和完整性的重要机制之一。

怎么理解TCP面向字节流
  1. 没有消息边界:TCP是面向字节流的协议,意味着TCP并不保留消息间的边界信息。在TCP传输过程中,数据被视为一连串的字节流,而不是被分割成独立的消息。这意味着发送方发送的数据可能被接收方以不同大小的数据块进行接收,而接收方需要自己解析出原始的消息。

  2. 无固定单位:TCP也不要求数据以固定的单元进行传输,而是以字节为单位进行传输。这意味着TCP可以按需处理不同数量的字节数据,而不需要依赖特定的数据块大小。

  3. 无需重组:在接收端,TCP会重组收到的数据流,将接收到的字节重新组装成原始的消息。接收方不需要关心字节在网络中的传输方式,而是依靠TCP协议来保证数据的正确性和顺序性。

  4. 连续字节传输:TCP通过一个连续的字节序列来传输数据。每个数据包中的字节都包含了一个序号,接收方会根据这些序号来重新组装数据流,保证数据的有序传输。

总的来说,TCP面向字节流的概念是指TCP不关心消息的边界,并且将数据视为连续的字节流进行传输。发送方生成数据时,将数据转换为字节流发送;接收方收到数据后按照字节流进行处理,重组数据恢复原始消息。这种灵活的数据传输方式使得TCP适合处理各种大小的数据块,提高了传输效率。

流量控制与阻塞控制

流量控制(Traffic Control)是指在计算机网络中对数据流量进行管理和调节的过程,其主要目的是确保网络资源的合理使用、避免拥塞以及维持网络的稳定性和性能。

阻塞控制(Congestion Control)是指在计算机网络中通过采取各种措施来管理网络拥塞的过程。网络拥塞指的是网络中的流量超出了网络设备的处理能力,导致数据包丢失、延迟增加或网络性能下降的情况。阻塞控制的主要目的是确保网络的稳定性,避免数据丢失和网络拥塞,并优化网络性能。

  1. 数据传输速率控制:通过限制发送端的数据传输速率,避免发送大量数据导致网络拥塞或其他节点无法处理。

  2. 拥塞探测:网络设备通过监测网络拥塞的信号(如丢包率、延迟增加等)来感知网络拥塞情况。

  3. 拥塞避免:通过控制发送端的数据传输速率、采取流量整形、设置拥塞窗口等方法来避免拥塞的发生。

  4. 拥塞控制:一旦发现拥塞,网络设备需要采取措施来缓解拥塞,如通过减少数据包的发送速率、进行拥塞恢复处理等来避免拥塞的扩散。

  5. 流量整形:对数据流量进行调整,以匀速发送数据包,防止突发流量导致网络峰值。

  6. 队列管理:对网络设备中的数据包队列进行管理,使用合适的队列调度算法来控制数据包的排队和传输,避免队列溢出。

  7. 流量分类和优先级处理:根据数据包的特性对流量进行分类和优先级处理,确保关键数据的优先传输。为不同类型的流量设置不同的服务质量(QoS),优先处理重要数据包,从而避免拥塞情况下的服务质量下降。

常见的流量控制技术包括:

  1. 滑动窗口协议:TCP使用滑动窗口协议来控制数据传输速率,发送端根据接收端的反馈动态调整数据包的发送速率。

  2. 拥塞避免算法:TCP使用拥塞避免算法,如慢启动和拥塞避免机制,来避免网络拥塞和数据包丢失。

  3. 队列管理:对于网络设备中的数据包队列,使用队列管理算法来排队和调度数据包的传输,以避免队列溢出或数据包丢失。

  4. 流量整形器:使用流量整形器限制特定设备或应用程序的数据传输速率,以确保网络资源的公平使用。

一些常见的阻塞避免算法包括:

  1. TCP慢启动(Slow Start):在TCP连接刚启动时,发送方每次成功接收一个确认,就会将拥塞窗口大小加倍,逐渐增加发送速率。这有助于网络逐渐达到拥塞点。

  2. TCP拥塞避免(Congestion Avoidance):一旦达到一定的拥塞窗口大小阈值,发送方将切换到拥塞避免模式。在拥塞避免模式下,发送方每次成功接收一个确认,拥塞窗口大小将线性增加,而不是加倍。这有助于在网络负载较高时,更稳定地控制数据传输速率,避免拥塞。

  3. TCP快速重传(Fast Retransmit):如果发送方在收到重复确认时,可以快速重新发送丢失的数据包,而不必等到超时。这有助于更快地恢复丢失的数据包,并避免网络拥塞。

  4. TCP快速恢复(Fast Recovery):在收到重复确认后,发送方可以进入快速恢复状态,而不必降低发送速率。这有助于更快地恢复丢失的数据包,并减少网络拥塞的可能性。

三次握手和四次挥手

三次握手(建立连接)

  1. SYN:客户端发送一个SYN(同步序列编号)报文到服务器,以请求建立一个TCP连接。在这个报文中,客户端会指定自己的初始序列号(ISN)。

  2. SYN-ACK:接收到客户端的SYN报文后,会发送一个SYN-ACK(同步和确认)报文作为响应。这个报文中包含服务器的初始序列号,同时也对客户端的SYN报文进行了确认ACKnum = ISN+1)。

  3. ACK:客户端收到服务器的SYN-ACK报文后,会发送一个ACK报文作为响应。这个报文中包含客户端的确认号(ACKnum = ISN+1),表示客户端已经收到了服务器的SYN-ACK报文。

完成三次握手后,客户端和服务器之间就建立了一个TCP连接,双方可以开始数据传输。

四次挥手(终止连接)

  1. FIN:当连接的一端完成数据传输后,它会发送一个FIN(结束)报文到另一端,表示它没有数据发送了。

  2. ACK:另一端收到FIN报文后,会发送一个ACK报文作为响应,确认收到对方的终止请求。

  3. FIN:收到ACK报文后,发送FIN报文的一方会再次发送一个FIN报文,以确认连接的终止。

  4. ACK:最后,另一端再次发送一个报文,表示它已经收到了第二次的FIN报文,连接现在完全关闭。

四次挥手的过程确保了双方都明确地知道连接已经终止,并且所有的数据都已经被正确地接收。

TCP中的重传

在TCP(传输控制协议)中,重传(Retransmission)是指当发送方发送一个数据包后,如果在规定的时间内没有收到接收方发送的确认消息,发送方会重新发送该数据包的过程。TCP的重传机制通过超时重传和快速重传两种方式来实现。

超时重传是指发送方在发送数据包后,如果在规定的时间内没有收到接收方发送的确认消息,发送方会认为该数据包已经丢失,并重新发送该数据包。超时重传的时间间隔通常是TCP发送端维护的超时计时器,该计时器在发送数据包时被设置为一定的值。

快速重传是指在TCP传输过程中,发送方在发送一个数据包后,如果在规定的时间内连续收到多个接收方发送的重复确认,发送方可以推断出该数据包已经丢失,并重新发送该数据包。快速重传机制可以减少超时重传的发生,从而提高TCP传输效率。

总的来说,TCP中的重传机制是为了保证数据包的正确性和完整性,从而提高TCP传输的可靠性和稳定性。通过超时重传和快速重传两种方式,TCP可以在传输过程中及时发现和纠正数据包的丢失或错误,确保数据传输的可靠性和稳定性。

多路复用和分用

在TCP协议中,多路复用(Multiplexing)和分用(Demultiplexing)是指在一个TCP连接中,可以同时传输多个不同的应用程序数据流,并确保每个数据流都能被正确地传输到相应的目的地。

  • 多路复用(Multiplexing):在TCP连接的发送端,多路复用将来自不同应用程序的数据流合并成一个数据流,然后传输到网络中。TCP使用端口号来区分不同的应用程序数据流,确保它们能够正确地传输到远程主机。

  • 分用(Demultiplexing):在TCP连接的接收端,分用根据接收到的数据流中的端口号信息,将数据流路由到相应的应用程序。这样,接收端可以正确地将来自不同应用程序的数据分发到相应的目的地。

通过多路复用和分用的机制,TCP协议能够支持在同一TCP连接中传输多个不同端口的数据流,实现了多个应用程序之间的数据传输和通信。这样的机制有效地利用了TCP连接的资源,提高了网络的效率和性能。

TCP协议中的多路复用和分用也涉及到数据的拆分和组装。在发送端,TCP会将来自不同应用程序的数据流进行合并,并按照一定的规则进行数据包的拆分和组装,以便在网络中传输。在接收端,TCP会根据接收到的数据包中的信息,将它们重新组装成原始的数据流,并分别传递给相应的应用程序。

UDP协议
UDP协议中数据的拆分和组装

在 UDP(用户数据报协议)中,数据的传输方式与TCP不同,UDP是一种无连接的协议,它不会像TCP那样对数据进行拆分和组装,而是将应用层生成的数据直接封装进UDP数据报并发送到网络上。下面是UDP中数据传输的过程介绍:

UDP中数据的发送过程:

  1. 应用数据: 应用程序生成要发送的数据(例如文件、、图像等)。

  2. 数据封装: UDP协议将应用数据直接封装进UDP数据报中,UDP数据报包括源端口号、目的端口号、长度和校验和等字段。

    • 接收端接收到分片后,根据分片中的信息(如序号)来确定它们的顺序。

    • 去除分片中的填充字节。

    • 将所有分片按照序号顺序合并成原始数据。

    • 如果数据在传输过程中丢失了分片,接收端可以请求重传。

  3. 发送数据报: 封装好的UDP数据报被发送到网络中,通过IP层传输到目标主机。

UDP中数据的接收过程:

  1. 接收数据报: 接收端接收到UDP数据报,并验证校验和是否正确。

  2. 提取数据: 如果校验和正确,接收端提取UDP数据报中的数据部分。

    • 确定最大传输单元(MTU):这是网络中可以传输的最大数据包大小,通常由网络设备决定,例如以太网的MTU通常是1500字节。

    • 计算填充:如果数据大小大于MTU,需要添加填充字节以保证整个数据包不超过MTU。

    • 分片:将数据分割成多个片段,每个片段的大小不超过MTU。每个分片都包含原始数据的一部分以及足够的信息来在接收端重新组装。

  3. 传递给应用: 最终将提取的数据传递给对应的应用程序,以供应用程序进一步处理。

UDP是一个无连接的协议,它不保证数据包的顺序,也不保证数据包的完整性。因此,如果应用程序需要保证数据传输的顺序和完整性,就需要在应用层实现这个功能。

需要注意的是,这些分和组装的过程是在应用层实现的,而不是由UDP协议本身处理的。UDP只是将原始数据包发送到网络上,而不关心数据包是否完整或是否按序到达。因此,应用程序需要自己确保数据的完整性和顺序。

怎么理解UDP面向数据报
  1. 数据独立性:在UDP中,每个数据包都是独立的,没有关联性和顺序性。这意味着发送端可以发送多个数据包,接收端可以独立地处理这些数据包,无需关心它们之间的顺序关系。

  2. 目的端口和源端口:UDP使用目的端口和源端口来标识发送方和接收方的进程。这意味着每个数据包都会包含端口号,以便接收端能够将其与相关进程关联起来。

  3. 校验和:UDP在每个数据包中添加了校验和,用于验证数据包的完整性。如果接收端收到数据包的校验和与发送端的不符,那么可能会丢弃该数据包并通知发送端进行重传。

综上所述,UDP的面向数据报的方式使得它适用于一些特定的应用场景,如实时通信、流媒体传输等。然而,这也意味着应用程序需要自己处理一些额外的工作,以确保数据的正确传输和接收。同时,由于UDP的不可靠性,它不会像TCP那样进行数据重传或流量控制,它通常与一些其他协议(如TCP)结合使用,以实现可靠的数据传输。

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值