为什么有 ESTABLISHED 数据包,而没有前面的 SYN_SENT 或 SYN_RECV

为什么有 ESTABLISHED 数据包,而没有前面的 SYN_SENT 或 SYN_RECV

我打开两个并排的 bash 窗口,一个用:netstat -anutpc | grep ESTABLISHED | grep kde另一个用netstat -anutpc | grep -e SYN_SENT -e SYN_RECV,然后我开始konqueror并访问 youtube。

我获得了我的计算机发送的两个 IP SYN_SENT(没有SYN_RECV),但是我在ESTABLISHED监控窗口中获得了一些在其他 bash 中没有对应 IP。

我只是想了解整个过程是如何工作的,您能解释一下为什么 ESTABLISHED 连接中有一些数据包从未被发起吗?我认为关闭 konqueror 超过 2 分钟应该会关闭与该软件相关的所有连接,因此如果我在 2 分钟后重新打开它,它应该会重新发送所有 SYN 数据包。

答案1

我猜握手只是发生太快以便您的监控注意到。该-c选项不真的连续;它所做的就是重复输出每一秒,事实上大多数 TCP 握手都比这快得多。

如果你真的想要一个居住进给,使用下列之一:

  • Linux连接跟踪事件——显示防火墙发现的新连接和被破坏的连接:

    conntrack -E -p tcp
    

    用于-p tcp仅过滤 TCP;否则也会显示 UDP。尽管 UDP 本身是无连接的,但会保留状态以用于防火墙或 NAT 目的。

  • 原始 TCP/IP 数据包 — 显示带有 SYN、FIN 或 RST 标志的 TCP 数据包:

    tcpdump -n -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0"
    
    tshark -n -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0"
    

    (您也可以只过滤"tcp"或完全删除过滤器。)

相关内容