网络编程释疑之:TCP半开连接的处理

  • 时间:
  • 浏览:0

怎么里能解决?

yaocoder

参考书籍:

那此是半开连接?

本文转自永远的大家博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/160 9358如需转载请自行联系原作者

《UNIX网络编程:卷1》

着实,什么都 选项着实还要解决大家前面遇到的TCP半开连接的问题报告 ,否则默认两小时间隔探测的实时性是都有差了些呢?当然,大家还要通过修改内核参数改小时间间隔,完美了吧?否则还要注意的是大多数内核是基于整个内核维护那此时间参数的,而都有基于每个套接字维护的,否则机会把无活动周期从两小时改为(比如)2分钟,那将影响到该主机上所有开启了此选项的套接字。我我让你大家都有会我让你承担服务器端的什么都 不选者性吧。另外,心跳除了说明应用守护程序还活着(守护程序指在,网络畅通),更重要的是表明应用守护程序能正常工作。而SO_KEEPALIVE由操作系统负责探查,即便是守护程序死锁或有什么都异常,操作系统也会正常收发TCP keepalive消息,而对方无法得知什么都 异常。

熟悉基于TCP协议进行linux高性能、高并发服务端编程的大家肯定应该知道每个文件描述符及其所占的资源对并发量的影响。在什么都 7*24甚至*365不间断运行的服务器上,好几个 描述符被浪费,好几个 被浪费...机会被浪费的多了,那还何谈高并发,高性能。除去文件描述被正常占用的情形外,是那此原因了大家可用的文件描述符非要 少呢?

当客户端与服务器建立起正常的TCP连接后,机会客户主机掉线(网线断开)、电源掉电、或系统崩溃,服务器守护程序将永远不需要知道(通过大家常用的select,epoll监测非要断开或错误事件),机会不主动解决或重启系统说说对于服务端来说会时不时维持着什么都 连接,任凭服务端守护程序怎么里能望穿秋水,也永远再等非要客户端的任何宣布。什么都 情形什么都 我半开连接,浪费了服务器端可用的文件描述符。

没关系,着实大家还要在应用层模拟SO_KEEPALIVE的法律最好的办法 ,用心跳包来模拟保活探测分节。机会服务器通常要承担成千上万的并发连接,什么都 肯定是由客户端在应用层进行心跳来模拟保活探测分节,客户端多次收非要服务器的响应时可终止此TCP连接,而服务端可监测客户端的心跳包,若在一定时间间隔内未收到任何来自客户端的心跳包则还要终止此TCP连接,那我都有效解决了TCP半开连接的情形。

《Linux多守护程序服务端编程》

熟悉套接字通用选项的大家一定机会有了想法。TCP套接字都有有个保持存活选项SO_KEEPALIVE嘛,机会在好几个 小时之内在该套接字的任何好几个 方向上都没数据交换,TCP就自动给对端发送好几个 保持存活探测分节,机会此TCP探测分节的响应为RST,说明对端机会崩溃且机会重新启动,该套接字的待解决错误被置为ECONNRESET,套接字有你这名则被关闭。机会非要 对此TCP探测分节的任何响应,该套接字的解决错误就被置为ETIMEOUT,套接字有你这名则被关闭。