关于某墙的端口封锁

2012-12-22 20:57:52 +08:00
 plan9
最近看到好多人发帖说到墙会封锁端口,个人感觉这个端口应该不是墙干的,而是你的服务商干的

因为好多服务商提供给你的都是一个局域网的ip,而公网ip是由好多人共有的,但是一个ip只能有6万多个端口,所以如果你长时间使用某个端口的,可能会被你的服务商切断连接,或者你所在的ip已经使用了超过单个ip最大端口数也会被切断连接

判断是否是这种原因的话很简单,过一段时间再连接同样的端口试试,如果可以连接的话应该就是这个问题

比如你用浏览器去下载一下大文件,经常出现下着下着就断了的情况,这种情况也有很大原因是你使用的是局域网ip

而对于最近这次墙的升级,个人感觉改用udp的openvpn应该会有一定的作用,不过这个我没试过,不知道是否准确,大家被封的vpn都是什么类型的?
11838 次点击
所在节点    奇思妙想
74 条回复
plan9
2012-12-24 14:57:38 +08:00
还给我定了性了。。。

我有半句说到并发问题吗?并发是跟文件描述符等系统资源有关的,这个我知道

http://lxr.linux.no/linux+v3.7/include/net/sock.h
http://lxr.linux.no/linux+v3.7/net/socket.c
看了下最新的linux内核socket实现,确实没有分配新的端口,只是建立了一个新的socket,并且新的socket的ip跟port都是跟原来的socket是一样的。分配新的端口这点的确是我说错了
clino
2012-12-24 15:38:15 +08:00
@plan9 你的问题和实际情况对应起来的时候当然就是并发了,否则如果一个 tcp 连接结束以后端口自然可以回收使用了
plan9
2012-12-24 15:49:23 +08:00
@clino
我之前的帖子说的是客户端连接服务端,客户端的端口会不够,因为客户端对每个socket都是会分配不同的端口的

而且端口只是内核里记录的一串数字而已,这跟并发又有什么关系?真正的通信是靠文件描述符的,就算每次accept分配不同端口,只要在内核里改变端口数,照样可以超过65535,当然这样做就违反tcp协议了。
clino
2012-12-24 16:09:12 +08:00
@plan9 "我之前的帖子说的是客户端连接服务端,客户端的端口会不够"这是你对于NAT最初提出的问题,这个你应该已经知道自己是错的了

我提到并发是因为你中间提到的"linux内核每次新建一个socket确实会分配一个新的端口"这句话->可以导出服务端不可能支持>64k连接,然后我找资料来证明是可以>64k的,用来证明你这句话是乱说的,你不要又扯到之前NAT相关的问题
plan9
2012-12-24 16:18:07 +08:00
@clino
我刚才的回复没有说到nat啊,我的意思是普通的socket客户端连接服务器的时候会分配一个新的端口

而且刚才不也说了就算服务端也分配新的端口,更改内核也可以达到高并发,你怎么就可以导出我的意思是服务端不可能支持>64k连接

而且我们这样在这里动不动就百万并发,估计高手看了都在笑呢,不讨论了,让这个话题打住把
clino
2012-12-24 16:35:57 +08:00
@plan9 "就算服务端也分配新的端口,更改内核也可以达到高并发" 看到这句我打不住了,不过这次只要重复一下,"你自己修改了内核参数就可以突破TCP协议的限制吗?"
binux
2012-12-24 16:38:13 +08:00
@plan9
@clino 在用反证法
socket连接,服务端分配新的端口 + 端口只有64k个 => 不可能支持>64k连接
服务器支持>64k连接是可能的 => 服务端分配新的端口 shi 错误的

这里和你的意思是什么没有关系
plan9
2012-12-24 17:06:50 +08:00
@clino @binux
为什么不可以???
端口是什么?难道端口真的是你pc上的一个口?端口只是inet_hashinfo中的一个变量而已,我生成一个socket,我自己加一个变量,不行么???

协议是什么?只是在一个规则而已,我不遵守或者我扩充一下难道不可以么???

ps 上面这些话小辫子更多,欢迎来抓
plan9
2012-12-24 17:13:11 +08:00
@clino
@binux
刚才淋了会儿雨,脾气有点冲。。。别生气。。。
clino
2012-12-24 17:17:50 +08:00
@plan9 可以,不过那就是你自家的私有协议了,和其他的支持TCP协议的设备就不能通讯了,为什么TCP端口会有这个限制?因为TCP HEADER 前面留给端口的只有16位

你要把它改成24位还是32位随便啦,不过别的设备就识别不了你的TCP包了
plan9
2012-12-24 17:28:32 +08:00
@clino
可以兼容的,比如连接80端口的时候,每次生成connected socket的时候多分配一个新的65535以上端口,这个新分配的端口什么也不干,就是为了说明这个端口大于tcp规定的端口,那么就算我每个socket都分配一个端口并发数也是可以超过65535的

可能这个例子也不恰当,我只是想通过这个例子说明并发只是跟系统资源有关的
binux
2012-12-24 17:31:31 +08:00
@plan9 端口是要告诉别人才能跟你通行的吧,你分配一个大于65535的端口,谁能和你通信呢?
plan9
2012-12-24 17:35:34 +08:00
@binux
谁都不通。。。所以我说这个例子不恰当。。。
test0077
2014-02-14 14:38:35 +08:00
忍不住说一句,你们会抓包吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX