IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> [MIT 6.S081] Lec 21: Networking 笔记 -> 正文阅读

[网络协议][MIT 6.S081] Lec 21: Networking 笔记

Lec 21: Networking

网络协议

  • 以太网 Ethernet
    以太网帧: Header + Payload = Dest MAC(48b) + Src MAC(48b) + Type(16b) + Payload
    实际的以太网帧的开头和结尾有软件不可见的数据: 开头有 Preamble + SFD, 结尾有 FCS.
  • ARP 协议
    地址解析协议(Address Resolution Protocol), 根据 IP 地址获取 MAC 地址.
  • IP 协议
  • UDP 协议

网络协议栈

在这里插入图片描述

网卡

缓存的队列作用

  • 接收方向: 应对短暂的大流量
  • 发送方向: 提高网卡发送性能的利用率
  • 帮助组件之间解耦

网卡接收到数据包的操作

网卡内置有内存, 数据包到达后网卡将其缓存在其内存中, 然后向主机发送中断. 主机的驱动有一个循环程序, 会询问网卡是否缓存了数据包, 并将其拷贝到主机内存中(为使用 DMA).
在这里插入图片描述
E1000 网卡使用了 DMA (Direct Memory Access). 主机软件会格式化一个 DMA ring, 里面存储着缓冲区的指针, 缓存由驱动初始化网卡时分配. 网卡接收到数据包时, 网卡会记住当前应该在 DMA ring 的位置, 并通过 DMA 将数据包直接写入对应的内存缓冲区中. 传输完成后, 网卡记录的指针会指向 DMA ring 的下一个位置.
在这里插入图片描述

现代网卡

  • 支持网卡多队列. 即能同时与多个 RX ring 传输数据.
  • 完成一些 TCP 的处理, 例如校验和计算.

中断活锁

路由器性能图分析

在这里插入图片描述
这是一个双网卡路由器, 从一个网卡接受数据包, 从另一个网卡发出.

  • 黑色圆点的曲线开始时上升的原因?
    在达到路由器处理瓶颈前, 可以处理和发送更多的数据包.
  • 曲线没有一直上升的原因?
    CPU 的性能瓶颈, 网络的性能瓶颈.
  • 曲线下降的原因?
    随着数据包接收速率增加, 每收到一个数据包(包括超过性能瓶颈的数据包)都会产生一个中断(此处网卡未使用 DMA, 通过中断从网卡拷贝数据包到主机内存). 中断有更高的优先级, 需要 CPU 进行处理, 而越多的数据包则需要消耗越多的 CPU 时间处理中断, 致使有越少的时间来转发数据包. 该现象被称为中断活锁(Interrupt Live lock).

其它产生活锁的情况

  • 对于使用 DMA 的网卡, 可能 DMA 耗尽了内存的处理时间, 网卡占据了内存而导致 CPU 不能使用内存.
  • 若 CPU 数据都消耗在数据包处理线程上, 而可能没有 CPU 时间给上层应用程序读取处理后的数据包, 同样会发生活锁.

活锁发生的根本原因

浪费 CPU 时间处理了最终被丢弃的数据包.

解决方案

描述

当网卡第一次触发中断时, 会导致中断处理函数运行.
中断处理程序不会从网卡拷贝数据包到内存, 而是会唤醒网络线程(处理数据包的线程), 并关闭网卡的中断.
网络线程有一个循环, 会一直检查并从网卡拉取固定数目的数据包进行转发.
若网卡中没有等待处理的数据包, 则网络线程会打开网卡中断, 并进入休眠状态.
对于上层应用程序没有 CPU 时间产生的活锁, 网络线程将查看对应应用的套接字队列, 若其变长(由于数据长时间未被应用程序处理), 网络线程会关闭中断, 并停止从网络接口读取数据包, 从而留给应用程序处理数据的时间, 直到套接字队列变短.

分析

该方法将中断方案(interrupt scheme)转变为轮询方案(polling scheme). 在高负载情况下中断会被关闭, CPU 会一直轮询读取并处理数据包. 由于中断被关闭, CPU 时间不会被中断占据. 而在低负载情况下则打开中断, 网络线程由中断程序唤醒.
本方案中, 网卡中有无等待处理的数据包不是由中断处理函数检查, 而是由网络线程本身检查. 这样网络线程是从网卡读取数据包而不用经过中断处理程序, 同时网卡本身会将超过其缓存队列的数据包丢弃, 从而就不会出现过多中断触发造成的活锁.

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:58:44  更:2021-11-30 16:00:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:40:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码