三次握手 四次挥手

一,三次握手:(建立连接的过程)

1.1 A->B   发送x   我要连接了

1.2  B->A  发送x+1 ,y  我收到了x    加个1  返回给你一个y

1.3 A   收到 y+1  握手完成  (因为 第一次A->B可能要有延迟 需要返回值最终确认一遍,之后立刻建立连接)

1.3 必须存在的原因,可能A->B的时候 ,路上出于各种原因堵住了,堵上一个小时后才到B处。此刻这个消息已经是失效的消息,如果此时B回复链接。第一无效,第二占用信息资源,所以有第三步,最好是大家都确认一遍之后,立刻就建立连接。

二,四次挥手

2.1(A->B  或 B->A )假设 A->B  数据发完了  打个招呼,我没有数据要发送了  x+2 y+1  (我发送完我就等待,等待时间足够建立一链接)

2.2   B收到信息    检查自身消息发送完毕,回复,我也没有数据要发送了 x+3 (可以发送数据,发完这个,就说自己也没有要发送的数据了)

2.3  A(不发信息但是可以接受信息)请求关闭连接   发射和接收都关闭

2.4 B(检测完之际信息都发送完毕,就不接收了)那好我也关闭链接  发射和接收都关闭。

 *三次握手:*采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

*四次挥手:*TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,(信息双向传输)这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

*主动断开连接的一方进入TIME_WAIT状态:

*客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。 TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK。如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么A端将响应RST分节,B端收到后将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。 因而,要实现TCP全双工连接的正常终止,必须处理终止过程中四个分节任何一个分节的丢失情况,主动关闭连接的A端必须维持TIME_WAIT状态 。 TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝

更易懂的的网址:https://blog.csdn.net/qq_38950316/article/details/81087809

原文地址:https://www.cnblogs.com/maibao666/p/11321135.html