面经3-14 字节二面

一、操作系统

1、混杂模式:是指开启混杂模式的网卡能接收所有经过它的数据流,无论地址是否是它。常用于数据分析、窃听。wireshark也是通过混杂模式抓包的。

2、软中断:操作系统在进行中断处理的时候,会暂时停止响应其它中断请求,这就要求中断处理程序短且快。否则会丢失其它设备的中断请求。

                    Liunx为了解决这个问题,将中断分为了两部分:上半部分、下半部分。

                    上半部分:快速处理中断。会暂时关闭中断。

                     下半部分:延迟处理上半部分没有处理完的部分,以内核线程的方式运行。

举例:网卡收到报文后,硬中断触发内核的中断处理函数。此时内核会暂时屏蔽中断,将网卡数据拷贝到内存中,然后更新硬件寄存器状态,内核再触发软中断,将其他耗时的处理,比如协议解析,交给软中断处理程序处理,

3、网卡收到数据报文后,如何上交?

        网线上的物理帧首先被网卡芯片获取,网卡芯片检查CRC,然后去掉物理帧头(前导码、FCS),得到MAC包。网卡芯片*接下来检查MAC地址,如果不一样则丢弃(混杂模式除外)。  

     抓包无法看到前导码与FCS。

        之后网卡将frame拷贝到网卡内部的FIFO缓冲区,触发硬件中断(Linux中是存在ring buffer中)。CPU响应中断请求,调用网卡启动时注册的中断处理函数,中断处理函数发起软中断请求,COU线程暂时关闭硬中断,将frame拷贝到内存skb中,交给内核处理(上交的数据是有MAC头的)。

        套接字数据缓存(socket buffer):在Linux内核中表示为struct sk_buff,是Linux内核中数据包管理的基本单元。各层协议都依靠这个结构体完成信息的传递,但是解封装的过程中,改变的是指针,而不是真的删除了头部数据。(节省了CPU开销)。

        对于有ring buffer的网卡,ring buffer是由驱动与网卡共享的,所以内核可以直接访问rung buffer,一般拷贝frames的副本到自己的内核空间进行处理(deliver到上层协议,之后的一个个skb就是按skb的指针传递方式传递,直到用户获得数据,所以,对于ring buffer网卡,大量拷贝发生在frame从ring buffer传递到内核控制的计算机内存里)。

4、网卡发包过程

        网卡驱动程序为IP包添加14字节的MAC头,构成frame(暂无CRC)。然后驱动程序将frame拷贝到网卡芯片缓存区,由网卡处理。网卡芯片添加CRC和头部同步信息,发送到网线上。

5、点击一个URL,会发生什么?

        1)DNS解析阶段:

             ①浏览器查找自身的DNS缓存--->搜索本机(OS)缓存

             ②请求域名解析服务器:

                根域服务器--->.com/.cn/.org/.edu域服务器--->baidu.com/google.com域服务器--->mail.google.com

         2)报文形成阶段:

                应用层:应用层获得IP地址后,根据HTTP协议生成HTTP请求报文。       

                传输层:组装TCP头部

                网络层:组装IP头部,根据ARP(网络层协议)协议获得下一跳MAC地址,存储在ARP表中。(实际上此时内核也会组装MAC帧,将完整的帧交给网卡)

6、常见的IO模型 

        (1)阻塞IO/非阻塞IO   

                阻塞IO:发起IO的线程会一直阻塞到有数据返回;

                非阻塞IO:发起IO请求后会立刻返回,需要轮询查看数据是否准备完毕

        (2)IO多路复用

                 一个线程管理多个IO,有数据准备就绪后再分配对应的线程读取数据。

                io多路复用是阻塞的。

        (3)信号驱动IO

                  不再是循环请求询问去监控数据就绪状态,而是建立信号联系,内核数据准备好之后再通过信号通知线程数据已可读。

                信号驱动IO只是用于TCP建立连接或者UDP,因为接收方不知道信号是由什么消息触发的。

        (4)异步IO

               应用发起某个操作(如读操作),让内核完成操作后再通知应用。

                同步异步可以理解为针对的是线程之间/应用程序和内核之间的交互状态。

                同步是发起IO后等待OR轮询,异步是发起IO后去做自己的事,内核完成后会通知。

                异步一定是非阻塞的。

   7、IO复用是阻塞还是非阻塞?

                可以设置阻塞还是非阻塞,或者设置阻塞时间。

二、项目

        1、什么是SDN?

                SDN就是软件定义网络,它将网络的转发平面与控制平面分离开,使用统一的控制器作为控制平面。

         2、SDN的优势

                中心化与去中心化:中心化更安全,去中心化效率更高

                (1)转发平面可以采用不同的硬件来实现,不再需要统一硬件。

                (2)可以通过控制器集中配置,更高效快捷

                (3)满足行业用户的差异化需求

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值