TCP协议连接过程详解

使用SOCKET实现TCP/IP协议的通讯 一、原理:      首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!一样,TCPIP下建立连接首先要有一个服务器,它是被动的,它只能等待别人跟它建立连接,自己不会去主动连接,那客户端如何去连接它呢,这里提到2个东西,IP地址... 阅读详情
  1、建立连接协议(三次握手)
  (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1.
  (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
  (3) 客户必须再次回应服务段一个ACK报文,这是报文段3.
   2、连接终止协议(四次握手)
  由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
  (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
  (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
  (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
  (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
  CLOSED: 这个没什么好说的了,表示初始状态。
  LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
  SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
  SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
  ESTABLISHED:这个容易理解了,表示连接已经建立了。
  FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
  FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
  TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
  CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
  CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
  LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

TCP报文的交互过程 在TCP 协议提供可靠的连接服务时,采用三次握手建立一个连接,采用四次握手来关闭一个连接。 本文介绍tcp建立连接和断开连接时的报文交互,并通过实例对TCP建立和断开连接进行详细说明 阅读详情

相关推荐

SpringBoot+Netty实现TCP客户端实现接收数据按照16进制解析并存储到Mysql以及Netty断线重连检测与自动重连

在SpringBoot项目中需要对接三方系统,对接协议是TCP,需实现一个TCP客户端接收服务端发送的数据并按照16进制进行解析数据,然后对数据进行过滤,将指定类型的数据通过mybatis存储进mysql数据库中。并且当tcp服务端断连时,tcp客户端能定时检测并发起重连。

BADAO_LIUMANG_QIZHI的博客 1万+

Java对接TCP接口--数据报文通信

第一次整这东西,感谢大佬: 参考:https://www.cnblogs.com/liudalei/p/11942464.html?ivk_sa=1024320u

aiguoguo000的博客 1020

Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法

文 | GentlemanTsao 文章目录前言1.什么是GRFC2.GRFC的配置流程概览3.msm_sig_info的配置与分析msm_sig_info Table位置:msm_sig_info Table示例:Table元素解读:rfc_msm_sig_info_type结构体signal typemsm_gpio |grfc_num:GPIO到GRFC的映射output_typefunction_select4._sig_cfg的配置与分析_sig_cfg table位置:_sig_cfg tabl

GentelmanTsao的博客 7315

什么是物联网?常见IoT 物联网协议最全讲解

推荐语:这是一本从技术原理、工程实践、设计模式和最佳实践4个维度讲解物联网系统开发的著作,是作者10余年实践经验的总结。付强,某智慧社区企业的联合创始人兼CTO,资深IoT技术专家,有1...

4853

AI Agent评估:指标、策略与最佳实践

AI智能体正逐渐融入到各个领域,从日常的对话助手到复杂的工作流程自动化,其应用范围不断拓展。然而,确保这些智能体能够可靠、高效地完成任务至关重要,这就使得AI智能体评估成为了人工智能发展过程中不可或缺的一环。本文将深入探讨AI智能体评估的指标、策略以及最佳实践,为读者全面解读这一关键领域。

llm_way的博客 3498

Redis TLS 加密传输实战:从证书生成到安全配置

本文详细介绍了为Redis启用TLS加密传输的完整实战流程。从阐述TLS加密的必要性开始,逐步指导读者生成自签名CA和服务器证书,并深入解析Redis服务端的核心安全配置,包括端口设置、认证模式与性能优化。最后,提供了主流客户端连接示例及生产环境下的排错与运维最佳实践,帮助构建安全的Redis通信通道。

weixin_29274969的博客 515

Wireshark分析TCP连接断开过程详解文档:助您深入理解TCP协议

Wireshark分析TCP连接断开过程详解文档:助您深入理解TCP协议 【下载地址】Wireshark分析TCP连接断开过程详解文档 《Wireshark分析TCP连接断开过程详解文档》深入剖析了TCP连接断开的全过程,通过Wireshark工具详细展示了抓包方法、关键参数解读及问题排查技巧。文档不仅帮助读者全面理解T...

gitblog_06707的博客 731

别再拍脑袋估工时了!手把手教你用FPA功能点分析法,给软件项目算笔明白账

本文详细介绍了FPA功能点分析法在软件开发工作量评估中的应用,帮助团队告别拍脑袋估算。通过量化系统功能组件,FPA提供客观的工时和成本预估,特别适合需求不明确的项目初期。文章以财务系统为例,拆解FPA计算流程,并分享实用估算模板,助力技术管理者提升项目规划能力。

weixin_42614269的博客 387

TCP协议及连接和断开过程详解

三次握手过程如下:客户端发送SYN报文。服务器回复SYN-ACK报文。客户端发送ACK报文。通过这一过程,双方确认了序列号和彼此的接收、发送能力,确保连接的可靠性。客户端状态服务器状态四次挥手过程:客户端发送FIN,请求关闭连接。服务器回复ACK,确认关闭请求。服务器发送FIN,请求关闭连接。客户端回复ACK,确认关闭请求。通过四次挥手,TCP连接被安全、可靠地关闭。

SEU123WW的博客 976

线阵相机标定必看:如何用Halcon实现亚毫米级精度测量(以HC050标定板为例)

本文以HC050标定板为例,详细阐述了如何利用Halcon实现线阵相机的高精度标定,以达到亚毫米级测量。文章深入剖析了线阵相机标定的核心原理、面临的独特挑战,并提供了从硬件搭建、图像采集到Halcon软件实操的完整路径,重点解析了运动参数设置、精度验证及常见问题排错,为精密测量应用提供系统解决方案。

weixin_29213655的博客 312

SAP Fiori Launchpad Tile,UI5 应用,和 PFCG Role 的对应关系

问题:已经看到了SAP Fiori Launchpad上的某个tile,如何反推后台需要配置哪个PFCG Role才能看到该tile? 这个问题是今天一个朋友在微信上问我的。因为我最近忙着学习一个新的SAP产品,所以这个问题也没有时间展开来写,本文就只做概要介绍。 下图是一个Gateway系统上打开的SAP CRM Fiori Launchpad: 如何弄清楚后台用户配置了哪个PFCG Role之后,才能看到Sales Representative(CRM)这个Group下的tile? 既然当前我使用的用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1520

FTP协议中TCP连接与数据传输过程详解

实验中发现两种工作模式:PORT模式下服务器主动发起数据连接(端口20),而PASV模式下由客户端发起连接。FTP协议独特地使用两条TCP连接:控制连接(持续保持)和数据连接(按需建立)。控制连接固定使用21端口传输指令,数据连接则通过20端口或动态端口传输文件内容。这种设计实现了控制与数据的分离。实验中捕获的FIN和ACK报文展示了双方如何协商关闭连接,其中数据连接会随着文件传输完成立即终止,而控制连接保持到会话结束。通过分析不同阶段的窗口大小变化,可以直观理解TCP的流量控制机制如何防止数据溢出。

GoldenleafTiger89的博客 685

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于BEV的3D检测,解析了PointPillars与CenterPoint两种算法。PointPillars用点柱特征编码网络处理点云,通过2D卷积网络提取特征,检测头为解耦头;CenterPoint将三维物体表为点,分两阶段检测,先找中心点及属性,再细化预测。两者都可借特定骨干网生成BEV特征图且基于BEV检测,但检测头设计和物体表示方式不同。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 27万+
上一篇: TCP详解
下一篇: P2P之UDP穿透NAT的原理与实现
Channels_net
博客等级 码龄22年 12粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值