H3C面试——技术支持

Tcp和udp协议的区别

TCP的可靠性如何保证:

TCP在协议中就对数据可靠传输做了保障,握手与断开都需要通讯双方确认,数据传输也需要双方确认成功,在协议中还规定了:分包、重组、重传等规则;而UDP主要是面向不可靠连接的,不能保证数据正确到达目的地。

三次握手:

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。

四次分手:

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

OSI七层模型

TCP/IP五层模型的协议

在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。

OSI模型与TCP/IP协议有什么区别

ARP协议工作原理

1、每个主机都会建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
2、主机新加入网络时会发送ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
3、网络上的主机接收到ARP报文时,会更新自己的ARP列表。将新的映射关系更新到自己的ARP表中。
4、某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
5、当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
6.源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

域名解析过程

路由协议有哪些,什么原理,

包括RIP, OSPF,BGP
RIP
“路由信息协议(Route Information Protocol)”的简写,主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息计算自己的路由表信息。RIP是一个距离矢量路由协议,最大跳数为15跳,超过15跳的网络则认为目标网络不可达。

OSPF
OSPF协议是“开放式最短路径优先(Open Shortest Path First)”的缩写,属于链路状态路由协议。OSPF提出了“区域(area)”的概念,每个区域中所有路由器维护着一个相同的链路状态数据库(LSDB)。区域又分为骨干区域,如果一个运行OSPF的网络只存在单一区域,则该区域可以是骨干区域或者非骨干区域。如果该网络存在多个区域,那么必须存在骨干区域,并且所有非骨干区域必须和骨干区域直接相连。OSPF利用所维护的链路状态数据库,通过最短路径优先算法(SPF算法)计算得到路由表。

BGP
为了维护各个ISP的独立利益,标准化组织制定了ISP间的路由协议BGP。BGP是“边界网关协议(Border Gateway Protocol)”的缩写,处理各ISP之间的路由传递。

OSPF有那几种协议包?他们的作用?

1.Hello包,用于建立和维持邻居关系,每10s相互发送一次,超过40s没有发送,则邻居关系删除
2.DBD包(database description),数据库描述包,用来向其他路由描述自己的ospf网路拓扑
3.LSR包(link status request),用于请求对方的路由信息
4.LSU包(ling status update),用于储存的传递,更新路由信息
5.LSACK (link status acknowledge) ,对LSU等包的确认

OSPF邻居形成过程?

互发HELLO包,形成双向通信
根据接口网络类型选DR/BDR
发第一个DBD,选主从
进行DBD同步
交互LSR、LSU、LSack进行LSA同步
同步结束后进入FULL

OSPF有几类LSA? 由谁生成?

一类 路由器LSA 所有路由器 本区域描述直连拓扑信息
二类 网络LSA DR 本区域描述本网段的掩码和邻居
三类 网络汇总LSA ABR 相关区域区域间的路由信息
四类 ASBR汇总LSA ABR 相关区域去往ASBR的一条路由信息
五类 外部LSA ASBR 整个AS AS外部的路由信息
七类 NSSA外部LSA ASBR 本NSSA区域AS外部的路由信息

OSPF中承载完整的链路状态的包?

LSU

链路状态协议和距离矢量协议的比较?
(1)路由传递方法不同 (2)收敛速度不同 (3)度量值不同 (4)有环无环
(5)应用环境不同 (6)有无跳数限制 (7)生成路由的算法不同 (8)对设备资源的消耗不同

OSPF防环措施?
(1)SFP算法无环 (2)更新信息中携始发者信息,并且为一手信息 (3)多区域时要求非骨干区域,必须连接骨干区域,才能互通路由,防止了始发者信息的丧失,避免了环路。

OSPF是纯链路状态的协议吗?
单区域时是纯的链路状态协议,而多区域时,区域间路由使用的是距离矢量算法。

OSPF中DR选举的意义?
DR选举时的网络类型?
DR和其它路由器的关系?

(1)提高LSA同步效率。(2)广播型和NBMA要选DR (3)DR与其它路由器为邻接关系。

OSPF的NSSA区域和其它区域的区别?

比普通区域相比:去除了四类ASBR汇总LSA、五类外部LSA,增加了七类NSSA外部LSA
和STUB区域相比:他可以单向引入外部路由

IBGP为什么采用全互联?不用全互联如何部署?

(1) 解决IBGP水平分割问题 (2)反射器或联盟

路由反射器的反射原则?
(1)客户端的路由反射给所有邻居 (2)非客户端的路由反射给客户端 (3)只发最优路由 (4)两个非客户端路由不能互通 (5)反射不改变路由属性

OSPF没有形成FULL状态的原因?

(1)HELLO和失效时间不一致
(2)接口网络类型不一致
(3)区域不一致
(4)MA网络中掩码不一致
(5)版本不一致
(6)认证不通过
(7)ROUTER-ID 相同
(8)MA网络中优先级都为0
(9)MTU不一致
(10)特殊区域标记不一样
(11)底层不通
(12)NBMA网络中没有指邻居

OSPF虚链路在什么情况下用到?

为什么要用虚链路?

(1)区域不连续或区域0被分割会用到
(2)因为所有区域必须挂接到区域0,当区域0被分割后,两个被分割的区域0路由不能互通。

OSPF虚链路的作用?为什么有骨干区域?

因为所有区域必须挂接到区域0,当区域0被分割后,两个被分割的区域0路由不能互通。
骨干区域的设置是为了防止多区域时区域间路由产生环路

RIP路由协议环路问题解决机制?

(1)水平分割 (2)最大16跳 (3)路由毒化 (4)毒性逆转 (5)抑制计时器 (6)触发更新

PPP协商过程?

(1)检测到载波进入链路建立阶段(2)进行LCP协商 (3)进行认证 (4)NCP(IPCP)协商

### 关于C和C++面试题目 #### 常见的C和C++面试问题概述 在技术面试中,C 和 C++ 的问题是评估候选人编程技能的重要组成部分。这些问题不仅考察语法知识,还测试解决问题的能力以及对底层机制的理解。 对于C语言而言,常见的面试问题可能涉及指针操作、内存管理、文件I/O处理等方面的内容[^1]。例如: - 解释`const`关键字的不同用途,在定义常量数据时如何使用它,或者当希望创建指向不可变对象的指针时又该如何声明[^3]。 而对于C++来说,则更侧重面向对象特性及其高级功能的应用场景探讨,像类继承结构下的多态行为演示就是一个很好的例子[^2]: ```cpp class Base { public: virtual void show() const { std::cout << "Base"; } }; class Derived : public Base { public: void show() const override { std::cout << "Derived"; } }; ``` 上述代码展示了通过基类指针调用派生类成员函数的情况,体现了虚函数表的工作原理。 除了这些具体的技术细节外,还会有关于两种语言之间区别的询问——即是否存在某些只能在一种语言里实现而另一种不行的功能?实际上几乎所有能用C完成的任务也都可以借助C++来达成;相反地,由于C++拥有更多现代化特性和库支持,使得一些原本复杂的逻辑变得简单易行。 #### 示例代码片段展示差异 下面是一个简单的比较两个字符串长度并返回较大者的小程序分别用这两种语言编写的方式: **C版本** ```c #include <string.h> char* max_string(const char *str1, const char *str2){ return strlen(str1)>strlen(str2)?(char*)str1:(char*)str2; } ``` **C++版本** ```cpp #include <iostream> #include <string> std::string& max_string(const std::string& str1, const std::string& str2) { return (str1.size()>str2.size()) ? str1 : str2; } int main(){ std::string s1="hello",s2="world"; std::cout<<max_string(s1,s2)<<'\n'; return 0; } ``` 可以看到,虽然最终目的相同,但在表达方式上存在明显区别:C++利用了标准模板库中的`<string>`类简化了许多繁琐的操作过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地星光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值