TCP协议(三次握手、流量控制、拥塞控制)
目录
TCP协议简介
TCP三次握手
概念
作用
TCP流量控制
概念
原理
四、TCP拥塞控制
概念
原理
五、三者的联系
TCP协议简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要作用是在不可靠的网络环境中提供可靠的端到端数据传输服务。就好比在没有信号灯的繁忙道路上,TCP协议就像是一个交通管理员,确保数据包能够安全、完整地从发送方到达接收方。
TCP三次握手
概念
三次握手是TCP协议建立连接的过程,通过三次消息的交换来确保双方都能够正常收发数据,建立起可靠的通信链路。
第一次握手(SYN)
客户端(主动发起连接的一方)向服务器(被动等待连接的一方)发送一个TCP报文段,这个报文段的标志位中的SYN(同步序列号)被置为1。同时,客户端会随机选择一个初始序列号(ISN),这个序列号就像是一个独特的标签,用于后续数据传输中的数据包排序和确认。
通俗理解:客户端就像是在敲门,对服务器说:“嘿,我想和你建立连接,这是我的一个标记(初始序列号),你记一下。”
第二次握手(SYN - ACK)
服务器收到客户端的SYN报文后,会回复一个TCP报文段。这个报文段有两个关键标志位:SYN和ACK(确认)。服务器会将SYN置为1,表示它也想建立连接;同时,它会将ACK置为1,并且在确认号字段中写上客户端初始序列号加1(ISN + 1),这是对客户端的确认。服务器也会随机选择自己的初始序列号。
通俗理解:服务器回应敲门的人(客户端):“好的,我知道你想建立连接,我记下了你的标记(客户端初始序列号),并且我也有了自己的标记(服务器初始序列号),我们继续吧。”
第三次握手(ACK)
客户端收到服务器的SYN - ACK报文后,会发送一个TCP报文段,将ACK置为1,并且在确认号字段中写上服务器初始序列号加1(服务器ISN + 1)。这样就完成了三次握手。
通俗理解:客户端对服务器说:“我收到了你的标记(服务器初始序列号),现在我们正式建立连接,可以开始传输数据了。”
作用
确保双方都准备好:通过三次握手,可以确认客户端和服务器的发送和接收功能是否正常。如果其中一方的网络有问题或者没有准备好,这个过程就会失败,避免了盲目地传输数据。
同步序列号:通过交换初始序列号,为后续的数据传输提供了基础。序列号在TCP中非常重要,它用于数据包的排序、确认和丢包重传等机制。
TCP流量控制
概念
TCP流量控制是防止发送方发送的数据过多,导致接收方无法及时处理而出现数据溢出(接收缓冲区溢出)的一种机制。就好比一个水管往桶里注水,如果注水的速度太快,超过了桶的容纳速度,水就会溢出来。
原理
接收窗口(rwnd)
接收方有一个接收缓冲区,用于暂时存放接收的数据。接收方会告诉发送方自己的接收窗口大小,这个大小表示接收方能够接收的数据量。接收窗口的大小是动态变化的,它取决于接收方的处理能力和缓冲区的剩余空间。
通俗理解:接收方就像是一个仓库管理员,他告诉发送方(送货员)仓库还能容纳多少货物(数据)。如果仓库快满了,他就会缩小接收窗口,让送货员慢点送;如果仓库腾出空间了,他就会增大接收窗口。
滑动窗口协议
发送方根据接收方的接收窗口大小来控制自己的发送速度。发送方维护一个发送窗口,这个窗口的大小不能超过接收方的接收窗口。发送方只能在这个窗口范围内发送数据。
例如,接收方的接收窗口大小是1000字节,发送方的发送窗口也是1000字节。发送方可以发送1000字节的数据,当发送方发送了部分数据后,它会等待接收方的确认。接收方确认收到数据后,会更新接收窗口的大小,并告诉发送方。发送方根据新的接收窗口大小调整自己的发送窗口,继续发送数据。
通俗理解:发送方就像是在一条传送带上放货物(数据),传送带的长度(发送窗口)取决于接收方仓库的容纳能力(接收窗口)。如果接收方仓库满了,传送带就会缩短,发送方就不能放太多货物;如果仓库有空间,传送带就会变长,发送方可以多放货物。
四、TCP拥塞控制
概念
TCP拥塞控制是防止过多的数据注入到网络中,避免网络拥塞的一种机制。网络拥塞就像交通堵塞,当过多的车辆(数据)涌入道路(网络链路)时,会导致数据传输延迟增加、丢包等问题。
原理
拥塞窗口(cwnd)
发送方除了考虑接收方的接收窗口外,还会维护一个拥塞窗口。拥塞窗口是根据网络的拥塞情况动态调整的。发送方在发送数据时,需要同时考虑接收窗口和拥塞窗口,实际的发送窗口大小是接收窗口和拥塞窗口中的较小值。
通俗理解:拥塞窗口就像是发送方根据道路(网络)的交通状况(网络拥塞情况)给自己设定的一个限制。如果道路很畅通,拥塞窗口可以比较大;如果道路拥堵,拥塞窗口就会缩小。
拥塞控制算法
慢启动阶段:在连接刚建立或者发生拥塞后恢复时,发送方会将拥塞窗口设置为一个较小的值(通常是1个最大报文段长度MSS)。每收到一个确认,拥塞窗口就增加1个MSS。这个阶段窗口增长速度很快,就像汽车刚启动时加速比较快。
拥塞避免阶段:当拥塞窗口达到一个阈值后,进入拥塞避免阶段。这个阶段窗口增长速度变慢,每收到一个确认,拥塞窗口增加1/cwnd(cwnd是当前拥塞窗口大小)。这个阶段就像汽车在高速公路上匀速行驶,速度不会太快。
拥塞发生时的处理:如果发送方发现有丢包(通过超时重传或者收到重复确认等方式判断),就会认为网络拥塞发生了。此时,发送方会将拥塞窗口减半,并且将阈值设置为当前拥塞窗口的一半,然后重新进入慢启动阶段。这个过程就像是发现道路拥堵,汽车紧急刹车,然后重新调整速度慢慢行驶。
通俗理解:拥塞控制算法就像是一个智能的司机,根据道路的拥堵情况调整车速。如果道路畅通,就加速行驶;如果发现拥堵迹象,就减速甚至刹车,等道路情况好转后再慢慢加速。
五、三者的联系
TCP三次握手是建立连接的基础,为数据传输提供了可靠的通道。流量控制和拥塞控制是在数据传输过程中发挥作用的机制。流量控制主要关注接收方的处理能力,防止接收方溢出;拥塞控制主要关注网络的传输能力,防止网络拥塞。三者共同协作,确保了TCP协议能够在复杂的网络环境中实现可靠、高效的数据传输。