原标题:中断还是轮询?取个数据包真麻烦!

网络部新员工

我叫Robert,是Linux帝国一个普通的公民。

今天是我第一天上班的日子,我下了好大功夫才考上了帝国的公务员,根据我的成绩,我被分到了帝国网络部。

一进入帝国的办公园区,我就被眼前的景象惊呆了,一座座高楼大厦,富丽堂皇,鳞次栉比,我忍不住驻足多看了几眼。

这些大楼上面都有招牌,最高的那一座是帝国的进程&线程管理部门的办公大厦,旁边还有内存管理部门、文件管理等部门办公大厦。

网卡驱动部门

我只顾东张西望,不小心跟旁边小路跑出来的一位小哥撞了一个满怀,他手里抱的一堆数据散落的满地都是。

我一边道歉,一边帮他捡起数据。

“这位小哥行色匆匆,不知要去哪里啊”,我好奇的问到。

“哦,你好,我是网卡驱动部门的,这是从网卡那里刚刚拿到的数据包,我得赶紧交给协议栈处理”,说完整理了下数据,就匆忙离开了。

寻着他出来的地方看去,不远处就是他说的网卡驱动部门,难道我办公的地方就在这里?我沿着这条小路走了过去。

一进入网卡驱动部门,出现在眼前的就是一副热火朝天的景象,收包的,解包的,发包的,一群人忙的不亦乐乎。

“这么早就这么忙碌了啊”,我问门口的保安大叔。

“是啊,这平时这个点也没什么网络访问,不知道今天怎么回事,一大早的数据就传输个不停”,保安说到。

我指着里面一个员工问保安:“大叔,那人在干嘛呢?一直在转来转去的”

“你说他啊,他在从网卡轮询读取数据包呢!”

“轮询?网络数据包不是网卡发中断通知吗,干嘛要去轮询呢?”,我不解的问到。

“以前是这样的,不过后来CPU那边有个叫阿Q的家伙不干了,说网卡数据太频繁,老是打断他们正常的工作。不仅如此,中断响应的时候还得把中断给关了,避免出现错误,时间久了,键盘、鼠标等单位就得不到响应纷纷闹事了”,保安说完点了一支香烟。

我若有所思的点了点头,“那现在就改成轮询了?不过这样好浪费时间哦”

保安吐了一个烟圈,继续说到:“倒也不是全都是轮询,现在把处理过程分成了两段,最开始的第一部分还是靠中断来通知的,这个时候需要关一下中断,不过通知后不会真正处理数据包,而是开启了一个软中断,所以关不了太久时间。第二部分在软中断中去轮询处理的,这个时候就不用关中断了。把硬中断和轮询结合了一下,就不用每个数据包来都中断一次了,也不用关中断太长时间,还给这技术取了个名字叫NAPI”

“保安大叔,你怎么什么都知道啊?”

“我以前就在里面工作啊,现在年纪稍微大了些,比不上年轻人,就让我来当保安了,唉~”,大叔说完又猛抽了一口香烟,整理了下自己日益稀疏的头发。

“唉,对了,你是谁啊,怎么没见过你?”

“我是帝国网络部新来的员工,今天来报道的。我把手中的录取通知书递给了保安”

保安大叔看了看说到:“你走错了,不是这里,你该去网络协议栈大厦”。

协议栈大厦

离开网卡驱动部门,我继续前行终于找到了网络协议栈大厦,这便是我今后工作的地方了。

走近一看,这座网络大厦并不如前面看到的高大,只有三层高,每一层的墙上都挂着一个巨大的招牌,上面写着这一层的名字,从上向下分别是:

应用层

传输层

网络层

大厦的门口还有一个收发室,门牌上写着netif_receive_skb,收发室坐着一位大爷。

正在这时,先前碰到的小哥又来了,将手里的数据放到了收发室就离开了,看来这里就是网络协议栈的入口了。

大爷拆开这个数据包看了看,随即按了下按钮,数据包就顺着管道传到了背后协议栈大厦一楼的一个办公室,我抬头一看,上面写着IPv4。再向旁边看去,还有好几间办公室,分别写了IPv6、ICMP、IGMP、ARP···

我来到这个IPv4的门口,里面也是忙的不亦乐乎,有分片的、组包的、计算校验和的、有条不紊。

办公室正中央有一个圆柱形的管道,通向了二楼,一楼处理完毕就通过这管道把数据包送了上去。

墙上还有另一个管道,上面写着netfilter hook,不知道是通向了哪里。

“你找谁?”,我正看得入神,里面一个负责人发现了我,我赶紧表明来意。

他看过我手中的录取通知书后说到,“你是在传输层啊,出门右拐上二楼就是了。我们这一楼都是网络层协议的办公室。”

我又看了下手里的录用通知书,这才发现被分配在了传输层工作。

传输层工作

来到二楼,总算见到了我的主管。

“Robert,欢迎加入网络部,工作岗位在传输层的TCP小组,大家欢迎!”

“谢谢主管!谢谢大家!”

“这是Cerf,你刚来,就让他先带带你,有什么不懂的就向他请教吧。”

我点头感谢,和一旁这个叫Cerf的握了握手。

接下来,主管向我介绍了咱们传输层的几个小组的情况:TCP、UDP、SCTP、UDP-lite······我这才知道,原来传输层不是只有TCP和UDP。

Cerf带我来到了工位,不愧是国有单位,无比宽敞,桌上还有一堆奇怪的设备。

“这是一堆什么东西啊”,我问Cerf。

“这些都是定时器,后面你工作处理TCP连接会用到的”

我点了点头,环顾四周,工位旁边的墙壁上还贴满了什么东西,我凑近了一看,才发现满满的都是RFC几千条的规定。

“好好看,以后的工作可是要天天用到这些东西呢”,Cerf略开玩笑的说着。

“这些我基本都背的下来了,要不然我也考不到这里来”,我笑着说,略带一些得意。

Cerf也笑了笑,“别大意,之前也有人也说过这话,后来还不是走了”

我有些尴尬,不知道说些什么,这时办公室中央的管道里冒出了一个数据包。

“Robert,你刚来,这个新的连接数据包就交给你来处理下,熟悉下工作流程”,主管说到。

我刚刚放松的心情一下紧张了起来,毕竟以前都是纸上谈兵,还从没有真正处理过数据包呢。

我小心翼翼的接过这个数据包,定位到TCP的头部,瞧了一眼标志位,发现SYN位是1,看来是有新的连接到来了,接下来不就是三次握手吗,我再熟悉不过了。

我准备了一个响应包,将SYN标记和ACK标记都点亮后,接下来就犯了难了。这个确认号ACK我倒是知道是对方的序列号+1,不过我回复的序列号该是多少呢?一时之间,不知道如何是好。

你们知道吗?在线等,挺急的。

未完待续······返回搜狐,查看更多

责任编辑:

linux 网卡 轮询,中断还是轮询?取个数据包真麻烦!相关推荐

  1. NAPI模式--中断和轮询的折中以及一个负载均衡的问题

    处理外部事件是cpu必须要做的事,因为cpu和外设的不平等性导致外设的事件被cpu 当作是外部事件,其实它们是平等的,只不过冯氏机器不这么认为罢了,既然要处理外部事件,那么就需要一定的方法,方法不止一 ...

  2. 选中断还是轮询方式?深究其中的区别

    作者 | 肖遥 来源 | 技术让梦想更伟大 摸水了一周,准备在家里好好敲敲代码,赶赶稿子,正当我专心输出的时候,被老婆打断了. 娃拉臭了,赶紧过来!语气中带着一丝丝我害怕的味道. 怎么办?没办法只有过 ...

  3. 对单片机通信方式(中断和轮询)的理解

    在了解单片机和外设通信的时候,我们不仅要了解通信的协议,我们通信的方式.其中通信协议就像是我们说话的语法,如果语法错了,那么外设就一个字听不懂了:如果通信方式错了,外设就可能就理解不了我们说话的意思了 ...

  4. 长连接、短连接、短轮询、长轮询

    长连接.短连接.短轮询.长轮询 短连接:每次Http请求都会建立Tcp连接,管理容易 长连接:只需要建立一次Tcp连接,以后Http请求重复使用同一个Tcp连接,管理难 短轮询:重复发送Http请求, ...

  5. 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...

  6. 轮询、长轮询与Web Socket的前端实现

    Web Socket 应用场景:实现即时通讯:如股票交易行情分析.聊天室.在线游戏等,替代轮询和长轮询 轮询 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由 ...

  7. 谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    来源:伯乐在线专栏作者 - 左潇龙 链接:http://web.jobbole.com/85541/ 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目 ...

  8. 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...

  9. 长轮询和短轮询的区别

    http 协议介绍: http 协议是请求/响应范式的, 每一个 http 响应都是由一个对应的 http 请求产生的; http 协议是无状态的,多个 http 请求之间是没有关系的. http 长 ...

最新文章

  1. 优秀的程序反而是廉价
  2. 用c#算成绩的总和_C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
  3. 【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
  4. hdu3018 一笔画问题
  5. EndNote 20.1 for Win/MacOS 完美稳定版安装 重大更新,修复BUG听取用户反馈更易用
  6. Vue防止白屏添加首屏动画
  7. Flex 学习随笔 ---- 玩 Chart
  8. oracle 窗口函数 (keep)
  9. 当剩下最后一颗×××时,各国军人的表现!
  10. Bootstrap3 如何防止插件冲突
  11. linux下DNS配置详解
  12. 如何检查计算机账号克隆
  13. 浓缩大学生活的顶级精华
  14. diy高性能存储服务器,存储服务器 diy
  15. Keil 5报错error C216: subscript on non-array or too many dimensions
  16. 租车APP都哪些,租车平台成功案例
  17. 区块链PoP(Proof of Peer)共识介绍
  18. 零和博弈(Zero-Sum Games)与非零和博弈(Non-Zero-Sum Games)
  19. Django入门到放弃 学习笔记 03
  20. Vagrant 介绍

热门文章

  1. 深度学习图像标注软件labelme使用教程
  2. 经典chrony服务和ssh远程连接的练习
  3. android 自定义flowlayout,Android 流式布局FlowLayout 实现关键字标签
  4. python中try finally的用法_Python中的try-finally子句
  5. 回顾2021虚拟与增强现实产业年会暨「金V奖」颁奖盛典
  6. web Worker 轮询请求
  7. 个人简历面试题pid
  8. 数据库语句 select * from table where 1=1 的用法和作用
  9. 人工智能的基本概念与分类
  10. 耐心一些,总有一种清理方法能让你靠近幸福