本帖最后由 wwjjack 于 2015-7-22 18:55 编辑

写这个主要为了把之前的坑彻底填了,如果你真想解决搜不到服务器的问题,还是逐字逐句看吧实在不行再来加群18963825,提问的要求是邮件或者回复图文并茂300字写明尝试方法,有问必回,另外我只解决服务器无法被搜索到的问题。
一.mc传输数据的方式
1.局域网
       mc在局域网中搜索游戏的协议是udp协议,特点是没节操。过程是这样的:
       客户端向自己网段中所有的主机广播一枚udp包,内容是——"我正在找mc服务器,我的ip是XXX,我的游戏端口是XXX,请服务器速速回信。"网段中的服务器如果收到这个包会立马返还一个udp封包,告知客户端他的ip地址,客户端收到之后就能在界面中看到服务器还有延迟了(就是你看到的红黄绿)。之后双方再通过tcp协议开始游戏(下文会解释tcp协议)。


2.互联网
       mc在互联网中搜索游戏采用的是tcp协议,tcp俗称是三次握手协议,过程是客户端向已知的服务器发一个包,服务器收到之后向客户端返还一个包,至此2次握手已经完成,客户端通过2次封包的间隔时间得出了延迟。如果客户端需要登陆服务器,就会再发一个包给服务器,至此3次握手完成,开始传输数据,game start。


小知识广播udp包的方法是向地址255.255.255.255发送一枚udp包(这个地址由交换机或者路由器保管),路由器或者交换机收到这个包会之后广播给所有局域网里的主机。


浩方的原理就是将这个包截获,修改源地址为浩方的ip再发给游戏服务器,这样服务器就会将包返还给浩方浩方再将包代交给客户端。(浩方上几乎所有的游戏都是基于这个原理)


此章节有两点:所有访问都是由客户端发起,而服务器在收到来自客户端的第一个包之前什么都不会做。


二.现实情况分析
家家都有个路由器
路由器的功能是只利用一个公网ip让其下所有的设备都连接上网,一个ip总计可以开放65535个端口,如果6万多个端口全部被占用之后,路由器就无法给更多的电脑提供网络了。

路由器会分配旗下电脑的新的ip地址(比较常见的192.168.X.X)


互联网协议又称为对等协议,所以互联网的两台必须都在公网ip下才能连接(或称顶级ip),如果一台路由器下的电脑想要连接一个公网的服务器,他必须依托拥有公网ip的路由器来完成。路由器负责会转发所有的封包。所以成功连接关键是对等,且路由器完成转发的工作。

下面举个路由器工作原理的例子


假设路由器114.80.23.116下,现在有一台客户端想要连接一个互联网的mc服务器40.110.5.16,他发送了第一枚tcp包,包的源地址写的是192.168.X.X,目标地址是40.110.5.16经过路由器时将其源地址改写为114.80.23.116然后转发给服务器服务器收到之后回复一个包给路由路由转发给客户端,任务完成。路由器的任务就是反复涂写客户端发出封包的源地址。


但是路由器转发有个先决条件:第一个包必须由旗下客户端发出,路由器会记录下包的目标地址源地址的ip和端口,以便收到回复时能准确投递给客户端的正确端口,这个过程有个名词叫做打洞(NAT),打洞工作由客户端发出的第一个包完成。

你是否记得我前文说过,服务器在收到第一个包之前什么都不会做


所以一个开在路由器下的服务器是不会主动在路由器上打洞的,自然收不到任何来自客户端的封包的。为了解决这个阻碍,我们需要手动路由器上面打洞(通过端口映射,常见有upnp,dmz,虚拟服务器,再或就是利用浩方、花生壳这类软件)。手动打洞完成之后,服务器就能接受到客户端的封包了。


我来一一说明实现方法:
upnp:进入路由器打开upnp功能,具有upnp功能的服务器(傻瓜开服器,水桶插件都有这类的功能)会主动在路由器上打洞(NAT),告知路由将所有目标端口为25565的包都转发给它。


dmz:进入路由器设置页面,设置dmz映射的ip为服务器ip,这时路由器会将自己所有的端口映射到服务器电脑上,此时防火墙将有服务器电脑替代,这方法在安全上略显不足。


虚拟服务器:方法也是进入路由器,设置映射服务器的25565到路由的25565。ok,and enjoy。


浩方,和花生壳我就不说了。


三.常见问题
1.有些光纤猫自带拨号,所以他本身就具有路由器的功能,如果再接个路由,就是路由套路由这种情况, 解决方法无非就是一级一级向上端口映射,要么把猫改成桥接模式再由外接的路由器拨号或是电脑直接拨号。无论哪种方法都必须进光线猫,进光纤猫要超级密码,请自行baidu获得方法。(光这一步就足够你折腾个把小时了而且你必须做,不想做的话浩方是个好选择)

2.当腐竹还得清楚网络供应商允不允许开放端口25565,打个电话咨询一下供应商吧。

3.天朝上行的带宽低的可怜,所以直连并不那么美,在浩方面前就是渣渣。

4.教育网分很多种,有些具有独立的公网ip可以直接互联,更多的是只有ipv6互联方式,方法是
(一)首先电脑安装ipv6,win7自带ipv6,xp用户开始运行cmd窗口输入ipv6 install
(二)客户主机运行一个批处理.bat文件(服务器不需要),语句在下面粘帖(记得删除括号中的内容)

@echo off
pause
netsh interface portproxy add v4tov6 listenport=25565 connectaddress=2001:xxxx:xxxx::xxxx(服务器地址)

(三)接着游戏中的服务器地址输入127.0.0.1
(四)没有第四步了。。。。

(非常有用)四.一个较万能的测试你的网络是否可以使用傻瓜开服器(具有upnp功能的开服器)在官网下载一个utorrent或者emule,不需要进行任何设置,打开选项中一个链接的选项卡如图所示,你可以看到ut传输的端口,记下这个端口然后登录canyouseeme.org这个网站查询这个端口是否可见。如果显示为绿色的success,那么恭喜你,赶快去下载一个开服器吧,如果默认的25565端口不能用,不妨试试之前测试成功的ut的端口。反之如果是红色的error,那么很遗憾,你只能尝试别的方法了。(ps 请反复随机端口多试几次,所以请祈祷吧)






QQ图片20150722184519.jpg (69.88 KB, 下载次数: 38)

QQ图片20150722184519.jpg