前言
推测:查看本文的人查找这个问题,说明你已经基本了解或者熟悉TCP的相关知识。
? ? ? ? ? ? 另外能够看出你自己能思考问题并在寻求答案。
结果 ?
TCP为什么要三次握手?
思考的角度:
? ? ? ? ? ? ? ? ? ? ? ? 从TCP的设计目的
? ? ? ? ? ? ? ? ? ? ? ? TCP格式的数据内容
? ? ? 因为TCP是全双工通信,是可靠交付的,需要知道双方的起始序列号【从那个数据开始发送的】,这样才能保证数据的有头有尾,数据就不会乱,就不会产生差错,丢失等情况 。
? ? ?
? ? ?第三次握手是客户端发送给服务器的,发送的是ack=y+1,【?y是服务器的序列号】,表明我已经知道了你的服务器的数据的序列号了。
过程
知识储备
ACK-(ACKnowledgment)确认 SYN:(SYNchronization) 同步 Seq:sequence ?序列号
握手前的准备
监听状态----服务器
? ? ? 首先服务端需要开启监听,等待客户端的连接请求,这个时候服务端处于“收听”状态; ?
?过程
#----------第一次握手 ? ? ?【SYN=1 + seq=x 】? ? ? ? ?客户端---》服务器 状态:“同步已发送”? ? 状态------------客户端 解释:? 客户端向服务端发起连接,发送连接请求报文段? ? ? ? ? ? ? ? 同步位SYN=1 ?+ 初始序列号seq=x ,此时客户端处于“同步已发送”的状态; ?
#-------------第二次握手 ? 【ack=x+1 seq=y 】? ? ? ? ? ?服务器---》客户端 状态:? “同步收到”? ?状态-------服务端 解释:? ?服务端收到客户端的连接请求,同意连接并向客户端发送确认报文。 ? ? ? ? ? ? ? ?确认号是 ack=x+1 表示,当前所发送的x个数据已经收到了,客户端可以发送下一个数据包序号从 x+1 开始,同时选择自己的初始序列号 seq=y ,此时服务端处于“同步收到”状态
#----------------第三次握手 【ack=y+1 seq=x+1 】? ? ? 客户端---》服务器 状态:?“已建立连接”? ?状态------客户端 解释:? 客户端收到服务端的确认后,向服务端发送确认信息。 ? ? ? ? ? ? ? 确认号是 ack=y+1 当前所发送的y个数据已经收到了,服务端可以发送下一个数据包序号从 y+1 开始,此时客户端处于“已建立连接”的状态;
在第三次握手后服务器接收到客户端的数据
#--------------双方已建立连接? 状态:? ? “已建立连接”? ??状态-------服务端 ? 解释:? ?服务端收到客户端的确认后,也进入“已建立连接”的状态。
|