C++网络编程(三)TCP通信流程

TCP(传输控制协议)作为网络通信的核心协议之一,在计算机网络中扮演着重要角色。本文将系统介绍TCP协议的特点、通信流程以及具体的代码实现。

一、TCP协议核心特点

TCP是传输层协议,具有三大核心特性:

1. 面向连接

  • 建立连接​:通过三次握手建立双向连接

  • 断开连接​:通过四次挥手实现双向断开

  • 确保通信双方在数据传输前建立可靠的连接通道

2. 安全可靠

  • 在通信过程中对数据包进行完整性校验

  • 采用确认机制和重传机制:如果数据未被对方正确接收,发送方会重新传输

  • 保证数据按序、完整地到达目的地

3. 流式传输

  • 接收端和发送端处理的数据量可以不对等

  • 例如:A端每隔5秒发送4k数据,B端可以每隔1秒接收100字节

  • 这种灵活性使得TCP能够适应不同的网络环境和应用需求

三次握手时序图:

四次挥手时序图:

二、服务器端通信实现

文件描述符分类

在服务器端有两类文件描述符:

  • 监听文件描述符​:检测新的客户端连接请求,服务器只需一个

  • 通信文件描述符​:负责与已建立连接的客户端通信,数量与连接客户端数对应

服务器通信流程示意图:

服务器端通信流程代码实现

复制代码
// 1. 创建监听套接字(文件描述符)
int lfd = socket();

// 2. 绑定本地IP和端口
bind();

// 3. 设置套接字为监听状态
listen();

// 4. 接受客户端连接,获得通信文件描述符
int cfd = accept();

// 5. 与客户端通信
// 接收数据
read(); 或 recv();
// 发送数据
write(); 或 send();

// 6. 断开连接,关闭文件描述符
close();

流程解析​:

  1. 创建监听套接字 → 2. 绑定端口 → 3. 开始监听 → 4. 接受连接 → 5. 数据通信 → 6. 关闭连接

三、客户端通信实现

客户端特点

  • 只有一种文件描述符:通信文件描述符

  • 流程相对服务器端更简单

客户端通信流程示意图:

客户端通信流程代码实现

复制代码
// 1. 创建通信套接字
int fd = socket();

// 2. 连接服务器
connect();

// 3. 与服务器通信
// 接收数据
read(); 或 recv();
// 发送数据
write(); 或 send();

// 4. 断开连接
close();

四、核心函数解析

关键系统调用

  • socket()​​:创建通信端点,返回文件描述符

  • bind()​​:将套接字与本地地址绑定

  • listen()​​:将套接字设置为监听模式

  • accept()​​:接受传入的连接请求

  • connect()​​:主动与服务器建立连接

  • read()/write()、recv()/send()​​:数据收发函数

  • close()​​:关闭连接,释放资源

总结

TCP通信是一个典型的客户端-服务器模型,通过三次握手建立可靠连接,在通信过程中保证数据的完整性和有序性,最后通过四次挥手优雅断开连接。理解TCP通信流程对于网络编程至关重要,它是构建稳定网络应用的基础。

无论是服务器端还是客户端,都需要遵循创建套接字→建立连接→数据通信→断开连接的基本流程,只是具体实现细节有所不同。掌握这些核心概念和代码实现,将为深入学习网络编程打下坚实基础。

相关推荐
MC皮蛋侠客7 小时前
DNP3 系列(十二):测试与工具链——模拟器、Wireshark 与一致性测试
网络·wireshark·dnp3
虎王物联7 小时前
工业Modbus TCP协议深度实战:STM32 HAL库实现从机通信与数据上云
stm32·物联网·网络协议·tcp/ip·嵌入式
观测云9 小时前
Fastjson 高危 RCE(CVE-2026-16723):如何用观测云快速发现并完成修复
网络·安全·可观测性·观测云
大模型码小白9 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
晓晓_za89866810 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
楷哥爱开发11 小时前
TikTok Shop新加坡本土店入驻:如何选择新加坡本土住宅IP?
网络·网络协议·tcp/ip
云贝教育-郑老师11 小时前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
网安蟹佬霸11 小时前
# 网络流量分析实战:从Wireshark到入侵检测系统构建(2026最新版,附完整流量分析链与IDS规则集)
网络·测试工具·安全·开源·wireshark·密码学·哈希算法
会飞的土拨鼠呀11 小时前
Linux的存储使用率应该如何计算
linux·运维·服务器
weixin_5112552113 小时前
NGINX常用配置
linux·服务器·nginx