2014.09.05面试总结

36 篇文章 0 订阅
22 篇文章 0 订阅

一面:

1.TCP三次握手,四次断开过程。四次断开时,若无数据发送,能否将第二次的ACK和第三次的FIN包合并?

   1.客户端发送FIN(j),关闭到服务器的连接
   2.服务器收到FIN,回复ACK(j+1),确认关闭连接
   3.服务器发送FIN(k),关闭到客户端的连接
   4.客户端收到FIN,回复ACK(k+1),确认关闭连接
   连接时三次,断开时四次的原因:连接时服务端把SYN+ACK放在一个报文发送,关闭时先单向关闭客户端到服务器的连接,等服务器数据发送完毕后再关闭服务器到客户端的连接,所以FIN和ACK会分开发送。如果在服务器收到FIN时,已经没有数据需要发送,可以在返回ACK的时候就设置FIN标识,这样就可以合并第二步和第三步,形成三次断开。


2.SYN flood攻击原理,以及解决办法。

    SYN Flood属于DOS攻击,它利用了TCP三次握手机制和重传机制,向服务器发送大量的SYN报文请求。当服务器回应SYN+ACK报文时,不再继续回应ACK报文,导致服务器上建立大量的半连接,直至老化。这样,服务器的资源会被这些半连接耗尽,导致正常的请求无法回应。

    解决方案:

    1.TCP代理防火墙,代替服务器完成三次握手,连接成功后再转交给服务器,连接不成功的直接拦在防火墙处。

    2.TCP源探测,防火墙收到SYN后回复错误的ACK+SYN,如果是真实的客户端会回复RST请求重传,将其加入白名单;如果是攻击者则不会回复RST

    3.SYN cookie,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie。当服务器遭受SYN攻击使得backlog队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手


3.malloc/new重载,从自定义的内存池中分配空间,如何设计?如何释放?如何处理内存碎片问题?

    每个内存池维护一个内存块链表(单链表),每个内存块由一个维护该内存块信息的块头结构(MemoryBlock)和多个分配单元组成,块头结构MemoryBlock则进一步维护一个该内存块的所有自由分配单元组成的"链表"。这个链表不是通过"指向下一个自由分配单元的指针"链接起来的,而是通过"下一个自由分配单元的编号"链接起来,这个编号值存储在该自由分配单元的头两个字节中。

    详细见http://blog.csdn.net/this_capslock/article/details/39277421


4.BGP和OSPF协议的简介,作用和区别

OSPF是自治系统内部路由(IGP),一般运行在AS内部,以链路状态为根据进行选路,负则具体路由的计算

BGP是自治系统间路由(EGP),不会计算路由,只是发布路由和控制路由,用于互联网选路的协议


5.OSPF协议中各种LSA的内容和含义,特别是Router LSA和Network LSA中都包含了什么信息?

    详细见http://blog.csdn.net/this_capslock/article/details/39189195

    Router LSA:所有的OSPF路由器都会产生,只在区域内传播,包括路由器自身的接口信息,用于描述所有运行OSPF接口的链路状态开销

    Network LSA:由DR(指定路由器)产生,用于描述与DR相连的所有路由器的信息,只在区域内传播,包括DR本身


6.多线程下生产者-消费者模型,多个写入单个取出,应该如何设计?


7.已经知道每条链路的信息,如何计算出整条路由的信息?


二面:

1.写一个宏,能根据任意结构体和一个结构体内变量的指针,得到这个结构体的起始地址

    见http://blog.csdn.net/this_capslock/article/details/39189947


2.C/C++中static关键字在各种情况下的用途及含义

    文件中的static变量:

    文件中的static函数:

    函数中的static变量:

    类中的static成员变量:

    类中的static成员函数:


3.函数调用时,参数压栈顺序,为什么是从右往左入栈?

   C程序栈底为高地址,栈顶为低地址,函数参数入栈顺序是从右至左的。参数入栈顺序是和具体编译器实现相关的。

    参数从右往左入栈的目的是让C语言能够支持可变长参数。具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈顶指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和参数动态增长的方向相反(参数都是左起向右增长)。可变参数主要通过第一个定参数来确定参数列表,所以从右至左入栈后,函数调用时pop出第一个参数就是参数列表的第一个确定参数。


4.Linux的库函数write()和C的库函数fwrite()有什么区别?

    write()属于系统调用函数,用通常用于底层文件访问,一般没有跨操作系统的可移植性,write()缓存固定。

    fwrite()属于C库函数,自动分配缓存。库函数对文件的操作最终是通过系统调用实现的。库函数调用通常用于应用程序中对一般文件的访问。库函数调用是系统无关的,因此可移植性好。由于库函数调用是基于C库的,因此也就不可能用于内核空间的驱动程序中对设备的操作



5.进程间通信方式,管道有什么特点?

    文件,管道,有名管道,队列,信号量,信号,消息队列,共享内存,socket

    无名管道简单方便,但局限于单向通信的工作方式,并且只能在创建它的进程及其子孙进程之间实现管道的共享。

    有名管道虽然可以提供给任意关系的进程使用,但是由于其长期存在于系统之中,使用不当容易出错,所以普通用户一般不建议使用。


6.OSPF包中有两种广播地址,能否根据这种地址来判断出OSPF协议包?

    (1) 点到点网络:是连接单独的一对路由器的网络,点到点网络上的有效邻居总是可以形成邻接关系的,在这种网络上,OSPF包的目标地址使用的是224.0.0.5

    (2) 广播型网络,比如以太网,Token Ring和FDDI,这样的网络上会选举一个DR和BDR,DR/BDR的发送的OSPF包的目标地址为224.0.0.5;而除了DR/BDR以外的OSPF包的目标地址为224.0.0.6
   

    在广播型网络中,所有路由器都以224.0.0.5的地址发送hello包,用来维持邻居关系,非DR/BDR路由都以224.0.0.6的地址发送lsa更新,而只有DR/BDR路由监听这个地址,反过来,DR路由使用224.0.0.5来发送更新到非DR路由


7.解析路由协议包时,如果数据包过大时会被自动切割,这种情况需要如何解析?

    OSPF没有明确的提供分片/组装功能。当需要分片时,直接使用IP分片/组装。

    在OSPF协议中,按照设计较大的数据包可以被分割为较小的数据包,并推荐使用这种方法;应当尽可能地避免IP分片。

    对于自动切割后的OSPF数据包,可以当做两个包分别进行解析,一个字段不会从中间被切断。


8.BGP和OSPF常见的攻击方法原理


9.BGP协议为什么处于TCP层

    BGP做为自治系统间的路由协议,需要携带大量的路由信息,远远超出了IGP携带路由的数量。因此,BGP需要采用一种可靠的协议来承载。所以BGP选择了TCP协议做为其承载协议,而不是UDP/IP。这样做的好处是利用了TCP是一种面向连接的协议,自身能够保证数据传输的可靠,通过重传等机制保证路由协议报文在IP网传输的可靠性,因此BGP协议本身就可以省去这方面的设计工作,简化了协议的设计。


10.RC5算法介绍

    RC5是一种分组长(为2倍字长w位),密钥长(按字节数计)和迭代轮数都可变的一种分组迭代密码。它以RC5-w/r/b表示。算法由三部分组成:密钥扩展算法、加密算法和解密算法。共使用了五种基本运算:模2w加法,模2w减法,逐位异或运算,循环左移,循环右移。

    该算法具有如下特性:
  
(1) 形式简单,易于软件或者硬件实现,运算速度快。

    (2) 能适应于不同字长的程序,不同字长派生出相异的算法。

   (3) 加密的轮数可变,这个参数用来调整加密速度和安全性的程度。

   (4) 密钥长度是可变的,加密强度可调节。

   (5) 对记忆度要求不高,使RC5可用于类似Smart Card这类对记忆度有限定的器件。

   (6) 具有高保密性(适当选择好参数)。

   (7) 对数据实行bit循环移位,增强了抗攻击能力。


11.BFD(?)协议解析的原理


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值