TCP 连接的建立 & 断开
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 连接的建立 & 断开的更多相关文章
- TCP连接的建立和断开
1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续 ...
- TCP连接的建立和终止
TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...
- 网络学习笔记(一):TCP连接的建立与关闭
五层网络模型分为:物理层.数据链路层.网络层.传输层.应用层.其中,传输层有两种主要协议:面向连接的TCP(Transmission Control Protocol 传输控制协议).无连接的UD ...
- TCP/IP协议--TCP协议概括和TCP连接的建立和终止
TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...
- 从Wireshark看TCP连接的建立与关闭
TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...
- TCP连接的建立(三次握手和四次挥手)
写到最后发现我描述的挺水的,这个老哥的用语比较专业一点https://blog.csdn.net/qq_38950316/article/details/81087809 (老哥这篇有些许错别字 大 ...
- 简述TCP连接的建立与释放(三次握手、四次挥手)
在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...
- 计算机网络(11)-----TCP连接的建立和释放
TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序, ...
- 传输层(2)-TCP连接的建立和终止、TIME_WAIT状态
1.TCP连接的建立和终止 1)三路握手 客户端发送一个SYN(同步)分解,告诉服务器客户将在连接中发送的数据的初始序列号. 服务器发送确认客户的SYN(ACK),同时自己也得发送一个SYN分节,它含 ...
随机推荐
- C# 操作ie网页,注入JavaScript等操作
之前做过一个录制鼠标键盘并回放的功能,使用的关键技术是钩子程序.在实现针对指定页面进行录制的过程中,发现C#操作网页的功能. https://www.cnblogs.com/wangchuang/ar ...
- Oracle的数据优化(经常被问到)?
以Oracle数据库举例:(a-G要求掌握,H一般为DBA操作,了解就可以了) a. 建库:已知将保存海量数据的时候,因为Oracle是通过用户来管理数据的, 第一步我们先建一个tableaspace ...
- 什么是sql注入?如何有效防止sql注入?
一.什么是sql注入 利用程序员的代码bug,将输入的参数绕过校验并在系统中当做代码运行,从而攻击系统. 二.如何避免sql注入 1.对sql语句进行预编译 PreparedStatement类可以对 ...
- OGNL(Object-Graph Navigation Language)使用
OGNL表达式:https://www.jianshu.com/p/6bc6752d11f4 Apache OGNL:http://commons.apache.org/proper/commons- ...
- JVM原理与深度调优
什么是jvm jvm是java虚拟机 运行在用户态.通过应用程序实现java代码跨平台.与平台无关.实际上是"一次编译,到处执行" 1.从微观来说编译出来的是字节码!去到哪个平台都 ...
- Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度
摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...
- 1. 了解Git和Github
1. 了解Git和Github 1.1 什么是Git Git是一个免费.开源的版本控制软件 1.2 什么是版本控制系统 版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况得系统. ...
- 用JS写一个计算器(兼容手机端)
先看成果:1.PC端2. 首先确立html,有哪些东西我们要知道.布局大概的样子在心里有个数 <!DOCTYPE html> <html> <head> <m ...
- 【转载】10个Web3D可视化精彩案例
1.化学元素周期表 六种排列方式,炫酷动画效果,TWaver 3D轻松实现. 演示地址:http://demo.servasoft.com/che... 2.DNA螺旋图 DNA3D模型,包含几千个球 ...
- h5 在全屏iphonex中的适配
iphonex 已经上线有一段时间了,作为业界刘海屏幕第一款机型,导致全屏不能正常的全屏显示了,,所以需要对iphonx 适配,下面就详细说说如何适配 先看一张适配前后的图: iphonex 提供的 ...