CPU:网卡老哥,你到底怎么工做的?

阿Q造访

我是一个网卡,居住在一个机箱内的主板上,负责整台计算机的网络通讯,要是没有我,这里就成了一个信息孤岛了,那也太无聊了~编程

上个周末,服务器断电维护了,这是我可贵的休息时间,我准备打个盹儿眯一下子。缓存

这才刚合上眼,CPU一号车间的阿Q跑过来串门了。安全

“怎么是你小子,据说你背后说了我不少坏话啊!今天怎么想起找我来了”服务器

“网卡老哥,你这都听谁造的谣,我想来拜访你好久了,这不平时工做太忙抽不开身,今天停电了一有空就找你来了嘛!”,阿Q笑着说到。网络

“你但是大忙人,无事不登三宝殿,说吧,找我什么事儿”编程语言

阿Q露出了尴尬而不失礼貌的微笑,“那我就开门见山了,这不年末了吗,我们厂里最近评优呢,想学点网络知识,特来向你讨教讨教”学习

“就这啊,好说好说,来里边坐”,我招待阿Q进门坐下。操作系统

刚刚落座,阿Q就忍不住提问:“老哥,大家网卡是怎么工做的?据说你能够抓到别的主机通讯的数据包?能够给我露一手吗?”3d

“唉,如今不行了”,我叹了一口气。blog

“咋了这是?”

我抬头凝望,开始给阿Q讲起了个人故事。

集线器时代

好久好久之前,那时候网络中的各个计算机都是经过一个叫集线器Hub的家伙来相连的,经过集线器,咱们你们在物理上构成了一个星型的网络,还给取了个名字:以太网。那时候咱们的传输速度能作到10Mbps,在那个年代,已经很是了不得了!。

集线器这家伙,不知道该说他笨,仍是该说他懒,他历来不会管数据是谁发给谁,只是一个没有感情的转发机器,工做在物理层,把收到的信号作一个加强处理后就一股脑的发给全部端口。

这样一来,咱们在逻辑上就变成了一个总线型网络了。总线属于公共资源,由全部链接在上面的主机共享,有人在传输数据的时候其余人就得等着,否则数据就会发生冲突,全乱套了。

为了让你们都能和平共处,没必要为了争抢线路发生不愉快,咱们制定了一套规则:CSMA/CD。

每次要发送数据以前,我都得要监听一下线路上是否空闲,若是有别人在传输数据,那我就得等待。至于等待多久,我也不知道,由于这是一个随机值。

等到空闲的时候,我就能够发送数据了。不过一边发送,我还得一边检测是否有冲突发生,由于说不定有别人跟我同样觉得如今空闲都在发送数据呢!

因此这就是CSMA/CD——载波侦听多路访问/冲突检测名字的来历了。

可是若是数据的长度过短,我很快就发送完了,结果先头部队还在路上,这以后再遇到冲突那我就发现不了了。为了应对这种状况,咱们还得考虑即使是在极端状况下发生冲突,咱们仍是可以检测到。

咱们这个网络可以支持的最远距离是2500米,极端状况下,到达最远端的时候冲突才发生。冲突信号得赶在我发送完最后一个bit以前传回来,这一来一回就是5000米。

线路上的信号跑个来回须要57.6微秒,咱们的传输速度是10Mbps,一个来回的时间我就能发送576bit,也就是72个字节,除开8个字节的帧前导符和帧开始符,剩下的以太网帧长度不能低于64个字节,这样就算在最远两端发生的碰撞冲突都能及时传递回去被检测到。

有了这套协议,你们不再用争抢,能够专心工做了。

“我说为何非得要至少64字节你才发送,原来还有这段历史呢!那大家具体是怎么收发数据的呢?”,说到这儿,阿Q打断了我。

“那你听我继续给你说”

数据收发过程

我天天的工做就是接收、发送数据包,操做系统把数据交给我之后,我就按照以太网的数据格式,把数据封装成一个个的以太网帧发出去

帧的头部有收件人和发件人的地址,咱们叫它MAC地址,这是咱们每一个网卡的身份证号码,从咱们出生那一刻起就肯定了。

发件人是个人MAC地址,但收件人地址我不知道啊!操做系统协议栈部门交给个人数据包只有IP地址,咱们又不认识这个,咱们收发数据帧只用MAC地址。

为了解决这个问题,咱们又制定了一套协议:ARP,地址解析协议,来实现这两个地址的转换。在不知道IP对应的MAC地址时候,就发送一个广播,这个广播的发件人地址填个人,而后收件人地址是FF:FF:FF:FF:FF:FF,这是一个特殊的MAC地址,咱们约定好了每一个人收到广播都要接收而不能丢弃。

这个广播里面填了IP地址,谁收到之后发现跟本身的匹配上就来应答我,这样我就能知道对方的MAC地址了,接下来就能通讯了。

固然,为了不每一次都去询问一遍浪费时间,我会把查询过的记录缓存起来,下次就能直接用啦。

不过这样作也有安全风险,要是有人冒充真正的收件人给我回信,我也没办法分辨,这就叫ARP欺骗。

“唉,等等,你仍是给我讲讲你是怎么能够抓到别人的通讯数据吧,我对这个更有兴趣。”,阿Q又一次打断了我。

由于集线器这家伙闭着眼睛处处转发,因此无论是谁发的数据,全部人均可以看到。

就由于这样,总线中天天有大量数据在流动,但我一般也不会所有都抓下来交给大家处理,否则大家CPU的人估计要骂死我了。因此我每次拿到一个数据帧,就会检查它的收件人是否是我,若是不是那就直接丢弃了,固然,前面我说的广播消息例外。

我能抓到别人通讯数据的秘密就在于:我提供了一种工做模式叫作混杂模式,这种模式下,我就会把总线中我看到的全部数据帧所有都抓下来交给大家CPU去处理,通常都是一些抓包软件才会要求我这么作,但也有一些流氓软件和病毒木马常常让我抓别人的数据包,这样他们就能嗅探网络中的其余主机的通讯了。

我并不喜欢这样,由于每次一开启混杂模式,我和大家CPU就忙的要死,主板上的风扇都会疯狂的转起来。

“原来是这样,那你开启混杂模式给我露一手看看呗,能够看到别人的通讯数据,这也太刺激了!”,阿Q又又又一次打断了我。

“你别着急,听我继续说嘛,别总是打断我,并且如今停电了,我想露一手也露不了啊?”

“好好好,你继续,继续,我不插嘴了。”

交换机时代

不知道从何时开始,就算我开启混杂模式,也抓不到别人的数据包了,由于我发现网络中的数据包只有跟我相关的了。

后来一打听才知道,不仅是我一个网卡这样,别的也同样。

原来集线器那家伙退休了,新来了一个叫交换机的大佬取代了他的位置。

这位大佬名不虚传,他不仅是简单的把你们链接在一起,它还会学习,用一张表把你们的MAC地址和链接的端口号记录下来。每次收到数据后,它只转发给对应的端口,而不会像集线器那样处处转发,我再也看不到别人的通讯数据了!

“啊?交换机那家伙可真多事!”,阿Q露出了失望的表情。

这也是件好事啊,交换机大佬不用处处转发数据占用线路,至关于把冲突域进行了隔离,我链接的线路上只有我本身的数据,没有别人的数据,就不会和别的主机传输数据发生冲突了。不只如此,咱们链接的网线也进行了升级换代了,如今咱们能够全双工通讯,一边收一边发,也不用和交换机发给个人下行数据发生冲突!

隔离冲突域+全双工通讯,如今不再用CSMA/CD,由于不会有冲突发生,能够随心发送数据了,真是爽太多了!咱们的传输速度也是突飞猛进,从10Mbps到100Mbps,再到1000Mbps,愈来愈快,这在之前想都不敢想。

阿Q点了点头说到:“厉害了,网卡老哥!真是因祸得福焉知非福”

 

说完,CPU六号车间的小六出如今了门口,只见他满头大汗的说到:“Q哥,处处找你都找不到,原来你在这,快回去,领导叫咱们出趟差”

未完待续······

往期TOP5文章

那天,我被拉入一个Redis群聊···

CPU明明8个核,网卡为啥拼命折腾一号核?

一个故事看懂Docker容器技术

主板上来了一个新邻居,CPU慌了!

哈希表哪家强?几大编程语言吵起来了!

相关文章
相关标签/搜索