TCP协议:三次握手、四次挥手过程详解

本文详细介绍了TCP连接的三次握手过程,包括客户端和服务端的状态变化,确保双方的发送和接收能力。接着,阐述了TCP数据传输中的超时重传和快速重传机制,以及流量控制的滑动窗口策略。对于TCP断开连接的四次挥手,解释了为何需要四次交互,因为服务端可能还需要发送数据,所以不会立即关闭连接。最后,探讨了为何建立连接只需三次握手,而断开需要四次挥手的原因。
摘要由CSDN通过智能技术生成

概述:

建立TCP连接通道(三次握手),传输数据,断开TCP连接通道(四次挥手),下图显示了TCP通信过程。

在这里插入图片描述

1. 三次握手建立连接

  • 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;服务器收到syn包,必须确认客户的SYN(ack=x+1),此时,服务器确认,客户端发送能力正常,服务端接收能力正常。
  • 第二次握手:服务器同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;客户端收到服务器的SYN+ACK包。此时,客户端确认:服务端接收和发送能力正常,客户端发送和接受能力正常。
  • 第三次握手:客户端同时向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。此时,服务器确认,客户端发送和接收能力正常,服务端接收和发送能力正常。

2. 传输数据过程

  • 超时重传。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq 号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认为报文丢失,会重传这个数据包。
  • 快速重传。接受数据一方发现有数据包丢掉了,就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。
    比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。
  • 流量控制:TCP滑动窗流量控制。TCP头里有一个字段叫Window,这个字段是接收端告诉发送端自己 还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来(减少丢包率)。
  • 流量控制:拥塞控制滑动窗。拥塞控制,则是基于整个网络来考虑的,某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包。如此反复,形成一个类似正反馈,恶性循环被不断地放大。为此,TCP引入了拥塞控制策略。拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。

3.四次挥手断开连接

  • 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。
  • 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。表示己方收到关闭请求
  • 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
  • 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

4.问啥建立连接三次握手,断开连接却需要四次挥手。

建立连接时,服务端在接收到客户端的建立连接请求时,处于LISTEN状态,收到后会立即将ACK和SYN放入一个报文段返回,表示自己已经准备好建立连接;

而断开连接时,被动关闭方接收到主动关闭方发送的FIN后,只会发送ACK,表示己方收到关闭请求,但不会同时发送FIN,因为己方可能会继续发送数据,这由己方的上层应用决定。只有等到被动关闭方的所有数据发送完毕后,才会给主动关闭方发送FIN报文段,通知对方要关闭连接。这就多出来一次挥手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值