当前位置: 首页 > article >正文

计算机基础知识复习8.29

DNS解析过程

客户端首先会发出一个DNS请求,问www.server.com的IP是什么,并发给本地DNS服务器(也就是客户端的TCP/IP设置为填写的DNS服务器地址

本地域名服务器收到客户端的请求后,如果缓存里的表格能找到www.server.com,则它直接返回IP地址,如果没有,本地DNS会去问他的根域名服务器:www.server.com的IP地址是什么吗,根域名服务器是最高层次的,他不直接用于域名解析,而是指出一条道路

根DNS收到来自本地DNS的请求后,发现后置是.com,说www.server.com这个域名归.com区域管理,我给你.com顶级域名服务器地址,你去问问

本地DNS收到顶级域名服务器的地址后,发起请求问 能告诉我www.server.com的IP地址吗

顶级域名服务器说:我给你负责www.server.com区域的权威dns服务器的地址,你去问他

本地DNS于是转向问权威DNS服务器,www.server.com对应的IP是什么

权威DNS服务器查询后将对应的IP地址x.x.x.x告诉本地DNS

本地DNS再将IP地址返回客户端,客户端和目标建立连接

进程间通信方式

管道通信,就是内核里的一串缓存,从管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据,管道传输的数据是无格式的流且大小受限

消息队列是保存在内核中的消息链表,在发送数据时,会分成一个个独立的数据单元,也就是消息体,消息体是用户自定义的数据类型,消息的发送方和接收方要约定好消息体的数据类型,所以每个消息体都是固定大小的存储块,不像管道是无格式的字节流数据,如果进程从消息队列中读取了消息体,内核就会把这个消息体删除。消息队列生命周期随着内核,如果没有释放消息队列或者关闭操作系统,消息队列会一直存在。

共享内存的机制就是拿出一块虚拟地址空间来,映射到相同的物理内存中,这样这个进程写入的东西,另外一个进程马上就能看到了,就不需要拷贝来拷贝去,大大提高了进程间通信的速度

信号量其实是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据。

为什么需要Time_Wait状态

主动发起关闭连接的一方,才会有TIME_WAIT状态

采取TIME_WAIT状态,主要原因:

防止历史连接中的数据,被后面相同四元组的连接错误的接受。采用2MSL时长,足以让两个方向上的数据包都被丢弃,使得原来连接的数据包在网络中都自然消失,再出现的数据包一定都是新建立连接所产生的

保证被动关闭连接的一方,能被正确的关闭。Time_wait作用是等待足够的时间以确保最后的ack能让被动关闭方接受,从而帮助其正常关闭

TIME_WAIT过多的危害

占用系统资源,比如文件描述符号,内存资源,CPU资源,线程资源

占用端口资源,端口资源也是有限的。

如果客户端的TIME_WAIT状态过多,占满了所有端口资源,那么就无法对目的IP+目的Port都一样的服务端发起连接,但是被使用的端口,还是可以继续对另一个服务端发起连接的

如果服务端的TIME_WAIT状态过多,并不会导致端口资源受限,因为服务端只能监听一个端口,而且由于一个四元组唯一确定一个TCP连接,因此理论上服务端可以建立很多连接,但是TCP连接过多,会占用系统资源,比如文件描述符号,内存资源,CPU资源,线程资源等

CLOSE_WAIT状态原因

close_wait状态是被动关闭方才会有的状态,而且如果被动关闭方没有调用close函数关闭连接,那么就无法发出FIN报文,从而无法使得close_wait状态的连接转变为last_ack状态

当服务端出现大量close_wait状态的连接的时候,说明服务端的程序没有调用close函数关闭连接

TCP建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号,序列号能够保证数据包不重复,不丢弃和按序传输。不使用两次握手和四次握手的原因:两次握手无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号。四次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。

第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项

第二范式(2NF):  在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

第三范式(3NF):在2NF基础上,任何非主属性,不依赖于其他非主属性。第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

OSI七层模型

应用层:负责给应用程序提供统一的接口

表示层:负责把数据转换成兼容另一个系统能识别的格式

会话层:负责建立,管理和终止表示层实体之间的通信会话

传输层:负责端到端的数据传输

网络层:负责数据的路由,转发,分片

数据链路层:负责数据的封帧和差错检测以及MAC寻址

物理层:负责在物理网络中传输数据帧

内存分段

程序是由若干个逻辑分段组成的,如可由代码分段,数据分段,栈端,堆段组成。不同的段是有不同的属性的,所以就用分段的形式把这些段分离出来

分段机制下的虚拟机制由两部分组成,段选择因子和段内偏移量。

段选择因子和段内偏移量:

段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址,段的界限和特权等级等。

虚拟地址中的段内偏移量应该位于0和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。

内存分页

分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小,这样一个连续并且尺寸固定的内存空间叫做页。虚拟地址与物理地址之间通过页表来映射。页表是存储在内存里的,内存管理单元就将虚拟内存地址转换成物理地址的工作。对于一个内存地址转换,就是把虚拟内存地址,切分成页号和偏移量。根据页号,从页表里面,查询对应的物理页号,直接拿物理页号,加上前面的偏移量,就得到了物理内存地址。

ARP协议

在传输一个IP数据报的时候,确定了源IP地址和目标IP地址后,就会通过主机路由表确定IP数据包下一跳,然而,网络层的下一层是数据链路层,所以还要知道下一跳的MAC地址。由于主机的路由表中可以找到下一跳的IP地址,所以可以通过ARP协议,求得下一跳的MAC地址。

主机会通过广播发送ARP请求,这个包中包含了想要知道的MAC地址的主机IP地址。当同个链路中的所有设备收到ARP请求时,会去拆开ARP请求包里的内容。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个设备就将自己的MAC地址塞入ARP响应包返回给主机

HTTP状态码

2XX 成功,报文已经收到并被正确处理

3XX 重定向,资源位置发生变动,需要客户端重新发送请求

4XX 客户端错误,请求报文有误,服务器无法处理

5XX 服务器错误,服务器在处理请求时内部发生了错误

TCP头部格式

源端口号(16位) 目标端口号(16位)

序列号(32位)

确认应答号(32位)

首部长度(4位)保留(6位)(URG,ACK,PSH,RST,SYN,FIN) 窗口大小(16位)

校验和(16位)

紧急指针(16位)

IO多路复用

IO多路复用是一种IO的处理方法,指的是复用一个线程,处理多个socket中的事件。能够资源复用用,防止创建过多线程导致的上下文切换的开销

B+树的特点

一种自平衡的多路查找树,所有叶节点都位于同一层,保证了树的平衡,使得搜索,插入,删除操作的时间复杂度为对数级别

非叶子节点仅包含索引信息,不存储具体的数据记录,他们只用来引导搜索到正确的叶节点。非叶子节点的子树指针与关键字数量相同,每个子树指针指向一个子树,子树中的所有键值都在某个区间内

所有数据记录都存储在叶节点中,且叶节点中的数据是按关键字排序的。叶节点包含实际的数据和关键字,他们是数据存储和检索的实体单元。叶节点之间通过指针相互链接,形成一个链表,便于范围查询和顺序遍历

参考资料

小林coding


http://www.kler.cn/a/282478.html

相关文章:

  • 蓝桥杯-洛谷刷题-day3(C++)
  • 【Hadoop实训】Hive 数据操作②
  • C++初阶——优先队列
  • 一文说清C++类型转换操作符(cast operator)
  • RabbitMQ实战启程:从原理到部署的全方位探索(上)
  • springboot 文件高效上传
  • 深度学习--复制机制
  • 深度学习——LLM大模型分词
  • MySQL编译安装
  • Linux:NAT等相关问题
  • 微信小程序利用canva进行大图片压缩
  • 对标GPT4o,智谱推出新一代基座大模型 GLM-4-Plus
  • Python反向传播导图
  • 如何通过日志或gv$sql_audit,分析OceanBase运行时的异常SQL
  • 如何理解进程
  • 渲染引擎实践 - UnrealEngine引擎中启用 Vulkan 和使用 Renderdoc 抓帧
  • Nginx SSL密码短语配置指南:增强负载均衡安全性
  • 王立铭脑科学50讲:49,灵魂和肉体,灵魂离体的感觉是怎么回事
  • ceph-rgw zipper的设计理念(2)
  • 工程师 - RS232通讯介绍
  • KTH5701 系列低功耗、高精度 3D 霍尔传感器
  • 命令模式详解
  • Oracle 11g RAC to 11g RAC ADG部署搭建
  • [M模拟] lc3153. 所有数对中数位不同之和(模拟+按位统计)
  • 问:介绍一下Java中的深克隆浅克隆?
  • MySQL之SUBSTRING 和 SUBSTRING_INDEX函数