在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
图1 TCP三次握手建立连接
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
TCP采用四次挥手关闭连接如图2所示。
图2 TCP四次挥手关闭连接
1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到 ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于 LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
分享到:
相关推荐
TCP/IP 协议群,三次握手四次死挥手 TCP/IP 协议群是计算机网络中最重要的基础协议之一,它是指一组使用 IP 进行通信时所必须用到的协议的统称。TCP/IP 协议群包括 IP、ICMP、TCP、UDP、TELNET、FTP、HTTP 等协议,...
- 它通过三次握手建立连接,确保双方都有能力进行通信,并且数据能够正确传输。 - TCP提供顺序传输和错误检测,通过序列号和确认应答机制保证数据的完整性和可靠性。 - TCP还使用滑动窗口协议来控制流量,避免...
在C#中,我们通常使用System.Net命名空间下的Socket类来处理TCP/IP通信。 首先,让我们来看看服务端的实现。服务端需要监听特定的端口,等待客户端的连接请求。在C#中,可以创建一个Socket实例,并调用Bind方法绑定...
卷3《TCP/IP详解:TCP事务协议》聚焦于TCP的事务处理,如TCP的三次握手和四次挥手过程,这是建立和断开TCP连接的关键步骤。同时,这本书也探讨了TCP的性能优化和异常情况处理,以及TCP与其他应用层协议的交互。 ...
TCP/IP协议在网络中的应用非常广泛,它是供已连接因特网的计算机进行通信的通信协议。下面是TCP/IP协议的详细解释: 1. TCP/IP协议的定义 TCP/IP协议是供已连接因特网的计算机进行通信的通信协议。TCP/IP指传输...
倍福TCPIP程序,使用于TWINCAT2/3编程平台
在第二卷中,Stevens更深入地探讨了TCP/IP协议在实际系统中的实现细节,包括Unix系统的网络编程接口(如socket API)和网络管理工具。这部分内容涵盖了网络编程的基本概念,如套接字编程,以及TCP、UDP和IP的实现...
书中深入探讨了这些协议的工作原理,如IP地址的分配、分片与重组、TCP的三次握手和四次挥手、拥塞控制等机制。 第二卷《TCP/IP实现》则侧重于实际的实现细节,比如TCP的连接管理、滑动窗口机制、超时与重传策略,...
### AUTOSAR_SWS_TcpIp-stack TCP/IP协议栈 经典平台 4.3.1 #### 一、概述 本文档详细介绍了AUTOSAR_SWS_TcpIp-stack(TCP/IP协议栈)在经典平台上的规范,版本为4.3.1。此文档包含了自2013年初始发布以来的所有...
2. **三次握手**:TCP连接建立时需要通过三次握手确认双方可以进行可靠通信。 3. **四次挥手**:当通信结束,双方通过四次挥手来关闭连接。 4. **阻塞与非阻塞I/O**:理解如何处理网络I/O,选择合适的模式提高程序...
首先,TCP/IP模型分为四个主要层次:应用层、传输层、网络层和数据链路层。每一层都有其特定的任务和协议,共同构成了网络通信的基础。 1. **应用层**:这是最顶层,包含了各种应用程序如HTTP(超文本传输协议)、...
标题“TCP/IP调试小助手”指的是一个专门用于帮助用户调试TCP/IP协议的工具。这个工具可能包含了一系列功能,如捕获网络数据包、分析通信过程、检查网络连接问题等,对于网络管理员、软件开发者或者对网络有兴趣的...
- 通过三次握手建立连接,确保连接的建立和断开过程的安全。 - 使用序列号和确认应答机制确保数据传输的正确性和完整性。 - 支持滑动窗口机制以控制数据流的速度,避免拥塞。 - 通过拥塞控制算法来调整发送速率...
TCP/IP Architecture, Design and Implementation in Linux 1/5 For All: [Part 1/5] http://download.csdn.net/source/1345609 [Part 2/5] http://download.csdn.net/source/1345649 [Part 3/5] ...
通过实践这个C# TCP/IP通信的例子,你可以深入理解TCP/IP协议的工作原理,学习如何在C#中使用Socket类进行网络编程,这对于开发涉及网络通信的软件至关重要。无论是创建简单的聊天应用,还是复杂的分布式系统,TCP/...
《microchip TCP/IP协议栈应用笔记V3.6》是一份深入探讨Microchip公司TCP/IP协议栈实现与应用的重要文档,特别适合嵌入式系统开发者和网络通信工程师参考。Microchip TCP/IP协议栈是该公司为微控制器提供的完整网络...
讲解TCPip三次握手机制,是如何保证安全性和准确性的