TCP 和 UDP 在 xx 上网中的应用

大兄弟在后面看着我上网,我面带笑容,一派和谐。

近两日在网络调试中涉及到设备网、内网和外网三个环境,需要定义到放行 ip 和端口,以及数据方向、TCP / UDP 的问题,做了一些学习笔记,顺便向外延伸一下,遂有此文。

内/外网

顾名思义,内网就可以简单理解为内部网络或者局域网。家庭、公司、机构内部的电脑组成的局域网通过网线连接到 Internet 上,原本我们只能访问局域网内的几台机器,现在能够访问的范围就扩展到了 Internet 上。这时候局域网就是内网,Internet 就是外网。比如,你所在的部门几台电脑组成了一个小局域网又连接到公司的大局域网上,那么也可以说公司的大局域网是外网,部门的小局域网是内网。类似于俄罗斯套娃,脑补下。👨🏻‍💻

内网可能是一个独立的局域网,通过其中的网关(网关就是连接两个网络的节点,说白了,就是有双重身份的电脑,既有局域网的 IP 地址,又有 Internet 的 IP 地址,两个 IP 地址分别捆绑在不同的网卡上)的代理访问外部网络,比如网吧都是这样实现的,其特征是:网吧内的电脑的 IP 都是局域网专用 IP,比如 192.168.xxx.xxx 或者 10.xxx.xxx.xxx,而这种 IP 在 Internet 上面是不会出现的。

所谓代理,就是你提要求,他来办事,类似于代购火车票。局域网的电脑想和外面联络,就把对方地址告诉服务器,也就是网关,网关以自己的身份和对方联络,同时把对方发回来的消息转送给局域网内的电脑。因此,对方看不见局域网内电脑的 IP,只会以为是网关那台电脑在与自己交流。网吧内的所有 QQ 都显示同样的 IP,现在你能理解为什么了吗?

简单来说,世界上最大的局域网也是加了这么一层网关,其放行策略和规则都是别人定义的,我们只得接受。

至于设备网,也可以理解为内网,不过它的组成就都是各种联网设备了,比如摄像头、气压监控等仪器。

IP / 端口

把 IP 地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个 IP 地址的端口可以有 65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从 0 到 65535(2^16-1)。我们知道,一台拥有 IP 地址的主机可以提供许多服务,比如 Web 服务、FTP 服务、SMTP 服务等,这些服务完全可以通过 1 个 IP 地址来实现。

那么,主机是怎样区分不同的网络服务呢?显然不能只靠 IP 地址,因为 IP 地址与网络服务的关系是一对多的关系。实际上是通过「IP 地址+端口号」来区分不同的服务的。需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台 WWW 服务器时,WWW 服务器使用「80」端口与你的电脑通信,但你的电脑则可能使用「1017」这样的端口。

有时候你的自建服务不能用了,很有可能不是 IP 被屏蔽了,而是提供服务的端口不能用了,我们只需要更新一下端口即可。只要不与常用端口冲突就行,不推荐使用 80/443 等网站用端口,也不推荐大多数脚本的默认端口 8388 。

单向 / 双向

这个机制可以简单理解为「只去不回」和「能去能回」两种。前者所有状态改变是可记录、可跟踪,易于溯源和维护;后者无论数据改变,或是用户操作,都能带来互相的变动,自动更新。

这块最能感知的就是服务商提供的单向流量还是双向流量计费模式,我在 Google 上查了下,发现了大部分服务商(如搬搬搬瓦)计费都是双向的,也就是说下载了一个 1GB 的文件,用掉了 2GB 的流量。反正每个月你也用不完。

TCP / UDP

TCP 是一种面向连接的保证可靠传输的协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个 TCP 连接,之后才能传输数据。TCP 提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。理想状态下,TCP 连接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开 TCP 连接的请求。

你只需要记住,TCP 在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此 TCP 传输的效率不如 UDP 高。

UDP 是一个无连接的简单的面向数据的运输层协议。UDP 不提供可靠性,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户端和服务器之间建立一个连接,且没有超时重发等机制,因此传输速度很快。

UDP 是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网路上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间已经内容的正确性都是不能被保证的。

TCP 是面向连接的,UDP 是无连接的。类比于打电话和发电报的关系。TCP 因为建立连接、释放连接、IP 分组校验排序等需要额外工作,速度较 UDP 慢许多。TCP 适合传输数据,UDP 适合流媒体。UDP 比 TCP 更容易穿越路由器防火墙。

而在最知名的 xx 上网应用中,TCP 代理是作为其核心存在的,是否开启 UDP 数据转发功能则会决定了是否可以用来代理游戏,这也是在某些场景中类似于 Line 这样的应用无法使用语音通话的原因。


对于 xx 应用的源码分析,找到三份十分值得阅读的文章,我是读不懂了,感兴趣的看看:

https://loggerhead.me/posts/shadowsocks-yuan-ma-fen-xi-tcp-dai-li.html

https://loggerhead.me/posts/shadowsocks-yuan-ma-fen-xi-tcp-dai-li.html

https://loggerhead.me/posts/shadowsocks-yuan-ma-fen-xi-udp-dai-li.html

多说几句

我之前一直听说很多外企可以自由访问网络,也有很多大型机构庞大的内部网络。比如,美国国防部内部世界上最大的内部网络 – AKO 。这个庞大的计算机网络连接着全球各地超过100万的美军官兵和数以千计的指挥机构、基地设施和保障机构,并存储有多达70T(1T=1000G)字节的信息。据说它从物理上就是和 Internet 断开的,但是各种黑客攻击行为还是层出不穷。

建议收藏

2010 年 4 月,维基解密在一个名为「附带谋杀”(Collateral Murder)的网站上公开了一段 2007 年 7 月 12 日美国军队在巴格达空袭时,美军在巴格达用阿帕契直升机射杀包括数名伊拉克记者在内的无辜平民的视频。同年 7 月,维基解密发表阿富汗战争日记,内容包含逾 76,900 份关于阿富汗战争文档,在此之前这些文档都未曾公开。同年 10 月,维基解密和主要商业媒体公司合作,又公开了逾 400,000 份文档,称为伊拉克战争纪录。这使得每起在伊拉克,以及跨越伊朗边界的死亡事件的地点,都可以在地图上找到。2011 年 4 月,维基解密开始公布与被关押在关塔那摩海湾拘留中心的囚犯有关的 779 份机密文档。

局域网满足了许多国家、机构的安全和保密需求,与之对应的公开互联网也日益中心化,已经形成了实际上的局域网,比如美国人关心的、中国人关心的、日本人关心的,谁掌握了互联网的核心应用,就可以进一步影响人类的思想和决定。百度再坏,也有存在下去的价值;谷歌再不做恶,也有自己的国界和立场。

最近的热点应该是澳大利亚和台湾,澳大利亚我没去过,也不了解,没有资格评论什么。台湾,我倒是交流学习过大半年,还是可以讲两句的。台湾人民对大陆人热情且友好,只要不讲政治,完全可以成为好朋友。我也在课堂上试图向当时的台湾同学解释过大陆的政治制度,他们听不懂,也不愿意去了解。当时的老师最后还问我:你们大陆那么多省市,是实行的联邦制吗?大家完全不在一个叙事逻辑里面。

自律才能自由,不是闲暇的时间多就轻松,而是规律的时间、稳定的节奏才能释放出精力。同样的,不是能够访问任何网站就是自由,而是拥有正确的三观和开放的心态才能期待人类相互理解理解的那一天。

👇 历史文章 👇

我们这一代人注定离群索居 |世界一定会越来越好| 什么信息源值得看?国内外资讯、文章类推荐 |我的大脑去哪里了?|快跑,不然会疯!|爱情问题

原文发表于微信公众号EBOOKSPLAN

发表评论

电子邮件地址不会被公开。 必填项已用*标注