《深入理解Linux网络技术内幕》阅读笔记(五)

原创 2015年09月26日 13:02:51

通过中断,NIC能够告知其驱动程序几种不同的事情,包括:
1.接收一帧。
2.传输失败。
3.DMA传输已成功完成。给定一个帧传输,当帧上载至NIC的内存准备在此媒介上传输时,驱动程序就会将持有该帧的缓冲区释放掉。使用同步传输时(无DMA),当该帧已上传至NIC,驱动程序就会立刻知道。但使用DMA时,也就是使用异步传输,设备驱动程序必须等待NIC发出明确的中断事件。
4.设备有足够内存处理新传输。该情况包括了一种巧妙的传送节流方式,做的恰当的话,可以改善效率。在此系统中,设备驱动程序会在队列空间缺乏时关闭输出,同时要求NIC当可用内存大于给定量时(一般而言就是该设备的MTU),就发出一个中断,然后当中断到来时重启传输。
驱动程序可以用netif_stop_queue停止设备队列,因此能禁止内核提交后续的传输请求。然后,驱动程序会检查设备的内存是否有足够的空间容纳一个1536个字节的包。如果有,驱动程序就会启动队列,允许内核再次提交传输请求;否则,就会指示设备(通过一个outw调用写一个配置寄存器),当条件满足时,产生一个中断。中断处理例程将使用netif_start_queue重启设备队列,使内核能够重新继续传输。
中断处理例程组织:
这里写图片描述
随机数:
随机数的产生是通过一个辅助函数,内核借此函数令其自身某些活动随机化。例如,那些网络子系统通常会对定时器的延时加入一个随机组件,使得定时器不太可能同时执行,而且通过后台处理使得CPU的负载下降。随机化也可防御某些试图猜出特定数据结构组织的而人所进行的Dos(服务拒绝)攻击。
与用户空间交互:
这里写图片描述
这里写图片描述
1.当管理员使用ifconfig配置一张设备驱动程序尚未加载的网卡,如设备eth0时,则内核向/sbin/modprobe发送一个请求,以加载名称为eth0的模块。如果/etc/prorobe.conf包含“alias eth0 3c59x”条目,则/sbin/modprobe会尝试加载模块3c59x.ko。
2.当管理员以IPROUTE2包的tc命令配置一个设备的流量控制时,可能会涉及不在内核内的队列规则或分类器。这种情况下,内核向/sbin/modprobe发送一个请求,以加载相关的模块。
热拔插:
当你编译内核模块时,目标文件默认在/lib/modules/kernel_version/目录下,而kernel_version是指内核版本,如2.6.12.在同一目录下,你可以发现两个有趣的文件:modules.pcimap和modules.usbmap。这些文件分别包含内核所支持的设备的PCI ID和USB ID。此外,这些文件还包含了相关联的内核模块的引用。当用户空间辅助程序接收到一个可热拔插设备正插入的通知信息时,就会使用这些文件找出正确的设备驱动程序。
内核会调用kobject_hotplug函数以响应一个设备的插入和删除以及其它事件。kobject_hotplug会把arg[0]的初值设为/sbin/hotplug,把arg[1]设为要使用的代理程序。/sbin/hotplug是一个简单脚本,把事件的处理委托给arg[1]指定的另一个脚本(代理程序)。
虚拟设备
这里写图片描述

深入理解Linux网络技术内幕-设备注册和初始化(二)

http://blog.chinaunix.net/uid-14518381-id-3693661.html     NIC注册和注销的通用架构      Linux系统中NIC网络设...
  • fzs333
  • fzs333
  • 2015年12月24日 16:45
  • 708

深入理解Linux网络技术内幕(中文版)

  • 2012年07月06日 09:42
  • 2.19MB
  • 下载

《深入理解Linux网络技术内幕》阅读笔记(十)

中断处理函数会: 1.把帧拷贝到sk_buff数据结构。 2.对一些sk_buff参数做初始化,以便在稍后由上面的网络层使用。 3.更新其他一些该设备私用的参数。 4.为NET_RX_SOFT...
  • u011673554
  • u011673554
  • 2015年10月02日 17:35
  • 1353

《深入理解Linux网络技术内幕》阅读笔记(三十)

路由缓存用于减少路由表查找的时间。路由缓存的核心是与协议无关的目的缓存(Protocol Independent Destination Cache DST)。尽管采用策略路由可有效地创建多张路由表,...
  • u011673554
  • u011673554
  • 2015年10月15日 09:50
  • 960

深入理解Linux网络技术内幕-设备注册和初始化(三)

net_device结构是一个非常庞大的数据结构,其中的字段包含了从硬件层、网络层和传输层等各种功能涉及的参数,因此,其初始化也是分批由不同的函数完成的,相当于每个函数负责其中相关联的一些子集字段,大...
  • fzs333
  • fzs333
  • 2015年12月24日 16:46
  • 816

深入理解Linux网络技术内幕——设备的注册与初始化(二)

设备注册于设备除名     设备注册与设备除名一般有 register_netdev和unregister_netdev完成。这两个是包裹函数,负责上锁,真正起作用的是其调用的register_net...
  • Windeal
  • Windeal
  • 2015年02月08日 11:00
  • 1980

《深入理解Linux网络技术内幕》阅读笔记(十四)

这棵树的叶子就是主机。主机链接到所谓的接入网桥上:能把网络连通能力给予主机的网桥。接入网桥主要是用于在连到同一个网桥上的主机间转发流量。 分发层的网桥主要是用于在和一些接入网桥直接相连的主机间桥接流...
  • u011673554
  • u011673554
  • 2015年10月04日 15:01
  • 489

《深入理解Linux网络技术内幕》阅读笔记(二十五)

有时候,发送方生成一个ARPOP_REQUEST是为了通知接收方一些信息,而不是请求信息。这种封包就称为无端ARP,它通常用下面列出的情况中: 1.L2地址发生变化。 2.重复地址探测。 3.虚...
  • u011673554
  • u011673554
  • 2015年10月13日 00:03
  • 634

《深入理解Linux网络技术内幕》阅读笔记(十二)

这些分层通常称为网络协议栈,因为通信会往下传播通过各个分层,直到实际上经过线路或无线频道传输,然后再返回来。报头也会以LIFO的方式添加和删除掉。 每一层都有很多种协议可以用。在最底层的接口交换数据...
  • u011673554
  • u011673554
  • 2015年10月03日 13:59
  • 569

深入理解网络技术内幕 阅读笔记(五)

第十章 帧的接收 处理L2层的帧的函数是由中断事件推动的,硬件会使用中断事件通知CPU,该帧已经可用了。 接收中断事件的CPU会执行do_IRQ函数。IRQ编号会引发正确的处理函数被启用。此处理函...
  • jy15569597
  • jy15569597
  • 2015年10月29日 17:50
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《深入理解Linux网络技术内幕》阅读笔记(五)
举报原因:
原因补充:

(最多只允许输入30个字)