自连接,就是具有相同IP,相同端口的客户端连接上了服务端
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22!/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自连接详解内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复