Tag: tcp rst

删除打开的TCP连接而不发送RST

查看nginx:忽略一些没有正确主机头的请求让我觉得实际上不可能通过向另一端发送RST (和/或FIN )而没有OS正确终止底层TCP连接来close(2) TCP连接。 一种解决方法是使用类似tcpdrop(8)东西,但是,从OpenBSD和FreeBSD 上的usr.sbin/tcpdrop/tcpdrop.c可以看出,它是通过基于sysctl的接口实现的,并且可能有外部的可移植性问题BSD系统。 (实际上,看起来甚至基于sysctl的实现在OpenBSD和FreeBSD之间可能不同,需要一个移植层 – OpenBSD使用 tcp_ident_mapping结构(随后,它包含两个sockaddr_storage元素,加上一些其他信息),而FreeBSD , DragonFly和NetBSD直接使用两个sockaddr_storage元素的数组。)事实certificate,OpenBSD的tcpdrop似乎确实根据tcpdump(8)发送了R数据包,并且可以通过查看/sys/netinet/tcp_subr.c :: tcp_drop()来确认/sys/netinet/tcp_subr.c :: tcp_drop() ,最后调用tcp_close() (并确认 tcp_close() 在其他地方发送RST ),因此,似乎它甚至都不起作用。 如果我自己通过C建立连接,有没有办法随后丢弃它而不确认另一方,例如,没有启动RST ?