TCP协议连接的建立和释放:三次握手和四次挥手

TCP协议

TCP协议是TCP/IP协议栈中传输层的典型协议。TCP协议的特点是提供面向连接的、可靠的字节流服务。

三次握手

TCP协议中连接建立的三次握手过程:

  • ①客户端发送SYN,表明向服务器建立连接;
  • ②服务端返回ACK作为确认,同时返回SYN作为应答;
  • ③客户端发送ACK确认收到回复。

建立连接过程中的状态说明:

  • 服务端等待客户端建立连接时处于LISTEN监听状态;
  • 客户端主动打开请求,发送SYN时处于SYN_SENT状态;
  • 服务端收到SYN处于SYN_REVD状态;
  • 客户端收到SYN和ACK,并回复ACK时,处于ESTABLISHED状态等待发送报文;
  • 服务端收到ACK确认后,也处于ESTABLISHED状态等待发送报文;
    在这里插入图片描述

四次挥手

关闭连接的四次挥手的过程(假设客户端为主动关闭方)

  • 主动关闭的一方发送FIN,表示要单方面关闭数据的传输;
  • 服务端收到FIN后,发送一个ACK作为确认;
  • 等服务器数据传输完毕,也发送一个FIN标识,表示关闭这个方向的数据传输;
  • 客户端回复ACK以确认回复;

释放连接过程中的状态说明:

  • 客户端发送FIN后,处于FIN_WAIT1状态;
  • 服务端收到FIN并发送ACK时,处于CLOSE_WAIT状态;
  • 客户端收到ACK确认后,处于FIN_WAIT2状态;
  • 服务端发送FIN后,处于LAST_ACK状态;
  • 客户端收到FIN后发送ACK,处于TIME_WAIT状态;
  • 服务端收到ACK后,处于CLOSED状态。
    在这里插入图片描述

三次握手和四次挥手中的相关问题

1.为什么是三次握手建立连接,而不是两次或者四次?
TCP连接是全双工的,数据在两个方向上能同时传递,所以要确保双方,同时能发数据和收数据。
第一次握手:证明了发送方能发数据。
第二次握手:ACK确保了接收方能收数据,SYN确保了接收方能发数据。
第三次握手:确保了发送方能收数据。
实际上是四个维度的信息交换,不过中间两步合并为一次握手了。四次握手浪费,两次握手不能保证“双方同时具备收发功能”。
2.为什么释放连接是四次挥手?
因为TCP的连接时全双工的,两端都可以传输数据,发送方结束发送后还要能够接收来自另一端的收据,所以每一端都要单独关闭,收到关闭通知要确认回复。
客户端制动发送FIN后,服务端必须回复ACK。等到数据传输接收后,用户主动关闭时,服务端才能给客户端发送FIN,然后客户端回复ACK。若是将服务端回复的ACK和服务端发送的FIN同时发送给客户端,可能会数据传输还未结束,导致部分数据丢失。所以释放连接必须是四次挥手。
3.TIME_WAIT状态是什么?能否不用TIME_WAIT状态?TIME_WAIT状态的作用
(1)TIME_WAIT状态是主动关闭方发送最后一个ACK后所处的状态。
(2)为什么要使用TIME_WAIT?
(主动关闭方是客户端为例)假设最后一个ACK丢失了,服务端没有收到,这时服务端会再次发送FIN给客户端。这个等待就是对重传的FIN进行处理,让客户端重新发送ACK。
(3)若没有TIME_WAIT会出现什么结果?
Closed最终会释放socket,则不再占用地址信息,若立即使用相同的端口重新启动一个客户端,有可能会对新连接造成影响。
解释:若上次关闭连接时最后一个ACK丢失,则服务端处于LAST_ACK状态:①客户端建立连接请求时发送的SYN会被服务端认为错误状态,重置连接。②客户端可能会收到服务端重传的FIN。
(4)TIME_WAIT的作用:①对重传的FIN进行处理;②这个连接不会对后续的新连接产生影响。
(5)等待的时间:2MSL。MSL:报文段最大生存时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值