轻解计算机网络-学习网络的一点心得
大家好,我是风筝。
重学计算机网络已经有一段时间了,终于在离开大学多年后又重新拾起了一部分,时至今日已略有小成,并且写了一系列的文章了,会慢慢 发出来。
我反正在学习的过程中是画了好多张图,这些图会放到后续的文章中,有兴趣一起学习的同学记得关注加星标呀,这样就能第一时间接到文章推送了。
上大学的时候就想好好学习网络,梦想着以后成为一名网管。后来发现计算机网络还真是不太好学,非常非常抽象,发现有很多概念好像怎么学都学不明白。这才知道,原来更适合我的网吧管理员,而不是网络管理员。而写代码就不一样了,没那么抽象,而且写出来东西马上能看到成果,写一个方法一运行,马上能输出结果;写一个网页、一段样式,马上就能看到界面的变化。人的大脑最喜欢这种快速反馈了,于是觉得写代码比学网络有意思,这才走上了程序员这条路。
后来工作了,相信大家和我有同感,虽然写的是代码,但是处处离不开网络:
- 普通接口用的是 HTTP\HTTPS,HTTP 处于整个网络的最顶层应用层;
- 有一些 RPC 使用的非 HTTP 协议,例如 Dubbo 的 Hessian 直接包装的 TCP 协议;
- 还有一些场景要直接使用 TCP,例如支持前端的 websocket;
- 非常流行的高性能网络框架 Netty ;
- 使用 Dokcer 容器做开发测试的时候;
- 甚至于使用VmVare 虚拟机的时候,也要了解桥接模式、NAT、仅主机模式的区别;
就 算对网络和底层完全不了解,也可以正常写代码,但是,当我们有一天发不满足于只写增删改查,或者在一些外部力量的驱动下,如果不理解网络,那必将寸步难行。
只写增删改查做咸鱼有什么区别,我们是那种甘心做咸鱼的人吗?对于想在技术上更上一层,想要做架构师的同学,网络是我们必须拿下的阵地。
在做了一段时间的咸鱼之后,我还是决定要翻一下身。否则网络这东西总会像一团迷雾一样,时不时飘来挡住视线,一直像一块面纱一样,遮住了系统真正的面容。
为什么要学习网络知识
可以出去吹牛啊
当碰到一个网络问题,别人都解决不了,你解决了,你说骄傲不,你说自豪不。
当然,就是说说而已,做人还是要低调,内心就算翻出了花儿,表面上也要淡定的表示这是基本操作。
加深对应用框架和架构的理解
现在还能找出哪个系统、哪个应用不依赖于网络吗,好像还真 的不太好找。
举两个例子:
Netty 框架
Netty 可以说是当前最火的网络编程框架,如果你们的项目需要高性能、高可靠的服务端和客户端交互,最好的选择就是 Netty。比如即时沟通功能、比如游戏服务器、比如websocket的服务器端实现。
Netty 是基于TCP\UDP 实现的,其中有很大部分都是对这两个协议的封装,在理解网络(尤其是TCP)和不理解网络的情况下学习 Netty 是两种完全不同的体验,前者事半功倍,后者事倍功半。
而且现在很多框架都集成了 Netty,比如 Dubbo RPC、RocketMQ、Hadoop等,连 Spring Boot 也已经内置了 Netty 模式。更好的理解 Netty ,才能更好的理解这些框架,怎么才能更好的理解 Netty 呢,当然是要对网络有很好的理解啦。
微服务框架
微服务是由多台服务器组成的,这么多的服务器要联动起来,和稳定的网络结构是分不开的。一个复杂的微服务架构,有网关、服务、CDN、还有各种旁路的中间件。网关还分网络网关和应用网关,网关就涉及到负载均衡,负载均衡有4层负载均衡,还有7层负载均衡,各种各样的概念,哪一个都离不开网络。
有可能还用了 docker、k8s,这就更复杂了,容器内部网络、集群网络、外部网络,不了解这些怎么能更好的理解架构。