tcp连接超时 疑问
服务器上,tcp的timeout设置为30s
client和server都是Windows机器
在client和server之间建立一个tcp连接,在分别在两台pc上通过netstat查看,已经进入了established状态
服务器上在连接跟踪表里面也看到了有这个连接
client和server之间什么数据都不发送、心跳包也不发。30s以后,服务器连接跟踪表里面也看到了 没有 这个连接了(连接超时就会消失,这个理解)
在分别在两台pc上通过netstat查看,还是established状态机器(不是连接已经超时了,怎么还是established????)
就像对同一件事情不同的人有不同的观点一样,第三方(中间服务器)的看法不需要跟当事人(client/server)保持一致。 服务器的连接表超时是仅对服务器有意义的一个事件,外界对此基本是无感知的。
再比如说,中间有两个防火墙,
client <--> fw1 <--> fw2 <--> server,
完全可以设置不同的超时值,比如fw1=30s,fw2=60s,
这样fw1和fw2对连接的感知就是不一样的。
nswcfd 发表于 2016-05-31 10:31 static/image/common/back.gif
服务器的连接表超时是仅对服务器有意义的一个事件,外界对此基本是无感知的。
再比如说,中间有两个防火 ...
意思是,fw那里虽然看到连接timeout了,但是在client 、server那里看到的连接其实还是建立的。
除非client 、server那里的连接timeout了或者主动断开了,连接才会真的断开是吗? 是的。
中间路径的连接表/会话表实现【不应该】干扰端到端的行为,理想的情况是,对client/server而言,它就像不存在一样。 实际上linux也没有做到完全透明,比如nat环境,服务器提前超时了,之前的nat信息就丢掉了,client/server 30s之后的报文就不能正常被转发了(因为很有可能被nat到不同的ip/port)。
页:
[1]