当前位置: 首页 > news >正文

深入理解TCP状态转换:从三次握手到四次挥手的完整实战

一、引言

TCP(传输控制协议)是互联网最重要的传输层协议之一,其可靠性建立在复杂的状态机制之上。本文将通过详细的代码示例和实际运行结果,深入剖析TCP连接从建立到断开的完整状态转换过程,帮助你彻底理解三次握手四次挥手背后的原理。

二、TCP状态转换全景图

TCP连接的生命周期包含三个核心阶段:

┌─────────────────────────────────────────────────────────┐ │ 阶段1: 三次握手 (Connection Establishment) │ │ CLOSED → SYN_SENT → SYN_RCVD → ESTABLISHED │ ├─────────────────────────────────────────────────────────┤ │ 阶段2: 数据传输 (Data Transfer) │ │ ESTABLISHED ←→ ESTABLISHED (状态保持不变) │ ├─────────────────────────────────────────────────────────┤ │ 阶段3: 四次挥手 (Connection Termination) │ │ FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED │ │ CLOSE_WAIT → LAST_ACK → CLOSED │ └─────────────────────────────────────────────────────────┘

三、三次握手详解与代码实现

3.1 三次握手状态转换流程

客户端 服务器 CLOSED CLOSED | | | socket() | socket() | | bind() | | listen() | ↓ | LISTEN | connect() | ↓ | SYN_SENT --------[SYN, seq=x]----------→ | | ↓ | SYN_RCVD | ←----[SYN+ACK, seq=y, ack=x+1]---| ↓ | ESTABLISHED ----[ACK, ack=y+1]--------→ | | ↓ | ESTABLISHED

3.2 服务器端代码实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<netinet/tcp.h>#definePORT8888#defineBACKLOG5// 打印当前TCP状态的辅助函数voidprint_tcp_state(intsockfd,constchar*stage){structtcp_infoinfo;socklen_tinfo_len=sizeof(info);if(getsockopt(sockfd,IPPROTO_TCP,TCP_INFO,&info,&info_len)==0){printf("[%s] TCP状态: %d\n",stage,info.tcpi_state);}}intmain(){intlistenfd,connfd;structsockaddr_inservaddr,cliaddr;socklen_tclilen;charbuffer[1024];// 步骤1: 创建socket (状态: CLOSED)listenfd=socket(AF_INET,SOCK_STREAM,0);if(listenfd<0){perror("socket error");exit(1);}printf("✓ 服务器socket创建成功 (状态: CLOSED)\n");// 设置地址重用intopt=1;setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));// 步骤2: 绑定地址memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(PORT);if(bind(listenfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0){perror("bind error");exit(1);}printf("✓ 绑定端口 %d 成功\n",PORT);// 步骤3: 开始监听 (状态: CLOSED → LISTEN)if(listen(listenfd,BACKLOG)<0){perror("listen error");exit(1);}printf("✓ 服务器进入LISTEN状态,等待客户端连接...\n");printf("═══════════════════════════════════════\n");// 步骤4: 接受连接 (三次握手过程)clilen=sizeof(cliaddr);printf("⏳ 等待客户端发起第一次握手 (SYN)...\n");connfd=accept(listenfd,(structsockaddr*)&cliaddr,&clilen);if(connfd<0){perror("accept error");exit(1);}// 三次握手完成,连接建立charclient_ip[INET_ADDRSTRLEN];inet_ntop(AF_INET,&cliaddr.sin_addr,client_ip,INET_ADDRSTRLEN);printf("\n🎉 三次握手完成!\n");printf("✓ 客户端 %s:%d 已连接\n",client_ip,ntohs(cliaddr.sin_port));printf("✓ 服务器状态: ESTABLISHED\n");printf("═══════════════════════════════════════\n");// 步骤5: 数据传输阶段 (状态保持ESTABLISHED)printf("\n📡 进入数据传输阶段 (状态保持ESTABLISHED)...\n");while(1){ssize_tn=read(connfd,buffer,sizeof(buffer)-1);if(n<=0){printf("\n⚠️ 客户端断开连接,准备进入四次挥手...\n");break;}buffer[n]='\0';printf("收到数据: %s",buffer);// 回显数据write(connfd,buffer,n);}// 步骤6: 关闭连接 (四次挥手)printf("✓ 关闭连接\n");close(connfd);close(listenfd);return0;}

3.3 客户端代码实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#defineSERVER_IP"127.0.0.1"#defineSERVER_PORT8888intmain(){intsockfd;structsockaddr_inservaddr;charsend_buf[1024];charrecv_buf[1024];// 步骤1: 创建socket (状态: CLOSED)sockfd=socket(AF_INET,SOCK_STREAM,0);if(
http://www.jsqmd.com/news/332044/

相关文章:

  • 用于革命性成像的高数值孔径显微镜
  • AI编程的演进与核心:从大模型到智能体
  • 2026年睡眠健康管理服务推荐:秒睡学院提供睡眠疗愈课程、训练营及定制化睡眠中心方案
  • 开题报告--高校实验教学质量评估系统的设计与实现
  • 2026年除湿机厂家推荐:浙江科橙电气有限公司,移动/商用/工业/家用除湿机全场景覆盖
  • 药房管理系统设计与开发 开题报告
  • 【5G通信】5G毫米波UDN中带有位置感知波束成形的链路级模型干涉评估【含Matlab源码 15044期】
  • 采幽园农家乐信息系统分析与设计 开题报告
  • 2026年石墨制品厂家推荐:海门市万隆电碳制品厂,高纯/高密度/耐高温石墨制品全系供应
  • 新闻发布与评论管理系统的设计与实现 开题报告
  • 2026年PSA制氧机/制氮机/吸附式干燥机推荐:杭州纽卓科技集团气体分离设备全解析
  • 2026年注册公司服务推荐:广东海豚企业管理有限公司,一站式工商财税服务优选
  • 舞蹈工作室会员管理系统设计与实现 开题报告
  • 不可思议!AI教材编写工具,低查重快速生成专业教材!
  • 2026年性能稳定的新型墙体建材厂家最新实力排行
  • 2026年正规的结婚羽绒被/高档羽绒被用户好评厂家排行
  • 2026年质量好的钢丝磷化液/磷化液品牌厂家排行榜
  • 2026年口碑好的扫地机/扫地机产品行业内知名厂家排行榜
  • 2026年比较好的铁路施工安全防护系统/铁路施工远程管理系统技术实力榜
  • 2026年评价高的收银机AI称/收银机电子屏销售厂家
  • 低查重AI写教材攻略,借助AI教材生成工具实现高效创作!
  • 在AI技术能够快速实现想法的时代,挖掘新需求成了重中之重——某知名速读字体框架需求探索
  • 2026年热门的无人看守铁路道口报警/铁路道口栏木机热门厂家推荐榜单
  • 2026年比较好的高压喷淋超声波清洗机/工业超声波清洗机厂家推荐及选择指南
  • 2026年热门的低温冷却液循环泵/工业低温冷却液循环泵厂家推荐及采购指南
  • 2026年高性价比的有机棉厂家最新推荐排行榜
  • 2026年比较好的通过式超声波清洗设备/工厂超声波清洗设备厂家推荐及选购参考榜
  • 2026年口碑好的高强度水泥管/管道工程水泥管厂家选购指南与推荐
  • 别再用 useEffect 拿数据了!React Query:RN 异步状态管理的终极方案
  • 校园失物招领系统设计与开发 开题报告