LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1554|回复: 9

看iptables指南 1.1.9,关于tcp状态信息差别的小问题?

[复制链接]
发表于 2007-4-10 16:55:33 | 显示全部楼层 |阅读模式
Iptables 指南 1.1.19 转:此文章超级经典
http://iptables-tutorial.frozentux.n...cn-1.1.19.html

在看4.4 tcp连接的时候,按照它画的图和最开始讲述的信息:
在syn时,应该被看成是 new
在syn/ack时,应该就被看成是 established

可是作者在后面给出的实例中,却把ack看成是 established 这是为什么啊?

具体如下:


tcp      6 117 SYN_SENT src=192.168.1.5 dst=192.168.1.35 sport=1031 \
     dport=23 [UNREPLIED] src=192.168.1.35 dst=192.168.1.5 sport=23 \
     dport=1031 use=1
   
从上面的记录可以看出,SYN_SENT状态被设置了,这说明连接已经发出一个SYN包,但应答还没发送过来,这可从[UNREPLIED]标志看出。

tcp      6 57 SYN_RECV src=192.168.1.5 dst=192.168.1.35 sport=1031 \
     dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 \
     use=1
   
现在我们已经收到了相应的SYN/ACK包,状态也变为SYN_RECV,这说明最初发出的SYN包已正确传输,并且SYN/ACK包也到达了防火墙。 这就意味着在连接的两方都有数据传输,因此可以认为两个方向都有相应的回应。当然,这是假设的。

tcp      6 431999 ESTABLISHED src=192.168.1.5 dst=192.168.1.35 \
     sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 \
     sport=23 dport=1031 use=1
   
现在我们发出了三步握手的最后一个包,即ACK包,连接也就进入ESTABLISHED状态了。再传输几个数据包,连接就是[ASSURED]的了。
发表于 2007-4-11 19:50:59 | 显示全部楼层
不清楚你到底想问什么?
除了SYN(NEW)外,其他的后续包都是ESTABLISHED(除了RELATED和INVALID)的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-12 09:05:00 | 显示全部楼层
Post by orphen
tcp 6 117 SYN_SENT src=192.168.1.5 dst=192.168.1.35 sport=1031 \
dport=23 [UNREPLIED] src=192.168.1.35 dst=192.168.1.5 sport=23 \
dport=1031 use=1

从上面的记录可以看出,SYN_SENT状态被设置了,这说明连接已经发出一个SYN包,但应答还没发送过来,这可从[UNREPLIED]标志看出。

tcp 6 57 SYN_RECV src=192.168.1.5 dst=192.168.1.35 sport=1031 \
dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 \
use=1

现在我们已经收到了相应的SYN/ACK包,状态也变为SYN_RECV,这说明最初发出的SYN包已正确传输,并且SYN/ACK包也到达了防火墙。 这就意味着在连接的两方都有数据传输,因此可以认为两个方向都有相应的回应。当然,这是假设的。

tcp 6 431999 ESTABLISHED src=192.168.1.5 dst=192.168.1.35 \
sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 \
sport=23 dport=1031 use=1

现在我们发出了三步握手的最后一个包,即ACK包,连接也就进入ESTABLISHED状态了。再传输几个数据包,连接就是[ASSURED]的了


这是文章中的内容,正如你所说,它应该把收到对syn的确认包时,就认为是ESTABLISHED

但是在这里

Post by orphen
tcp 6 57 SYN_RECV src=192.168.1.5 dst=192.168.1.35 sport=1031 \
dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 \
use=1

现在我们已经收到了相应的SYN/ACK包,状态也变为SYN_RECV,这说明最初发出的SYN包已正确传输,并且SYN/ACK包也到达了防火墙。 这就意味着在连接的两方都有数据传输,因此可以认为两个方向都有相应的回应。当然,这是假设的。

tcp 6 431999 ESTABLISHED src=192.168.1.5 dst=192.168.1.35 \
sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 \
sport=23 dport=1031 use=1

现在我们发出了三步握手的最后一个包,即ACK包,连接也就进入ESTABLISHED状态了。


按照它的意思是在它收到确认后,它发出对确认的ack的时候连接才被认为是ESTABLISHED
也就是说
      client                            server
          (new) ______syn______>
        
               < _____syn/ack________

(etstablished) ____ack________>

但是本来应该在client收到syn/ack的时候就应该是 established 了

不知道这回说清楚没有?
回复 支持 反对

使用道具 举报

发表于 2007-4-12 18:05:23 | 显示全部楼层
我好奇一下,难道不应该这样?还是?
回复 支持 反对

使用道具 举报

发表于 2007-4-12 20:54:16 | 显示全部楼层
conntrack的4种状态NEW/ESTABLISHED/RELATED/INVALID,与Tcp的状态为不是一码事。
conntrack的4种状态是Netfilter在用户空间定义的。
所以我不认为
tcp 6 117 SYN_SENT src=192.168.1.5 dst=192.168.1.35 sport=1031 \
dport=23 [UNREPLIED] src=192.168.1.35 dst=192.168.1.5 sport=23 \
dport=1031 use=1

tcp 6 57 SYN_RECV src=192.168.1.5 dst=192.168.1.35 sport=1031 \
dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 \
use=1

tcp 6 431999 ESTABLISHED src=192.168.1.5 dst=192.168.1.35 \
sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 \
sport=23 dport=1031 use=1
中的SYN_SENT/SYN_RECV/ESTABLISHED与conntrack中定义的那4种状态有关。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-13 11:09:09 | 显示全部楼层
Post by orphen
conntrack的4种状态NEW/ESTABLISHED/RELATED/INVALID,与Tcp的状态为不是一码事。
conntrack的4种状态是Netfilter在用户空间定义的。
所以我不认为
中的SYN_SENT/SYN_RECV/ESTABLISHED与conntrack中定义的那4种状态有关。



哦,意思是我理解错误,你的意思是 netfilter是根据 内核中conntrack的状态来重新定义

那四种状态的,不是直接用conntrack的状位?
回复 支持 反对

使用道具 举报

发表于 2007-4-13 18:25:59 | 显示全部楼层
Post by yuanbo203
哦,意思是我理解错误,你的意思是 netfilter是根据 内核中conntrack的状态来重新定义

那四种状态的,不是直接用conntrack的状位?
当然不是,conntrack的4种状态(NEW,RELATED,ESTABLISHED,INVALID)不仅仅适用于TCP连接,也适用于UDP连接和ICMP连接。
而在/proc/net/ip_conntrack中的SYN_SENT,SYN_RECV显然仅适用于TCP连接。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-16 09:21:15 | 显示全部楼层
恩,可能是我表述不清,我是说,conntrack不是直接采用ip_conntrack中的状态位
而是根据里面的信息来重新定义该连接的NEW,RELATED,ESTABLISHED,INVALID
这四种状态,应该是这样的吧

谢谢以上各位朋友,谢谢
回复 支持 反对

使用道具 举报

发表于 2007-4-16 10:03:03 | 显示全部楼层
Post by yuanbo203
恩,可能是我表述不清,我是说,conntrack不是直接采用ip_conntrack中的状态位
而是根据里面的信息来重新定义该连接的NEW,RELATED,ESTABLISHED,INVALID
这四种状态,应该是这样的吧

谢谢以上各位朋友,谢谢
对,是这样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-16 15:56:05 | 显示全部楼层
谢谢了
明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表