您的位置:首页 > 其它

关于《改进NAT》一文的勘误补充讨论大集合

2007-11-01 21:36 323 查看
我在CSNA发表的帖子,吸引了很多技术爱好者前来发表意见,很是感谢,在此予以集中整理!

=====

ISP通过检测高端口来鉴别客户使用NAT的可能性不大,一方面是2000/xp/2003开机时间长了,也会用到高端口;另一方面,现在的vista/2008一开始就用高端口,ISP用这个来鉴别岂不是自找麻烦?因此,目前还是以IPID等ip指纹为主来鉴别。

=====

虽然我们这类的isp没有封共享上网 但是楼主的帖子写的很生动具体 分析的也很透彻 是个好的NAT介绍
不过这个新的方法 为一个包在这一增一删上花费就大了点 主机多的话不知道吃不吃的消

=====

"这就是简单NAT的局限性!所以简单NAT要开放高端口(比如20000以上的端口),来为每一个Socket对建立一个外部端口,这样简单NAT的转发就不会出错。"
这并不存在因果关系,用低端口一样可以为每一个socks使用一个外部端口,之所以使用象45000以后的高端口完全因为端口定义的问题。

=====

“但是,设想极端的情况,如果1和2都用相同的源端口1025访问A的80,那么简单的NAT在接收到数据准备回复的时候,就会出错。简单的NAT会收到两个来自A服务器80,到本地1025端口的数据包,它不知道哪个应该返回给1,哪个给2。”

您前面已经说了,转换是通过4元组(源,目的地址,源,目的端口)实现的,即使同时发生了您上面说说的情况,NAT设备依然可以依靠不同的IP地址进行识别啊?

而且我认为,您的这种说法,貌似应用性不强哈~~~

=====

引用:
原帖由 lnan 于 29/10/2007 09:51 发表


您前面已经说了,转换是通过4元组(源,目的地址,源,目的端口)实现的,即使同时发生了您上面说说的情况,NAT设备依然可以依靠不同的IP地址进行识别啊?
绝对不可能,呵呵。至少以一个Socket对判断绝对不可能。

to:fnto,根据猜测isp应该是以IPID来判断的,但是至少我是没办法证实。
何谓“自找麻烦”,isp封路由本身就是/自找麻烦/,至于用什么手段,造成什么影响,isp的公关部门不是吃白饭的,我又不是没见识过,哈。您“端口定义”的理论我赞同,不过10000一下的端口还是有一些基础服务,所以要开得高点避免麻烦。

to: hhhlllttt
NAT的转发表,都是需要维护的,简单的NAT也是如此。如果不维护,一个链接一个端口,60000个端口我相信很快就会耗尽的。
维护的手段不同吧,这只是一个最初的想法,后期的技术还需要完善。

感谢朋友们与我分享你们的思路,在这儿能看到一些真实的意见。

ps:保留文章及其阐述技术之所有权,授权用途仅限于科学研究,不得用于商业、专利申请等,保留行使法律手段的权利。

=====

“但是,设想极端的情况,如果1和2都用相同的源端口1025访问A的80,那么简单的NAT在接收到数据准备回复的时候,就会出错。简单的NAT会收到两个来自A服务器80,到本地1025端口的数据包,它不知道哪个应该返回给1,哪个给2。”

1和2同时用1025访问A的80,路由器给A的返回端口应该不会都是1025。

=====

引用:
原帖由 chinarabbit 于 1/11/2007 13:53 发表


1和2同时用1025访问A的80,路由器给A的返回端口应该不会都是1025。
看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。

=====

引用:
原帖由 robur 于 2007-11-1 14:30 发表



看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。
如果路由不改变端口转发的话,又何来建立一个外部端口的说法呢?要是说都不改变端口转发,是否有高端口那就取决于客户机,和路由没什么关系了。真有不改端口的路由吗?

=====

引用:
原帖由 robur 于 2007-11-1 14:30 发表



看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。
从理论上讲,NAT在转发数据包时,肯定会对将源端口改为自己表中的一个相应端口,即我认为,出现robur所说的极端情况时,NAT设备也能够正常处理。所以,对于fnto所谈到的,简单NAT开放高端口(比如20000以上的端口),来为每一个Socket对建立一个外部端口,这样简单NAT的转发就不会出错,并不存在因果关系的观点,我比较赞同。

另外,据我所知,目前ISP对于共享的检测,有几种常见的方法。
1.一部分可以通过SNMP协议检测ADSL,有人做过这样的实验,在打开SNMP的情况下,通过SNMP管理软件连接上去,可以成功发现有多台机器在共享上网。但这个方法存在局限性,有些ADSL不支持SNMP协议,或者用户手工关闭了SNMP。
2.检测一个网络的并发连接,超过了设定的阈值,就认为存在共享(我曾经在一台机器上遇过到这样的情况,后来打电话去骂了一通ISP后解决),但这种方法在robur所在的ISP处行不通,可能各地ISP的方法存在一定差异。
3.检测数据包的IPID,这是我个人认为可能性最大的一种途径。由于NAT在转发时,不会对IP报头的数据包进行任何修改,而不同机器发出的数据包,其IPID可能相差较大,ISP的设备上可能存在一个阈值,即在多少的情况下,则认为存在共享上网。
设想,如果我们在NAT转发时,能将IPID进行统一规则的设定,问题不就可以解决了吗?(由于不懂研发,故胡乱说一通)。

有些人还说道,可以根据SESSION来判断,但我不太明白这个如何判断,期待中。

=====

现在的路由器使用的就是简单NAT,通过在外部开设不同的端口,来转发内网的数据,这是为了避免同一时间、同一目标IP、同一目标Port、同一源端口的数据报出现而造成错误。
所以在我前文中说的极端情况出现的时候,必然能避免。

但是我前文说的是,如果NAT不采用这种方法转发的话,会如何如何如何。。。望读者周知。
我只是在阐述一个能让NAT不改变外部源端口的转发技术,无他。准备就这个搞个项目。

另外IPID是一个极其严重但是却很弱智的问题,不知道路由厂商为何不考虑一下国情,做这个处理根本不需要几行代码。

=====

另外说下,不管楼上若干xd对本技术的意见如何,有任何技术上的质疑
我都很感谢能分享你们的观点!


做技术就是要精益求精,就是要不怕别人挑毛病,你说得更好,我就按你的做,呵呵

这很能说明CSNA是一个适合讨论技术问题的地方,能专心探讨技术问题才是我们需要的。
在别的地方仍出不成熟的技术帖总是要引来一大堆的挖苦讥讽,实在无奈。

=====
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: