写在前面
是否经常遇到你打开一个app或者网页进不去,别人都是好的,然后有人说,你换个wifi试试、用手机移动网络再试试、重启手机再试试等等,当然还有一个比较小众的:你挂个代理试试。诸如此类并不是搪塞你,而是确有其事。
一、什么是网络
简单来说网络是一个数据传输载体。
如果我们人是数据,大马路就是传输载体。出行方式(公交车、自驾、地铁、飞机)就等于传输协议。
以下场景基于tcp/ip协议
当我们要出门时,总会考虑以下要素(缺一不可):
- 出发点
=
本机网络ip
- 目的地
=
最终要访问的网络ip
- 出发时间
=
本机发起访问的时间 - 到达时间
=
本机获得访问结果的时间(减去出发时间的差值通常叫它网络延时
) - 出行方式
=
使用的协议,如(http、tcp、udp
等) - 出行人
=
传输的数据
当理清楚了这些对应关系后就可以出发了,然而在出行的过程中非常容易发生以下问题:
- 出行的人太多了,挤来挤去导致跟你一起出行的人走丢了或者你捡到了一个小朋友
=
网络丢包、粘包- 感觉网络很卡的时候
- 交通工具未按时到达(晚点等)
=
网络延迟很大(ms值高或者不稳定)- 感觉打游戏总是慢半拍
- 交通工具坏了、要走的路交通管制过不去了、景区关门了
=
访问失败- 进不去app或者网页了
以上是正常情况,下面说说不正常的情况。
场景一:
小明要大晚上骑自行车去10公里外的同学家玩,小明老爸听别人说晚上出门不安全,于是不同意小明去,做了一些限制他去同学家的事情,比如:把小明反锁在家、自行车上锁、轮胎放气等等行为。小明最终还是去不了。
这种情况就对应本机设备
或者家里路由器&光猫
这一段的访问规则,阻止你访问某些网站或者ip地址。跟小明老爸
讲晚上出门不安全这事,并且手把手指导他上锁、放气递工具的人,你们应该知道是谁了吧(深信服、奇安信看到了给我打钱哈,虽然粉丝不多,但是广告费还是得有啊)
场景二:
小明要大晚上骑自行车去10公里外的同学家玩,小明老爸没听人说啥,同意他去了,但是半路上出来个人,不由分说把小明给打了一顿,还把他车抢走了,最终小明还是没去成同学家。
这种情况对应sip运营商
上级规则限制你访问某些网站或者ip地址,当然还有别的原因。总之,千万不要觉得你马路上走没人看见。咱们都是裸奔的,各个都很吸引眼球,只是裸奔的人太多,一时间看不过来罢了。对于有伤大雅的裸奔行为,打你一顿很合理把。
场景三:
小明要大晚上骑自行车去10公里外的同学家玩,小明老爸没听人说啥,同意他去了,一路上都很顺利心情愉悦,但是发现同学搬家了,还好小明发现了同学给他留了纸条说搬去山的那边了。可是小明发现山上有老虎,没法办原路返回了。
这种场景对应sip线路出海,访问的网站或者ip地址在大内网之外。
一定要遵纪守法,咱们只讨论第一种场景。后面2种场景,按国家政策走,该备案备案,该申请申请就行了。
二、手机是怎么访问一个地址的
我画了个草图来简单表达手机是怎么访问网络的。看不懂直接跳过把
三、鸿雁传书
对于有大佬加持的小明老爸
阻挠的情况,访问不了的网络怎么办呢。这时候有个偷梁换柱的方案来了。
场景一
小明要大晚上骑自行车去10公里外的同学家玩,小明老爸说出去打断腿。小明就喊邻居来他家,实际上是帮小明传纸条给他同学,哎,就是鸿雁传书的故事,这个发散性思维要跟上,小明邻居就是鸿雁。小明老爸看他邻居进进出出,小明反正一直在家,判断为无事发生。
这就是网络代理的实现场景,小明邻居充当了小明的消息(数据)传输代理。
场景二
接场景一,小明邻居去给小明同学送信,但是他俩不认识啊,这时候小明邻居穿上小明的衣服,伪装的跟小明几乎一样,实际上在家里的小明不知道他同学伪装成自己的样子在送信。小明同学一眼就认定了这个人是小明,于是送信成功。
这种就是网络代理中的透明代理。
ok,到这了就基本成了,下面说说怎么实现一个网络代理。
四、月老工作
本质上代理是将本地设备的访问通过中间人进行传递,曲线救国。
需要有以下要求:
- 这个中间人(小明邻居)一定是三方(本地设备
=
小明、公司网管=
大佬加持的小明老爸、访问目标=
小明同学)都觉得是可信任的。 - 中间人(小明邻居)和本地设备(小明)要约定一个靠谱的通讯方式来,让公司网管(大佬加持的小明老爸)觉得他俩接头是很正常的事情。
技术方案
- 小明邻居:使用
nginx stream 模块
,或者haproxy(这个不能udp,要注意)
、iptables
等工具,直接配置对应的listener
。 - 最基本的通讯方式:tcp、tcp+ssl、http、http+ssl、stocks、stocks+ssl等
比如我要看微博,但是公司把微博禁了。你只需要把微博的域名全部记下来,然后搞一个能够在公司网络下访问到微博的服务器,将前面记下的域名地址全部配置上转发代理(要根据后缀路由转发,静态动态都要转发)或者callback
,同时将本地电脑的Hosts文件
中增加前面记下来的微博域名,并且ip指向到这台服务器。做完这些之后电脑就可以正常刷微博了。
当然现在这种还不安全容易被公司网管发现,因为你的电脑和服务器现在是当着网管面在传递消息,胆子很肥,容易被打断腿,所以需要把传输的数据加密,目的只是让网管不知道你们在聊什么,加密方法也很多,比如ssl
,千万别搞个很另类的加密方式,网管一看这种加密不常见就给打断腿了,浑水摸鱼才是王道。
这是最简单也最好实现的一种方式了,偷偷关注我就行了,千万别说是跟着我学的。不然我就只能删库跑路了。
这是我这么多年写的第一篇网络类的文章,审核好几遍了应该没问题吧。
评论区