TCP协议重要知识,三次握手四次挥手、拥塞控制

三次握手和四次挥手

TCP三次握手过程

TCP三次握手用于在客户端和服务器之间建立连接。以下是三次握手的详细步骤:

第一次握手:客户端向服务器发送一个SYN报文段(SYN=1),并随机生成一个初始序列号seq=x。此时,客户端进入SYN_SENT状态,等待服务器的确认。

第二次握手:服务器收到客户端的SYN报文段后,会向客户端回复一个SYN+ACK报文段(SYN=1,ACK=x+1),并随机生成一个初始序列号seq=y。此时,服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK报文段后,会向服务器发送一个ACK报文段(ACK=y+1)。这个报文段发送完毕后,客户端和服务器都进入ESTABLISHED状态,完成三次握手,连接建立成功。

在这个过程中,SYN和ACK是TCP报文段的标志位,用于标识报文段的类型。

SYN标志位,表示建立一个连接,携带SYN的TCP报文段为同步报文段。

seq和ACK分别表示请求序列号和确认序列号,用于保证数据的顺序性和可靠性。

TCP四次挥手过程

TCP四次挥手用于在客户端和服务器之间断开连接。以下是四次挥手的详细步骤:

第一次挥手:当客户端希望断开连接时,会向服务器发送一个FIN报文段(FIN=1),并进入FIN_WAIT_1状态。

第二次挥手:服务器收到客户端的FIN报文段后,会向客户端发送一个ACK报文段(ACK=u+1),确认收到关闭请求。此时,服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。

第三次挥手:当服务器也准备断开连接时,会向客户端发送一个FIN报文段(FIN=1),并进入LAST_ACK状态。

第四次挥手:客户端收到服务器的FIN报文段后,会向服务器发送一个ACK报文段(ACK=w+1),确认收到关闭请求。此时,客户端进入CLOSED状态,服务器也进入CLOSED状态,连接断开。

在这个过程中,每个报文段都需要等待对方的确认才能进行下一步操作,以确保双方都能正确关闭连接。MSL(报文最大生存时间)的概念也在这个过程中起到了重要作用,它保证了上一次连接的报文已经在网络中消失,不会出现与新TCP连接报文冲突的情况。

拥塞窗口全流程

拥塞窗口(cwnd)在TCP拥塞控制中扮演着核心角色,它的变化逻辑主要受到网络拥塞状况的影响。以下是拥塞窗口变化逻辑的基本概述:

慢启动阶段:

当TCP连接刚建立时,拥塞窗口(cwnd)初始化为一个较小的值,通常是一个数据包的大小。发送方按照cwnd的大小发送数据段。

每收到一个ACK确认,cwnd就会增加,通常是线性增长,具体增加的数量可能依赖于实现。

这样,随着时间的推移,发送方发送的数据量会急剧增加,但增长速率是指数级的,受到慢启动算法的控制。

慢启动的目的是在网络刚刚建立连接时,谨慎地探测网络的可用带宽,避免一开始就注入过多数据导致拥塞。

拥塞避免阶段:

当cwnd超过一个慢启动门限值(ssthresh)时,拥塞控制进入拥塞避免阶段。

在拥塞避免阶段,cwnd的增长不再是指数级的,而是线性增长,增长速率通常较小。

如果发送方检测到超时或收到重复的ACK(通常是3个),则认为网络发生了拥塞。

当发生拥塞时,发送方会将ssthresh设置为当前cwnd的一半,并将cwnd重置为1或ssthresh,具体取决于实现和拥塞的严重程度。

快重传和快恢复阶段:

如果发送方收到三个重复的ACK,说明有数据包丢失,此时会触发快重传机制。

在快重传阶段,发送方会重传丢失的数据包,而不是等待超时。

同时,进入快恢复阶段,此时cwnd会被设置为ssthresh加上3乘以MSS(最大报文段长度),并且发送方会继续发送新的数据包,直到收到一个非重复的ACK。

当收到非重复的ACK时,cwnd会被重置为ssthresh,重新进入拥塞避免阶段。

整个过程中,拥塞窗口的变化逻辑是根据网络的拥塞状况动态调整的。当网络拥塞时,拥塞窗口会减小,发送速率会降低,以减少拥塞;当网络状况良好时,拥塞窗口会逐渐增大,发送速率会增加,以充分利用网络带宽。这样的动态调整有助于确保TCP连接在网络拥塞时能够稳定运行,提供可靠的数据传输服务。

拥塞窗口的增长速率

慢启动阶段,拥塞窗口的增长速率是指数级的吗?

比如从1到2,从2到4,从4到8。看起来是,实际流程不是。

实际流程:

第一次发送1个数据段 ,接收方确认收到,发送1个ACK,发送方接收到ACK,

拥塞窗口1->2,

第二次发送2个数据段,接收方确认收到,发送2个ACK,发送方接收到2个ACK,第一个ACK的时候是2->3,第二个收到的时候是3->4,

看上去是倍增,其实是一个个加上去最终到4。

到慢启动门限值(ssthresh)之后,进入拥塞控制阶段,发送一堆接收一堆拥塞窗口只+1,看上去是线性增长。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值