我是一个网卡

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看75 回复回复1 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 75|回复: 1
收起左侧

我是一个网卡

[复制链接]
大秘小蜜 发表于 2016-8-1 23:39:46 | 显示全部楼层 |阅读模式
快来登录
获取最新的苹果动态资讯
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
本帖最后由 大秘小蜜 于 2016-8-1 23:46 编辑

我出生在深圳的一家工厂,飘洋过海来到美国,被安装到一个电脑里,然后这个电脑又漂洋过海,被运回了中国……

我知道我的使命就是传递信件,但有一个前提:我需要知道对方的地址才行,其实我们网卡都有一个全球唯一的地址,这个地址一出生就确定了,就像你们人类的身份证一样,终生不变。无论我走到哪里,我都拥有这个唯一的标志:11:27:F5: 8A:79:54,挺长的是吧,你们人类把它叫做MAC地址,简单起见,你可以叫我“TP-Link 7954”。

刚开始的时候我非常孤独,因为这台电脑虽然经常开机,但却不联网,真不知道主人是怎么想的!

不上网就没人来找我发信,不发信我也就没什么价值,也没人搭理我,我整天听着CPU阿甘和金士顿内存在那里喋喋不休的聊天,真是烦死了。
(参见文章《CPU阿甘》)

只是这两人都记不住对方,每次重启都像是第一次相识,实在是太搞笑了。




1、DHCP

在我入住机箱30天以后,音箱向大家报告说:“主人终于决定要上网了!”  这绝对是个重磅新闻!

我很兴奋,大家也很兴奋,早就听说外边的世界很精彩了。

一天晚上,只听到“咔嗒”一声,一个RJ45的网线插头便和我亲密接触了。

网线的那头传来了陌生而熟悉的声音,我的潜意识告诉我,那是交换机在转发信件。

CPU阿甘看到了这种情况,也不和金士顿内存聊天了,他对着我大叫一声:“ TP-Link 你在等啥,赶紧上网啊。”

这是他第一次和我说话。

操作系统老大是见过世面的,他镇定的说: “心急吃不了热豆腐,我们得先搞一个IP地址才行。这需要用到DHCP(动态主机配置协议)。”

阿甘说: “谁那里有IP地址啊?”

“这个网络里应该有DHCP服务器,可以动态的分配地址,我们可以发个信广播下 。” 老大接着说:  “ 阿甘,你和金士顿赶紧写一封信!”

收件人:255.255.255.255:67
发件人:0.0.0.0:68
内容: 我想租用一个IP地址,谁有啊?

(注:这里我做了简化,实际上这里首先是一个应用层的DHCP发现报文,然后被一个UDP的报文封装,然后再被一个IP的数据报封装。形象化一点如下图所示:)

我是一个网卡 1

我是一个网卡 - 敏捷大拇指 - 我是一个网卡 1


阿甘傻乎乎的,也不问为什么收件人和发件人这么奇怪,只是飞快的按老大的指示写信,信马上写好了,交到我的手里。

“给你,TP-Link 7954,赶紧发出去吧。”  

我对外发信是有原则的:我工作在数据链路层,必须得知道对方的MAC地址才能发信,如果不知道,我就对外广播,那就是所有的电脑都会收到。

这封信显然就是要广播的,因为到目前为止,我们还是网络大海中的一个孤岛,和外界没有任何联系,我还不知道任何其他电脑的MAC地址。

按照规定,我又把阿甘写的信封装了一下,装到另外一个信封里,只有这样,我最重要的伙伴交换机才能看懂。

目的地:FF:FF:FF:FF:FF:FF (广播到同一子网内的所有电脑)
发件人:11:27:F5:8A:79:54  (就是我自己了!)

我是一个网卡 2

我是一个网卡 - 敏捷大拇指 - 我是一个网卡 2


我把它通过网线发给了交换机。交换机看到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.1
DNS服务器: 202.102.224.69

阿甘说:“要是重启了,我们是不是要这么重来一遍?”

“阿甘,你现在越来越聪明了。确实是这样,除非主人手动的给我们配置IP地址、网关、DNS,但是那样很烦,容易出错,所以一般情况下,主人都是依赖我们自动的去用DHCP搞定一个IP 。”

经过这一番折腾,我也初步了解了我们所在的网络结构:

我是一个网卡 3

我是一个网卡 - 敏捷大拇指 - 我是一个网卡 3





2、DNS和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 发送HTTP GET请求, 轻轻松松的把百度的主页给取了下来,展示了出来。

大家第一次看到外边的世界,激动万分。
当然还是我最忙,因为老IE的所有信件都需要我去发送和接收。




3、尾声

这几个月以来我都是电脑里的最忙碌的人,一旦可以上网,大家都上瘾了,浏览网页、刷微博、看视频、玩游戏,每天把我累的要死。

日子就这么一天天过去。有一天,大家发现主人把一个新家伙通过USB接口插到了电脑上,然后顺手拔掉了网线!

我失去了和交换机的联系,无法联网了, 难道我们电脑又要成为一个孤岛了吗?

老IE还正在访问一个博客网站呢,一下子就断了。

不过奇怪的是,CPU阿甘, 金士顿内存,操作系统老大 竟然都围着新来的家伙重新玩起了DHCP、DNS、ARP,并且连上网了!所有的信件都由这个新家伙来传递。

我偷偷的问老IE:“这是怎么回事?”

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




相关内容

我是一个网卡

我是一个路由器




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


都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 收起 理由
Anewczs + 10 大赞原创!牛!

查看全部评分

电音之王 发表于 2016-8-2 17:46:59 | 显示全部楼层
我是一个显卡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励

相关标签

热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表