TCP连接十一种状态

news/2024/5/17 19:52:01 标签: socket, tcp, tcp报文, tcp-ip, tcp状态

tcp连接的状态转换过程">TCP连接的状态转换过程

<a class=tcp连接的十一种状态" title="" />

包括了三次握手建立连接和四次挥手断开连接的过程

closed:起始点,tcp连接 超时或关闭时进入此状态
listen:服务端等待连接时的状态,调用Socket、bind、listen函数就能进入此状 态,称为被动打开
SYN-sent:客户端发起连接,发送SYN给服务端,若不能连接进入closed
SYN-rcvd:服务端接受客户端的SYN,由listen进入SYN-rcvd。同时返回一个ACK,并发送一个SYN给服务端。
特殊情况:客户端发起SYN的同时接收到服务端的SYN,客户端会由SYN-sent转为SYN-rcvd状态
established:可以传输数据的状态

FIN-wait1:主动关闭连接,发送FIN,由established转为此状态
FIN-wait2:主动关闭连接,接收到对方的FIN+ACK,由FIN-wait1转为此状态
close-wait:收到FIN,发送ACK,被动关闭的一方关闭连接进入此状态
last-ACK:发送FIN,同时在接受ACK时,由close-wait进入此状态。被关闭的一方发起关闭请求
closing:两边同时发送关闭请求,由FIN-wait1进入此状态,收到FIN请求,同时响应一个ACK
time-wait:

FIN-wait2到此状态:双方不同时发送FIN的情况下,主动关闭的一方在完成自己的请求后,收到对方的FIN后的状态

closeing到此状态:双方同时发起关闭,都发送了FIN,同时接受FIN并发送ACK后的状态

FIN-wait1到此状态:对方发来的FIN的ACK同时到达后的状态,与上一条的区别是本身发送的FIN回应的ACK先于对方的FIN到达,而上一条是FIN先到达

客户端独有的:SYN_SENT 、FIN_WAIT1 、FIN_WAIT2 、CLOSING 、TIME_WAIT 。
服务器独有的:LISTEN、SYN_RCVD 、CLOSE_WAIT、LAST_ACK 。
共有的:CLOSED、ESTABLISHED 。

tcp报头">TCP报头

<a class=tcp数据结构" title="" />
一位=1bit,8bit=1Byte(字节)
源端口和目的端口:各占16位,2的16次方等于65536
32 位序号:也称为顺序号(Sequence Number),简写为SEQ,
32 位确认序号:也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答。
4 位数据偏移/首部长度:由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值
保留:为将来定义新的用途保留,现在一般置0。
6 位标志字段

  • URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
  • ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
  • PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
  • RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
  • SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
  • FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口数据长度为16bit,因而窗口大小最大为65535。理论上最优大小为:网络带宽(b/s)*RTT(s)
校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
选项和填充:通常为空,最常见的可选字段是最长报文大小,用于发送方与接收方协商最大报文段长度(MSS),或在高速网络环境下作窗口调节因子时使用。首部字段还定义了一个时间戳选项。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段,选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。1460是以太网默认的大小。
数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。


http://www.niftyadmin.cn/n/1413117.html

相关文章

perl多线程rsync备份文件到远端主机

需求&#xff1a;主机上有上百G的备份文件要rsync到远端主机&#xff0c;我们将大文件进行切割为几十个小文件进行多线程传输。这里使用14个1G的文件进行演示&#xff1a;[rootvm0 test]# pwd /root/test [rootvm0 test]# ll 总用量 13631540 -rw-r--r--. 1 root root 10737418…

c#继承与构造函数的调用

1.实例化父类时&#xff0c;可以通过new子类来实例化父类&#xff0c;执行构造函数的顺序为&#xff1a;先执行父类的构造函数&#xff0c;再执行子类的构造函数。 2.实例化子类时&#xff0c;只可以new子类&#xff0c;执行顺序同上。 3.父类实例化后&#xff0c;只能执行父类…

按任意的字段旋转的存储过程

/*范例表create table 表1 ( 號數 char(10), 成績 integer, 科目 char(10) ) insert into 表1 select 1,60,数学 union select 1,43,物理 union select 1,100,语文 union select 2,87,语文 union select 2,99,数学 union select 2,89,物理 union select 2,87,语文 *…

如何修改registry的默认的存储位置

https://github.com/goharbor/harbor/issues/5375 the adminserver only can show the usage of /data, this is an design limitation.转载于:https://www.cnblogs.com/robinunix/p/10951520.html

RESTORE DATABASE命令还原SQLServer 2005 数据库

--返回由备份集内包含的数据库和日志文件列表组成的结果集。--主要获得逻辑文件名USEmasterRESTOREFILELISTONLY FROMDISKg:/back.BakGo************************************************/**//*利用bak恢复数据库&#xff0c;强制还原(REPLACE)STATS 10 每完成10%显示一条记…

使用Selenium-PO设计模式提高Web自动化测试效率

PO&#xff08;page object&#xff09;设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中&#xff0c;PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时&#xff0c;便调用PO的方法。这样做的好处是&#xff0c;如果页面的…

Chrome 开发工具之Console

前段时间看git的相关&#xff0c;记的笔记也大致写到了博客上&#xff0c;还有些因为运用不熟&#xff0c;或者还有一些疑惑点&#xff0c;暂时也不做过多纠缠&#xff0c;之后在实践中多运用得出结论再整理分享吧。 工欲善其事&#xff0c;必先利其器。要想做好前端的工作&…

SQL SERVER 2005 (MSSQLSERVER) 服务不能启动

SQL Server (MSSQLSERVER) 服务不能启动原因: VIA协议”给启用了&#xff0c;停用“VIA协议”问题解决。 "VIA协议"停用方法&#xff1a;开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager ->打开后找到"SQL …