TCP协议的通信——三次握手和四次挥手

TCP是一种面向连接的、安全可靠的传输协议,与UDP不同。建立连接需三次握手:客户端发送SYN,服务端回应SYN+ACK,客户端再回ACK。断开连接则需四次挥手,确保双方无数据传输并确认接收。客户端在发送最后一个ACK后等待2MSL,以防止ACK丢失导致服务端无法正常关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 TCP概述

TCP是网络层次模型中传输层的一种协议,另外一种是UDP。不同于UDP的是,TCP是一种面向连接安全可靠的传输协议,TCP建立连接和打电话很类似,由一方发起通话请求,另一方接受通话请求。在TCP中是主动发起连接的客户端和被动接受的服务端。

1.2 TCP建立连接的三次握手

第一次握手:客户端通过connect()函数向服务端发送一个SYN的同步请求。

第二次握手:服务端收到客户端的SYN请求后,通过accept()函数将SYN和ACK发送给客户端,告诉对方同意连接并且做好连接的准备了。

第三次握手:客户端收到服务端的SYN和ACK后,将ACK返回给服务器,告诉对方做好通信的准备了。

自此三次握手结束,双方建立连接进行通信。

1.3 TCP断开连接的四次挥手

第一次挥手:客户端主动发起断开连接,发送一个FIN给服务端,告诉对方没有数据发送了

第二次挥手:服务端收到客户端的FIN后,将一个ACK发送给客户端,告诉对方收到了FIN报文,并准备断开连接

第三次挥手:服务端将FIN发送给客户端,告诉对方没有数据发送了

第四次挥手:客户端收到服务端发的FIN后,将ACK返回给服务端,告诉服务器收到FIN报文,同意断开。

自此四次挥手结束,双方断开连接停止通信。

1.4 为什么断开要四次挥手

四次挥手是为了确定双方都没有数据要进行传输了,避免因为网络延迟导致数据包丢失,而双方已经早早断开连接了。

1.5为什么客户端要等待2MSL

因为要客户端要确保服务端能收到最后发送的一个ACK报文。设想一下,如若客户端发送完ACK后不进行2MSL等待而直接走人的话,最后一个人ACK丢失了,服务端收不到这个ACK就不能正常的关闭。正因为客户端有了2MSL等待这个机制,就算ACK丢了,服务端没有收到也会再次发送一个FIN+ACK的报文给客户端,客户端再次把ACK发送给服务端,服务端收到ACK进行关闭,客户端经过2MSL等待没有再次收到服务端的FIN+ACK的报文也将进行关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值