TCP状态变迁



上图18-13是TCP连接建立和关闭的抽象图,下面的图18-3是具体实例

其中包括:三次握手(建立连接)、四次挥手(终止连接)

三次握手:SYN/FIN的序列号可理解为通信操作的version

client发送一个SYN(握手信号)给server的端口,SYN中包括client的初始序列号ISN-client;

server接收到后,回应包括server的初始序列号ISN-server,同时,将确认序号ACK设置为ISN-client+1以对client的SYN进行确认,一个SYN占用一个序号;

client接收后,回应server,将确认序号ACK设为ISN-server+1以对server的SYN进行确认

即:

client-->server: SYN (ISN-client : J)

server-->client: SYN (ISN-server : K),ACK(J+1)

client-->server: ACK (K+1)

四次挥手:一个FIN也占用一个序号

client发送一个FIN给server的端口,FIN的序列号为上次请求序列号+1,(假设建立连接之后立马关闭连接)则为ISN-client
+ 1,ACK为ISN-server
+ 1;

server接收到后,知晓client关闭client-->server方向的数据传送,发送ACK为ISN-client+2;

server发送一个FIN给client,FIN的序列号为ISN-server+1,ACK为ISN-client+2;

client接收到后,知晓server关闭server-->client方向的数据传送,发送ACK为ISN-server+2

即:

client-->server: FIN (ISN-client :J+1),ACK (ISN-server : K+1),关闭client-->server方向的数据传送

server-->client:ACK (ISN-client : J+2)

server-->client:FIN (ISN-server :K+1),ACK(ISN-client : J+2),关闭server-->client方向的数据传送

client-->server:ACK (ISN-server : K+2)

长连接和短连接的区别:在于连接的关闭策略不同

短链接:建立TCP连接后,进行一次读写操作,然后关闭连接,是双向关闭

长链接:建立TCP连接后,进行读写操作,之后client/server都不主动关闭连接,后续的读写操作都使用此连接。

期间,用TCP具备的保活功能进行定时检测client的状态,这种保活功能大多放在服务器实现。

假设半小时内,client和server之间没有任何操作,则server发送一个探测报文给client:

1、client正常,server重置保活定时器

2、client异常(关闭,崩溃,正在重启),即server收不到client回应,或者说是回应超时,server可以设定一个每隔m秒,总共重发n次的机制,若client还是没反应,则终止连接

3、client重启完毕,server收到一个复位响应,server终止连接

4、client正常,但server的探测报文无法送达,则执行第二种情况的操作

时间: 2024-07-31 05:31:42

TCP状态变迁的相关文章

TCP状态变迁流程

主动建立TCP链接情况: 被动建立TCP链接情况 主动断开链接的情况 被动断开连接的情况 在TIME_WAIT阶段需要停留2倍的MSL,MSL即Maximum Segment Lifetime,表示任何报文被丢弃前在网络内的最长时间,TCP/IP详解中额外注解了:RFC793指出MSL为2min,然而实现中常用的值是30s,1min或2min.如此处理的原因是:当TCP之行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2被的MSL,这样可让TCP再次发送最后的

TCP状态变迁图

在读<TCP/IP协议详解>里看到的这张图:整理出来分享: 欢迎访问新博客社区:ACoder社区:  http://acoder.cc 版权声明:本文为博主原创文章,未经博主允许不得转载.

动手学习TCP:服务端状态变迁

上一篇文章介绍了TCP状态机,并且通过实验了解了TCP客户端正常的状态变迁过程. 那么,本篇文章就一起看看TCP服务端的正常状态变迁过程 服务端状态变迁 根据上一篇文章中的TCP状态变迁图,可以得到服务器的正常状态变迁流程如下: CLOSED -> LISTEN -> SYN_RECV -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED 具体的将状态跟TCP包关联起来就如下表示: From State To State

TCP之11种状态变迁

1. TCP 之11种状态变迁 TCP 为一个连接定义了 11 种状态,并且 TCP 规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换到另一个状态.如,当某个应用进程在 CLOSED 状态下执行主动打开时,TCP 将发送一个 SYN,且新的状态是 SYN_SENT.如果这个 TCP 接着接收到一个带 ACK 的 SYN,它将发送一个 ACK,且新的状态是 ESTABLISHED.这个最终状态是绝大多数数据传送发送的状态. 自 ESTABLISHED 状态引出的两个箭头处理连接的终止

TCP 状态详解 -转载

TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的. 建立一个 TCP 连接 TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列.www.2cto.com 这三次握手为: 请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN ). 服务器发回包

TCP状态转换图(state transition diagram)

 TPC总共有11个状态,状态转换图: 状态转换的要素 状态: tcp定义的11个状态 事件: 触发TCP状态迁移.事件可以是:本地应用层调用:收到TCP消息(incoming segment):超时事件(timeout) 动作: 主要指针对远程Peer产生的动作,如发送确认等. 转换中的角色 本地应用层 Local App:产生事件. 本地tcp实现层 local TCP stack:处理事件,完成状态转换:在远程tcp上产生事件. 远程tcp实现层 remote TCP stack(or

TCP状态迁移,CLOSE_WAIT &amp; FIN_WAIT2 的问题

TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是 什么意思呢,在这篇文章,我将会详细的阐述. 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立.但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接.但是大家明白关闭连接的工作原理吗?关闭连接要四次握手:发FI

读懂TCP状态转移

读懂TCP状态变换的过程,对于理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各个状态(总共11个)的含义不在本文介绍的范围. 内容来源:<UNIX网络编程>第一卷第二章2.6节,若是读者对某个知识点不太理解,请参考原文. TCP状态转换图(state transition diagram) 1. 建立连接(three-way hand shake) 主动打开(passive open):服务器必须准备好接受外来的连接,通常通过socket.bind和listen完成. 被动打开(

zabbix3.0 使用SS代替netstat无需脚本,1分钟搞定TCP状态监控

这段时间一直忙,没时间好好理下监控,趁着假期有时间,理了一下. 对于zabbix监控TCP状态,在网上查了很多资料,大多数都是使用netstat命令来实现. 如果服务器的压力小,链接少,不会有问题,但随着服务器压力和链接数的增加,用netstat就会造成执行速度慢,server端无法接收到执行结果,造成监控异常. 平时一直用SS,所以试着用SS代替netstat,速度快了不少. 个人较喜欢偷懒,看到网上很多少写了非常长的脚本,又是函数,又是写临时文件的.其实完全没必要,不用写啥脚本,临时文件,很