Linux内核网络协议栈TCP/IP分析之二:链路层

一 链路层协议
1.1 概述
 在TCP/IP协议族中,数据链路层主要有三个目的:
(1)为IP模块发送和接收IP数据报;
(2)为ARP模块发送ARP请求和接收ARP应答;
(3)为RARP模块发送RARP请求和接收RARP应答;
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI(光纤分布式数据接口)及RS-232串行线路等。
下面主要讨论以太网链路层协议,两个串行接口链路协议(SLIP和PPP)。
1.2 驱动分析
  本文以Linux 2.6.9的e1000驱动为例,分析链路层协议的处理逻辑。 Linux内核网络协议栈TCP/IP分析之二:链路层_第1张图片
 说明:(1)驱动注册函数:pci_register_driver() 注册的是驱动程序,是把驱动程序安装到内核,准确的说是安装到内核的PCI子系统中。此时还没有设备出现,但是内核已经具备管理e1000设备的能力;
 (2)e1000_probe:设备发现和初始化;通过e1000_init_module()把e1000驱动程序注册到PCI子系统,这样当有e1000设备插入到PCI总线的时候,PCI子系统就可以发现该设备,并调用之前注册的函数e1000_probe()对设备进行初始化;
 (3)e1000_open:当使用用户空间工具(如ifconfig、iproute)开启网络设备时,PCI子系统就会调用函数e1000_open();看门狗功能在这个函数里面实现,看门狗是用来检测设备状态的,在e1000_open()中启动。
 (4)e1000_intr:设备中断;当网卡接收到数据就会发出中断请求(IRQ),对应的中断处理函数就是e1000_intr(),该函数运行在中断上下文中,不可休眠。
 (5)下半部处理 - 软中断:设备初始化完毕并开启后,就进入就绪状态,当有数据到达网卡就触发中断(硬件中断),内核执行对应的中断处理程序(中断处理程序是上半部,要简短、迅速),当执行完中断处理程序后内核触发NET_RX_SOFTIRQ软中断,进行下半部处理,NET_RX_SOFTIRQ对应的软中断处理函数是net_rx_action(),注册的地方是在系统初始化时。

参考资料:
《TCP/IP-链路层》https://www.cnblogs.com/chaguang/p/8092789.html;
《TCP/IP详解学习笔记(2)-- 数据链路层》https://www.cnblogs.com/newwy/p/3216457.html;
《<再看TCP/IP第一卷>关于链路层的知识细节及相关协议》https://www.cnblogs.com/guguli/p/4452249.html;
《1.2 TCP/IP协议(数据链路层)》https://blog.csdn.net/SouthWind0/article/details/80038014;

你可能感兴趣的:(链路层,TCP/IP,内核,Linux)