我有一个客户端和应用程序服务器,它们相互交换证书并建立安全的 TLS 连接。
在这种连接结束时,应用程序数据传输完毕后,客户端向服务器发送一个FIN数据包,服务器则回复一个TLSV1.2加密的警报数据包。
这是客户端的进一步确认,客户端这次发送了一个 RST 数据包。您能帮我解释一下这种行为吗?我正在尝试确定这些端点之间的流量基线,然后将这些注释作为输入。
从此处的链接, https://serverfault.com/questions/854692/client-sends-rst-after-fin-ack看起来套接字在关闭之前没有关闭,这归结于糟糕的编程。我很好奇想确认是否是这种情况。
答案1
根据TCP 指南终止时,通常的事件顺序是:
- ---> 结束
- <--- 确认
- <---等待套接字的应用程序确认连接关闭
- <--- 鳍
- ---> 确认
对于 FIN/ACK 数据包,步骤 2 和步骤 3 通常同时进行。这是一场优美而庄严的舞蹈。
然而,TCP 还有另一种方法来断开连接,而且比这种繁琐的过程更快。RST
向它扔一个包。这是一种粗鲁的做法,但 HTTP 可以解决这个问题,因为数据传输有两个流程,如果第二个流程完成(服务器响应),整个事情就完成了。对于众所周知速度很慢的 HTTP 连接(也就是说,当浏览器处理 50 多个资产请求时,经常有一个人不停地等待页面渲染),小速度调整是按时完成所有事情的方法。
在这种情况下,185
主持人试图表现得友好一些,但172
主持人却我受够了,走开。
作为网络安全管理员,此类流量中数据包的普遍存在RST
表明存在网络异常。这是以优化为名滥用协议的一个领域。这是目前 HTTP 流量的预期流量。