HTTP Keep Alive持续时间与TCP超时持续时间之间的关系

Sur*_*mar 26 tcp http keep-alive

我试图了解TCP/IP和HTTP超时值之间的关系.这两个超时值是不同还是相同?大多数Web服务器允许用户通过某些配置设置HTTP Keep Alive超时值.Web服务器如何使用此值?这个值是否只是在底层的TCP/IP套接字上设置,即HTTP Keep Alive超时和TCP/IP保持活动超时相同?或者他们的待遇不同?

我的理解是(可能不正确):Web服务器使用底层TCP套接字上的默认超时(即无限期),无论配置的HTTP Keep Alive超时如何,都会创建一个计算器线程,该线程将指定的HTTP超时间隔倒计时.当Worker线程达到零时,它会关闭连接.

编辑: 我的问题是关于两个超时持续时间之间的关系或差异,即当HTTP保持活动超时持续时间和Web服务器使用的套接字(SO_TIMEOUT)上的超时不同时会发生什么?我是否应该担心这两个是否相同?

Mar*_*ham 30

它们是两个独立的机制; 这个名字是巧合.

HTTP keep-alive(也称为持久连接)使TCP套接字保持打开状态,以便在不设置新连接的情况下进行另一个请求.

TCP keep-alive是一种定期检查,以确保连接仍然正常并正常运行.它通常用于确保NAT盒(例如,DSL路由器)不会"忘记"内部和外部ip /端口之间的映射.

  • 马克,你好,谢谢你的回答.我想我没有正确地说出这个问题.我的问题是关于两个超时持续时间之间的关系或差异,即当HTTP保持活动超时持续时间和Web服务器使用的套接字(SO_TIMEOUT)上的超时不同时会发生什么?我是否应该担心这两个是否相同?就我原来的问题而言,我认为你的答案是正确的.谢谢 (2认同)

sup*_*cat 30

除非发送实际数据,否则打开的TCP套接字不需要双方之间的任何通信(让我们称之为Alice和Bob).如果Alice收到了她发送给Bob的所有数据的确认,那么她就无法区分以下情况:

  1. Bob已被拔掉,或者Alice无法访问.
  2. Bob已重新启动,或以其他方式忘记了他与Alice建立的打开的TCP套接字.
  3. 鲍勃与爱丽丝有联系,并知道他有一个开放的连接,但没有他想说的任何内容.

如果Alice暂时没有收到Bob的消息并想要区分上述条件,她可以重新发送她的最后一个数据字节,包裹在一个合适的TCP帧中,以便可以识别为重传,基本上假装她没有听到确认.如果Bob被拔掉,即使她在几秒钟内反复发送数据包,她也不会再听到任何消息.如果Bob重新启动或忘记了连接,他将立即回复说连接无效.如果Bob对连接感到满意并且无话可说,他将回复确认转发.

超时表示Alice在发送需要回复的数据包时愿意等待响应的时间.Keepalive时间表示在重新传输最后一位数据并要求确认之前她应该允许多长时间失效.如果Bob失踪,Keepalive和Timeout值的总和将指示Alice收到她的最后一位数据与她判定Bob已经死亡之间的最坏情况时间.