【复习408】详记运输层

第一部分:运输层概述与核心协议

运输层位于网络层之上、应用层之下,其核心任务是为运行在不同主机上的应用进程之间提供端到端的逻辑通信功能。网络层提供的是主机到主机的通信,而运输层则将这一服务扩展为进程到进程的通信。

1.1 TCP与UDP的核心区别与应用场景

运输层最基础也是最重要的两个协议是传输控制协议(TCP)和用户数据报协议(UDP)。

1.1.1 核心区别
  • 连接性:

    • TCP (Transmission Control Protocol): 是一个面向连接的协议。在数据传输开始之前,必须通过“三次握手”建立一个逻辑连接。数据传输结束后,需要通过“四次挥手”来释放连接 。这个连接状态的维护是其提供可靠服务的基础。
    • UDP (User Datagram Protocol): 是一个无连接的协议。发送数据前不需要建立任何连接,直接将数据报(Datagram)尽力而为地发送出去,不维护任何连接状态。
  • 可靠性:

    • TCP: 提供可靠的数据传输服务。它通过序列号、确认应答(ACK)、超时重传、数据校验等机制,确保数据能够无差错、不丢失、不重复并且按序到达 。如果数据包丢失,TCP会负责重传。
    • UDP: 提供不可靠的数据传输服务。它不保证数据报的到达、顺序或完整性,数据包可能会丢失、重复或乱序到达 。可靠性的保证需要由上层应用自己来处理。
  • 传输速率与开销:

    • TCP: 由于需要建立连接、发送确认、处理重传、进行流量控制和拥塞控制等,其机制复杂,因此传输速度相对较慢,协议开销也较大。其首部至少为20字节。
    • UDP: 机制简单,几乎没有额外的控制开销,因此传输速率快。其首部固定为8字节,开销极小。
  • 传输模式:

    • TCP: 只支持点对点的单播通信。
    • UDP: 支持单播、多播和广播。
1.1.2 应用场景

基于上述区别,两种协议适用于不同的应用需求:

  • TCP的适用场景: 对数据传输可靠性要求极高的应用。

    • 文件传输: 如FTP,确保文件内容准确无误。
    • 电子邮件: 如SMTP,保证邮件内容能够完整送达。
    • 网页浏览: 如HTTP/HTTPS,确保网页内容和资源正确加载。
    • 数据库连接与远程终端访问: 如Telnet、SSH,要求命令和数据精确传输。
  • UDP的适用场景: 对实时性要求高、可以容忍少量数据丢失的应用。

    • 实时音视频传输: 如VoIP(网络电话)、在线直播、视频会议。丢失一两帧数据对整体体验影响不大,但延迟过高是不可接受的 。
    • 在线游戏: 快速传输玩家位置和状态信息至关重要,低延迟是关键 。
    • DNS (域名系统): 查询过程追求快速响应,一次查询和响应的数据包很小,即使丢失,客户端重试的成本也很低。

第二部分:TCP协议深度解析

TCP是运输层乃至整个网络协议栈中最为复杂和关键的协议之一。

2.1 TCP报文段结构

理解TCP报文段结构是理解其所有工作机制的基础。一个TCP报文段由首部和数据两部分组成。其首部最短为20字节,最长可达60字节(因为有40字节的可选字段)。关键字段包括:

  • 源端口和目的端口:各16位,用于标识发送和接收方的应用进程。
  • 序号 (Sequence Number) :32位,用于标识本报文段数据部分的第一个字节在整个数据流中的位置,是实现可靠有序传输的关键。
  • 确认号 (Acknowledgment Number) :32位,期望收到对方下一个报文段的第一个数据字节的序号,是实现可靠确认机制的关键。
  • 数据偏移(首部长度)‍:4位,指出TCP首部的长度,以4字节为单位。
  • 标志位 (Flags) :共6个关键标志位:
    • URG:紧急指针有效。
    • ACK:确认号字段有效。
    • PSH:推送功能,接收方应尽快将数据交付给应用层。
    • RST:重置连接。
    • SYN:同步序号,用于发起一个连接。
    • FIN:发送端数据已发送完毕,请求释放连接。
  • 窗口大小 (Window Size) :16位,用于流量控制,告知对方自己还能接收多少字节的数据。
  • 校验和 (Checksum) :16位,用于检验首部和数据部分是否出错。
  • 选项 (Options) :长度可变,最多40字节,用于支持TCP的各种高级功能,如SACK、窗口扩大等。

2.2 TCP连接管理:三次握手与四次挥手

TCP的面向连接特性体现在连接的建立与释放过程中。

  • 三次握手 (Three-Way Handshake)

    1. 第一次握手: 客户端发送一个SYN报文段(SYN=1, seq=x)到服务器,并进入SYN_SENT状态。
    2. 第二次握手: 服务器收到SYN报文段后,若同意连接,则回复一个SYN+ACK报文段(SYN=1, ACK=1, seq=y, ack=x+1),并进入SYN_RCVD状态。
    3. 第三次握手: 客户端收到服务器的SYN+ACK报文段后,发送一个ACK报文段(ACK=1, seq=x+1, ack=y+1)到服务器。客户端和服务器在收到对方的ACK后,都进入ESTABLISHED状态,连接建立完成。
  • 四次挥手 (Four-Way Wave)

    • 第一次挥手: 客户端发送一个FIN报文段(FIN=1, seq=u)给服务器,请求关闭数据传输,进入FIN_WAIT_1状态。
    • 第二次挥手: 服务器收到FIN后,发送一个ACK报文段(ACK=1, seq=v, ack=u+1),表示收到了客户端的关闭请求,进入CLOSE_WAIT状态。此时TCP连接处于半关闭状态,服务器仍可向客户端发送数据。
    • 第三次挥手: 服务器数据发送完毕后,发送一个FIN报文段(FIN=1, seq=w, ack=u+1)给客户端,请求关闭连接,进入LAST_ACK状态。
    • 第四次挥手: 客户端收到服务器的FIN后,发送一个ACK报文段(ACK=1, seq=u+1, ack=w+1)进行确认。客户端进入TIME_WAIT状态,等待2MSL(Maximum Segment Lifetime)后关闭。服务器收到ACK后立即关闭,进入CLOSED状态。

2.3 TCP可靠传输机制

TCP通过多种机制协同工作,以保证数据传输的可靠性。

  • 序列号与确认应答:TCP将数据流视为连续的字节序列,并为每个字节分配一个序列号。接收方通过返回确认号来告知发送方已成功收到的数据,实现了基本的确认和重传。
  • 超时重传:发送方每发送一个报文段,就会启动一个计时器。如果在计时器超时之前没有收到确认,就会重传该报文段。
  • 选择性确认 (SACK) 机制
    传统的TCP确认机制是累积确认,当中间某个包丢失时,发送方只能重传该包之后的所有数据。SACK (Selective Acknowledgment) 是对这一机制的优化。
  • 工作流程: SACK功能需要在三次握手时通过TCP选项进行协商。当接收方收到乱序的数据包时,它会在返回的ACK报文的选项字段中,明确告知发送方哪些非连续的数据块已经被成功接收。
  • 报文格式: SACK信息通过TCP头部的选项字段携带。选项种类5用于携带SACK信息,其中包含了多个“块”(Block)的边界,每个块指明一个已成功接收的连续数据范围。
  • 优点: SACK使得发送方能够精确地知道哪些报文段丢失了,从而只重传真正丢失的部分,避免了不必要的重传,显著提高了网络在出现丢包时的传输效率。

2.4 TCP流量控制与拥塞控制

流量控制和拥塞控制是TCP实现高效、稳定传输的两个核心机制,但它们解决的问题不同。

2.4.1 流量控制 (Flow Control)
  • 目的: 防止发送方发送数据的速度过快,导致接收方的缓冲区溢出,从而造成数据丢失 。这是一个端到端的问题,只关心接收方的处理能力。
  • 机制: 主要通过滑动窗口实现。接收方在TCP报文段首部的“窗口大小”字段(rwnd,接收窗口)中,通告自己当前还可用的缓冲区空间大小。发送方根据这个值来调整自己的发送速率,确保发送的数据量不会超过接收方的处理能力。
2.4.2 拥塞控制 (Congestion Control)
  • 目的: 防止过多的数据注入到网络中,导致网络中的路由器或链路过载,从而引发大规模丢包和延迟增加。这是一个全局性的问题,关心整个网络的状态。

  • 核心变量: TCP维护一个名为拥塞窗口(cwnd)的状态变量。发送方实际可发送的数据量是cwnd和rwnd中的较小者。

  • 经典四阶段算法:

    1. 慢启动 (Slow Start): 连接建立初期,cwnd被初始化为一个较小的值。每收到一个ACK,cwnd就增加1个MSS(Maximum Segment Size)。这使得cwnd呈指数级增长,目的是快速探测网络的可用带宽。
    2. 拥塞避免 (Congestion Avoidance): 当cwnd增长到慢启动阈值(ssthresh)时,进入拥塞避免阶段。此时,每经过一个RTT,cwnd只增加1个MSS,使其呈线性增长,以更温和的方式探测网络容量。
    3. 快速重传 (Fast Retransmit): 当发送方连续收到三个相同的重复ACK时,它会认为一个报文段已经丢失,并立即重传该报文段,而无需等待超时计时器到期。这大大提高了重传效率。
    4. 快速恢复 (Fast Recovery): 在执行快速重传后,TCP Tahoe版本会直接将cwnd降为1并进入慢启动。而更先进的TCP Reno版本则进入快速恢复阶段:将ssthresh减半,cwnd也减半(而不是降为1),然后开始线性增长。这避免了网络发生拥塞时吞吐量的急剧下降。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.EscaRC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值