摘要:TCP三次握手是建立可靠网络连接的关键过程,它用于确保通信双方能够正常发送和接收数据,并提供可靠的数据传输机制。三次握手的主要目标包括:
TCP连接的建立和释放分别通过“三次握手”和“四次挥手”来完成。
三次握手过程
TCP三次握手是建立可靠网络连接的关键过程,它用于确保通信双方能够正常发送和接收数据,并提供可靠的数据传输机制。三次握手的主要目标包括:
• 同步双方的序列号
• 确认双方的接收和发送能力
• 防止因为过期报文导致的误连接
第一次握手
• 客户端发送一个SYN(同步)请求报文,表示希望建立连接,并附带初始序列号(Sequence Number)。
• 客户端进入 SYN_SENT 状态,等待服务器的响应。
第二次握手
• 服务器收到请求后,回复一个SYN+ACK(同步+确认)报文。
• ACK字段确认客户端的序列号,同时服务器生成自己的初始序列号。
• 服务器进入 SYN_RCVD 状态,等待客户端的确认。
第三次握手
• 客户端收到服务器的确认后,再发送一个ACK(确认)报文,确认服务器的响应。
• 客户端进入 ESTABLISHED 状态,服务器也进入 ESTABLISHED 状态,连接正式建立。
下面是TCP头部的一个简单介绍:
上述流程中提到:
序列号:
定义:序列号标识数据流中每个字节的唯一编号,用于确保数据的有序传输。
初始值:在连接建立时,序列号由发送方随机生成。
变化规则:每发送一个数据段,序列号会增加该数据段的字节数。例如,发送100字节的数据后,序列号会增加100。
作用:解决网络中数据包乱序问题,确保接收方能够按照正确顺序重组数据。
确认号:
定义:确认号表示接收方期望收到的下一个数据包的序列号。
变化规则:确认号等于接收到的序列号加上数据段的长度。如果接收到的是SYN或FIN报文,则确认号加1。
作用:通知发送方哪些数据已经被成功接收,解决丢包问题。
确认号和序列号机制是确保TCP数据传输数据可靠性的关键机制。
为什么要三次握手?
简单来讲,三次握手是保证通信稳定正确的最小开销。
可以有一个很简单的对话例子:
• A - B:你听得到我吗?
• B - A:我听得到,你听得到我吗?
• A - B:我也听得到,我们可以开始正式交流了。
三次握手通过同步序列号,确认机制等等,确保了TCP连接的稳定性和可靠性。
四次挥手过程
TCP的四次挥手是用于终止TCP连接的过程,确保双方都能可靠地关闭连接。
第一次挥手
客户端发送一个带有FIN(Finish)标志的报文段,表示客户端不再发送数据,但仍然可以接收数据。此时客户端进入FIN_WAIT_1状态。
第二次挥手
服务器收到客户端的FIN报文后,发送一个ACK(Acknowledgment)报文作为确认,确认序号为收到的序号加1。此时服务器进入CLOSE_WAIT状态,客户端收到ACK后进入FIN_WAIT_2状态。
第三次挥手
服务器在完成数据发送后,向客户端发送一个FIN报文,表示服务器也不再发送数据。此时服务器进入LAST_ACK状态,等待客户端的确认。
第四次挥手
客户端收到服务器的FIN报文后,发送一个ACK报文作为确认,确认序号为收到的序号加1。此时客户端进入TIME_WAIT状态,等待2MSL(最大报文段生存时间)后进入CLOSED状态。服务器收到ACK后,立即进入CLOSED状态。
注:如果服务器没有收到客户端的ACK,会在2MSL后重传FIN,客户端在TIME_WAIT状态可以重新发送ACK。2MSL的时间足以让网络中所有旧的重复报文段消失,防止它们干扰新的连接。
为什么需要四次挥手?
全双工通信:TCP是全双工的,每个方向都需要单独关闭。客户端发送FIN表示不再发送数据,但服务器可能仍有数据要发送,因此需要服务器也发送FIN来确认关闭。
可靠关闭:通过四次挥手,确保双方都能确认对方的关闭意图,避免数据丢失或不完整。
串口服务器_数传电台_4G DTU_遥控开关_LoRa/ZigBee/WiFi/蓝牙模块-成都亿佰特电子科技有限公司官网
来源:亿佰特物联网应用一点号