windows如何处理没有相应套接字的原始TCP数据包?

时间:2015-12-29 03:54:40

标签: windows networking tcp raw-sockets

我在Windows操作系统下遇到了与TCP套接字相关的一些任务,因此我需要了解Windows如何处理TCP数据包的机制。出。如果我的理解错误,请纠正我:

当TCP客户端想要与某些IP:port建立TCP连接时使用WinSock,将调用winsock.connect(dest_IP,dest_Port)。然后

1)客户端上的WinSock库将创建TCP SYN数据包并将其发送到目标地址。

2)当客户端收到带有SYN-ACK数据包的其他对等方回复时,WinSock对象会触发一个名为“on_connect”的事件,供客户端应用程序从其上进行处理。

3)协议的最后一个ACK数据包以某种方式被发送以完成3次握手(通过WinSock库或OS本身 - 我不知道)。 Q1:谁发送了它?

我想知道当我使用winPCap制作原始SYN数据包并将其发送给对等体时会发生什么。如果dest-IP使用SYN-ACK数据包回复,则:

Q2:操作系统(Windows)如何在没有绑定相关winsock对象的情况下处理该SYN-ACK数据包?它会自动跟随3way握手形成TCP连接还是简单地丢弃数据包?

问题3:我可以以某种方式使用winPCap(在管理员权限下)来防止Windows发送某个数据包吗?

1 个答案:

答案 0 :(得分:2)

TCP是面向连接的协议,即(a)在对等体之间建立通信会话; (b)数据作为流发送,这意味着每个数据包的接收顺序与发送时的顺序相同。由于面向连接的属性,TCP是一种有状态协议。每个对等体基于发送和接收的消息维护TCP连接的状态。为了便于理解,让我们调用listen作为服务器的对等体和connect作为客户端的对等体。

在实施层面,用于维持状态的数据结构是传输控制块(TCB)。打开TCP套接字后,将立即创建TCB以保持其状态。此外,accept为服务器上的实际数据套接字创建新的TCB。下面是TCP的状态图,描述了如何在TCB中更改状态。有了这个,很明显当发送未经请求的控制数据包时会发生什么。

TCP State diagram

图:Tcp状态图。通过Commons获得CC BY-SA 3.0许可 - Src:wiki

首先,您对3次握手的理解是正确的。这在状态图中很容易验证,两个TCB最终都处于ESTABLISHED状态。到Q1时,由于创建了请求连接,客户端TCB将等待SYN + ACK。收到后,网络堆栈(在Linux或Windows上)会自动响应ACK。出于实际目的,您可以认为网络堆栈是操作系统的一部分。另请注意,几乎没有任何用途可以控制用户应用程序响应SYN + ACK。因此,它由堆栈处理。

要回答Q2,让我们再次追踪状态图。虽然您已经将其特定于WinSock,但对于未经请求的SYN的任何TCP实现都会发生相同的操作。在服务器TCB上,它假定SYN是合法的,因此用SYN + ACK响应。但是,客户端有两种可能的情况:(a)客户端上没有IP:port的TCB,(b)连接正在被拆除。

在情况(a)中,请注意客户端可以创建TCB但处于CLOSED状态。在此状态下接收SYN + ACK是一个非因果事件,其响应是发送RST(重置)消息,以主动断开连接。在一些实现中,没有消息被发送导致超时。 SYN + ACK在服务器TCB上超时,状态返回LISTEN。事实上,当客户端处于ESTABLISHED状态但突然收到未经请求的SYN + ACK时,会发生超时!更多此类案件将在article中处理;我已粘贴下面的相关内容。

Unsolicited ACK

案例(b)可以概括地说客户端TCB处于CLOSE状态之一。如果在客户端处于FIN_WAIT 1,FIN_WAIT 2或CLOSE_WAIT时收到SYN + ACK,则客户端以FIN(对于FIN_WAIT 1,FIN_WAIT 2)和FIN / ACK(对于CLOSE_WAIT)进行响应。如果它处于任何其他状态,则客户端不会响应并超时。

回答问题3:可以过滤掉连接数据包。通常,这是通过Linux中的ipfilter之类的防火墙或程序来完成的,其中可以描述某个规则以允许/禁止数据包。在Windows 7中,您可以设置filter lists,也可以使用Windows Filtering Platform APIS开发应用程序。您的问题是,如果您只能删除某个数据包,我必须说我没有尝试过这样做,但是从MSDN看起来您可以这样做。

其他有用的参考资料:

http://tangentsoft.net/wskfaq/articles/debugging-tcp.html

TCP/IP Illustrated by Stevenshttp://tangentsoft.net/wskfaq/reviews/tcpillus.html