
Network
zhangskd
一路风雨,一路奔跑
展开
-
数据包接收系列 — NAPI的原理和实现
本文主要内容:简单分析NAPI的原理和实现。内核版本:2.6.37Author:zhangskd @ csdn 概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数原创 2014-03-27 17:14:40 · 32959 阅读 · 7 评论 -
数据包接收系列 — 上半部实现(内核接口)
本文主要内容:网络数据包接收的上半部实现,主要分析内核接口相关部分。内核版本:2.6.37Author:zhangskd @ csdn blog 上半部的实现 接收数据包的上半部处理流程为:el_interrupt() // 网卡驱动 |--> el_receive() // 网卡驱动 |--> netif_rx() // 内原创 2014-03-27 16:50:52 · 15059 阅读 · 3 评论 -
Netfilter的使用和实现
本文主要内容:Netfilter的原理和实现浅析,以及示例模块。内核版本:2.6.37Author:zhangskd @ csdn blog 概述 Netfilter为多种网络协议(IPv4、IPv6、ARP等)各提供了一套钩子函数。在IPv4中定义了5个钩子函数,这些钩子函数在数据包流经协议栈的5个关键点被调用。这就像有5个钓鱼台,在每个钓鱼台放了一个鱼钩(钩子函原创 2014-04-02 16:54:26 · 33731 阅读 · 4 评论 -
数据包接收系列 — IP协议处理流程(一)
本文主要内容:在接收数据包时,IP协议的处理流程。内核版本:2.6.37Author:zhangskd @ csdn blog IP报头 IP报头:struct iphdr {#if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4;#elif defined(__BI原创 2014-04-02 16:32:56 · 6872 阅读 · 0 评论 -
数据包接收系列 — IP协议处理流程(二)
本文主要内容:在接收数据包时,IP协议的处理流程。内核版本:2.6.37Author:zhangskd @ csdn blog 我们接着来看数据包如何发往本地的四层协议。 ip_local_deliver 在ip_local_deliver()中,如果发现数据报有被分片,则进行组装。然后调用NF_INET_LOCAL_IN处的钩子函数,如果数据包被钩子函数放行原创 2014-04-02 16:44:19 · 5870 阅读 · 0 评论 -
数据包接收系列 — 上半部实现(网卡驱动)
本文主要内容:网络数据包接收的上半部实现,主要分析网卡驱动相关部分。内核版本:2.6.37Author:zhangskd @ csdn blog 网卡概述 (1) 网卡收包网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。然后网卡芯片将物理帧头去掉,得到MAC包。网卡芯片会检查MAC包内的目的MAC地址,如果和本网卡的MAC地址不一样则原创 2014-03-27 16:40:06 · 12041 阅读 · 1 评论 -
硬中断和软中断
本文主要内容:硬中断 / 软中断的原理和实现内核版本:2.6.37Author:zhangskd @ csdn blog 概述 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行原创 2014-03-27 16:21:59 · 114974 阅读 · 12 评论 -
数据包接收系列 — 下半部实现(软中断)
本文主要内容:下半部的实现,分析数据包从上半部结束后到L3的处理过程。内核版本:2.6.37Author:zhangskd @ csdn blog 下半部的实现 接收数据包的下半部处理流程为:net_rx_action // 软中断 |--> process_backlog() // 默认poll |--> __netif_re原创 2014-03-27 17:06:12 · 11939 阅读 · 1 评论