0%

传输层网络协议

传输层网络协议:TCP 与 UDP 的深度解析

传输层是网络通信的核心枢纽,其中TCP(传输控制协议)UDP(用户数据报协议) 是两种最核心的协议。TCP 以可靠性著称,适用于需要精确数据传输的场景;UDP 以高效性为亮点,适合实时性要求高的应用。以下从协议细节、连接机制到核心特性进行全面解析。

TCP:面向连接的可靠传输协议

TCP(Transmission Control Protocol)是一种基于连接、可靠、有序的传输协议,通过复杂的控制机制确保数据准确无误地从发送方交付到接收方。

TCP 的核心标识:序号、确认号与标志位

TCP 报文通过序号、确认号标志位实现可靠传输,这些字段是理解 TCP 工作机制的关键:

  • 序号(seq)
    TCP 将传输的数据流视为字节序列,每个字节都有唯一序号。seq表示当前报文段第一个字节的序号(如发送 100 字节数据,seq=1000,则该报文包含 1000-1099 字节)。
  • 确认号(ack)
    接收方用于告知发送方 “已成功接收数据的截止位置”,值为期望接收的下一个字节序号。例如,若接收方已收到 1000-1099 字节,则 ack=1100,表示 “请发送从 1100 开始的数据”。
  • 标志位
    控制 TCP 连接与数据传输的关键标识,核心包括:
    • ACK:确认位。ACK=1时,确认号(ack)有效;ACK=0时,ack 无效(仅在第一次握手时使用)。
    • SYN:同步位。用于建立连接时同步序号,SYN=1表示 “请求建立连接”,此时报文不携带数据。
    • FIN:终止位。用于释放连接,FIN=1表示 “发送方已完成数据传输,请求关闭连接”。

TCP 连接建立:三次握手

TCP 是面向连接的协议,通信前必须通过 “三次握手” 建立连接,确保双方收发能力正常。

过程详解:
  • 第一次握手
    客户端 → 服务器:发送SYN=1,seq=x的报文(x 为客户端初始序号),客户端进入SYN_SENT状态。
    作用:客户端请求建立连接,告知服务器自己的发送能力。

    第一次握手

  • 第二次握手
    服务器 → 客户端:发送SYN=1,ACK=1,seq=y,ack=x+1的报文(y 为服务器初始序号,ack 确认客户端的 seq),服务器进入SYN_RECV状态。
    作用:服务器确认收到客户端请求,并告知客户端自己的发送能力。此时客户端已知双方发送能力正常,但服务器尚未确认客户端能否接收自己的数据。

    第二次握手

  • 第三次握手
    客户端 → 服务器:发送ACK=1,seq=x+1,ack=y+1的报文(确认服务器的 seq),双方进入ESTABLISHED状态,连接建立完成。
    作用:客户端确认收到服务器的响应,服务器此时确认双方收发能力均正常,连接正式生效。

    第三次握手

为何需要三次握手?
  • 两次握手可能导致 “无效连接请求” 被服务器接受(如客户端的请求报文延迟到达,服务器误判为新请求并建立连接,造成资源浪费)。
  • 三次握手通过 “客户端最终确认”,确保双方都明确对方已准备好通信,避免资源冗余。

TCP 连接释放:四次挥手

TCP 连接是全双工的(双方可同时发送数据),因此关闭连接需 “四次挥手”,确保双方都完成数据传输。

四次挥手

过程详解:
  • 第一次挥手
    主动关闭方 → 被动关闭方:发送FIN=1,ACK=1,seq=x的报文,主动方进入FIN_WAIT_1状态。
    作用:主动方告知 “我已完成数据发送,请求关闭我的发送通道”。
  • 第二次挥手
    被动关闭方 → 主动关闭方:发送ACK=1,seq=y,ack=x+1的报文,被动方进入CLOSE_WAIT状态,主动方收到后进入FIN_WAIT_2状态。
    作用:被动方确认收到关闭请求,但可能仍有数据需发送,暂不关闭自己的发送通道。
  • 第三次挥手
    被动关闭方 → 主动关闭方:发送FIN=1,ACK=1,seq=z,ack=x+1的报文,被动方进入LAST_ACK状态。
    作用:被动方告知 “我也完成数据发送,请求关闭我的发送通道”。
  • 第四次挥手
    主动关闭方 → 被动关闭方:发送ACK=1,seq=x+1,ack=z+1的报文,主动方进入TIME_WAIT状态(等待 2 倍最大报文段寿命,确保被动方收到确认),被动方收到后进入CLOSED状态。最终主动方超时后也进入CLOSED状态。
    作用:主动方确认收到被动方的关闭请求,双方彻底释放连接。
为何需要四次挥手?
  • 全双工通信中,双方需分别关闭各自的发送通道,因此被动关闭方需先确认接收,再发送自己的关闭请求,导致比三次握手多一次交互。

TCP 的核心特性与适用场景

  • 可靠性:通过序号、确认号、重传机制(超时未确认则重传)、校验和(检测数据损坏)确保数据无丢失、无重复、按序到达。
  • 流量控制:利用滑动窗口机制,根据接收方缓冲区大小动态调整发送速率,避免接收方过载。
  • 拥塞控制:通过慢启动、拥塞避免、快速重传等算法,感知网络拥塞并降低发送速率,防止网络瘫痪。
  • 面向字节流:将应用数据视为连续字节流,可能拆分(拆包)或合并(粘包)数据以适配 MTU(最大传输单元),需应用层自行处理边界问题。

适用场景:文件传输(FTP)、网页浏览(HTTP/HTTPS)、邮件发送(SMTP)等对可靠性要求高的场景。

UDP:无连接的高效传输协议

UDP(User Datagram Protocol)是一种无连接、不可靠的传输协议,以最小化协议开销为设计目标,追求传输效率最大化。

UDP 的核心特性

  • 无连接:通信前无需建立连接,直接封装数据并发送,类似 “信件投递”,无需确认对方是否准备好。
  • 不可靠传输:
    • 不保证数据到达:数据包可能丢失,且不会重传。
    • 不保证顺序:数据包可能乱序到达,接收方需自行排序。
    • 仅提供校验和:用于检测数据是否损坏,损坏则直接丢弃,不通知发送方。
  • 面向报文:不对应用数据进行拆分或合并,直接按报文原样传输(每个报文大小限制在 64KB 内)。
  • 高效轻量:头部仅 8 字节(远小于 TCP 的 20-60 字节),协议开销极小,传输速度快。
  • 无拥塞控制:无视网络负载,持续以固定速率发送数据,适合实时性要求高的场景。

UDP 的适用场景

  • 实时通信:视频通话、语音聊天(少量丢包不影响观感 / 听感,延迟更重要)。
  • 游戏数据传输:如多人在线游戏的位置同步(实时性优先,允许偶尔数据丢失)。
  • DNS 查询:域名解析需快速响应,单次请求 - 响应模式适合 UDP。
  • 广播 / 组播:UDP 支持一对多通信,适合流媒体推送、设备发现等场景。

TCP 与 UDP 的对比总结

特性 TCP UDP
连接方式 面向连接(三次握手建立连接) 无连接(直接发送)
可靠性 可靠(无丢失、无重复、按序) 不可靠(可能丢包、乱序)
传输效率 较低(协议开销大,重传耗时) 较高(轻量,无额外控制)
数据边界 面向字节流(可能粘包 / 拆包) 面向报文(保持数据边界)
拥塞控制 支持(动态调整发送速率) 不支持(固定速率发送)
头部大小 20-60 字节 8 字节
典型应用 文件传输、网页浏览、邮件 视频通话、游戏、DNS 查询、广播

欢迎关注我的其它发布渠道