为什么TCP是三次握手

TCP 三次握手

首先简单介绍一下TCP三次握手 
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 
通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。 
三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。 


TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received 
<---SYN/ACK----
Send SYN (seq=y), ACK (x+1) 
3 Send ACK (y+1)
----ACK--->
ACK Received, Connection Established 
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server

1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。
比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
传完东西后,断开。

结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上

### TCP三次握手的工作原理 TCP三次握手机制是为了在网络环境中建立一个可靠的连接,其核心目标是确保通信双方能够同步彼此的状态以及协商初始序列号(Initial Sequence Number, ISN)。以下是关于TCP三次握手的具体工作原理及其背后的原因: #### 工作原理 1. **第一次握手** 客户端向服务器发起连接请求,发送一个带有SYN标志位的TCP报文段,并设置初始序列号`x`。此时客户端进入`SYN_SENT`状态[^3]。 2. **第二次握手** 服务器接收到客户端的SYN报文后,返回一个同时带有SYN和ACK标志位的TCP报文段。其中,SYN用于告知自己的初始序列号`y`,ACK则用来确认已接收到来自客户端的SYN报文,其值为`x+1`。此时服务器进入`SYN_RECEIVED`状态[^3]。 3. **第三次握手** 客户端再次发送一个带有ACK标志位的TCP报文段给服务器,确认已经收到了服务器的SYN报文,ACK值设为`y+1`。至此,客户端和服务端均进入了`ESTABLISHED`状态,表明连接成功建立[^3]。 ```plaintext Client Server --- SYN(x) --> (State: SYN_SENT) <-- SYN(y), ACK(x+1) -- (State: SYN_RECEIVED) --- ACK(y+1) --> (State: ESTABLISHED) ``` --- #### 原因分析 1. **防止历史连接的影响** 如果仅使用两次握手,则可能会因为网络延迟等原因导致旧的连接请求重新到达服务器,进而引发错误的连接建立。通过引入第三次握手,可以有效避免这种情况的发生[^1]。 2. **双向通信的确立** TCP协议本身支持全双工模式下的数据传输,因此需要分别确认两端之间的连通性和可用性。三次握手正好满足这一需求——不仅让每一方都知晓对方的存在,还允许它们交换各自的初始序列号以便后续的数据校验[^2]。 3. **初始化序列号的安全传递** 初始序列号的作用在于提供一种机制来检测丢失或重复的数据包。在三次握手中,每一步都会携带新的序列号信息,这有助于增强安全性并减少潜在攻击风险[^1]。 --- ### 总结 综上所述,TCP三次握手的设计既考虑到了网络环境中的不确定性因素,又兼顾了高效稳定地构建起两台主机间的通讯桥梁的任务。它不仅是现代互联网架构的重要组成部分之一,同时也是学习计算机网络理论时不可忽视的基础知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值