当前位置:   article > 正文

TCP的三次握手和四次挥手_tcp三次握手和四次挥手

tcp三次握手和四次挥手

目录

一、TCP协议简述

二、建立连接:三次握手

2.1、三次握手的原因 

2.2、三次握手建立TCP连接过程的各个状态

三、释放连接:四次挥手


一、TCP协议简述

        传输控制协议 TCPTransmission Control Protocol)是面向连接可靠传输层协议(传输数据前,必须建立连接)

二、建立连接:三次握手

   第一次握手:客户端先向服务器发送一个同步数据包:同步SYN=1确认ACK=0

   第二次握手:

  • 服务器收到客户端发送的第一个数据包后,根据SYN=1ACK=0,判断出为主动建立连接的数据包。
  • 服务器同意连接,发送给客户端一个数据包:同步SYN=1,确认ACK=1进行回应。

第三次握手:客户端收到服务器的确认之后,再给服务器发送一个数据包:同步SYN=0,确认SYN=0,代表双方已同意建立连接,ACK=1,表示收到服务器的确认数据包。

2.1、三次握手的原因 

 在建立TCP连接过程中的前两次握手:

客户端服务器发出建立连接的请求、

服务器客户端确认这个请求,足以证明客户端服务器之间的网络是畅通的。

如果没有最后一个数据包确认(第三次握手),假设一个特殊场景:客户端先发出一个建立连接的请求数据包,由于网络原因,客户端在设定的超时时间内,还未收到服务器的确认数据包。于是发出第二个建立连接的请求数据包,这次网路通畅,数据包很快到达服务器服务器的确认数据包也很快就到达客户端。于是客户端服务器开始传输数据。但是客户端第一次发出的建立连接的请求数据包到达服务器服务器以为是再次建立连接,所以又发出一个确认数据包。由于客户端已经收到了一个确认数据包,所以会忽略服务器发来的第二个确认数据包,但是服务器发出确认数据包之后就要一直等待客户端的回复,而此时的客户端永远也不会回复服务器。由此服务器无效等待,造成资源浪费。如果过于频繁会导致服务器停止响应。

所以,三次握手的主要作用是为了避免重复连接,防止旧的重复连接引起连接混乱问题。

另外,通过三次握手,可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而如果只有2次握手,则无法初始化序列号seq

综上所述,TCP协议最少需要通过3次握手建立连接。当然, TCP 连接也通过4次握手或5次握手建立连接,实现 TCP 连接的稳定性,但3次握手是最节省资源的连接方式。

2.2、三次握手建立TCP连接过程的各个状态

  • 客户端发出请求建立连接的数据包之后进入SYN-SENT状态,表示发送了请求建立连接的同步数据包。
  • 服务器收到客户端发出的请求建立连接的数据包之后,结束LISTEN状态,进入SYN-RCVD状态并向A发出确认数据包。
  • 客户端收到确认数据包之后,结束SYN-SENT状态,进入ESTABLISHED状态,并向服务器发送确认数据包。
  • 服务器收到客户端的确认数据包之后,结束SYN-RCVD状态,进入ESTABLISHED状态。
  • 客户端与B都进入ESTABLISHED状态之后,开始传输数据,由此完成三次握手。

三、释放连接:四次挥手

第一次挥手:客户端服务器发送连接释放的请求数据包:终止FIN=1,确认ACK = 0,并停止发送数据。

FIN=1,意味着客户端要主动释放客户端 —>服务器的TCP连接

第二次挥手:服务器收到连接释放的数据包之后,给客户端发送确认数据包:终止FIN=0确认ACK=1。从客户端服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端客户端仍可以接收。

第三次挥手:服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认数据包:ACK=1,FIN=1

  • 确认ACK=1,表示服务器已经把需要发给客户端的数据发完了
  • 终止FIN=1,表示服务器要释放服务器—>客户端的TCP连接;

第四次挥手:客户端收到服务器的连接释放报文段后,向服务器发出确认确认ACK=1,终止FIN = 0

确认ACK=1,表示收到服务器的确认报文,并同意服务器释放连接;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/541304
推荐阅读
相关标签
  

闽ICP备14008679号