欢迎来到 我的博客!
探索未知, 分享知识 !
本文目录
- 1. TCP的可靠性机制
- 1.2可靠性的基础上,尽可能得提高效率
- 2. TCP三次握手过程
- 3. 为何不是四次握手?
在互联网的复杂世界中,TCP(传输控制协议)扮演着一个不可或缺的角色,确保我们的数据能够准确无误地在世界各地流动。它是一种面向连接的
、可靠的
、基于字节流
, 全双工
的传输层通信协议。今天,我们将一起探索TCP的可靠性背后的原理,特别是那个让人好奇的问题:为什么是三次握手,不是两次、也不是四次?
1. TCP的可靠性机制
TCP的设计目标是提供一种可靠的数据传输服务,在无法预测的网络环境中,这是一项挑战。以下是TCP确保数据可靠性的几种核心机制:
- 确认应答:TCP对每个传输的字节赋予一个序号,用于跟踪数据包的顺序。接收方通过发送带有
确认序号(ACK)
的报文来告知发送方哪些数据已经被成功接收。确认序号
是接收方期望接收的下一个字节的序号
。这样,即使数据包乱序到达,接收方也能根据序号重新排序,确保数据的完整性和顺序。
- 超时重传:当发送方发送数据后,它会启动一个定时器,等待接收方的确认响应。如果
在预定时间内
没有收到确认序号(ACK)
,发送方会认为数据包丢失或出错,并重新发送该数据包。这个机制保证了数据能够在遇到丢包或错误时得到恢复。
情况① 数据直接丢了,接收方根本没有收到
情况① 接收方收到了,但是返回的ack丢了
1.2可靠性的基础上,尽可能得提高效率
- 滑动窗口
要提高效率,每次等待ACK的时间就要花费不少时间,所以TCP引出了一个机制 : 通过滑动窗口
实现批量传输
上述批量传输数据的过程,被称为滑动窗口 |
- 流量控制:TCP通过
滑动窗口
机制实现流量控制,动态调整发送方的发送速率以匹配接收方的处理能力。窗口大小指的是接收方能够接收但还未确认的数据量
,这避免了接收方因处理不过来而导致的数据溢出。
滑动窗口,批量发送并不是数据越大就速度就越快,我们还要考虑到接受方. |
如果你发的太快,瞬间就把接受方的缓冲区给打满了,接下来如果继续发送的话,就会造成丢包.这种情况不如发的慢一点.
这些机制共同作用,确保了TCP能在不稳定的网络环境中提供可靠且相对于比较快速的数据传输服务。
2. TCP三次握手过程
建立TCP连接的三次握手过程是这样的:
- SYN:客户端向服务器发送一个
SYN(同步序列编号)报文
,并进入SYN_SEND状态,等待服务器的响应。这个步骤启动连接过程,客户端告诉服务器它想建立连接,并提供初始的序号。- SYN-ACK:服务器收到SYN报文后,会发送一个
SYN-ACK报文
,同时提供自己的初始序号,并确认客户端的序号。此时服务器进入SYN_RECV状态。- ACK:客户端收到SYN-ACK报文后,发送一个
ACK报文作为响应
,确认服务器的初始序号。此时,TCP连接建立完成,数据传输可以开始。
如何来辨别是
同步报文
还是应答报文
呢
3. 为何不是四次握手?
其实第二次的`syn + ack`,按通常一问一答的思路是发送ack报文之后,在发送syn报文来确认认对方的接收状态,但是为了提高效率便将syn和ack一并发送 |
三次握手的设计确保了在双方准备好发送和接收数据之前不会建立连接。如果采用两次握手,可能会遗漏对方的准备状态确认,导致单向通信或数据无法到达。而采用四次握手则造成没必要的开销.