菜鸟今天又来完成所说的诺言,也希望大家督促,在今天的学习中,菜鸟有了新的认知,我会将上一篇中理解不完善的一些地方进行补充,学习本就是不断打破自己的认知,如果思考都不做,何来的知识的积累

数据结构与算法之美

入门二知识点:
1、数据结构服务于算法;算法也是作用在特定的数据结构
2、算法学习核心:复杂度分析
3、20个最基础最常用的数据结构和算法
10个数据结构:数组,队列,栈,堆,链表,散列表,二叉树,跳表,图,树;
10个算法:递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,动态规划,回溯算法,字符串匹配算法
(知识是一点一点积累,我也很想快点知道这些具体的东西,但是先确定好框架,知道要学什么,再来学习也只不过是:磨刀不误砍柴工)

趣谈网络原理

第一板块二知识点:
1、网络上跑的包都是完整的,可以有下层没上层,但不可能有上层没下层
2、二层、三层设备:这些设备处理的也是完整的包,只是程序不同,二层设备解析MAC层,看看是转发、丢弃还是自己留着,三层设备就是处理二层设备处理之后的包,然后解析IP层,看看是留下,丢弃还是转发
3、不能比喻为层层封装的比喻都是不恰当的,自己想一个贴切的例子:MAC(IP(TCP(HTTP(正文))))像俄罗斯套娃一样,越高层越在里面
4、评论精华+自己总结:
包在到达目的地址(国家)时,是不知道目标的MAC地址的,而是大吼谁的IP是XXXX,然后目标IP返回一个MAC地址,所以包在传递过程中MAC会变,但目的IP不会;如果是本地通信,则可以自己在自己的网络范围大吼目标IP,或者甚至可以直接靠MAC直接通信

这里对上一篇的 9、 进行修改扩充:
9、比喻:城关和城关之间是一个国家(网关的MAC地址,里面可以有很多的pc[相当于局域网],所以可以想象为国家),想去下一个国家,在该国家内得使用该国家MAC地址,知道下一个城关的MAC地址,去下一个城关(及修改包中的源MAC地址[现在在的城]和目标MAC地址[下一个去的城])
这个结论大家可以参考该博客,有其它见解,望指点https://blog.csdn.net/qq_36501981/article/details/81038641

最后配上极客时间的图文解析(大家有理解得不一样的,欢迎评论):
极客时间 自我提升第二天
讲解:
当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来,处理一把。的网口配置了混杂模式,凡是经过的,全部拿进来。

拿进来以后,就要交给一段程序来处理。于是,你调用process_layer2(buffer)。当然,这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。那这个函数是干什么的呢?从 Buffer 中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。

假设你发现这个包的 MAC 地址和你的相符,那说明就是发给你的,于是需要调用process_layer3(buffer)。这个时候,Buffer 里面往往就没有二层的头了,因为已经在上一个函数的处理过程中拿掉了,或者将开始的偏移量移动了一下。在这个函数里面,摘掉三层的头,看看到底是发送给自己的,还是希望自己转发出去的。

如何判断呢?如果 IP 地址不是自己的,那就应该转发出去;如果 IP 地址是自己的,那就是发给自己的。根据 IP 头里面的标示,拿掉三层的头,进行下一层的处理,到底是调用process_tcp(buffer) 呢,还是调用 process_udp(buffer) 呢?

假设这个地址是 TCP 的,则会调用process_tcp(buffer)。这时候,Buffer 里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复
包;如果是一个正常的数据包,就需要交给上层了。交给谁呢?是不是有process_http(buffer) 函数呢?

没有的,如果你是一个网络包处理程序,你不需要有process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系。

浏览器自然是解析 HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个 HTTP 请求了,于是使用端口号,将请求发给了你。

你应该调用send_tcp(buffer)。不用说,Buffer 里面就是 HTTP 请求的内容。这个函数里面加一个 TCP 的头,记录下源端口号。浏览器会给你目的端口号,一般为 80 端口。

然后调send_layer3(buffer)。Buffer 里面已经有了 HTTP 的头和内容,以及 TCP 的头。在这个函数里面加一个 IP 的头,记录下源 IP 的地址和目标 IP 的地址。

然后调用send_layer2(buffer)。Buffer 里面已经有了 HTTP 的头和内容、TCP 的头,以及 IP 的头。这个函数里面要加一下 MAC 的头,记录下源 MAC 地址,得到的就是本机器的 MAC 地址和目标的 MAC 地址。不过,这个还要看当前知道不知道,知道就直接加上;不知道的话,就要通过一定的协议处理过程,找到 MAC 地址。反正要填一个,不能空着。

万事俱备,只要 Buffer 里面的内容完整,就可以从网口发出去了,你作为一个程序的任务就算告一段落了。

重学前端

这个学习,我不知道该怎么说,不知道是我太菜还是怎么着,感觉这老师,开篇词简单,可是一过开篇词上来就搞了好多我不知道的,我只好一个一个试,然后得出结论再来分享给大家
由于今天有点事情耽误,所以没有搞,明天我将会直接出专门篇为大家讲解如何一步一步了解得出结论

程序员的数学基础

这个学习也是需要自己敲代码的,这里,菜鸟就帮各位敲了,直接给各位上最后的结论,然大家省去时间
由于今天有点事情耽误,所以没有搞,明天我将会直接出专门篇为大家讲解如何一步一步了解得出结论

趣谈linux操作系统

果然是我太菜,刚刚学过我们老师给的一些常用的linux命令行,结果发现极客时间老师给的跟我们老师给的不是一个级别,算了,万事开头难,我得好好敲完分享给大家
由于今天有点事情耽误,所以没有搞,明天我将会直接出专门篇为大家讲解如何一步一步了解得出结论

深入浅出计算机组成原理

首先附上一张极客时间老师的思维导图
极客时间 自我提升第二天

导图解析(按顺序学习)

1、计算机的基本组成

学习计算机的硬件组成,是如何应用在冯.诺依曼体系结构上的,也就是:运算器,控制器,存储器,输入设备和输出设备,还需要了解计算机的两大核心指标:性能和功耗。

2、计算机的指令和计算

指令部分:搞明白我们每天撰写的代码是如何在计算机上运行起来的,而这一条条指令执行的控制过程,就是由控制器完成的。
计算部分:从二进制和编码入手,理解数据在计算机里面的表示,以及怎么从数字电路层面,实现加法、乘法,实现运算功能的ALU其实就是运算器。

3、处理器设计(CPU设计)

CPU时钟可以构造寄存器和内存的锁存器和触发器,搞明白为什么需要CPU时钟,以及寄存器和内存是由什么硬件组成,之后就可以看看数据通路——连接了整个运算器和控制器,并最终组成了CPU

4、存储器的原理

通过存储器的层次结构作为基础的框架引导,你需要掌握从上到下的 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理,它们之间的性能差异,以及实际应用中利用这些设备会遇到的挑战。存储器其实很多时候又扮演了输入输出设备的角色,所以你需要进一步了解,CPU 和这些存储器之间是如何进行通信的,以及我们最重视的性能问题是怎么一回事;理解什么是IO_WAIT,如何通过 DMA 来提升程序性能。对于存储器,我们不仅需要它们能够正常工作,还要确保里面的数据不能丢失。于是你要掌握我们是如何通过 RAID、Erasure Code、ECC 以及分布式 HDFS,这些不同的技术,来确保数据的完整性和访问性能。

这只是一份单纯的导图,菜鸟看完也是一脸懵逼,很多名词完全不认识,但是我相信在后面一步一步的学习中,这个导图会越来越清晰的出现在给位以及菜鸟的脑海之中。(知识是一点一点积累,我也很想快点知道这些具体的东西,但是先确定好框架,知道要学什么,再来学习也只不过是:磨刀不误砍柴工)

相关文章: