【问题标题】:Dropping TCP connections, is this normal?断开 TCP 连接,这正常吗?
【发布时间】:2010-12-27 20:10:17
【问题描述】:

我已经在我的本地机器上设置了这个简单的脚本:

#!/usr/bin/python

import socket
from datetime import datetime

print "Connecting to test server"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("mydomain.com", 9090))

start = datetime.now()

totalbytes = 0

try:
    while True:
        data = s.recv(512)
        totalbytes += len(data)
        print "Got %d bytes of data" % (len(data))
except Exception as e: 
    print "ERROR", e
    pass

end = datetime.now()

print "Lasted for", end - start, "with a total of", totalbytes/1000/1000, "megabytes"

这个脚本在我的本地服务器上(在同一个网络上运行,但请注意我这里是通过外部 IP 地址)

#!/usr/bin/python

import socket
from datetime import datetime

print "Listening for test client"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.2.100", 9090))
s.listen(5)

start = datetime.now()

try:
    while True:
        clientsocket, address = s.accept()

        # Start sending infinite data until I can't
        while True:
            clientsocket.send("*" * 511 + "+")
except:
    pass

end = datetime.now()

print "This lasted", end - start

关于我的问题:几分钟后连接断开。例如,上次运行此脚本时服务器刚刚停止并报告:“This lasted 0:02:27.517715”,在此之前客户端可以接收数据约 7 分钟,然后断开连接。现在,我在我的日子里没有做过很多网络编程,所以我不知道期望他们保持联系的时间比这更长是否合理?一个活动 TCP 连接可以存在多久?像这样的断开连接有多常见?

我进行这些测试是为了测试我自己的本地网络,因为我遇到了 MSN 每小时注销一次、下载在几分钟后停止以及其他奇怪行为的问题。我的问题不是如何解决这个问题,而是我的测试结果是否合理,或者指出我的网络存在问题?

【问题讨论】:

    标签: networking tcp connection connectivity


    【解决方案1】:

    一个 TCP 连接可以保持多年*并传递无限量的数据。当客户端和服务器断开连接时,您从客户端和服务器那里得到什么错误?这将是追查问题的第一步。

    [*] 理论上我会无限期地说,但我只是个人观察到“年”。

    【讨论】:

    • 我得到的错误(这次来自服务器)是 [Errno 104] Connection reset by peer。我很确定这与我的网络或糟糕的互联网有关。
    • 如果数据正常流动并且服务器突然得到RST,那么我怀疑涉及某种防火墙。如果 RST 来自实际客户端,则意味着 TCP 堆栈对连接一无所知,这不应该在多分钟超时之前发生。要获得“快速”RST 需要一些中间代理专门注入它。
    • 有可以看到这个的程序吗?客户端是没有防火墙的mac,服务器运行的是没有防火墙的ubuntu服务器。这留下了路由器(还有什么?调制解调器?),但我(据说是贝尔金,所以你永远不知道)禁用了路由器上的防火墙。调制解调器有防火墙吗? ISP 可以在这里做点什么吗?
    • tcpdumpetherfindwireshark 是可以显示所有数据包的程序。如果您怀疑中间有问题,您可能需要在链接的两侧进行跟踪。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2013-02-10
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多