分类目录归档:Linux

TCP TIME_WAIT

维持TIME_WAIT有两个原因:

1.可靠地实现TCP的全双工连接终止

在四次挥手中,假设最后的ACK丢失了,被动关闭方会重发FIN。主动关闭端必须维护状态,来允许被动关闭方重发最后的ACK;如果它没有维护这个状态,将会对重发FIN返回RST,被动关闭方会认为这是个错误。如果TCP正在执行彻底终止数据流的两个方向所需的所有工作(即全双工关闭),则必须正确处理这四个段中任何一个的丢失。所以执行主动关闭的一方必须在结束时保持TIME_WAIT状态:因为它可能必须重传最后的ACK。

2.允许旧的重复数据段在网络中过期

假设在主机1.1.1.1的1111端口和2.2.2.2的2222端口之间有一个TCP连接。此连接关闭后,相同的地址和端口建立了一个新连接。由于IP地址和端口相同,TCP必须防止旧连接的数据包再次出现,被新的连接误收。为此,TCP将不会启动当前处于TIME_WAIT状态的连接。由于TIME_WAIT状态的持续时间是两倍的MSL,因此TCP允许一个方向的数据在MSL秒内丢失,也允许回复在一个MSL秒内丢失。通过此规则来保证当一个TCP连接成功建立时,来自先前连接的所有旧的副本在网络中已过期。

iptables count计数

两个参数:
  --verbose	-v		verbose mode
  --zero    -Z [chain [rulenum]]  Zero counters in chain or all chains


p-hsg-cache-6% sudo iptables -nL -v -t nat
Chain PREROUTING (policy ACCEPT 50741 packets, 2370K bytes)
 pkts bytes target     prot opt in     out     source               destination
  436 22672 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6379 to:192.168.10.82:6379
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6380 to:192.168.10.81:6380
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6381 to:192.168.10.81:6381
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6382 to:192.168.10.81:6382
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6383 to:192.168.10.81:6383

Chain INPUT (policy ACCEPT 18988 packets, 1082K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 10532 packets, 549K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
10968  572K MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0

p-hsg-cache-6% sudo iptables -Z -t nat

p-hsg-cache-6% sudo iptables -nL -v -t nat
Chain PREROUTING (policy ACCEPT 12 packets, 624 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    52 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6379 to:192.168.10.82:6379
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6380 to:192.168.10.81:6380
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6381 to:192.168.10.81:6381
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6382 to:192.168.10.81:6382
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.226       tcp dpt:6383 to:192.168.10.81:6383

Chain INPUT (policy ACCEPT 12 packets, 624 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 6 packets, 312 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    7   364 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
p-hsg-cache-6%