TCP协议原理

📅 发布时间:2026/7/6 19:24:54 👁️ 浏览次数:
TCP协议原理
TCP是什么TCP是一种面向连接的、可靠的传输层协议主要用于在计算机网络中提供可靠的数据传输服务。它确保数据在传输过程中不丢失、不重复、并且按顺序到达。TCP报文段结构TCP报文段结构TCP头部数据部分。TCP的三次握手建立连接三次握手的过程客户端在和服务端建立TCP连接时会进行三次握手三次握手的过程如下第一次握手客户端会向服务端发送一个SYN包请求建立连接然后进入SYN_SENT状态第二次握手服务端在收到来自客户端的SYN包后如果同意建立连接则会发送一个SYN-ACK报文作为响应给客户端同时进入SYN_RCVD状态。第三次握手客户端在收到服务端的SYN-ACK报文后会发送一个ACK报文作为最终响应之后服务端和客户端都会进入ESTABLISHED状态表示连接建立成功。为什么需要三次握手通过三次握手客户端和服务端都能够确认对方的接收和发送能力。第一次握手服务端确认了客户端是能发送数据的第二次握手客户端确认了服务端是可以收发数据的;第三次握手服务端确认了客户端是可以收到数据的从而确保了双方的通道都是可用的。如果只使用两次握手的话在第一次握手中如果发生了网络延迟导致客户端已经断开了网络连接而服务器在收到SYN包后误以为是新的连接请求此时直接同意连接而在此连接上客户端根本就不存在也就浪费了服务器的内存和端口资源。还有一个问题就是丢包的问题。我们分几种情况进行讨论首先就是客户端发给服务器的SYN包丢了该怎么处理也就是说服务器压根不知道有这个包客户端等不到SYN-ACK报文超时后会进行重传SYN,重传几次失败后会断开连接。然后就是服务端发送的SYN-ACK报文丢失了或者客户端回给服务端的ACK报文丢失了服务器在规定的时间内未收到ACK报文会进行超时重传同理是有限次尝试然后放弃。TCP的四次挥手断开连接四次挥手的过程四次挥手不分服务端和客户端分为主动关闭方和被动关闭方。为方便讲述不妨令客户端为主动关闭方其过程如下第一次挥手客户端发送FIN报文给服务端表示自己要断开连接报文中会指定一个序列号seqx。然后客户端进入FIN-WAIT-1状态。第二次挥手服务端在收到FIN报文之后回复ACK报文给客户端确认号ackx1并携带自己的序列号seqy。然后服务端进入CLOSE_WAIT状态客户端进入FIN_WAIT_2状态。第三次挥手服务端也要断开连接时发送FIN报文给客户端指定序列号sequ。然后服务端进入LAST_ACK状态。第四次挥手客户端收到FIN报文后回复ACK报文进行应答确认号acku1并携带自己的序列号seqv。此时客户端进入TIME_WAIT状态。服务端在收到客户端的ACK报文后进入CLOSE状态。如果客户端等待2MSL没有收到可能存在的重传则关闭连接。为什么需要四次挥手TCP是全双工通信数据在两个方向上是独立传输的关闭连接时需要分别关闭两个方向上的数据传输主动关闭方在发送完最后一个ACK后进入TIME_WAIT状态这是为了确保被动关闭方能够收到最终的ACK如果被动关闭方没有收到可以重发FIN报文主动方可以再次发送ACK。同时等待2MSL(报文最大生存时间)可以保证网络中的旧报文全部丢失避免影响新的连接。TCP的可靠传输机制TCP的可靠传输依赖以下六大机制1.序列号每个TCP段都有一个序列号确保数据包的顺序正确。2.确认应答接收方发送ACK确认收到的数据。如果发送方在一定时间内没有收到确认会重新发送数据。核心就两步发送数据确认数据有没有收到未收到就重发。3.超时重传发送方设置一个定时器如果在定时器超时之前没有收到确认发送方会重传数据。4.数据校验数据在发送之前会进行校验和的计算用来检测传输过程中是否出现错误。如果接收方对数据计算后不等于校验和则说明数据发送错误会直接丢弃该数据包等待重传。不过如果数据和校验和同时错误且计算后相等错误就会被掩盖不过这个几率非常小可以忽略不计。5.流量控制TCP通过滑动窗口机制进行流量控制确保接收方能够处理发送方的数据量。6.拥塞控制TCP通过算法如慢启动、拥塞避免、快重传和快恢复等来控制数据发送的速率防止网络拥塞。TCP流量控制流量控制就是让发送方发送速率不要过快让接收方来得及接收。利用滑动窗口机制就可以实现流量控制主要方法就是动态调整发送方和接收方之间的数据传输速率。滑动窗口大小在TCP通信中每个报文都携带窗口字段表示接收方当前允许发送方发送的最大字节数。接收方窗口大小接收方通过TCP报文中的窗口字段告诉发送方自己当前可接收窗口的大小表示接收方缓冲区中还有多少可用空间。流量控制的目标流量控制的目标是确保发送方不要发送超过接收方缓冲区容量的数据。如果接收方的缓冲区快满了它会减少窗口大小通知发送方暂停发送以防止溢出。动态调整发送方会根据接收方窗口的大小动态调整发送数据的速率。如果接收方的窗口大小增加发送方可以加速发送数据如果窗口大小减小发送方将减缓发送数据的速率。确认机制发送方可以连续发送数据不必发送一段就等待ACK接收方按照序列号将数据存入缓存只对连续、正确的数据回复ACK。如果出现丢包或错误发送方会因超时未收到ACK自动重传对应数据。这与流量控制密切相关因为接收方可以通过ACK报文中的窗口字段告知发送方它当前窗口的大小。TCP拥塞控制TCP拥塞控制可以在网络出现拥塞时动态调整数据传输的速率以防止网络过载。TCP拥塞控制的主要机制主要包括以下几个方面慢启动初始阶段TCP发送方会以较小的发送窗口开始传输数据。随着每次成功收到确认的数据发送方会逐渐增加发送窗口的大小实现指数级的增长这称为慢启动。这有助于网络在刚开始传输时逐步增加速率以避免引发拥塞。拥塞避免一旦达到慢启动阈值TCP发送方就会进入拥塞避免阶段。在拥塞避免阶段发送方以线性增加的方式增加发送窗口的大小而不再是指数级增长。这有助于控制发送速率以便引起网络拥塞。快重传如果发送方连续收到相同的ACK确认他会认为发生了数据包的丢失并会快速重传未确认的数据包而不必等待超时。这有助于更快地恢复由拥塞引起的数据包丢失。快恢复再发生快速重传后TCP进入快速恢复阶段。在这个阶段发送方不会回到慢启动阶段而是将慢启动阈值设置为当前窗口的一半并将拥塞窗口大小设置为慢启动阈值加上已确认但未被快速快速重传的数据块的数量。这有助于更快地从拥塞中恢复。