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连接的关闭。

相关推荐
雨中rain11 分钟前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
ProcessOn官方账号15 分钟前
如何绘制网络拓扑图?附详细分类解说和用户案例!
网络·职场和发展·流程图·拓扑学
Bessssss31 分钟前
centos日志管理,xiao整理
linux·运维·centos
s_yellowfish31 分钟前
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
linux·服务器·chatgpt
豆是浪个33 分钟前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&34 分钟前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
我一定会有钱36 分钟前
【linux】NFS实验
linux·服务器
王铁柱子哟-39 分钟前
解决 正在下载VS Code 服务器... 问题
运维·服务器
Ven%39 分钟前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
泰伦闲鱼39 分钟前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs