咖啡小栈
 

随笔:从Minecraft远程联机视角出发,初窥计算机网络

先讲几个基本概念:

“我”:我假想的一个操作服务器的咸鱼人

小茗同学:我假想的一个使用客户机的稻草人

咳咳,下面是真的基本概念:

应用层模式:客户机-服务器模式
客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机

传输层端口:注册端口25565、动态端口xxxxx
如果把IP地址比作一间房子 ,端口就是出入这间房子的门

网络层协议:IPv4(二进制32位)
IP地址,换成十进制我们就都很熟悉了,比如116.27.103.181
【这个IP是我从南+论坛上随便抽选的,不是我的真实位置】

NAT协议:传输层和网络层兼有
原先,每台互联网中的计算机都有一个静态公网IP,但随着接入的计算机越来越多,当下IPv4地址陷入了紧张,2^32-1个IP地址已不足以满足日益增长的上网需求,进而产生了NAT协议
NAT协议下,通过路由器,局域网中每台计算机被分配一个私网IP,如192.168.0.102
而局域网下的每台计算机都共享同一个公网IP,一定程度上缓解了IPv4紧张
其公网IP是动态的、定期变化,这样在不接入网络时,这个公网IP就可以挪为他用
上述内容都会成为建立服务器的障碍,这在后续都会提到

局域网内(内网)联机:
1.Minecraft多人游戏界面:(功能1)

小茗同学的客户机监听一个固定的UDP端口25565(MC的注册端口)【多人游戏界面,所见的“Pinging……”过程】

某个时刻,我建立了该端口下的虚拟主机,它向整个局域网所有的机器(小茗同学、Karozz、MikoKuro的计算机)的25565端口广播“我建立了主机”的信息,客户机得知虚拟主机建立【多人游戏界面,玩家看到亮绿的服务器条目】

客户机通过TCP协议向主机请求连接【正在连接】

主机答应此连接,并开始向客户机发送数据【登入中】

2.直接连接:(功能2)

我在“开启局域网联机”的时候,左下角聊天栏中会显示一个动态端口,如51136

我的虚拟主机一直监听这个动态端口51136

此时客户机也可以通过“直接连接”的形式,输入地址:
主机的IPv4地址:动态端口
向主机请求连接【正在连接】

同样地,主机答应连接并发送数据【登入中】

3.两者的不同之处:

前者是“昭告天下”,全体广播,客户机先收到信号

后者是“守株待兔”,我线下告知小茗同学:我主机的IP地址和临时端口,小茗同学再操作客户机手动连接,服务器先收到请求接入的信号

这个过程中有两类端口:
a.注册端口:
从1024到49151,分配给用户进程或应用程序。这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序。
b.动态端口:
从49152到65535。它一般不固定分配某种服务,而是动态分配。


互联网际(外网)联机:
功能1中,考虑到局域网内计算机较少,因此广播易于进行

但当面对广大的因特网,显然广播难以进行,所以我不会选择主动向外广播,而是“守株待兔”,等待客户机自己选择加入

这个原理和功能2是相同的,采用同样的原理,服务端程序诞生了

因而客户机的连接方式是相同的,也是手动输入地址+端口

然而,NAT协议使得我们需要增加几步操作

现在产生了两个问题:
1.我局域网内所有计算机都共享同一个公网IP,小茗同学向这个公网IP发送连接请求时,网关不知道小茗同学要连接哪台计算机,因而请求的数据包被丢弃。简而言之,即使是知道了对方的IP地址和端口号,“一厢情愿”地将数据包发送过去,对方也是接收不到的。那些不请自来的数据包将会被丢弃。

2.我的公网IP是动态的,这就好比,假设小茗同学要长期和我保持电话联系,但我的电话号码却一天变一次,那这种连接就是不稳定的。

针对上述问题,解决方法分别如下:
1.NAT穿透(内网穿透)
突破了NAT设备的屏蔽,辅助穿透服务器在其间牵线搭桥
通过端口映射,公网IP直接定位到某一台特定的主机,进而实现了内网穿透,连接得以形成
映射中设置的端口号是25565
内网穿透其实有一定的危险性,相当于直接把我的计算机暴露于公网,不过可以通过防火墙限制端口访问

2.DDNS(动态域名解析)
把动态公网IP映射到一个固定的域名上
每隔一段时间扫描一次,并把变化传递到域名服务器,让域名也时时刻刻和动态IP绑定
这个域名就是玩家在“添加服务器”时输入的“服务器地址”,如coffeageno.vicp.cc:60721
小茗同学之所以能在最后大桥上畅快奔跑,都得益于NAT穿透+DDNS的组合拳
最后讲一下我们可以使用哪些工具来实现NAT-DDNS:
1.natapp(强烈推荐,价格和效果可看具体套餐)
2.花生壳(包年,很贵,免费级流量只有1~2GB,适合临时偶尔联机)
3.nat123(几乎免费,但带宽很少,适合1~3人的联机)

附录:咖啡之梦服务器可爱的玩家们
0
Ailon_Island
Alice
araneus
Botzeoz
bsnow
coffeageno
creep
DNA
hsy
Isuera
Karozz_jr
kinpi
laow
Lich_King
loui
lqy
MikoKuro
Nixe
Panta
Patan
qiyi
Qubaobao
Rin
small_qq
steve
suenara
w
xmtx
yeah___
zguandi
ZHI_XUE









文章分类: 诗文
分享到: