社区
C#
帖子详情
TCP服务端口怎么突然之间不接受任何新连接?
cnwolfs
2012-04-21 10:06:23
TCP服务端口怎么突然之间不接受任何新连接?
查了已经连接的可以正常通讯,新连接连不上来,已经连接的连接数就1个。
为啥?
我用Telnet到那个端口直接告诉我连不上。
TcpSvr使用的是这个:
http://hi.baidu.com/%D4%C2%CA%CF%C8%CB/blog/item/22d358545bf2825a574e00c4.html
...全文
874
21
打赏
收藏
TCP服务端口怎么突然之间不接受任何新连接?
TCP服务端口怎么突然之间不接受任何新连接? 查了已经连接的可以正常通讯,新连接连不上来,已经连接的连接数就1个。 为啥? 我用Telnet到那个端口直接告诉我连不上。 TcpSvr使用的是这个: http://hi.baidu.com/%D4%C2%CA%CF%C8%CB/blog/item/22d358545bf2825a574e00c4.html
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cnwolfs
2012-05-04
打赏
举报
回复
问题已经确定了,是半连接导致的,之所以导致产生半连接,是因为有某些终端处在WiFi的信号很差的环境下工作,而XP只允许10半连接个连接。
段传涛
2012-04-22
打赏
举报
回复
我上次 遇到这个问题 是因为端口 被限制了。
取消限制就ok了。
我是在亚马逊购买的 EC2 购买的 虚拟空间 供国外的人访问。
cnwolfs
2012-04-22
打赏
举报
回复
2、防止SYN洪水攻击 (ps: SYN http://baike.baidu.com/view/488528.htm)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值,名为SynAttackProtect,值为2
新建EnablePMTUDiscovery REG_DWORD 0
新建NoNameReleaseOnDemand REG_DWORD 1
新建EnableDeadGWDetect REG_DWORD 0
新建KeepAliveTime REG_DWORD 300,000
新建PerformRouterDiscovery REG_DWORD 0
新建EnableICMPRedirects REG_DWORD 03. 禁止响应ICMP路由通告报文
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\interface
新建DWORD值,名为PerformRouterDiscovery 值为0
查了好多网站,都提到Windows 2000和Windows 2003注册表中有这些键值,结果我在注册表中都没找到这些键值,到底怎么回事?
查了一篇网文介绍,Win 2000 Server的半连接数是80个,Win2000 Advanced server为400,是否可以猜想Win 2003企业版会有超过400?
Linux、Unix半连接的超时为3分钟,Windows也差不多是3分钟吧,我的客户端尝试重新连接的概率是5秒,连接超时设定为3秒,也就是重复连接最短时间是8秒,这些参数是可以配置的,不过用户一般都用默认值,没有重新配置。若是400个半连接的话,最坏情况下,可以允许17台终端有这个问题,从WiFi连接质量上来说,发生这样问题的概率可能会有20%(从直觉上判断),也就是可以有85台终端的使用量。希望今天不会有半连接问题发生了。
彻底解决的办法还是能够找到由服务程序根据特定规则清除半连接的做法,退而求其次是缩短半连接超时时间和提高半连接数量。最好是服务器更牛逼点。
qldsrx
2012-04-22
打赏
举报
回复
你应该自己断点调试,没有报错的话,说明是某个地方阻塞或者直接运行到了return造成的,只能自己调试才行。
yzlyboy
2012-04-22
打赏
举报
回复
报啥错误啊,是timeout,还http://topic.csdn.net/u/20120421/10/ce509e5a-13a5-4a2c-8536-131045994cb1.html?91300#r_achor是只能建立一次连接,还是权限的问题呢
cnwolfs
2012-04-22
打赏
举报
回复
[Quote=引用 13 楼 的回复:]
http://topic.csdn.net/u/20120421/19/109b47c9-60d5-40c5-992b-8c7fd271f9d9.html?seed=1589787366&r=78330700#r_78330700
[/Quote]
感觉跑题了不少,我并不是不会写TCP 啥的,是现在出了莫名奇妙的问题,在异步方式中,我用到的这个Class应该是功能最完整的Class了。网络上搜索,不出其左右。
现在遇到的问题,我归结为半连接。
如何排除半连接的产生,或者如何通过程序消除半连接,或者缩小半连接的超时时间应该是解决的办法。
当然,今天我将会用一台服务器来测试,估计半连接产生的情况会减少。
rayyu1989
2012-04-22
打赏
举报
回复
http://topic.csdn.net/u/20120421/19/109b47c9-60d5-40c5-992b-8c7fd271f9d9.html?seed=1589787366&r=78330700#r_78330700
rayyu1989
2012-04-22
打赏
举报
回复
既然你说没有人写的能出其右 又怎么会出现半连接bug呢
cmd netstat -an 看看你监听的端口 是不是用一段时间 被挤爆了
如果是 那就是关闭连接的操作没处理好
如果不是 那就不鸡到了
[Quote=引用 14 楼 的回复:]
引用 13 楼 的回复:
http://topic.csdn.net/u/20120421/19/109b47c9-60d5-40c5-992b-8c7fd271f9d9.html?seed=1589787366&r=78330700#r_78330700
感觉跑题了不少,我并不是不会写TCP 啥的,是现在出了莫名奇妙的问题,在异步方式中,我用到的这个Class……
[/Quote]
足球中国
2012-04-22
打赏
举报
回复
楼上的不错。可能是原因之一。
anzhiqiang_touzi
2012-04-21
打赏
举报
回复
服务器有特殊限制吗,限制端口连接数
以专业开发人员为伍
2012-04-21
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
端口连接数限制是1000,应该是没超吧,当前活跃的连接数是1,。。。。。
[/Quote]
超什么指标呢?
.net封装得非常好的TcpListener类,其连接数是int.MaxValue。
.net开发人员不傻,而且这个类肯定经过大量工程测试,这说明他们测试结果为这个数作为默认值比较好。
以专业开发人员为伍
2012-04-21
打赏
举报
回复
就是没有执行 Accept(或者BeginAccept)语句呗。
看看你自己的程序逻辑,以及日志。
服务端与客户端不同,服务器端在实际正式上线时其try...catch是静默的(顶多记录下日志)。有时候你先处理Receicve,然后才继续下一个Accept,结果自己的代码原因会造成:因为Receive异常了可能就没有执行下面的Accept。
cnwolfs
2012-04-21
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
服务器有特殊限制吗,限制端口连接数
[/Quote]
端口连接数限制是1000,应该是没超吧,当前活跃的连接数是1,这是我在程序中对每个连接计数得来的数字,就是增加一个连接加1,断开一个连接减一,客户端连接不上会重连,有一个可能性是连接的时候没成功,也就是没触发mTcpSvr_ClientConn事件的情况下没有计数。
bdmh
2012-04-21
打赏
举报
回复
服务器有特殊限制吗,限制端口连接数
cnwolfs
2012-04-21
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
http://blog.csdn.net/fengyarongaa/article/details/6631953
[/Quote]
你的意思是这个例程不会拒绝服务吗?
ycproc
2012-04-21
打赏
举报
回复
http://blog.csdn.net/fengyarongaa/article/details/6631953
orochiheart
2012-04-21
打赏
举报
回复
关注!
参考:
http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html?31411
http://topic.csdn.net/u/20080619/08/dcef3fe2-f95b-4918-8edb-36d48a3d0528.html?15470
rayyu1989
2012-04-21
打赏
举报
回复
Accept 的 异步回调里 马上再重新调用Accept托管
然后才开始处理接收这次accept里的连接数据
cnwolfs
2012-04-21
打赏
举报
回复
socket系统调用listen只被tcp 服务器使用,他做两件事:
1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.
2.第二个参数制定了内核为此套接口排队的最大连接个数。
关于第二个参数,对于给定的监听套接口,内核要维护两个队列,未链接队列和已连接队列,根据tcp 三路握手过程中三个分节来分隔这两个队列。
服务器处于listen状态时收到客户端syn 分节(connect)时在未完成队列中创建一个新的条目,然后用三路握手的第二个分节即服务器的syn 响应及对客户端syn的ack,此条目在第三个分节到达前(客户端对服务器syn的ack)一直保留在未完成连接队列中,如果三路握手完成,该条目将从未完成连接队列搬到已完成连接队列尾部。当进程调用accept时,从已完成队列中的头部取出一个条目给进程,当已完成队列为空时进程将睡眠,直到有条目在已完成连接队列中才唤醒。
backlog被规定为两个队列总和的最大值,大多数实现默认值为5,但在高并发web服务器中此值显然不够,lighttpd中此值达到128*8.需要设置此值更大一些的原因是未完成连接队列的长度可能因为客户端SYN的到达及等待三路握手第三个分节的到达延时而增大。
当客户端发起connect而导致发送syn分节给服务器端握手,如果这时两个队列都是满的,tcp就忽略此分节,并且不发RST,这将导致客户端TCP重发SYN(超时),服务器端忽略syn而不发RST响应的原因是如果发RST ,客户端connect将立即返回错误,强制客户端进程处理这种情况,而不是让tcp的正常重传机制来处理。实际上所有源自Berkeley的实现都是忽略新的SYN分节。
还有,backlog为0 时在linux上表明润许不受限制的连接数,这是一个缺陷,因为它可能会导致SYN Flooding(拒绝服务型攻击), 下一篇文章会简单解释。
cnwolfs
2012-04-21
打赏
举报
回复
我现在怀疑是连接池中存在有尚未完成连接的请求,因此导致了新连接被拒绝,请问如何解决这个问题。
怀疑的原因是这样的,我的客户端有心跳处理,现在配成每5秒一个心跳包,如果检测到心跳包没有正常返回,就会断开与服务端的连接创建新连接。另外,据之前一个拒绝连接的测试现象,拒绝服务之前我的电脑有过一小段时间的繁忙期,那时候我在工具栏点右键都不响应,然后就发生了拒绝的现象。另外,客户端程序是WiFi,有可能信号较差,据以前看到过的网文,也提到这种情况下有可能TCP握手协议没有完全完成。也会导致连接池中存在尚未完成连接的请求。
当前测试服务器是我的笔记本,配置对目前来说已经较低了,T7300双核+4G内存,跑WinXP,32位,也就内存就3G使用,查看状态,已用内存2G上下,已经设置成无虚拟内存的模式。跑了一个VS2010,进入Debug模式调试着,一个VS2008,做WinCE的开发测试,一个WinCE虚拟机。还有其它若干应用程序。
计划从他们公司搬台服务器来测试。当前服务器正跑着一个中间件,业务正在运行,因此无法用这台服务器测试,要建立另外的端口来测试有点小麻烦。
计算机网络 传输层
TCP
和UDP协议
Re: 计算机网络 传输层
TCP
和UDP协议# 传输层协议
TCP
和 UDP 的应用场景 要发送的内容多,需要将发送的内容分成多个数据包发送(
TCP
) 要发送的内容少,一个数据包就能发送全部内容(UDP)# 传输层协议和应用层协议
之间
的关系 传输层协议加一个端
口
号来标识一个应用层协议, 展示了传输层协议和应用层协议
之间
的关系# 使用
TCP
/IP筛选实现网络安全 防火墙设置与端
口
# UDP协议特点和报文格式UDP是无
连接
的:即发送数据之前不需要建立
连接
UDP使用尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的
连接
状态表#
TCP
协议特点和报文格式先
连接
后释放;点对点;可靠传输;全双工通信;面向数据流七项标记位停止等待协议与改进的停止等待协议滑动窗
口
技术详解:确认Seq与选择确认SACK 超时重传时间:查询计算与自动调整 流量控制功能:点对点的流量控制 拥塞控制:相对整体网络环境而言;慢开始算法和拥塞避免算法 改进的拥塞控制:快重传和快恢复 三次握手建立
TCP
连接
,四次挥手释放
连接
。#
TCP
协议面临的攻击 SYN 攻击:捏造的源地址; LAND攻击:自己就是源地址# 通过抓包工具,查看以上报文格式# 习题详解
服务器未能释放
tcp
连接
,
TCP
连接
的建立和释放
本文主要探究
tcp
连接
建立和释放过程中的状态演变
TCP
连接
的建立三次握手其实这张图已经说得很清楚了,客户端应用程序调用connect导致
TCP
发送一个SYN报文段,服务器端有一个监听套接字,该监听套接字收到SYN后,在待
连接
套接字队列中插入一项,然后发送SYN和对客户端确认的ACK(注意到ACK序列号总是和目前等待接收的序列号相同,此图中客户端发送的数据仅仅只有SYN 1个字节,所以在SYN的序列...
TCP
协议-
TCP
连接
管理
一、
TCP
概述
TCP
协议是
TCP
/IP 协议族中一个非常重要的协议。它是一种面向
连接
、提供可靠服务、基于字节流的传输层通信协议。
TCP
(Transmission Control Protocol,传输控制协议)。 1.1
TCP
协议的特点 (1)
TCP
是面向
连接
的传输层协议。这就是说,通信双方在使用
TCP
协议进行通信之前,必须先建立
TCP
连接
。在通信结束后,必须释放已经建立的
TCP
连接
。这就好比打电话,通话前要先拨号建立
连接
,通话结束后要挂机释放
连接
。 (2)
TCP
是点对点(一对一)
TCP
的
连接
管理
简述
TCP
是面向
连接
的协议,
TCP
把
连接
作为最基本的抽象。每一条
TCP
连接
唯一地被通信两端的两个端点所确定。那么,
TCP
连接
的端点是什么呢?
TCP
连接
的端点又叫套接字(socket),根据
TCP
协议的规定,端
口
号拼接到IP地址即构成了套接字,即 套接字 socket = (IP地址:端
口
号) 这样一来,
TCP
连接
可以以下式子表示
TCP
连接
::= {socket1, socket2} =
TCP
连接
简述
TCP
是面向
连接
的协议,
TCP
把
连接
作为最基本的抽象。每一条
TCP
连接
唯一地被通信两端的两个端点所确定。那么,
TCP
连接
的端点是什么呢?
TCP
连接
的端点又叫套接字(socket),根据
TCP
协议的规定,端
口
号拼接到IP地址即构成了套接字,即套接字 socket = (IP地址:端
口
号)这样一来,
TCP
连接
可以以下式子表示
TCP
连接
::= {socket1, socket2} = {(IP1:...
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章