TCP的三次握手和四次挥手 | 查看网络状态

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分,确保数据的可靠传输。

三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下:

  1. 客户端向服务器发送一个连接请求报文段(SYN)。
  2. 服务器收到请求后,回复一个确认报文段(SYN+ACK),表示可以建立连接。
  3. 客户端收到服务器的确认后,再次发送一个确认报文段(ACK),表示连接已建立。

通过这个三次握手的过程,双方确认了彼此的存在,并同意建立连接。这样,在数据传输过程中就能够确保双方之间的通信正常。

四次挥手指的是在客户端和服务器之间关闭连接时的步骤。具体流程如下:

  1. 客户端向服务器发送一个关闭连接请求报文段(FIN)。
  2. 服务器收到请求后,回复一个确认报文段(ACK),表示已收到客户端的关闭请求。
  3. 服务器执行完当前的数据传输任务后,发送一个关闭连接请求报文段(FIN)给客户端。
  4. 客户端收到服务器的关闭请求后,回复一个确认报文段(ACK)。双方都确认关闭连接。

通过这个四次挥手的过程,双方在关闭连接时相互通知,确保数据传输的完整性和正常关闭。

三次握手和四次挥手的设计是为了保证数据传输的可靠性。通过握手过程,双方建立了可靠的连接;通过挥手过程,双方能够安全地关闭连接,避免数据的丢失或不完整。这些步骤是TCP协议的基础,也是网络通信中重要的一环。

三次握手


运行服务端测试程序,服务端socket进入监听状态。

netstat -na|less 命令可以查看网络状态:

可以看到5005的口在LISTEN状态。

运行客户端的程序,重新在服务端的主机上查看。

可以看到131的外部地址端口为47856,132的本地地址宽口为5005。
socket包含两部分,IP地址和端口。

对服务端来说,端口是固定的设置的,这样客户端才能连上来,客户端的端口是随机分配的(不关心)。

客户端的网络状态:

握手过程:

三次握手是在TCP/IP协议中用于建立可靠的连接的过程。它由客户端和服务器之间的交互组成,确保双方都愿意进行通信,并且同步初始序列号。

以下是详细的三次握手过程:

  1. 第一步:客户端发送SYN请求

    • 客户端向服务器发送一个SYN(同步)请求包,其中包含随机生成的初始序列号(ISN)。这个序列号用于后续通信中标识数据包的顺序。
    • 客户端还设置了一个SYN标志位来表示这是一个连接请求。
  2. 第二步:服务器回应SYN-ACK

    • 服务器收到客户端的SYN请求后,如果接受连接,会向客户端发送一个SYN-ACK(同步-确认)响应包。
    • 服务器为自己生成一个随机的初始序列号(ISN),并将客户端的初始序列号加一作为确认号(ACK)发送给客户端。
    • 服务器同时设置SYN和ACK标志位,表示既同步又确认。
  3. 第三步:客户端发送ACK确认

    • 客户端收到服务器的SYN-ACK响应后,检查其中的确认号是否正确,并向服务器发送一个ACK(确认)包作为响应。
    • 客户端将服务器的初始序列号加一作为确认号发送给服务器,同时设置ACK标志位来表示确认操作。

这样,三次握手完成,客户端和服务器都知道对方愿意进行通信,并且双方的初始序列号也已经同步。数据传输阶段可以开始了。

需要注意的是,三次握手过程中可能会出现超时、网络延迟等情况,导致握手失败或延迟。而且,由于网络的不可靠性,即使完成了三次握手,仍然有可能出现丢包或重复包的情况,TCP协议通过序列号和确认号以及重传机制来处理这些问题。

四次挥手





四次挥手是TCP连接的关闭过程,由发起方和接收方共同完成。以下是四次挥手的详细介绍:

  1. 发起方(客户端)发送关闭连接请求:

    客户端首先向服务器发送一个FIN(Finish)包,表示希望关闭连接。这个包的序列号是X。

  2. 接收方(服务器)确认关闭连接请求:

    服务器接收到关闭连接请求后,会向客户端发送一个ACK(Acknowledgment)包,表示已经收到了关闭请求,并且准备关闭连接。这个ACK包的确认号是X+1。

  3. 接收方发送关闭连接请求:

    服务器发送完ACK包后,会进入CLOSE_WAIT状态,等待自己的应用程序结束数据传输。当应用程序结束后,服务器会向客户端发送一个FIN包,表示自己也准备关闭连接。这个FIN包的序列号是Y。

  4. 发起方确认关闭连接请求并关闭连接:

    客户端接收到服务器端发送的FIN包后,会发送一个ACK包作为确认,表示已经接收到关闭请求,并准备关闭连接。这个ACK包的确认号是Y+1。客户端发送完ACK包后,进入TIME_WAIT状态,等待一段时间后关闭连接。

在四次挥手过程中,有两个阶段需要等待一段时间。一个是服务器端等待应用程序结束数据传输的CLOSE_WAIT状态,另一个是客户端在TIME_WAIT状态下等待一段时间。这是为了确保网络中所有的数据包都已经传输完毕,以防止后续的重复连接。

总结起来,四次挥手过程是:

客户端发送FIN,服务器发送ACK;

服务器发送FIN,客户端发送ACK;

其中,FIN表示关闭连接请求,ACK表示确认收到请求。这样双方就完成了TCP连接的关闭。

相关推荐
Petrichor-瑾26 分钟前
HTTP和HTTPS的区别
网络·http·https
阿洵Rain30 分钟前
【Linux】环境变量
android·linux·javascript
zealous_zzx1 小时前
深度解析Linux系统和Unix系统的基本概念及优缺点和原理
linux·unix
丢爸2 小时前
网络学习-eNSP配置NAT
linux·网络·学习
沐风ya2 小时前
NAT技术介绍+缺陷(内网穿透+工具),NAPT(介绍,替换过程,原理,NAT转换表)
linux·服务器·网络
天启代理ip3 小时前
HTTP隧道代理:互联网冲浪的隐形翅膀
服务器·网络·爬虫·网络协议·tcp/ip
6230_3 小时前
关于HTTP通讯流程知识点补充—常见状态码及常见请求方式
前端·javascript·网络·网络协议·学习·http·html
别挡4 小时前
CentOS Stream 8中安装和使用 Docker
linux·docker·centos
日记成书4 小时前
【无线通信发展史⑨】1791年路易吉·伽伐尼-关于动物电的研究与1800年亚历山大·伏打伯爵-电池:伏打电池
网络·人工智能·学习·职场和发展·信息与通信
人工智障调包侠5 小时前
Linux 目录介绍
linux·运维·服务器