TCP 连接的建立过程

一开始,客户端和服务端都处于 close 状态。

先是服务端监听某个端口,此时服务端处于 listen 状态。

这个时候客户端就可以发送连接请求报文了。


第一次握手

客户端会主动发送连接请求报文,随机初始化序列号为 x,并把 SYN 标志位设置为 1,表示 SYN 报文。

客户端发送 SYN 报文后,客户端进入 syn_sent 状态。


第二次握手

服务端收到 SYN 报文后,服务端会发送 SYN-ACK 报文,用于「对客户端发送的 SYN 报文进行应答」和「服务端被动请求建立连接」。

服务端会随机初始化序列号为 y,确认序列号设置为 x + 1,并把 SYN 标志位、ACK 标志位设置为 1。

服务端发送 SYN-ACK 报文后,服务端进入 syn_receive 状态。


第三次握手

客户端收到 SYN-ACK 报文后,客户端会发送 ACK 报文,用于对服务端发送的报文进行应答。

客户端会将序列号设置为 x + 1,确认序列号设置为 y + 1,ACK 标志位设置为 1。

客户端发送 ACK 报文后,客户端处于 established 状态。

当服务端收到 ACK 报文后,服务端进入 established 状态。


此时 TCP 连接就建立完成了,客户端和服务端就可以相互发送数据了。

TCP 连接的断开过程

双方都可以主动请求断开连接,断开连接后,主机中的资源将被释放。

一开始,客户端和服务端都处于 established 状态。


第一次挥手

如果客户端打算断开连接,那么客户端会发送一个 FIN 标志位为 1 的报文,即 FIN 报文。

客户端发送 FIN 报文后,客户端进入 finish_wait_1 状态。


第二次挥手

服务端收到 FIN 报文后,服务端会发送 ACK 应答报文,用于对客户端发送的 FIN 报文进行应答。

服务端发送 ACK 应答报文后,服务端进入 close_wait 状态。

客户端收到 ACK 应答报文后,客户端进入 finish_wait_2 状态。


第三次挥手

等待服务端处理完数据,服务端被动请求断开连接。

服务端发送 FIN 报文后,服务端进入 last_ack 状态。


第四次挥手

客户端收到 FIN 报文后,客户端会发送 ACK 应答报文,用于对服务端发送的 FIN 报文进行应答。

客户端发送 ACK 报文后,客户端进入 time_wait 状态。

当服务端收到 ACK 报文后,服务端进入 close 状态,至此服务端已经完成连接的关闭。

客户端在经过 2MSL 时间后,自动进入 close 状态,至此客户端也完成了连接的关闭。

MSL 是 Maximum Segment Lifetime 英文的缩写,中文可以译为“报文最大生存时间”。

TCP 连接的建立 & 断开的更多相关文章

  1. TCP连接的建立和断开

    1.TCP连接的建立            设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续 ...

  2. TCP连接的建立和终止

    TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...

  3. 网络学习笔记(一):TCP连接的建立与关闭

      五层网络模型分为:物理层.数据链路层.网络层.传输层.应用层.其中,传输层有两种主要协议:面向连接的TCP(Transmission Control Protocol 传输控制协议).无连接的UD ...

  4. TCP/IP协议--TCP协议概括和TCP连接的建立和终止

    TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...

  5. 从Wireshark看TCP连接的建立与关闭

    TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...

  6. TCP连接的建立(三次握手和四次挥手)

    写到最后发现我描述的挺水的,这个老哥的用语比较专业一点https://blog.csdn.net/qq_38950316/article/details/81087809  (老哥这篇有些许错别字 大 ...

  7. 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...

  8. 计算机网络(11)-----TCP连接的建立和释放

    TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序, ...

  9. 传输层(2)-TCP连接的建立和终止、TIME_WAIT状态

    1.TCP连接的建立和终止 1)三路握手 客户端发送一个SYN(同步)分解,告诉服务器客户将在连接中发送的数据的初始序列号. 服务器发送确认客户的SYN(ACK),同时自己也得发送一个SYN分节,它含 ...

随机推荐

  1. JDBC操作数据库的步骤 ?

    注册数据库驱动. 建立数据库连接. 创建一个Statement. 执行SQL语句. 处理结果集. 关闭数据库连接.

  2. 匿名内部类编译生成的class文件

    一.问题描述 跳槽到的新公司,相比原来的公司,软件开发非常不规范,经常各种坑.项目部署到生产现场之后,出现问题,我在修改之后编译生成class文件,然后将class文件发给现场的技术支持,技术支持将c ...

  3. int 和 Integer 有什么区别?

    Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本 数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本 数据类型都引入了对应的包装类型(wrappe ...

  4. 说出几条 Java 中方法重载的最佳实践?

    下面有几条可以遵循的方法重载的最佳实践来避免造成自动装箱的混乱. a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参 数. b)不要重载参数数量一致,而只是参数顺序 ...

  5. 说出 5 个 JDK 1.8 引入的新特性?

    Java 8 在 Java 历史上是一个开创新的版本,下面 JDK 8 中 5 个主要的特性: Lambda 表达式,允许像对象一样传递匿名函数 Stream API,充分利用现代多核 CPU,可以写 ...

  6. Serial 与 Parallel GC 之间的不同之处?

    Serial 与 Parallel 在 GC 执行的时候都会引起 stop-the-world.它们之间主要 不同 serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而 para ...

  7. WebSQL是HTML 5规范的一部分吗?

    不是,虽然很多人将其标记为HTML 5,但它不是HTML 5规范的一部分.HTML 5规范基于SQLite.

  8. 控制算法的划分(自适应控制、预测控制、模糊控制等,PID等;蚁群算法、神经网络,还有机器学习、人工智能中的很多方法)

    一般来说,控制器的设计,分为控制框架的选取,跟参数的优化.自适应控制.预测控制.模糊控制等,跟PID一样,是控制算法(我习惯称为控制框架). 而粒子群.遗传算法(类似的还有蚁群算法.神经网络,还有机器 ...

  9. 3.3转1.8V(电平转换)

  10. .NET Core Ecosystem

    .NET .NET Blog Application Models Web Mobile Desktop Microservices Gaming Machine Learning Cloud Int ...