TCP(Transmission Control Protocol,传输控制协议)

TCP(Transmission Control Protocol,传输控制协议) 是互联网协议族(TCP/IP)中的核心协议之一,负责在网络中提供可靠的、面向连接的字节流传输服务。

TCP 的核心特点

1.面向连接(Connection-Oriented)

  • 通信双方在传输数据前需先建立逻辑连接(通过 “三次握手” 实现),数据传输完成后释放连接(“四次挥手”)。
  • 类似 “打电话”,需先拨号建立连接,通话结束后挂断。

2.可靠性(Reliability)

  • 通过确认机制(ACK)确保数据到达:发送方发送数据后等待接收方确认,未确认则重传。
  • ** 序列号(Sequence Number)和确认号(Acknowledgment Number)** 机制:确保数据按顺序接收,乱序时重新排序。
  • 流量控制(Flow Control):通过滑动窗口(Sliding Window)机制避免发送方发送速度超过接收方处理能力。
  • 拥塞控制(Congestion Control):避免网络拥塞,动态调整发送方的传输速率(如慢启动、拥塞避免、快速重传等算法)。

3.字节流服务(Byte Stream Service)

  • 数据被视为无边界的字节流,发送方逐字节写入,接收方逐字节读出,不保留消息边界(与 UDP 的 “数据报” 服务不同)。

TCP 报文段(Segment)格式

TCP 数据传输的基本单位是报文段,其头部格式如下(共 20 字节固定部分,可包含可选字段):\

字段 长度 说明
源端口号 16 位 发送方端口号(标识应用进程)
目的端口号 16 位 接收方端口号(标识应用进程)
序列号 32 位 本报文段数据的第一个字节在字节流中的编号
确认号 32 位 期望接收的下一个字节的编号(表示已成功接收该编号之前的数据)
数据偏移 4 位 头部长度(以 4 字节为单位,标识可选字段的长度)
保留 6 位 保留字段(未使用,置 0)
控制位 6 位 包含多个标志位: - URG(紧急指针有效)
- ACK(确认号有效)
- PSH(推送数据)
- RST(重置连接)
- SYN(建立连接)
- FIN(释放连接)
窗口大小 16 位 接收方的接收窗口大小(用于流量控制,单位为字节)
校验和 16 位 对头部和数据进行校验,确保数据完整性
紧急指针 16 位 配合 URG 标志,标识紧急数据的末尾位置
可选字段 可变长度 如最大段大小(MSS)、时间戳(Timestamp)等

客户端和服务器端函数调用

1.客户端(发送端)

1.socket()创建TCP套接字
2.connect()连接服务器端(接收端)的TCP套接字
3.连接成功,调用send()或write()发送数据

2.服务器端(接收端)

1.socket()创建TCP套接字
2.bind()绑定套接字与服务器地址
3.listen()监听套接字上的连接请求
4.accept()接收连接请求建立连接,成功会返回一个新的文件描述符
5.当服务器与客户端成功建立连接,调用recv()或read()接收数据

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

1.三次握手(建立连接)

步骤:
客户端→服务器:发送 SYN 报文段(序列号 = J,SYN=1),请求建立连接。
服务器→客户端:发送 SYN+ACK 报文段(序列号 = K,确认号 = J+1,SYN=1,ACK=1),确认客户端请求并发起自身连接请求。
客户端→服务器:发送 ACK 报文段(序列号 = J+1,确认号 = K+1,ACK=1),确认服务器请求,连接建立完成。
目的:
确保双方确认彼此的接收和发送能力正常。
同步双方的初始序列号(避免历史残留报文段干扰新连接)。

2.四次挥手(释放连接)

步骤:
主动关闭方→被动关闭方:发送 FIN 报文段(序列号 = M,FIN=1),请求关闭连接。
被动关闭方→主动关闭方:发送 ACK 报文段(序列号 = N,确认号 = M+1,ACK=1),确认收到关闭请求(此时连接处于半关闭状态,被动关闭方仍可发送剩余数据)。
被动关闭方→主动关闭方:发送 FIN 报文段(序列号 = P,FIN=1),表示自身数据已发送完毕。
主动关闭方→被动关闭方:发送 ACK 报文段(序列号 = M+1,确认号 = P+1,ACK=1),确认关闭,连接正式释放。
为什么需要四次挥手?
因为 TCP 是全双工通信,双方需各自单独关闭发送通道(主动关闭方先关闭自己的发送通道,被动关闭方处理完剩余数据后再关闭自己的发送通道)。

TCP 与 UDP 的对比

特性 UDP TCP
连接性 无连接 面向连接(三次握手)
可靠性 不可靠 可靠(重传、排序)
传输效率 高(开销小) 低(协议开销大)
应用场景 实时音视频、游戏、DNS 文件传输、网页浏览、邮件
拥塞控制 有(慢启动、拥塞避免)
传输单位 数据报(Datagram 字节流(Byte Stream)

TCP 的应用场景

TCP 广泛应用于需要可靠数据传输的场景,例如:

  • Web 服务:HTTP/HTTPS 基于 TCP 传输网页数据。
  • 文件传输:FTP、SFTP 通过 TCP 保证文件完整传输。
  • 电子邮件:SMTP、POP3、IMAP 协议基于 TCP 收发邮件。
  • 远程登录:SSH、Telnet 通过 TCP 建立远程连接。
  • 数据库访问:MySQL、PostgreSQL 等通过 TCP 进行客户端 - 服务器通信。

TCP 的常见问题与优化

1.超时重传(Timeout Retransmission)

  • 发送方在超时未收到 ACK 时重传数据,超时时间需动态调整(如基于 RTT 估算)。

2.拥塞控制算法

  • 慢启动(Slow Start):初始时缓慢增加发送窗口大小,避免瞬间拥塞。
  • 拥塞避免(Congestion Avoidance):窗口增长到阈值后,改为线性增长。
  • 快速重传(Fast Retransmit):收到 3 次重复 ACK 时立即重传,无需等待超时。
  • 快速恢复(Fast Recovery):重传后调整窗口大小,恢复传输效率。

3.延迟确认(Delayed ACK)

  • 接收方延迟发送 ACK 以合并多个数据段的确认,减少网络开销。

4.Nagle 算法

  • 合并小数据段为一个报文段发送,减少网络中的小包数量(适用于交互式应用,如 SSH)。

总结
TCP 通过复杂的机制确保了数据在不可靠网络中的可靠传输,是互联网的 “可靠基石”。理解 TCP 的原理(如三次握手、四次挥手、流量控制、拥塞控制等)对网络编程、性能优化和故障排查至关重要。如需进一步探讨某一细节(如具体协议抓包分析、优化策略等),可随时补充说明!

posted @ 2025-05-30 00:09  ice_cui  阅读(438)  评论(0)    收藏  举报