工控网络基础入门篇之TCP 和 UDP、VPN

1、TCP 和 UDP

TCP 和 UDP 都是网络传输层的概念,是两种机制不同的传输协议,他们的主要区别是 TCP 是面向连接的,而 UDP 是无连接的,怎么理解呢?

比如你要从上海送一件东西到北京,你可以先打个电话过去通知北京那边的接收人,告诉他我现在要寄东西过去了,北京那边也会给你一个响应,告诉你他知道你要开始寄送了。打电话这个事情本身首先就在收发双方同步了一个寄东西的时间,如果打完电话后 3 天东西都没到,那么双方通过电话一确认就可以知道这中间出问题了,应该重新发送,如果收到了,北京那边可以给你一个回复告诉你收到了。

因为双方有电话这个连接的存在,就可以对寄送包裹的信息和结果作确认,所以几乎可以肯定的保证要寄送的东西一定会到达,现实世界有些东西丢了就没了,而数字世界数据丢了重发的成本是极低的。这种有电话这个沟通方式作为连接的传输协议,就类似 TCP。

而 UDP 就简单多了,事先不需要电话联系,直接写个地址就把东西送过去了,这中间如果东西丢了,双方也没有什么方法来确认,只能看快递公司的良心了。那你也许会问为什么要用 UDP 这种看起来靠天吃饭的协议?一个包裹一次电话你也许觉得没什么,如果一千个包裹呢?一万个呢?如果送一个包括要两天,而这个电话本身打通的时间都要 3 个小时呢,如果电话每分钟 5 美元话费呢?

所以,如果要寄送的东西并不是那么贵重必须保证准确到达,而快递公司毕竟也没有不靠谱到 10 个包丢 8 个的地步,这个电话连接过程就显得有些影响效率了。就好像一家卖袜子的淘宝店一天如果要发 1000 件货,一双袜子 1 块 9 毛 9 包邮。他才不会每件发货前都跟你打电话通知一下,到货了再跟你电话确认一下东西到了没;他只负责把货发出去,剩下送货和确认收货就不管了,真要管的话打个电话可能就要赔钱了。

这里我们归纳一下 TCP 和 UDP 的区别:

2、VPN

如果你经常玩海外服的游戏,你可能已经用过 VPN 了,很多游戏加速器什么的其本质就是 VPN,只不过一般他们会控制一下路由表 (算了,路由表以后再说吧),让你的机器只对游戏服务器走 VPN 线路,而对其他服务器的访问还是走你原来的线路,这其实已经类似一个 FreeRouter 了,只不过翻墙的范围不是你自己决定的。

如果你认为 VPN 就是一个代理那就错了,纯粹的 VPN 本身不能提供任何代理作用。VPN 的全名是 Virtual Private Network,就是虚拟私有网络。中间的实现原理我们就不管了,其结果就是: 在客户端建立了一个虚拟的网卡,这个虚拟的网卡和服务器的虚拟网卡之间建立了一条虚拟的专用通道。


图 1.8: VPN 等效结构

所有经过这个通道传输的数据,都会经过不同的 VPN 协议加密打包最后封装成可以被现实网络接收的数据格式,通过现实的网络接口传达到对方之后,再以之前建立连接时商量好的的 VPN 协议,对数据进行拆包和解密。那你能看出这个过程哪里像个代理吗? 当然没有。

纯粹的 VPN 配置,就是让你和服务器之间建立了一个连接,如果其他人再连进服务器来,你和其他人就类似处于同一个局域网内了。那么通过 VPN 远程访问办公室的服务器资源,或者实现翻墙,游戏代理是怎么实现的呢? 在 Linux 系统上,这个是借助系统防火墙的转发功能实现的。

VPN 建立之后相当于一个局域网,而 VPN 服务器就是这个局域网的网关,所有局域网客户端的数据都会先发送到服务器这个虚拟网关上。那么在防火墙规则里,就可以把所有来自这个虚拟局域网 IP 的数据,全部转发到一个现实的网卡上去,如果这个网卡连接了办公室的网络,那么你就可以通过 VPN 访问办公室网络了。

如果你还是觉得 VPN 的概念太玄幻,你就把 VPN 当做你计算机/路由上接入的另一条网线好了。