TCP三次握手和四次挥手

TCP 三次握手和四次挥手

TCP(传输控制协议)是一种面向连接的协议,在建立连接和断开连接时分别需要通过 三次握手四次挥手 来确保通信的可靠性和完整性。


1. 三次握手

三次握手是 TCP 建立连接的过程,确保客户端和服务器双方都准备好进行数据传输。

步骤
  1. 第一次握手

    • 客户端向服务器发送一个 SYN(同步)包,其中 SYN=1,表示请求建立连接。
    • 客户端状态从 CLOSED 变为 SYN_SENT
  2. 第二次握手

    • 服务器收到 SYN 包后,向客户端发送一个 SYN+ACK(同步+确认)包,其中 SYN=1,ACK=1。
    • 服务器状态从 LISTEN 变为 SYN_RCVD
  3. 第三次握手

    • 客户端收到 SYN+ACK 包后,向服务器发送一个 ACK(确认)包,其中 ACK=1。
    • 客户端和服务器状态都变为 ESTABLISHED,连接建立成功。
作用
  • 确认双方的通信能力:通过三次握手,确保客户端和服务器都能正常发送和接收数据。
  • 同步初始序列号:交换初始序列号,用于后续数据传输的可靠性保证。

2. 四次挥手

四次挥手是 TCP 断开连接的过程,确保客户端和服务器双方都完成数据传输并安全关闭连接。

步骤
  1. 第一次挥手

    • 客户端向服务器发送一个 FIN(结束)包,其中 FIN=1,表示请求关闭连接。
    • 客户端状态从 ESTABLISHED 变为 FIN_WAIT_1
  2. 第二次挥手

    • 服务器收到 FIN 包后,向客户端发送一个 ACK(确认)包,其中 ACK=1。
    • 服务器状态从 ESTABLISHED 变为 CLOSE_WAIT
    • 客户端收到 ACK 包后,状态从 FIN_WAIT_1 变为 FIN_WAIT_2
  3. 第三次挥手

    • 服务器完成数据传输后,向客户端发送一个 FIN 包,其中 FIN=1,表示服务器也准备关闭连接。
    • 服务器状态从 CLOSE_WAIT 变为 LAST_ACK
  4. 第四次挥手

    • 客户端收到 FIN 包后,向服务器发送一个 ACK 包,其中 ACK=1。
    • 客户端状态从 FIN_WAIT_2 变为 TIME_WAIT,等待 2MSL(最大报文段生存时间)后进入 CLOSED 状态。
    • 服务器收到 ACK 包后,状态从 LAST_ACK 变为 CLOSED
作用
  • 确保数据完整性:通过四次挥手,确保双方都完成数据传输并安全关闭连接。
  • 防止旧连接的干扰 :通过 TIME_WAIT 状态,防止旧连接的报文干扰新连接。

三次握手

Client Server SYN=1 (SYN_SENT) SYN=1, ACK=1 (SYN_RCVD) ACK=1 (ESTABLISHED) Client Server

四次挥手

Client Server FIN=1 (FIN_WAIT_1) ACK=1 (CLOSE_WAIT) FIN=1 (LAST_ACK) ACK=1 (TIME_WAIT) Client Server

相关推荐
GGGGGGGGGGGGGG.16 分钟前
使用dockerfile创建镜像
java·开发语言
请为小H留灯17 分钟前
Python中很常用的100个函数整理
开发语言·python
winyh520 分钟前
基于Golang的微服务——Consul
微服务·golang·consul
安 当 加 密21 分钟前
基于USB Key的Web系统双因素认证解决方案:构建安全与便捷的登录体系
运维·网络·安全
达斯维达的大眼睛1 小时前
QT小项目-简单的记事本
开发语言·qt
轩宇^_^1 小时前
C++ 类与对象的实际应用案例详解
开发语言·c++
oioihoii1 小时前
从零到多页复用:我的WPF MVVM国际化实践
开发语言·c#·wpf
c7_ln1 小时前
编程视界:C++命名空间
开发语言·c++·笔记
十五年专注C++开发1 小时前
SQLiteStudio:一款免费开源跨平台的SQLite管理工具
数据库·c++·qt·sqlite