今天是2015的第二天了, 心情有些不佳,遇到的狗屎问题更是心情不爽 !还好妈蛋的给解决了 !
问题提示说大不大,说小不小的 ~ TCP的自连接就是client和server bind的端口碰上了 !导致出现连接的异常。
用python来模拟TCP自连接的现象。
#coding:utf-8 import socket connected=False while (not connected): try: sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1) sock.connect(('127.0.0.1',11111)) connected=True except socket.error,(value,message): print message if not connected: print "reconnect"
结果:
[xiaorui@devops ~ ]netstat -an|grep 12345
tcp4 0 0 127.0.0.1.12345 127.0.0.1.12345 ESTABLISH
[xiaorui@devops ~ ]
其实以前预想过可能会出现这样的问题,但是也只是听过,没有碰到过。 还有就是以前对于本地化数据抽取的服务,都是放在分布式系统系统里,或者是放在另一个子进程用mmap,os.pipe进行数据传输。 前段时间为了统一化接口,还有就是应用层上有所作为,所以在socket上搞了数据来源识别的东西。那么问题来了,client和server端每秒钟要处理将近5000个数据,那么就很有可能遇见 源ip地址和端口,目的ip地址和端口一致的情况… …
根据日志里面限制,每隔几分钟就有一个socket 连接的TCP自连接的异常。
解决的有两种办法:
第一种是port的分配范围,第二种是把bind的端口给去除掉。
$ cat /proc/sys/net/ipv4/ip_local_port_range 12346 61000 $ cat /proc/sys/net/ipv4/ip_local_reserved_ports 8080,12345
博主,如果遇到自连接,server 需要咋处理呀