调查nginx:忽略一些没有正确主机标头的请求 https://stackoverflow.com/questions/39647668/nginx-ignore-some-requests-without-proper-host-header让我想到实际上不可能close(2) http://mdoc.su/-/close.2操作系统没有通过发送正确终止底层 TCP 连接的 TCP 连接RST
(和/或FIN
)到另一端。
一种解决方法是使用类似tcpdrop(8) http://mdoc.su/-/tcpdrop.8,但是,可以看出usr.sbin/tcpdrop/tcpdrop.c在 OpenBSD 上 http://bxr.su/OpenBSD/usr.sbin/tcpdrop/tcpdrop.c and FreeBSD http://bxr.su/f/usr.sbin/tcpdrop/tcpdrop.c,它是通过基于 sysctl 的接口实现的,并且在 BSD 之外可能存在可移植性问题。 (事实上,看起来 OpenBSD 和 FreeBSD 之间甚至基于 sysctl 的实现也可能有很大的不同,需要一个移植层——OpenBSD 使用 http://bxr.su/OpenBSD/usr.sbin/tcpdrop/tcpdrop.c#tir the tcp_ident_mapping http://bxr.su/OpenBSD/sys/netinet/tcp_var.h#tcp_ident_mapping结构(随后包含两个sockaddr_storage
元素,加上一些其他信息),而FreeBSD http://bxr.su/f/usr.sbin/tcpdrop/tcpdrop.c#tcpdrop, 蜻蜓 http://bxr.su/d/usr.sbin/tcpdrop/tcpdrop.c#tcpdrop and NetBSD http://bxr.su/NetBSD/usr.sbin/tcpdrop/tcpdrop.c#sa使用两个数组sockaddr_storage
直接元素。) 事实证明,OpenBSD 的tcpdrop
似乎确实发送了R
数据包按照tcpdump(8) http://mdoc.su/o/tcpdump.8,并且可以通过查看来确认/sys/netinet/tcp_subr.c :: tcp_drop() http://bxr.su/OpenBSD/sys/netinet/tcp_subr.c#tcp_drop,这称为tcp_close()
最后(并且tcp_close()
已确认发送RSTSO的其他地方 //stackoverflow.com/a/23483487/1122270),所以,它似乎也不起作用。
如果我自己通过 C 建立连接,有没有办法随后在不向另一方确认的情况下将其删除,例如,不启动RST
?
如果我自己通过 C 建立连接,是否有办法随后在不向另一方确认的情况下删除它,例如,不启动 RST?
不会。即使有,如果对等方随后发送任何内容,也会通过 RST 进行答复。
注意:正常的 TCP 终止使用 FIN,而不是 RST。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)