作者:
逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!
计算机网络结构是一个复杂的层次结构,一般可以分为七层,被称为网络协议分层结构。这个结构被用来划分网络连接的不同协议以及它们之间的相互作用。以下是这七层的详细介绍:
TCP(Transmission Control Protocol)通讯是一种面向连接的、可靠的网络传输协议。它位于 OSI 模型的传输层,负责提供数据传输服务。TCP协议通过三次握手建立连接,确保数据的可靠性和有序性,同时也提供拥塞控制和流量控制机制。它适用于需要保证数据传输的可靠性和有序性的应用,例如文件传输、电子邮件、网页浏览等。
TCP通信是一种可靠的面向连接的通信方式,连接建立和断开是非常重要的过程。下面是TCP通信的连接和断开过程:
复杂的连接与释放过程是为了保证连接的可靠性
连接建立:
当客户端需要和服务器建立TCP连接时,它会向服务器发送一个SYN包(同步包),这是一个带有SYN标志位的TCP数据包。服务器在收到SYN包后,会向客户端发送一个带有SYN和ACK标志位的数据包,表示确认收到客户端的请求并同意建立连接。最后,客户端向服务器发送一个带有ACK标志位的数据包,表示收到了服务器的确认信息,连接建立成功。
数据传输:
在连接建立后,客户端和服务器之间可以进行数据传输。数据以TCP数据包的形式通过互联网传输。
连接断开:
TCP连接断开有两种方式:主动关闭和被动关闭。
主动关闭:当客户端或服务器需要断开连接时,它会向对方发送一个带有FIN标志位的TCP包,表示要关闭连接。对方在收到FIN包后,会回复一个ACK确认信息。最后,对方也会发送一个FIN包,表示连接已经关闭。
被动关闭:当一方突然断开连接,另一方也会收到一个FIN包,表示连接已经关闭。对方在收到FIN包后,会发送一个ACK包,然后连接关闭。
三次握手和四次挥手都是TCP协议通信过程中建立和关闭连接的步骤。
三次握手的步骤如下:
SYN包,进入SYN-SENT状态。SYN包,回复一个ACK包和一个SYN包,进入SYN-RECEIVED状态。ACK包和SYN包,回复一个ACK包,建立连接并进入ESTABLISHED状态。四次挥手的步骤如下:
FIN包,进入FIN-WAIT-1状态。FIN包,回复一个ACK包,进入CLOSE-WAIT状态。FIN包,进入LAST-ACK状态。FIN包,回复一个ACK包,进入TIME-WAIT状态,等待2MSL(最长报文段寿命)后关闭。下面是三次握手和四次挥手的示意图:
三次握手:
客户端 服务器
SYN_SENT状态 LISTEN状态
---------------SYN包------------>
SYN_RECEIVED
<---------ACK包和SYN包------------
ESTABLISHED
四次挥手:
客户端 服务器
ESTABLISHED状态
<---------------FIN包------------
FIN_WAIT_1
CLOSE_WAIT
<---------------ACK包------------
FIN_WAIT_2
LAST_ACK
<-------FIN包--------
TIME_WAIT
<-------ACK包--------
CLOSED