`
liuguxing
  • 浏览: 94920 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

TCP连接关闭过程笔记

阅读更多
http://blog.csdn.net/fbysss/article/details/2230527

TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。
简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭
关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信完全结束,过程中每次接收都需要返回确认数据段ACK。
详细过程:
    第一阶段   客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
    1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
    2.客户机收到ACK(i+1)后,关闭客户机写通道;
   (此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
    第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
    3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
    4.服务器收到ACK(j+1)后,关闭服务器写通道。
这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。
FIN标识是通过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,所以要等到发送完的时候,设置FIN(此时可称为TCP连接处于半关闭状态,因为数据仍可从被动关闭一方向主动关闭方传送)。如果在服务器收到FIN(i)时,已经没有数据需要发送,可以在返回ACK(i+1)的时候就设置FIN(j)标识,这样就相当于可以合并第二步和第三步。
分享到:
评论

相关推荐

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇 - slv

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法,这是一个关于网络编程和Linux系统配置的问题。在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保...

    TCP_IP学习笔记

    TCP/IP连接的建立和释放过程,即三次握手和四次挥手,也是重点内容。三次握手确保了连接的可靠性,而四次挥手则确保连接的正确关闭。 此外,IP地址和子网掩码的概念不容忽视。IP地址是网络上设备的唯一标识,分为A...

    Windows TCP 通信学习笔记

    **Windows TCP 通信学习笔记** 在Windows操作系统中,TCP...从套接字创建、连接建立到数据传输和连接关闭,每个环节都涉及到一系列API调用和技术细节。熟悉这些知识点有助于开发高效、可靠的网络应用程序。

    TCP读书笔记

    7. **流量控制**:TCP连接的双方维护一个缓冲区,接收端仅允许发送端发送其能容纳的数据,防止快速主机导致慢速主机缓冲区溢出。 TCP的首部通常包含20个字节,包含端口号、序列号、确认序号、首部长度等关键信息,...

    CC3200实现TCP Client双向通讯中文笔记

    需要注意的是,CC3200的TCP连接是阻塞式操作,可以通过设置非阻塞模式来改善用户体验,避免在连接、发送或接收数据时阻塞程序执行。 总之,通过上述介绍和步骤,开发者可以利用CC3200开发套件提供的工具和API实现...

    TCP/UDP编程总结

    通过阅读TCP UDP笔记.doc,深入理解TCP连接与断开过程.pdf中的细节,以及TCP与UDP编程步骤.pdf的实践指导,初学者可以逐步构建起完整的TCP/UDP编程能力。在实际项目中,灵活运用这些知识,可以有效地处理各种网络...

    android开发笔记socket之tcp

    TCP通过三次握手建立连接,并在数据传输过程中采用确认机制和重传策略确保数据的正确性,同时提供流量控制和拥塞控制功能,保证网络的稳定和高效。 二、Android TCP通信基础 1. 创建Socket对象:在Android中,我们...

    java网络编程TCP 多线程连接例子

    总的来说,这个Java网络编程TCP多线程连接例子为我们提供了一个基础的框架,展示了如何使用Java实现可靠的TCP连接,并通过多线程处理并发请求。在深入学习和实践中,我们还可以结合其他Java网络库,如NIO(非阻塞I/O...

    TCP三次握手四次挥手学习资料笔记.zip

    4. 第四次挥手:主动关闭方收到FIN报文段后,发送一个ACK报文段,确认号为收到的FIN报文段的序列号+1,至此,TCP连接完全关闭。 在实际网络环境中,TCP协议还涉及到超时重传、滑动窗口机制、流量控制、拥塞控制等...

    tcp.rar_TCP通信

    6. 半关闭状态:TCP连接的关闭不是立即完成的,而是经过一段时间的半关闭状态,确保所有数据都已传输完毕。 通过学习和分析这些源代码,开发者不仅可以理解TCP通信的基本原理,还可以掌握如何在实际项目中应用TCP...

    VC学习笔记-基于TCP的socket编程

    本文将从初始化、创建socket、绑定地址、监听连接、接受连接、数据传输以及关闭socket等步骤,详细介绍如何使用VC进行TCP socket编程。 #### 二、初始化Winsock库 在使用socket编程之前,必须先初始化Winsock库。...

    计算机网络超全笔记.pdf

    此外,笔记还讨论了关于四次挥手的过程,即TCP连接终止的过程。第一次挥手是客户端发送带有FIN标志位的包来请求断开连接;服务器收到后,发送ACK标志位确认,进入 CLOSE_WAIT 状态,此时服务器可以继续向客户端发送...

    商业编程-源码-TCP IP学习笔记补遗.zip

    例如,TCP编程涉及建立连接(三次握手)、数据传输(滑动窗口机制确保数据正确接收)、关闭连接(四次挥手)等过程。在商业环境中,可能需要处理并发连接、流量控制、拥塞控制等问题。 对于UDP编程,虽然没有连接的...

    Quectel_LTE_Standard_TCP(IP)_Application_Note_V1.1

    这份文档主要关注于使用Quectel LTE模块进行标准TCP/IP通信的过程,涵盖了TCP连接的建立、数据传输以及异常处理等关键环节。 1. **TCP/IP通信基础**: - TCP(Transmission Control Protocol)是一种面向连接的、...

    W5500 Keepalive 应用笔记

    "W5500 Keepalive 应用笔记"是一个针对W5500网络接口芯片的专题,旨在探讨如何在TCP连接中有效地使用Keepalive机制。W5500是一款集成的以太网控制器,广泛应用于嵌入式系统,如物联网设备和工业自动化。 TCP ...

    java_sock_tcp.zip_java Tcp _tcp java

    9. **TCP状态管理**:理解TCP连接的生命周期,包括三次握手建立连接、数据传输、四次挥手断开连接等阶段,有助于解决网络通信中的问题。 10. **实战应用**:在实际项目中,TCP常用于实现如HTTP、FTP、SMTP等应用层...

    indy-tcp.zip_delphi INdy_delphi indy TCP_indy tcp

    2. TIdClientSocket:这是一个客户端组件,用于建立到远程服务器的TCP连接。它允许用户发送和接收数据,执行基本的网络操作。 在压缩包中的"indy tcp"可能包含了以下内容: - 示例源代码:展示如何使用TIdTCPServer...

    Myeclipse连接SQL_SERVER2005笔记

    ### MyEclipse连接SQL Server 2005笔记 #### 一、数据库配置 在进行MyEclipse与SQL Server 2005的连接之前,首先需要确保SQL Server的TCP/IP服务已经正确配置并启用。这一步对于实现两者之间的顺利通信至关重要。 ...

Global site tag (gtag.js) - Google Analytics