这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
今日学习了计算机网络以及MySQL数据库相关内容。
TCP和UDP辨析
-
UDP适用场景
-
UDP的存在,本质是内核提供的一个最小网络传输功能。
很多时候,大家虽然号称自己用了UDP,但实际上都很忌惮它的丢包问题,所以大部分情况下都会在UDP的基础上做各种不同程度的应用层可靠性保证。比如王者农药用的
KCP,以及最近很火的QUIC(HTTP3.0),其实都在UDP的基础上做了重传逻辑,实现了一套类似TCP那样的可靠性机制
-
-
极特殊的情况下会出现TCP的速度反而比UDP的速度要快的情况
- 如果现在我需要传一个特别大的数据包。在
TCP里,它内部会根据MSS的大小分段,这时候进入到IP层之后,每个包大小都不会超过MTU,因此IP层一般不会再进行分片。这时候发生丢包了,只需要重传每个MSS分段就够了。但对于UDP,其本身并不会分段,如果数据过大,到了IP层,就会进行分片。此时发生丢包的话,再次重传,就会重传整个大数据包。这样速度就更慢。
- 如果现在我需要传一个特别大的数据包。在
-
总结
-
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
-
MySQL相关
-
常见SQL语句
DML:数据库操作语句,比如update、delete、insert等都属于这个分类。DDL:数据库定义语句,比如create、alter、drop等都属于这个分类。DQL:数据库查询语句,比如最常见的select就属于这个分类。DCL:数据库控制语句,比如grant、revoke控制权限的语句都属于这个分类。TCL:事务控制语句,例如commit、rollback、setpoint等语句属于这个分类
-
存储过程和触发器的区别
- [存储过程]的本质就是一段预先写好并编译完成的
SQL,而我们要聊的触发器则是一种特殊的存储过程,但[触发器]与[存储过程]的不同点在于:存储过程需要手动调用后才可执行,而触发器可由某个事件主动触发执行。在MySQL中支持INSERT、UPDATE、DELETE三种事件触发,同时也可以通过AFTER、BEFORE语句声明触发的时机,是在操作执行之前还是执行之后 - [
MySQL触发器]就类似于Spring框架中的AOP切面。
- [存储过程]的本质就是一段预先写好并编译完成的
-
注意区分缓冲区和查询缓存
- 缓冲区:为了通过内存的速度来弥补磁盘速度较慢对数据库造成的性能影响。在数据库中读取某页数据操作时,会先将从磁盘读到的页存放在缓冲区中,后续操作相同页的时候,可以基于内存操作。
- 查询缓存:对结果对象的缓存,实际上在高版本的情况下被舍弃
- 同时缓冲区是与存储引擎有关的,不同的存储引擎实现也不同,比如
InnoDB的缓冲区叫做innodb_buffer_pool,而MyISAM则叫做key_buffer。
-
MySQL常见的七种日志文件
binlog二进制日志,主要记录MySQL数据库的所有写操作(增删改)。redo-log重做/重写日志,MySQL崩溃时,对于未落盘的操作会记录在这里面,用于重启时重新落盘(InnoDB专有的)。undo-logs撤销/回滚日志:记录事务开始前[修改数据]的备份,用于回滚事务。error-log:错误日志:记录MySQL启动、运行、停止时的错误信息。general-log常规日志,主要记录MySQL收到的每一个查询或SQL命令。、slow-log:慢查询日志,主要记录执行时间较长的SQL。relay-log:中继日志,主要用于主从复制做数据拷贝
-
MySQL常见的文件形式
-
db.opt文件:主要记录当前数据库使用的字符集和验证规则等信息。.frm文件:存储表结构的元数据信息文件,每张表都会有一个这样的文件。.MYD文件:用于存储表中所有数据的文件(MyISAM引擎独有的)。.MYI文件:用于存储表中索引信息的文件(MyISAM引擎独有的)。.ibd文件:用于存储表数据和索引信息的文件(InnoDB引擎独有的)。.ibdata文件:用于存储共享表空间的数据和索引的文件(InnoDB引擎独有)。.ibdata1文件:这个主要是用于存储MySQL系统(自带)表数据及结构的文件。.ib_logfile0/.ib_logfile1文件:用于故障数据恢复时的日志文件。.cnf/.ini:MySQL的配置文件,Windows下是.ini,其他系统大多为.cnf。
-
网络原理相关
-
集线器和交换机的区别
- 集线器收到即转发,意味着集线器其实是没有记录每台设备的标识的,那么就是将数据广播出去,让计算机设备自己判断消息是不是属于它自己的,所以集线器简单的同时,工作效率也很低。
- 交换机内部维护着一张
MAC地址与网线端口的对应表。当接收到数据时,会将相应的端口号码和发送方MAC地址写入表中,这样就可以根据地址判断出该设备连接在哪个端口上了。而交换机可以不用进行广播,而是根据这些信息判断应该把数据转发到哪里。
-
路由器功能
- 路由器所连接的范围更广,网络和网络之间的连接就是通过路由器;计算机所发出的网络数据,都是先经过集线器和交换机进行区域的汇总,然后才转发给路由器;这样一步步连接到互联网的。
- 所以路由器跟交换机不同的是,在路由器里维护的是路由表,在路由表中最重要的是目的网络地址(也就是IP)和下一跳地址。所以路由通过根据目的网络地址来确定下一跳路由器。最终找到目的主机所在目的网络上的路由器,只到最后一个路由器时,才试图向目的主机进行直接交付。
- 而路由器也是实现分组交换的关键构件,负责转发收到的分组,是网络核心部分最重要功能。
-
集线器,交换机,路由器位置
- 集线器是一层设备,(对应OSI网络模型,集线器就是工作在物理层)
- 交换机属于二层设备(对应OSI网络模型,也就是在数据链路层)
- 路由器是三层设备(对应OSI网络模型在网络层)