| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP有限状态机(全网最全) -> 正文阅读 |
|
[网络协议]TCP有限状态机(全网最全) |
?TCP状态转换图注:————>表示客户端正常状态变迁 ? ? ? ?————>表示服务端正常状态变迁 TCP的11种状态:
正常状态变迁服务端正常状态变迁:
客户端正常状态变迁:
特殊状态变迁(1)SYN_SENT状态——>CLOSE状态 connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用,则服务器给客户端发送RST复位报文段,重新请求连接,但如果最终没能成功,则因超时而导致connect调用失败。 如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败 (2)FIN_WAIT_1状态——>TIME_WAIT状态 处于FIN_WAIT_1状态的客户端直接收到 ACK FIN确认结束报文段(而不是先收到ACK确认报文段,再收到结束报文段,说明服务端在客户端请求结束连接时没有消息要发) (1)LISTEN状态——>SYN_SENT状态 服务器主动向客户端发起连接 (2)SYN_RCVD状态——>LISTEN状态 服务器如果收到RST报文段,说明客户端请求重新建立连接,所以服务端返回LISTEN状态。 (3)SYN_RCVD状态——>FIN_WAIT_1状态 服务器是接收到客户端发送SYN同步报文段后,向客户端发送回SYN ACK同步确认报文段后进入SYN_RCVD状态,之后再发送FIN结束报文段。 正确情况下客户端先收到SYN ACK同步确认报文段,同时发送一个ACK确认报文段给服务器,客户端之后就进入ESTABLISHED状态。之后才会收到FIN结束报文段,客户端是已经建立连接的状态,并且服务端也将会因收到ACK确认报文段而进入ESTABLISHED状态。 所以如果处于SYN_RCVD状态的服务端想要结束连接,则需要发送FIN结束报文段来按照正常流程解除连接。因此,SYN_RCVD服务器主动发送FIN结束报文段,进入FIN_WAIT_1状态。 (1)SYN_SENT状态——>SYN_RCVD状态 (同时打开连接) 客户端向服务器发送完SYN同步报文段后进入SYN_SENT状态,等待服务器发送的确认,但是却收到服务器发送的SYN同步报文段。说明双方在接收到对方的SYN同步报文段之前,都进行了主动发起请求连接的操作,即向对方发出SYN同步报文段。 所以对方都会先收到SYN同步报文段而不是预想的ACK确认报文段,因此都进入SYN_RCVD状态。 两端的状态变化都是由 CLOSED——>SYN_SENT——>SYN_RCVD——>ESTABLISHED。 (2)FIN_WAIT_1状态——>CLOSING状态?(同时关闭连接) 客户端向服务器发送完FIN结束报文段后进入FIN_WAIT_1状态,等待服务发送的确认,但是却收到服务器发送的FIN结束报文段。说明双方在接收到对方的FIN结束报文段之前,都进行了主动发起结束连接的操作,即向对方发出FIN结束报文段。 所以对方都会先收到FIN结束报文段而不是预想的ACK确认报文段,因此都进入CLOSING状态。 两端的状态变化都是由 ESTABLISHED——>FIN_WAIT——1->CLOSING——>TIME_WAIT——>CLOSED。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/29 9:35:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |