✍概念
啥是TCP的三次握手?(Three-way Handshake)
三次握手顾名思义就是在TCP建立连接时,需要客户端和服务器总共发送三个包。
TCP的三次握手目的是啥?
三次握手的目的就是连接服务器指定的端口,并同步连接双方的序列号Seq 和确认号 Ack,并交换TCP窗口大小等信息
TCP的三次握手意义是啥?
TCP的三次握手的意义:保证接收方收到的数据是完整, 有序, 无差错的。
TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出序号(sequence number) 和 确认号(acknowledgement number) 的使用。
发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 = 500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 510 开始” 。
这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到, 需要重发。
🌈情景模拟
客户端要和服务器交互数据了:
客户端:“你准备好了吗? SYN = 1,Seq = X”(消息已发送:SYN_SEND)
服务器:”我准备好了!开始吧!SYN = 1,ACK = 1 Ack=X+1 Seq=Y“(消息已收到:SYN_RECV)
客户端::“那我开始咯!ACK=1 Ack=Y+1 Seq=Z” (已经准备好了 Established )
服务器:“开始吧!”已经准备好了 Established)
开始数据交互。
🙂实际过程
第一次握手
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里,此时客户端进入SYN_SEND状态,等待服务器B确认。
第二次握手
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以,即X+1。并设置发送序号为Y,此时服务端进入SYN_RECV状态
第三次握手
客户端再次发送确认包ACK为1,此时的SYN标志位为0. 并且把服务器发来的序号字段+1,即Y+1,放在确定字段中发送给对方.并且将发送序号的ISN的+1,客户端和服务端进入ESTABLISHED状态,完成三次握手
🔗引用
[TCP为什么三次握手而不是两次握手详解_ginger_mr的博客-CSDN博客_tcp为什么三次握手](https://blog.csdn.net/qq_40332952/article/details/110772643?ops_request_misc=&request_id=&biz_id=102&utm_term=TCP 为什么是三次握手呢&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-.pc_search_result_before_js&spm=1018.2226.3001.4187)