做网站首页,做网站还要什么认证吗,wordpress路由插件开发,网站实名认证需要什么资料这个场景中#xff0c;客户端的 IP、服务端 IP、目的端口并没有变化#xff0c;所以这个问题关键要看客户端发送的 SYN 报文中的源端口是否和上一次连接的源端口相同。 客户端的 SYN 报文里的端口号与历史连接不相同 如果客户端恢复后发送的 SYN 报文中的源端口号跟上一次连接… 这个场景中客户端的 IP、服务端 IP、目的端口并没有变化所以这个问题关键要看客户端发送的 SYN 报文中的源端口是否和上一次连接的源端口相同。 客户端的 SYN 报文里的端口号与历史连接不相同 如果客户端恢复后发送的 SYN 报文中的源端口号跟上一次连接的源端口号不一样此时服务端会认为是新的连接要建立于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢 如果服务端发送了数据包给客户端由于客户端的连接已经被关闭了此时客户的内核就会回 RST 报文服务端收到后就会释放连接。 如果服务端一直没有发送数据包给客户端在超过一段时间后TCP 保活机制就会启动检测到客户端没有存活后接着服务端就会释放掉该连接。 客户端的 SYN 报文里的端口号与历史连接相同 处于 Established 状态的服务端收到了这个 SYN 报文会做什么处理呢 处于 Established 状态的服务端如果收到了客户端的 SYN 报文注意此时的 SYN 报文其实是乱序的因为 SYN 报文的初始化序列号其实是一个随机数会回复一个携带了正确序列号和确认号的 ACK 报文这个 ACK 被称之为 Challenge ACK。 接着客户端收到这个 Challenge ACK发现确认号ack num并不是自己期望收到的于是就会回 RST 报文服务端收到后就会释放掉该连接 如何关闭一个TCP连接 第一反应是「杀掉进程」不就行了吗 是的这个是最粗暴的方式杀掉客户端进程和服务端进程影响的范围会有所不同 在客户端杀掉进程的话就会发送 FIN 报文来断开这个客户端进程与服务端建立的所有 TCP 连接这种方式影响范围只有这个客户端进程所建立的连接而其他客户端或进程不会受影响。 而在服务端杀掉进程影响就大了此时所有的 TCP 连接都会被关闭服务端无法继续提供访问服务。 伪造一个四元组相同的 RST 报文不就行了 要伪造一个能关闭 TCP 连接的 RST 报文必须同时满足「四元组相同」和「序列号是对方期望的」这两个条件。 伪造符合预期的序列号是比较困难。 killcx的工具 我们可以伪造一个四元组相同的 SYN 报文来拿到“合法”的序列号 会回复一个 Challenge ACK这个 ACK 报文里的「确认号」正好是服务端下一次想要接收的序列号说白了就是可以通过这一步拿到服务端下一次预期接收的序列号。 然后用这个确认号作为 RST 报文的序列号发送给服务端此时服务端会认为这个 RST 报文里的序列号是合法的于是就会释放连接 killcx 的工具使用方式也很简单如果在服务端执行 killcx 工具只需指明客户端的 IP 和端口号如果在客户端执行 killcx 工具则就指明服务端的 IP 和端口号。 tcpkill的工具 两个工具都是通过伪造 RST 报文来关闭指定的 TCP 连接但是它们拿到正确的序列号的实现方式是不同的。 tcpkill 工具是在双方进行 TCP 通信时拿到对方下一次期望收到的序列号然后将序列号填充到伪造的 RST 报文并将其发送给对方达到关闭 TCP 连接的效果。 killcx 工具是主动发送一个 SYN 报文对方收到后会回复一个携带了正确序列号和确认号的 ACK 报文这个 ACK 被称之为 Challenge ACK这时就可以拿到对方下一次期望收到的序列号然后将序列号填充到伪造的 RST 报文并将其发送给对方达到关闭 TCP 连接的效果。 tcpkill 工具属于被动获取就是在双方进行 TCP 通信的时候才能获取到正确的序列号很显然这种方式无法关闭非活跃的 TCP 连接只能用于关闭活跃的 TCP 连接。因为如果这条 TCP 连接一直没有任何数据传输则就永远获取不到正确的序列号。 killcx 工具则是属于主动获取它是主动发送一个 SYN 报文通过对方回复的 Challenge ACK 来获取正确的序列号所以这种方式无论 TCP 连接是否活跃都可以关闭。 tcpkill 工具给服务端和客户端都发送了伪造的 RST 报文从而达到关闭一条 TCP 连接的效果。 tcpkill 只适合关闭活跃的 TCP 连接不适合用来关闭非活跃的 TCP 连接。