TCP 数据包无法到达 OSI 第 7 层

TCP 数据包无法到达 OSI 第 7 层

我遇到的情况是,客户端通过telnet(或netcat) 建立 TCP 连接以连接到 Linux 服务器。然后,服务器必须发回包含一些文本信息的横幅...

在每个主机上,我启动了 Tcpdump 来捕获流量。

首先,两台机器进行传统的TCP握手,然后服务器向客户端发送一个包含banner的PUSH包,并从客户端收到一个ACK。

奇怪的是,客户端从未收到横幅(telnet/中没有显示nc任何内容),客户端启动的 tcpdump 没有捕获来自服务器的任何 PUSH 数据包,也没有捕获到指向服务器的 ACK。而服务器端的 tcpdump 捕获了所有数据包。

我这样做了几次,但每次都没有任何变化,似乎不是 tcpdump 的问题。

我想知道这是否是由防火墙引起的,因为两台机器之间有一个防火墙(但是服务器如何接收 ACK!?)

除此之外,客户端收到 PUSH 数据包时,有可能不是将其发送到 OSI 第 7 层 ( telnet),而是出于某种原因在第 4 层 (TCP) 停止它并发回 ACK?这是否与客户端的一些应用程序过滤有关?

注意:两台机器都使用 Linux From Scratch 和不要使用 iptables。我不知道他们使用哪种 TCP 实现。

编辑:

以下是通信的架构:

服务器视图:

    Server........................................................................client

    <-----------------------------------SYN (Ip ID=3333)---------------------------

    ----------------------------------SYN-ACK (IP ID=4444)--------------------------->

    <---------------------------------ACK (Ip ID=2222)-------------------------------

    -----------------------------PUSH (data) (100 bytes, IP ID=4445)------------------->

    <----------------------------ACK (Ip ID=2223, ack-num=101)------------------------

客户端视图:

Server........................................................................client

<---------------------------------SYN (Ip ID=3333)-----------------------------

---------------------------------SYN-ACK (IP ID=4444)--------------------------->

<--------------------------------ACK (Ip ID=3334)-----------------------------

在所有数据包中,除 IP 数据包标识符、Ack 号和序列号外,所有内容都匹配。

答案1

问题不在于第 7 层,而在于网络层。

假设您的tcpdump客户端工作正常,客户端不会从服务器接收数据,因此毫无疑问它是否可以传递数据。

你已经知道中间有防火墙,可以尝试不带防火墙。有防火墙可以做很多事情。如果客户端没有收到数据包,因此没有发送 ACK,但服务器收到了 ACK,那么它一定来自防火墙。

相关内容