探讨TCP的可靠性以及三次握手的奥秘

🌟 欢迎来到 我的博客! 🌈

💡 探索未知, 分享知识 !💫

本文目录


在互联网的复杂世界中,TCP(传输控制协议)扮演着一个不可或缺的角色,确保我们的数据能够准确无误地在世界各地流动。它是一种面向连接的可靠的基于字节流 , 全双工的传输层通信协议。今天,我们将一起探索TCP的可靠性背后的原理,特别是那个让人好奇的问题:为什么是三次握手不是两次、也不是四次?

1. TCP的可靠性机制

TCP的设计目标是提供一种可靠的数据传输服务,在无法预测的网络环境中,这是一项挑战。以下是TCP确保数据可靠性的几种核心机制:

  • 确认应答 :TCP对每个传输的字节赋予一个序号,用于跟踪数据包的顺序。接收方通过发送带有确认序号(ACK)的报文来告知发送方哪些数据已经被成功接收。确认序号接收方期望接收的下一个字节的序号。这样,即使数据包乱序到达,接收方也能根据序号重新排序,确保数据的完整性和顺序。
  • 超时重传 :当发送方发送数据后,它会启动一个定时器,等待接收方的确认响应。如果在预定时间内没有收到确认序号(ACK),发送方会认为数据包丢失或出错,并重新发送该数据包。这个机制保证了数据能够在遇到丢包或错误时得到恢复。

情况① 数据直接丢了,接收方根本没有收到

情况① 接收方收到了,但是返回的ack丢了

1.2可靠性的基础上,尽可能得提高效率

  • 滑动窗口

要提高效率,每次等待ACK的时间就要花费不少时间,所以TCP引出了一个机制 : 通过滑动窗口实现批量传输



|---------------------|
| 上述批量传输数据的过程,被称为滑动窗口 |

  • 流量控制 :TCP通过滑动窗口机制实现流量控制,动态调整发送方的发送速率以匹配接收方的处理能力。窗口大小指的是接收方能够接收但还未确认的数据量,这避免了接收方因处理不过来而导致的数据溢出。

|------------------------------------|
| 滑动窗口,批量发送并不是数据越大就速度就越快,我们还要考虑到接受方. |

如果你发的太快,瞬间就把接受方的缓冲区给打满了,接下来如果继续发送的话,就会造成丢包.这种情况不如发的慢一点.


这些机制共同作用,确保了TCP能在不稳定的网络环境中提供可靠且相对于比较快速的数据传输服务。

2. TCP三次握手过程

建立TCP连接的三次握手过程是这样的:

  1. SYN :客户端向服务器发送一个SYN(同步序列编号)报文,并进入SYN_SEND状态,等待服务器的响应。这个步骤启动连接过程,客户端告诉服务器它想建立连接,并提供初始的序号。
  2. SYN-ACK :服务器收到SYN报文后,会发送一个SYN-ACK报文,同时提供自己的初始序号,并确认客户端的序号。此时服务器进入SYN_RECV状态。
  3. ACK :客户端收到SYN-ACK报文后,发送一个ACK报文作为响应,确认服务器的初始序号。此时,TCP连接建立完成,数据传输可以开始。

如何来辨别是同步报文还是应答报文

3. 为何不是四次握手?

|------------------------------------------------------------------------------------|
| 其实第二次的`syn + ack`,按通常一问一答的思路是发送ack报文之后,在发送syn报文来确认认对方的接收状态,但是为了提高效率便将syn和ack一并发送 |

三次握手的设计确保了在双方准备好发送和接收数据之前不会建立连接。如果采用两次握手,可能会遗漏对方的准备状态确认,导致单向通信或数据无法到达。而采用四次握手则造成没必要的开销.

相关推荐
叫我龙翔27 分钟前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
麻辣韭菜28 分钟前
网络基础 【HTTP】
网络·c++·http
S hh1 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
萧鼎2 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
Deryck_德瑞克2 小时前
Java网络通信—TCP
java·网络·tcp/ip
GodK7772 小时前
IP 数据包分包组包
服务器·网络·tcp/ip
千年死缓2 小时前
go+redis基于tcp实现聊天室
redis·tcp/ip·golang
梁诚斌2 小时前
VSOMEIP代码阅读整理(1) - 网卡状态监听
运维·服务器·网络
深情废杨杨2 小时前
服务器几核几G几M是什么意思?如何选择?
运维·服务器
康熙38bdc2 小时前
Linux 进程优先级
linux·运维·服务器