我是靠谱客的博主 天真秋天,最近开发中收集的这篇文章主要介绍TCP自连接详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自连接,就是具有相同IP,相同端口的客户端连接上了服务端

èæ¬æ§è¡ç»æ

netstatæ¥ç端å£ç¶æ

!/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自连接详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部