场景题

场景题

输入一个url后到出现页面发生什么?

  1. DNS解析

    • 查询浏览器缓存
    • 查询操作系统缓存
    • 查询路由器缓存/ISP服务器缓存
    • 通过递归和迭代两种方式查询dns服务器
  2. TCP连接

    • 应用层:HTTP数据(GET/POST)
    • 传输层:TCP数据(三次握手、SYN泛洪攻击)
      • SYN攻击是伪造tcp头,虚造一个ip,导致服务方永远无法收到ack,半连接状态消耗系统资源,一般可以设置syn timeout或者拒绝大量相同ip访问来避免。
    • 网络层:IP头(arp)
    • 链路层:以太网首部(广播单播、arp攻击)
      • arp攻击:局域网内有大量虚假arp应答
  3. 服务器响应

    • 协议解析
    • 资源发送
  4. 浏览器渲染

数据从磁盘到内存全过程?

1、初始化DMA控制器并启动磁盘
2、从磁盘传输一块数据到内存缓冲区
3、DMA控制器发出中断请求
4、执行“DMA结束”中断服务程序

数据从网卡到磁盘全过程?

  1. 网卡收到数据包
  2. 将数据包从网卡硬件缓存读入内存(DMA –> skb_buffer)
  3. 通知内核处理
    • NIC触发硬中断,硬中断处理程序会调用驱动程序启动软中断,后续慢慢处理。
    • 软中断触发NAPI,循环处理ring_buffer指向的skb_buffer
  4. 经过TCP/IP协议层逐层处理
  5. 应用程序通过read()从sockert buffer读取内容

用一段话描述:网卡收到数据包,DMA到内核内存,中断通知内核数据有了,内核按轮次处理消耗数据包,一轮处理完成后,开启硬中断。其核心就是网卡和内核其实是生产和消费模型,网卡生产,内核负责消费,生产者需要通知消费者消费;如果生产过快会产生丢包,如果消费过慢也会产生问题。也就说在高流量压力情况下,只有生产消费优化后,消费能力够快,此生产消费关系才可以正常维持,所以如果物理接口有丢包计数时候,未必是网卡存在问题,也可能是内核消费的太慢。

源代码到运行全过程

  1. 预处理
  2. 编译(词法分析,语法分析,中间代码生成,优化)
  3. 汇编
  4. 链接
  5. 生成ELF文件