深信服 网络相关面试题及部分答案


直接开始

1. POEAF,AT,BT三种供电标准,及其最大输出功率。

2. 二三层转发基本原理

3. 结构体占用空间,sizeof与strlen分别对指针和数组求值

4. 端口自协商内容,协商过程及原理。

A:

快速连接脉冲(Fast Link Pulse)

在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY标准寄存器地址4 )。依靠脉冲位置编码携带数据。一个FLP突发包含33个脉冲位置。17个奇数位置脉冲为时钟脉冲,时钟脉冲总是存在的;16个偶数位置脉冲用来表示数据:此位置有脉冲表示1,此位置没有脉冲表示0。这样1个FPL的突发就可以传输16bit的数据。自协商交互数据就这样通过物理线路被传输。
如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY标准寄存器地址5 )。同时把状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。然后各自根据自己和对方的最大连接能力,选择最好的连接方式Link。比如,如果双方都即支持10M也支持100M,则速率按照100M连接;双方都即支持全双工也支持半双工,则按照全双工连接。一定连接建立后,FLP就停止发送。直到链路中断,或者得到自协商Restart命令时,才会再次发送FLP。

并行检测

为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。
并行检测机制是这样的:在具有自协商能力的设备端口上,如果接收不到FLP,则检测是否有10M链路的特征信号或100M链路的特征信号。
1) 如果设备是10M设备,不支持自协商,则在链路上发送普通连接脉冲(Normal Link Pulse)简称NLP。NLP仅仅表示设备在位,不包含其它的额外信息。
2) 如果是100M设备,不支持自协商,则在没有数据的情况下,在链路上一直发送4B/5B编码的Idle符号。
并行检测机制如果检测到NLP,则知道对方支持10M速率;如果检测到4B/5B编码的Idle符号,则知道对方支持100M速率。但是对方是否支持全双工、是否支持流控帧这些信息是无法得到的。因此在这种情况下,认为对方只支持半双工,不支持全双工,且不支持流控帧。
基于以上原理,在对端不打开自协商时,打开自协商的一方只能协商成半双工模式。

5. MAC地址老化过程。

交换机中各端口具有自动学习地址的功能,通过端口发送和接收的帧的源地址(源MAC地址、交换机端口号)将存储到地址表中。
老化时间是一个影响交换机学习进程的参数。从一个地址记录加入地址表以后开始计时,如果在老化时间内各端口未收到源地址为该MAC地址的帧,那么,这些地址将从动态转发地址表(由源MAC地址、目的MAC地址和它们相对应的交换机的端口号)中被删除。静态MAC地址表不受地址老化时间影响。

6. vlan三种模式:access,trunk,hybrid,有什么区别。

7. linux下I/O多路复用有哪几种方式,有什么区别

I/O复用模型
select/poll
老李去火车站买票,委托黄牛(内核中),然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。
耗费:打电话
epoll
老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。
耗费:无需打电话

select函数的调用过程

a. 从用户空间将fd_set拷贝到内核空间
b. 注册回调函数
c. 调用其对应的poll方法
d. poll方法会返回一个描述读写是否就绪的mask掩码,根据这个mask掩码给fd_set赋值。
e. 如果遍历完所有的fd都没有返回一个可读写的mask掩码,就会让select的进程进入休眠模式,直到发现可读写的资源后,重新唤醒等待队列上休眠的进程。如果在规定时间内都没有唤醒休眠进程,那么进程会被唤醒重新获得CPU,再去遍历一次fd。
f. 将fd_set从内核空间拷贝到用户空间

缺点:
两次拷贝耗时(从用户空间将fd_set拷贝到内核空间, 将fd_set从内核空间拷贝到用户空间)
轮询所有fd耗时(遍历完所有的fd查看是否返回一个可读写的mask掩码)
支持的文件描述符太小(1024)

优点:
跨平台支持

poll优点:
连接数(也就是文件描述符)没有限制(链表存储)
poll函数的调用过程与select完全一致

缺点:
大量拷贝,水平触发(当报告了fd没有被处理,会重复报告,很耗性能)

epoll的ET与LT模式

LT:延迟处理,当检测到描述符事件通知应用程序,应用程序不立即处理该事件。那么下次会再次通知应用程序此事件。
ET:立即处理,当检测到描述符事件通知应用程序,应用程序会立即处理。
ET模式减少了epoll被重复触发的次数,效率比LT高。我们在使用ET的时候,必须采用非阻塞套接口,避免某文件句柄在阻塞读或阻塞写的时候将其他文件描述符的任务饿死。

epoll的函数调用流程

a. 当调用epoll_wait函数的时候,系统会创建一个epoll对象,每个对象有一个evenpoll类型的结构体与之对应,结构体成员结构如下。

rbn,代表将要通过epoll_ctl向epll对象中添加的事件。这些事情都是挂载在红黑树中。
rdlist,里面存放的是将要发生的事件。

b. 文件的fd状态发生改变,就会触发fd上的回调函数
c. 回调函数将相应的fd加入到rdlist,导致rdlist不空,进程被唤醒,epoll_wait继续执行。
d. 有一个事件转移函数——ep_events_transfer,它会将rdlist的数据拷贝到txlist上,并将rdlist的数据清空。
e. ep_send_events函数,它扫描txlist的每个数据,调用关联fd对应的poll方法去取fd中较新的事件,将取得的事件和对应的fd发送到用户空间。如果fd是LT模式的话,会被txlist的该数据重新放回rdlist,等待下一次继续触发调用。

epoll的优点
没有最大并发连接的限制
只有活跃可用的fd才会调用callback函数
内存拷贝是利用mmap()文件映射内存的方式加速与内核空间的消息传递,减少复制开销。(内核与用户空间共享一块内存)
只有存在大量的空闲连接和不活跃的连接的时候,使用epoll的效率才会比select/poll高。

所以epoll相比select和poll,相当的利用最大连接数并节省内存

socket套接字

同步 就是我调用一个功能,该功能没有结束前,我死等结果。只能顺序执行。
异步 就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知),往往用回调函数或者其他类方式实现。
阻塞 就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。
非阻塞 就是调用我(函数),我(函数)立即返回,而当我准备完毕时,通过select通知调用者。

同步IO和异步IO的区别就在于:数据拷贝的时候进程是否可以被阻塞
阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否能立即返回

8. mdelay和msleep的区别

mdelay是忙等待函数,在延迟过程中无法运行其他任务。这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间
msleep是休眠函数,它不涉及忙等待.你如果是msleep(10),那实际上延迟的时间,大部分时候是要多于10ms的,是个不定的时间值

猜你喜欢

转载自blog.csdn.net/qq_44710568/article/details/131559474