JAVA网络编程TCP通信。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠、基于字节流的传输层通信协议,由IETF在RFC 793中定义,是互联网协议族(TCP/IP)的核心组成部分。它位于网络层(IP层)之上、应用层之下,为应用程序提供端到端的可靠数据传输服务。以下是其核心特性与机制:
🔍 一、核心特性
面向连接
TCP在数据传输前需通过“三次握手”建立连接,确保通信双方准备就绪;传输结束后通过“四次挥手”释放连接。- 三次握手:客户端发送
SYN→ 服务端回复SYN+ACK→ 客户端回复ACK确认连接。 - 四次挥手:任一方发送
FIN终止信号 → 对方回复ACK→ 对方发送FIN→ 本方回复ACK关闭连接。
- 三次握手:客户端发送
可靠性保障
- 序号与确认机制:每个数据字节分配唯一序号,接收方通过
ACK确认收到数据。若发送方未在合理时间内收到ACK,触发超时重传。 - 校验和:计算数据包首部和数据的校验和,验证传输完整性,错误包自动丢弃。
- 数据重组:处理IP层可能导致的数据包乱序或重复,按序号重组为连续字节流。
- 序号与确认机制:每个数据字节分配唯一序号,接收方通过
流量控制
通过滑动窗口协议动态调整发送速率,避免接收方缓冲区溢出。窗口大小根据接收方处理能力实时协商。拥塞控制
采用AIMD算法(如慢启动、拥塞避免),根据网络状况调整发送速率,防止因拥塞导致数据丢失。
⚙️ 二、工作流程
- 数据分割:将应用层下发的数据流分割为报文段(长度受MTU限制,通常≤1460字节)。
- 封装传输:添加TCP首部(含序号、确认号、窗口大小等),交由IP层发送。
- 接收重组:接收方按序号重组数据,校验正确性后提交给应用层。
🌐 三、与UDP的对比
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(需握手) | 无连接 |
| 可靠性 | 高(确认、重传、校验) | 低(无确认机制) |
| 数据顺序 | 保证按序到达 | 不保证顺序 |
| 传输效率 | 较低(需维护连接状态) | 较高(无连接开销) |
| 适用场景 | 文件传输、网页浏览(HTTP/HTTPS)、邮件(SMTP) | 视频流、实时游戏、DNS查询 |
注:TCP适用于对数据准确性要求高的场景,UDP适合实时性优先的应用。
📜 四、发展历程
- 基础规范:1981年RFC 793首次定义TCP。
- 关键扩展:
- RFC 1323:高性能扩展(窗口缩放、时间戳)。
- RFC 2018:选择性确认(SACK)。
- RFC 2581:拥塞控制算法(AIMD)。
- RFC 3168:显式拥塞通知(ECN)。
- 整合更新:2022年RFC 9293整合40余年改进,替代早期核心文档。
💎 总结
TCP通过连接管理、序号确认、重传校验、流量与拥塞控制五大机制,在不可靠的IP网络上实现了可靠、有序、无差错的数据传输。其设计兼顾效率与鲁棒性,成为互联网可靠通信的基石。如需了解技术细节,可参考RFC官方文档。
=======================================
java.net.socket类

