蓝盟IT外包,TCP为什么需要三次握手和四次挥手?

发布者:上海IT外包来源:http://www.lanmon.net点击数:1845

蓝盟IT小贴士,来喽!
握手一、三次
三重握手意味着在建立TCP连接时,客户端和服务器总共需要发送三个数据包
主要作用是确认双方的接收能力和发送能力是否正常,指定自己的初始化序列号,为以后的可靠传输做准备
过程如下。
首次握手:客户端向服务器端发送SYN消息,指示客户端的初始化序列号isn(c  )。 此时,客户端处于SYN_SENT状态
第二次握手:服务器接收到来自客户端的SYN消息时,将自身的SYN消息作为响应,为了确认客户端的SYN,将客户端的ISN  1作为ACK的值,此时服务器在SYN_RCVD的状态下
第三次握手:客户端在收到SYN消息后发送ACK消息。 值为服务器的ISN  1。 此时客户端处于ESTABLISHED状态。 服务器收到ACK消息后,进入ESTABLISHED状态,此时双方已经建立了连接
上述握手的作用如下
第一次握手:客户端发送网络数据包,服务器端接收到后,可以得出客户端的发送能力、服务器端的接收能力正常的结论。
第二次握手:服务端下单,客户端收到后,可以得出服务端的收发能力、客户端的收发能力正常的结论。 但是,此时服务器无法确认客户端的接收能力是否正常
第三次握手:客户下单,服务端收到。 由此可以得出结论,服务端的收发能力正常,服务端自身的收发能力也正常
握手三次,可以确认双方的接收和发送能力正常。 之后,可以正常通信
为什么不握手两次?
握手两次的情况下,发送方可以确认自己发送的信息是到达对方还是对方发送的信息包到达自己,但是接收方只能确认对方发送的信息包是否到达自己
此外,如果进行两次握手,则客户机可能会由于网络拥塞等而发送多个请求消息,延迟到达的请求还会与服务器建立连接,浪费了很多服务器的资源
挥手两四次
tcp结束一个连接,需要挥手4次
过程如下。
挥手第一次:客户端发送FIN消息,在消息中指定序列号。 此时,客户端处于FIN_WAIT1状态,停止发送数据,等待服务器端的确认第二次挥手:服务器端收到FIN后,发送ACK消息,将客户端的序列号值1作为ACK消息的序列号值,表示收到了客户端的消息,服务器端为CLOSE_WAIT

第三只手(服务器端也想切断连接时,和客户端第一只手一样,发送FIN信息,指定序列号。 此时服务器端处于LAST_ACK的状态

文/上海蓝盟  IT外包专家

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部