【转载】我是一个网卡

转载:我是一个网卡

原创 2016-06-16 刘欣 码农翻身

我出生在深圳的一家工厂,然后飘洋过海来到美国,被安装到一个电脑里, 然后这个电脑又漂洋过海, 被运到了中国。
我知道我的使命就是传递信件,但有一个前提:我需要知道对方的地址才行,其实我们网卡都有一个全球唯一的地址,这个地址一出生就确定了,就像你们人类的身份证一样,终生不变。 无论我走到哪里,我都拥有这个唯一的标志:11:27:F5: 8A:79:54 ,  挺长的是吧,你们人类把它叫做MAC地址,  简单起见, 你可以叫我 “TP-Link 7954”
刚开始的时候我非常孤独,因为这台电脑虽然经常开机,但却不联网,真不知道主人是怎么想的!
不上网就没人来找我发信,不发信我也就没什么价值,也没人搭理我,我整天听着CPU阿甘和金士顿内存在那里喋喋不休的聊天,真是烦死了。(公众号“码农翻身”注:参见文章《CPU阿甘》)
只是这两人都记不住对方,每次重启都像是第一次相识,实在是太搞笑了。1DHCP在我入住机箱30天以后,音箱向大家报告说:“主人终于决定要上网了”  这绝对是个重磅新闻! 
我很兴奋,大家也很兴奋,早就听说外边的世界很精彩了。
一天晚上,只听到“咔嗒”一声, 一个RJ45的网线插头便和我亲密接触了。
网线的那头传来了陌生而熟悉的声音,我的潜意识告诉我,那是交换机在转发信件 。
CPU阿甘看到了这种情况,也不和金士顿内存聊天了,他对着我大叫一声: TP-Link 你在等啥,赶紧上网啊。
这是他第一次和我说话。
操作系统老大是见过世面的,他镇定的说: “心急吃不了热豆腐, 我们得先搞一个IP地址才行。 这需要用到DHCP(动态主机配置协议)”
阿甘说: “谁那里有IP地址啊?”
“这个网络里应该有DHCP 服务器,可以动态的分配地址, 我们可以发个信广播下 ” 老大接着说  “ 阿甘,你和金士顿赶紧写一封信:”
收件人  : 255.255.255.255  : 67发件人  : 0.0.0.0   :68内容: 我想租用一个Ip地址, 谁有啊?

(公众号“码农翻身”注: 这里我做了简化, 实际上这里首先是一个应用层的DHCP发现报文, 然后被一个UDP的报文封装,然后再被一个IP的数据报封装。形象化一点如下图所示)阿甘傻乎乎的, 也不问为什么收件人和发件人这么奇怪, 只是飞快的按老大的指示写信, 信马上写好了,交到我的手里。 
“给你, TP-Link 7954, 赶紧发出去吧”。  
我对外发信是有原则的: 我工作在数据链路层, 必须得知道对方的MAC地址才能发信,   如果不知道, 我就对外广播, 那就是所有的电脑都会收到。
这封信显然就是要广播的,因为到目前为止, 我们还是网络大海中的一个孤岛, 和外界没有任何联系, 我还不知道任何其他电脑的MAC地址。 
按照规定,我又把阿甘写的信封装了一下, 装到另外一个信封里, 只有这样,我最重要的伙伴交换机才能看懂。目的地: FF:FF:FF:FF:FF:FF (广播到同一子网内的所有电脑)发件人: 11:27:F5:8A:79:54  (就是我自己了!)我把它通过网线发给了交换机。  交换机看到FF:FF:FF:FF:FF:FF, 立刻转发给了所有连到交换机的设备。
如同老大所料, 这个局域网里确实有DHCP服务器, 还不止一个!因为没有多久,  交换机转来两封信, 我拆开其中一封, 里边写着:
“我是DHCP服务器192.168.1.1  , 我这里有个空闲的IP 192.168.1.2, 你租不租?”
另外一封信也差不多, 是另外一个DHCP服务器发来的,提供了另外一个IP地址。
CPU阿甘迫不及待了: “看来我们很受欢迎啊,这么多人愿意给我们IP,  老大, 快抢一个吧。 ”
操作系统老大说: 好, 我们要这个192.168.1.2吧, 再写一封信:“你好,服务器192.168.1.1 , 我们就要这个IP  192.168.1.2了”
我又把这封信广播出去, 看来我们所处的网络非常快, 确认的回信眨眼间就到:“这是一个确认信, IP 192.168.1.2 给你了。 网关路由器是192.168.1.1 , DNS服务器的地址是 202.102.224.69”
金士顿内存说: “不容易啊, 终于搞定一个IP 了, 我把它记下来。 ”
操作系统老大说: “把所有信息都记下来, 接下来很快就会用到”我们的IP : 192.168.1.2网关路由器:  192.168.1.1DNS服务器: 202.102.224.69
阿甘说:“ 要是重启了, 我们是不是要这么重来一遍? ”
“阿甘, 你现在越来越聪明了, 确实是这样, 除非主人手动的给我们配置IP地址,网关, DNS , 但是那样很烦,容易出错,  所以一般情况下, 主人都是依赖我们自动的去用DHCP搞定一个IP 。  ”
经过这一番折腾, 我也初步了解了我们所在的网络结构:2DNS和ARP搞定了IP地址, 大家都喜气洋洋。
我们赶紧把浏览器村的老IE叫来, 让它访问一下著名的google网站。
(公众号“码农翻身”注:参见文章《老IE为什么把火狐和Chrome打伤了?》)
老IE说: “你们还不知道?  google在中国被屏蔽了, 访问不了,  要不访问百度吧。 ”
我说: “都行, 我们先访问一下试试。 ”
老IE说: ”百度的域名是www.baidu.com, 你们给我查查它对应的IP地址呗!”
阿甘说: “上个网这么麻烦, 这么多地址要查 ”
“是啊, 网络世界的规矩就是这样 ,想要互联, 我们得有IP地址, 也得知道对方的IP地址, 现在只知道域名www.baidu.com , 我们得给他翻译成IP才行, 阿甘你准备一个DNS查询吧  ” 老大说
CPU阿甘遵照指示,先向金士顿内存问了DNS服务器的地址, 然后写了这么一封信, 交给我发件人: 192.168.1.2    (我们刚刚搞定的IP)收件人: 202.102.224.69   (DNS服务器)内容:  哥们, 给我查查www.baidu.com 的IP地址吧
“但是这封信发给谁呢, 我需要知道对方MAC地址啊, 总不成还是对外广播吧。“ 我心里想。
操作系统老大看出了我的疑虑, 解释说: “DNS服务器不在我们的局域网内,  我们要把这个信发给 网关路由器 , 他会想办法转给 DNS服务器的。 ”
我说: “可是我不知道网关路由器的MAC地址啊”
金士顿内存说: “别急, 我查查之前我们存下来没有, 我靠, 刚才那个DHCP服务器(192.168.1.1)也是网关服务器, 他怎么没把MAC地址顺便发过来啊!”
CPU阿甘急了: “TP-LINK7954, 你是怎么干活的, 怎么非得要MAC地址, 直接用IP地址不行吗?”
我回答说: “没办法, 这是规定, 你不知道网络是分层的吗?  我只工作在数据链路层, 就得用MAC地址。   另外网络多种多样, 可不仅仅是TCP/IP , 我要是只用IP地址, 那其他网络怎么工作?”
操作系统老大说: “我记得好像有个叫ARP东西, 可以通过广播查询一个IP地址对应的MAC地址, 你试试”
其实我也想起来了, 这个ARP叫地址解析协议,  我可以把下面的消息广播出去, 这个子网内的所有机器都会收到, 网关路由器也不例外, 他收到以后,一看是查询自己的MAC地址,  就会创建一个ARP的应答。

收件人: FF:FF:FF:FF:FF:FF (同一子网内的所有电脑)发件人: 11:27:F5:8A:79:54  (就是我自己了!)内容:呼叫网关路由器(192.168.1.1), 请问你的MAC地址是什么?
过了一会, ARP应答果然来了, 我们看到了网关路由器的MAC地址: 88-25-93-79-E0-C8
我告诉金士顿内存:  “赶紧记下来,下次咱就不用再查询了”192.168.1.1    <--> 88-25-93-79-E0-C8
有了网关路由器的MAC地址, 剩下的事情就好办了, 我只需要把之前准备好的DNS查询发给网关路由器即可。
阿甘好奇问我:“ 你只把这个信发到网关路由器, 剩下的事就不管了? ”
我没声好气的回答它说: “那当然了, 我只能管局域网的事情, 出了局域网, 那就是路由器的事情了, 路由器能抽取这个DNS查询的数据报, 看到收件人是202.102.224.69  (DNS服务器), 自然可以转发出去, 我们完全不用担心。”
我们等了一会,  DNS服务器很快就返回了www.baidu.com的IP : 115.239.211.112
金士顿内存说: “我记下来了, 上网看来一点都不好玩啊, 这么费劲。 ”
老IE 说: “好玩的在后面呢, 现在所有的东西都齐活了, 开工 ”
老IE开始创建TCP连接, 然后通过TCP 发送HTT GET请求,  轻轻松松的把百度的主页给取了下来,展示了出来。
大家第一次看到外边的世界, 激动万分。
当然还是我最忙, 因为老IE的所有信件都需要我去发送和接收。2尾声这几个月以来我都是电脑里的最忙碌的人, 一旦可以上网, 大家都上瘾了, 浏览网页,刷微博, 看视频, 玩游戏, 每天把我累的要死。
日子就这么一天天过去,  有一天, 大家发现主人把一个新家伙通过USB接口插到了电脑上, 然后顺手拔掉了网线 !
我失去了和交换机的联系 , 无法联网了, 难道我们电脑又要成为一个孤岛了吗?

老IE还正在访问一个博客网站呢, 一下子就断了。
不过奇怪的是, CPU阿甘, 金士顿内存, 操作系统老大 竟然都围着新来的家伙重新玩起了DHCP, DNS , ARP , 并且连上网了, 所有的信件都由这个新家伙来传递。
我偷偷的问老IE   :“ 这是怎么回事? ”

老IE说: “看来你已经失宠了, 新来的家伙叫无线网卡!”

(刘欣注: 这篇文章其实来源于《计算机网络:自顶向下的方法》第5章的一个例子,我相当于又重新解读了一下。)

声明:原创文章,未经授权,禁止转载

时间: 2024-10-10 17:28:21

【转载】我是一个网卡的相关文章

我是一个网卡

真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解. 本文源地址:我是一个网卡 我出生在深圳的一家工厂,然后飘洋过海来到美国,被安装到一个电脑里,然后这个电脑又漂洋过海,被运到了中国.我知道我的使命就是传递信件,但有一个前提:我需要知道对方的地址才行,其实我们网卡都有一个全球唯一的地址,这个地址一出生就确定了,就像你们人类的身份证一样,终生不变.无论我走到哪里,我都拥有这个唯一的标志:11:27:F5: 8A:79:54.挺长的是

我是一个机箱 《转载》

我是一台的电脑的机箱,嗯,其实我自己也不知道该叫自己什么,反正这台电脑里面的大大小小的零件,别人一般都看不见,如果需要看看什么东西的时候,按照我们这的规定,必须先通过我才能转达. 当然,我并不是我们电脑权利机关——他们只是通过我找人而已,你们可以叫我前台,外壳这个名字呢很土,但是也算是对的,呵呵.其实我几乎算是这台电 脑的各种零件里面最不值钱的一部分了.我和cpu的身家几乎相差20-100倍,有的时候我也是很奇怪的,同样是一块铁,差别咂就这么大呢? 不过当外面的人来看我们这台电脑的时候,我就最喜

【转载】我是一个线程(修订版)

原文:我是一个线程(修订版) 第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴. 我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:“我们线程的宿命就是处理包裹.把包裹处理完以后还得马上回到这里,否则可能永远回不来了.” 我一脸懵懂,“包裹,什么包裹?” “不要着急,马上你就会明白了,我们这里是不养闲人的.” 果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:“0x3704 ,出来!” 我一出

【转载】我是一个键盘

原文:我是一个键盘 二等公民这个世界存在阶级歧视的, 我确信.CPU和内存很明显是第一等公民, 这一对好基友占据着二环内最核心.最金贵的土地,居高临下对外发号施令, 从各处“抢劫”二进制数据到自己的地界来.其他的都被归类到二等公民, 居住在5环以外, 统称为输入输出(I/O)设备. 有些设备居无定所,通过USB临时接入到计算机,待个三五天就走,典型的“北漂”.哦对了,我必须得说明, 硬盘的地位有点特殊,虽然它也是个I/O设备, 但是它存储着所有的程序和数据,包括操作系统老大!虽然经常被CPU和内

我是一个线程

我是一个线程, 我一出生就被编了个号: 0x3704,  然后被领到一个昏暗的屋子里,  这里我发现了很多和我一模一样的同伴. 我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说: 我们线程的宿命就是处理包裹. 把包裹处理完以后还得马上回到这里,否则可能永远回不来了. 我一脸懵懂,包裹,什么包裹? ”不要着急,马上你就会明白了, 我们这里是不养闲人的.“ 果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道: "0x3704 ,出来!" 我一出来就被塞了一个沉甸甸的包裹,上面还有

趣文:我是一个线程

来自:码农翻身(微信号:coderising) 作者:IBM 刘欣 我是一个线程,我一出生就被编了个号: 0×3704,然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴. 我身边的同伴0×6900 待的时间比较长, 他带着沧桑的口气对我说: “我们线程的宿命就是处理包裹.把包裹处理完以后还得马上回到这里,否则可能永远回不来了.” 我一脸懵懂,包裹,什么包裹? “不要着急,马上你就会明白了, 我们这里是不养闲人的.” 果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道: “0×3

我是一个线程(修订版)

第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴. 我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:"我们线程的宿命就是处理包裹.把包裹处理完以后还得马上回到这里,否则可能永远回不来了." 我一脸懵懂,"包裹,什么包裹?" "不要着急,马上你就会明白了,我们这里是不养闲人的." 果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:"0

我是一个小线程

我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴. 我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:"我们线程的宿命就是处理包裹.把包裹处理完以后还得马上回到这里,否则可能永远回不来了." 我一脸懵懂,"包裹,什么包裹?" "不要着急,马上你就会明白了,我们这里是不养闲人的." 果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:"0x3704 ,出来

(趣文)我是一个线程

http://blog.csdn.net/liaodehong/article/details/51206607 作者:IBM 刘欣 我是一个线程,我一出生就被编了个号: 0×3704,然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴. 我身边的同伴0×6900 待的时间比较长, 他带着沧桑的口气对我说: "我们线程的宿命就是处理包裹.把包裹处理完以后还得马上回到这里,否则可能永远回不来了." 我一脸懵懂,包裹,什么包裹? "不要着急,马上你就会明白了, 我们