数据结构,中断,OSI,TCP,UDP

1.了解那些数据结构?

数据结构是计算机存储,组织数据的方式。精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良直接影响着我们程序的性能。常用的数据结构有,数组(Array),栈(Stack),队列(Queue),链表(Linked list),树(Tree),图(Graph),堆(Heap),散列表(Hash)等。

数组: 数组是有序元素的序列,在内存分配是连续的,数组为存储的元素都分配一个下标,下标是自增连续的。访问数组元素通过下标0开始访问。
优点:查询速度快。缺点:删除增加慢;一旦删除或者新增某个元素时需要调整后面的所有元素的 索引。
总结:数组查询快,增删慢,适用于频繁查询,增删较少的情况。
链表: 链表是由一系列的节点组成。数据元素的逻辑顺序是通过链表的指针地址实现。每个节点包含两部分,一个存储元素的内存地址,叫数据域,另一个则指向下一个相邻节点地址的指针,叫指针域。根据链表的指向不同可分为单向列表、双向列表,循环列表等。单向列表最常见。
链表的优点:新增节点,删除节点快。缺点:查询速度慢,占用内存会比较大。
总结:用于数据量较小,需要频繁增加,删除的场景,查询操作相对较少。
栈: 栈是一种特殊的线性表,仅能在线性表的一端操作,栈底不允许操作。栈的特点是:先进后出,有出栈和入栈。JAVA的栈内存是一个栈的数据结构。
队列: 队列和栈一样也是一种线性表。只允许在表的一端进行插入,在表的另一端进行删除,队列的特点是先进先出,有入队和出队。

ps:线性表和链表的区别?

在这里插入图片描述

  • 线性表包括顺序表和链表,线性表是逻辑结构,顺序表和链表是存储结构。

树: 由n个节点组成一个具有层次关系的集合。
特点:

  • 每个节点有0个或多个子节点。
  • 没有父节点的节点成为根节点。
  • 每一个非根节点有且只有一个父节点。
  • 除了 根节点外,每个子节点可以分为多个不相交的树。
  • 右子树永远比左子树大。
    树的分类有多种,平衡二叉树,红黑树,B树,B+树。

堆可以看出是用一颗用数组实现的二叉树。没有使用父指针或者子指针。堆属性决定了树中节点的位置。
在这里插入图片描述
一般来说将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

散列表: 也叫哈希表。是根据键和值直接进行访问的数据结构。通过键和值来映射到集合中的一个位置,找到集合中对应的元素。是数组的一种扩展。

散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。
在这里插入图片描述
在散列表中,左边是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。
图: 图是一系列元素的集合,这些顶点通过一系列边连接起来组成图的一种数据结构。顶点用圆圈表示,边就是这些圆圈之间的连线,顶点之间通过边相连接。
图分为有向图和无向图:
有向图:边不仅连接两个顶点,并且具有方向。
无向图:边仅仅连接两个顶点。
实现了图这种数据结构之后我们可以在此数据结构上做一些复杂的算法计算,如广度优先搜索算法、深度优先搜索算法等;
广度优先搜索算法:一层一层搜索。
深度优先搜索算法:从头到尾搜索。

链接: 数据结构

2.对中断了解么?中断服务函数中用printf吗?

中断的概念:在cpu正常工作的过程中,中断随时可以发生。中断可以说是处理器对外开放的实时受控接口。
在嵌入式设计中,一般不建议在中断函数中调用打印函数printf调试信息,如果这么做,可能发生的结果包括:

  • 打印不完全或者根本无法打印;
  • 程序能执行,但是有行为异常;
  • 程序无法执行。

正确的处理方式:
发生中断时,设置标志位,构建一个尽量简短的ISR(中断服务子函数),将printf等其他工作单独创建相应的线程去执行。

链接: 嵌入式开发中的中断

3. OSI 7层网络模型

Open System Interconnect开放系统互连。OSI把网络分为七层,从下到上分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
用户层面:
应用层:包含应用程序及接口。http、https、dns、ftp、smtp、pop3、telnet.
表示层:对数据进行转换,加密和压缩。数据的解码和编码,加密和解密,压缩和解压缩。
会话层:维持不同应用程序的数据隔离。负责建立、管理和终止表示层实体之间的会话连接。在设备或节点之间提供会话控制,协调通信过程,并提供三种不同方式来组织他们之间的通信。单工,半双工,全双工。

网络层面:
传输层:提供可靠的端到端的报文传输和差错控制。(有对应端口,和应用程序有对应关系。)TCP/UDP
网络层:打包,将分组从源端传送到目的端;提供阻塞控制,路由选择。(ip地址)
数据链路层:将分组数据封装成帧,提供节点到节点方式的传输,差错检测。(MAC)
物理层:在媒体上传输比特;提供机械的和电气的规约。(集线器)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
特点:
OSI模型每一层都有自己的功能集。层与层之间相互独立又相互依靠。上层依赖于下层,下层为上层提供服务。

4.TCP/IP协议

应用层,传输层,Internet层,网络访问层。
在这里插入图片描述

应用层:

HTTP:80 超文本传输协议。提供浏览网页服务。
Telnet:23 远程登陆协议。提供远程管理服务。
FTP:20 21文件传输协议,提供互联网文件资源共享服务。
SMTP:25 简单邮件传输协议,提供互联网电子邮件服务。
POP3:110 邮件接受协议3,提供互联网电子邮件服务。
TFTP:69 简单文件传输协议,提供简单文件的传输服务。(UDP)
DNS:域名服务器。SNMP:网络管理协议。用于网络的监控。

传输层协议:端到端可靠传输。

TCP 属于面向连接的网络协议,可靠传输,流控。
UDP:属于无连接的网络协议。简单,无连接,低开销。
TCP数据的分段和重组
分段:由于数据包太大,对数据包进行分段传输。
重组:分段的数据包通过不同的路由传输,到达目的端口的顺序不一致,要对分段的包进行重新排列。
TCP和UDP处理数据段的方式不同。
TCP报头提供:源端口和目的端口。排列以供同续处理。数据段接受确认。流量控制和拥堵管理。
UDP报头提供:源端口和目的端口。

TCP的窗口确认

使用确认号。期待确认。

TCP重传

发送数据包的时候出现数据的丢失。选择性的重传。

网络层

网络层也叫Internet层,负责将分组报文从源端发送到目的端
网络层的作用:为网络中的设备提供逻辑地址,负责数据包的寻径和转发。
协议号:
ICMP网络控制报问协议。
ping:测试网络的连通性。
ARP 数据链路层-地址解析协议
两项基本功能:将IPv4地址解析为MAC地址。维护映射的缓存。
ARP过程:目标主机在本地网络外
如果目的IPv4主机不在本地网络上,则源节点需要将帧发送到作为网关的路由器接口,或用于达到该目的地的下一跳。
源节点将使用网关的MAC地址作为帧的目的地址。
在同一个网段——广播。不在同一网段——发送给网关。
代理ARP:
主机没有配置默认网关,代理ARP可以使用。代理ARP可以帮助网络中的设备到达远程子网,而无需配置路由或者默认网关。
ARP缓存定时器将会删除在指定时间内未使用的ARP条目。
ARP广播问题:ARP欺骗/ARP毒化
绑定网关的ID的MAC。手动写ARP的缓存表。
反向ARP:
反向ARP是根据原设备MAC地址通过广播获取IP地址的过程的地址解析协议。

5.UDP协议

提供基本的传输层功能。低开销。
使用UDP的应用:
DNS:域名系统。
SNMP:简单网络管理协议。
DHCP:动态主机配置协议。
RIP:路由信息协议。
TFTP:简单文件传输协议。
网络游戏

UDP数据报重组

不对顺序混乱的数据报重新排序。不重新发送丢失的数据报。

链接: 网络分层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值