概述
自连接,就是具有相同IP,相同端口的客户端连接上了服务端
!/usr/bin/python
import errno
import socket
import sys
import time
if len(sys.argv) < 2:
print "must input port."
print "port should in net.ipv4.ip_local_port_range"
exit()
port = int(sys.argv[1])
for i in range(65536):
try:
sock = socket.create_connection(("127.0.0.1", port))
print "connected", sock.getsockname(), sock.getpeername()
time.sleep(60*60) # to netstat port
except socket.error, e:
if e.errno != errno.ECONNREFUSED:
print e.errno, errno.ECONNREFUSED
break
2. 原因
2.1 连接的时候,没有指定本地端口(local port),Linux系统会在 net.ipv4.ip_local_port_range 指定的端口范围内分配一个未被占用的端口。比如选择了端口N,如果N端口拒绝连接,就会发送包含RST标志的TCP报文段,本地
2.2 TCP协议支持同时打开
(RFC 793 TRANSMISSION CONTROL PROTOCOL 3.4. Establishing a connection)
上面python脚本过程说明: python self_connection.py 33000
ip 都是127.0.0.1
(1) 内核选择端口N与port: 33000 连接, 33000端口未打开,内核给 N端口返回 RST 标示的TCP报文段。
(2) 选择端口N+1,N+2,…, 直到 33000
33000 ----------->(SYN) 33000
33000 (ACK)<---------- 33000
33000 端口 ENSTABLISHED
自连接
最后
以上就是天真秋天为你收集整理的TCP自连接详解的全部内容,希望文章能够帮你解决TCP自连接详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复