刚看了下BT原理
因为公司一个程序被防火墙死活当成BT软件而封了,被误判可能是因为网络连接过程更BT内网穿透情况完全一致而导致网关给卡掉了。所以仔细研究了一下。看了几篇文章,说得都差不多。
最近一篇地址:http://www.ppcn.net/n1306c2.aspx
下面是自己的理解。
内网穿透的原理是
内网客户端 l,
外网客户端 n,
网关 nat,
内外网是无法直接连接的,因为IP范围不一样
但网关充当中间人就实现了这个功能
l 要连 n, 消息发到 nat 时 nat发现时要连到外网(内网就直接转发到内网地址即可), 就自己建立一个socket去连接 n, 从此以后 l 发过去的数据都会被修改包头中的本地地址为 nat的地址, 然后发出去 。
所以 n 实际上一直以为 是nat在给自己发东西。
n要给l发东西 , nat收到以后就会把包头中的目标地址改成内网地址,然后发给l
而l则实际上一直是在跟nat发东西。
然后BT穿透是指有时候两个不同的内网需要连接,这是办不到的。因为两个内网程序都不知道对方的外网地址,所以无法连接。
于是找一个外网客户端。
内网 la,lb
网关 nata,natb
外网 n
la 要连 lb。
la先连接n,lb也连接n。然后 la在n那里得到了lb的地址(而实际上就是natb的地址)。但是直接给natb发东西不行的。因为一个socket只能给一个socket发东西而这时natb是在跟n发东西的。
于是la给n说,你让lb连我吧!
然后n对lb说,你再开一个连接出来,于是n就有了lb的另一个地址AddreslbB,然后告诉la。la这下就可以连接lb了,因为AddresslbB是一个外网地址,也就是natb的地址。而natb是知道这个地址是要转发给lb的。所以……
这就水到渠成了。
所以大致分析公司那个被误判的程序是因为他连到了一个外网地址,网关已经为他代理了一条通道,他又要开一个新的连接同一个外网IP。可能是这样子网关以为他是在做内网穿透。给屏蔽了后面要建立的连接。
只是可能这样,要看代码才知道,代码才是最直接的解释。不过这个问题不是让我来解决。仅仅旁听后做的感想。呵呵
等他们解决问题后再看看是不是这个样子。