本文主要内容:简单分析NAPI的原理和实现. 内核版本:2.6.37 Author:zhangskd @ csdn 概述 NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入. 简单来说,NAPI是综合中断方式与轮询方式的技术. 中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件:缺点是数据量大时,会产生过多中断, 而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高.轮询方式与中断方式相反,它更适合…
本文主要内容:在接收数据包时,IP协议的处理流程. 内核版本:2.6.37 Author:zhangskd @ csdn blog 我们接着来看数据包如何发往本地的四层协议. ip_local_deliver 在ip_local_deliver()中,如果发现数据报有被分片,则进行组装. 然后调用NF_INET_LOCAL_IN处的钩子函数,如果数据包被钩子函数放行, 则调用ip_local_deliver_finish()继续处理. /* Deliver IP Packets to the h…
本文主要内容:在接收数据包时,IP协议的处理流程. 内核版本:2.6.37 Author:zhangskd @ csdn blog IP报头 IP报头: struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined(__BIG_ENDIAN_BITFIELD) __u8 version:4, /* 协议版本,IPv4为4 */ ihl:4; /* 首部长度,不包括选项为5,表示2…
本文主要讲解了Linux内核二层数据包接收流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了二层数据包接收的流程,希望可以对大家有所帮助.阅读本文章假设大家对C语言有了一定的了解 整体流程如下: 数据报文接收流程伪代码分析如下 /*在基于中断收发报文的网卡设备驱动中, * 当有数据报文进来的时候,使用net_interrupt()进行中断触发 *如 isa-skeleton设备驱动中*/ static int __init netcar…
转:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别) 网卡到内存 网卡需…
如今,我们想要开发一个网络应用,那是相当地方便.不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了. 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗. 你知道网络是通过什么方式传输过来的吗?光纤呗,TCP/IP协议呗. 看起来都难不住我们的同学们,但是,以上问题都不是我们关注的重点,我们今天要关注的是,TCP.IP协议是如何把数据传输到我们的应用服务器,而且准确地交到对应的业务代码手上的? 我们也不关注TCP协议的三次握手四次挥手,我们只需要确认一点,…
一.网络层简介1.网络层功能2.网络层协议字段二.ICMP与封装三.ARP协议与ARP欺骗1.ARP协议2.ARP欺骗 1.网络层功能 1. 定义了基于IP地址的逻辑地址2. 连接不同的媒介3. 选择数据传输的最佳路径 2.网络层协议字段 二.ICMP与封装ICMP是一个""错误侦测与回馈机制""是通过IP数据包封装的ICMP用来发送错误和控制消息 iCMP数据的封装过程 前面两层都在网络层进行的,ICMP数据加上ICMP头部组成ICMP报文 加上IP头部之后才会下…
Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) TCP  可靠的  面向连接的服务 UDP  不可靠的  无连接的服务 只要底层实现TCP IP协议  都可以用socket进行通信 1.TCP和UDP 1.1 TCP连接 TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往…
http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WDrUWO3PNjf6UpYxwMfkX206E9qVBtg3RgYe4ScOG 本文档的个: 1)  当网卡接收到一个数据包,并通过DMA方式写入内存,此时网卡会向前移动rdh,并发送网卡中断。 2)  网卡发送完数据包,并移动tdh,当tdh移动次数达到一定数量,或者tdh等于tdt的时候会发生网…
版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验和(16bit) 源IP地址(32bit) 目的IP地址(32bit) 选项(0或32bit,若有的话) 数据(可变)…