文档章节

TCP state transform

markqk
 markqk
发布于 2016/07/11 11:30
字数 552
阅读 18
收藏 0

TCP state:

Client: 

    SYN_SENT (发送连接请求后等待匹配的连接请求) ->  ESTABLISHED(代表一个打开的连接) -> FIN_WAIT_1(发送关闭连接请求后等待对方确认) -> FIN_WAIT_2(收到服务器的ACK后客户端进入fin_wait_2,此时客户端已经完成关闭,等待服务器发来关闭请求) ->

TIME_WAIT(收到服务器的关闭请求FIN,给服务器发个ACK后进入time_wait) -> CLOSED(time_wait过了2MSL时间后进入closed)

Server:

    LISTEN -> SYN_RCVD(收到和发送一个连接请求后等待对方对连接请求确认) -> ESTABLISHED(代表一个打开的连接) -> CLOSE_WAIT(服务器收到客户端的FIN后向客户端发送ACK,之后进入close_wait) -> LAST_ACK(当服务器不需要继续发送数据,就发送FIN,进入last_ack) -> CLOSED(收到客户端的最后ACK后进入close)

 

当客户端开始连接时,服务器还处于LISTENING,

客户端发一个SYN包后,他就处于SYN_SENT状态,服务器就处于SYS收到状态,

然后互相确认进入连接状态ESTABLISHED.

 

当客户端请求关闭连接时,客户端发送一个FIN包后,客户端就进入FIN_WAIT_1状态,等待对方的确认包,

服务器发送一个ACK包给客户,客户端收到ACK包后结束FIN_WAIT_1状态,进入FIN_WAIT_2状态,等待服务器发过来的关闭请求,

服务器发一个FIN包后,进入CLOSE_WAIT状态,

当客户端收到服务器的FIN包,FIN_WAIT_2状态就结束,然后给服务器端的FIN包给以一个确认包,客户端这时进入TIME_WAIT,

当服务器收到确认包后,CLOSE_WAIT状态结束了,

这时候服务器端真正的关闭了连接.但是客户端还在TIME_WAIT状态下,

 

什么时候结束呢.我在这里再讲到一个新名词:2MSL等待状态,其实TIME_WAIT就是2MSL等待状态,

为什么要设置这个状态,原因是有足够的时间让ACK包到达服务器端,如果服务器端没收到ACK包,超时了,然后重新发一个FIN包,直到服务器收到ACK包.

© 著作权归作者所有

共有 人打赏支持
markqk
粉丝 0
博文 133
码字总数 60565
作品 0
朝阳
程序员
私信 提问
ipsec高可用性试验

最近一段时间在搞ipsec,反向路由注入的那部分书上介绍的很少,而且网上的文章介绍的也不是很深入,于是就查了一下cisco的文档,总结了一下并做了实验。以下是实验过程。 RRI+HSRP+OSPF实验:...

范堡
2009/05/05
369
0
css3 marquee

HTML结构如下: 原本一层DIV足够,又加了一层是为了增加左右的空白间隙。 然后就可以应用transform动画了: 方案源于stackoverflow:css3-marquee-effect...

一点灵犀
2016/07/18
122
0
/etc/sysconfig/iptables 正常运行

# Generated by iptables-save v1.4.7 on Fri Oct 13 15:37:45 2017 *filter :INPUT DROP [210:56954] :FORWARD DROP [0:0] :OUTPUT ACCEPT [113:8354] -A INPUT -p tcp -m state --state NE......

zancun
2017/10/13
0
0
linux iptables 的一个问题

这是我的配置 :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ......

天王盖地虎626
2014/03/12
445
6
配置防火墙,开启80端口、3306端口 & iptables 使用详解

1:配置防火墙,开启80端口、3306端口 vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙) -A INPUT -m state –state......

zancun
2017/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
21分钟前
1
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
32分钟前
1
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
34分钟前
6
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
35分钟前
2
1
手动部署kubernetes集群(1.13.1最新版)

一、机器规划 使用五台机子部署k8s集群,规划如下: master节点3台(同时也是etcd节点) node节点2台 ip分配如下: ip:192.168.10.101,主机名:k8s-etcd01 ip:192.168.10.102,主机名:k8s...

人在艹木中
40分钟前
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部