计算机网络之---TCP连接管理

TCP连接管理

TCP(传输控制协议)是面向连接的协议,在数据传输之前需要建立连接,在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则,分别称为三次握手 (Three-Way Handshake)和四次挥手(Four-Way Handshake)。它们确保双方能够可靠地建立和关闭连接。

三次握手(TCP连接的建立)

三次握手是为了在客户端和服务器之间建立可靠的TCP连接。这个过程确保双方都能发送和接收数据,并且双方的缓冲区准备好接收数据。

三次握手的过程:
  1. 第一次握手:客户端发送SYN包(同步标志位),告诉服务器客户端请求建立连接。

    • 客户端 -> 服务器:SYN = 1, seq = X(X为随机生成的序列号)

    这一步表示客户端请求连接,并初始化一个序列号X。

  2. 第二次握手:服务器收到SYN包后,向客户端发送SYN-ACK包,表示愿意建立连接,并且确认收到客户端的请求。

    • 服务器 -> 客户端:SYN = 1, ACK = 1, seq = Y(服务器随机生成的序列号), ack = X + 1(确认号,表示服务器已收到客户端的SYN包)

    服务器会发送一个SYN包来表示自己准备好了,同时确认客户端的SYN包。

  3. 第三次握手:客户端收到服务器的SYN-ACK包后,向服务器发送ACK包,确认收到服务器的响应,并且连接建立。

    • 客户端 -> 服务器:ACK = 1, seq = X + 1, ack = Y + 1

    客户端向服务器确认自己的序列号,并最终完成连接建立。

至此,客户端和服务器之间的连接建立完成,可以开始数据传输。

四次挥手(TCP连接的断开)

四次挥手是为了安全地断开TCP连接,确保双方的通信都已结束。这个过程确保数据能够完全传输,并且双方都能正常关闭连接。

四次挥手的过程:
  1. 第一次挥手:客户端发送FIN包,表示它已经完成数据的发送请求,准备关闭连接。

    • 客户端 -> 服务器:FIN = 1, seq = A

    客户端告诉服务器自己已经没有数据发送了,要求关闭连接。

  2. 第二次挥手:服务器收到FIN包后,发送ACK包,确认客户端的关闭请求,并且自己仍然可以继续接收数据。

    • 服务器 -> 客户端:ACK = 1, seq = B, ack = A + 1

    服务器确认客户端的连接关闭请求,并且告知客户端自己准备好关闭连接。

  3. 第三次挥手:服务器发送FIN包,表示它已经完成数据的发送,也准备关闭连接。

    • 服务器 -> 客户端:FIN = 1, seq = C

    服务器告诉客户端自己已经没有数据发送了,准备关闭连接。

  4. 第四次挥手:客户端收到服务器的FIN包后,发送ACK包,确认收到服务器的关闭请求,完成连接的断开。

    • 客户端 -> 服务器:ACK = 1, seq = A + 1, ack = C + 1

    客户端确认服务器的关闭请求,最后断开连接。

至此,双方的连接关闭完成。

三次握手和四次挥手的区别

  1. 三次握手用于连接的建立,四次挥手用于连接的断开。
  2. 三次握手 是为了确保客户端和服务器都准备好开始数据传输,而四次挥手是为了确保数据传输完毕并且双方都关闭连接。
  3. 在三次握手过程中,连接的状态是全双工的,双方可以发送数据。而在四次挥手过程中,虽然双方在不同的时间关闭连接,但都确保了数据可以可靠地传输完毕。

四次挥手什么时候断开

  • 如果使用 HTTP/1.1HTTP/2 ,且启用了长连接(默认情况下启用),则 TCP 连接 只会建立一次。它只会在第一次请求时建立一次,后续请求会复用该连接,直到超时或主动关闭连接。
  • 如果使用 HTTP/1.0 且没有启用长连接,则每次请求会建立一个新的 TCP 连接。
相关推荐
chirrupy_hamal14 分钟前
如何避免 SYN 攻击?
网络·tcp
怦然星动_42 分钟前
ip网络基础
网络·智能路由器
数据与人工智能律师1 小时前
数字资产革命中的信任之锚:RWA法律架构的隐形密码
大数据·网络·人工智能·云计算·区块链
菜包eo2 小时前
二维码驱动的独立站视频集成方案
网络·python·音视频
yzx9910132 小时前
关于网络协议
网络·人工智能·python·网络协议
zsq2 小时前
【网络与系统安全】域类实施模型DTE
网络·安全·系统安全
00后程序员张4 小时前
免Mac上架实战:全平台iOS App上架流程的工具协作经验
websocket·网络协议·tcp/ip·http·网络安全·https·udp
GLAB-Mary4 小时前
OSPF虚拟链路术语一览:快速掌握网络路由
网络·智能路由器
tan77º4 小时前
【Linux网络编程】网络基础
linux·服务器·网络
bing_1586 小时前
MQTT 和 HTTP 有什么本质区别?
网络·网络协议·http