不知道大家有没有困惑:为什么有了IP地址,还需要MAC地址呢?
他们之间到底有什么联系?又有什么区别?是不是有一个是多余的?
流言传到了“IP地址”和“MAC地址”的耳朵里,他俩也非常苦恼,今天文档君把话筒递给他们,看看他们怎么说?
MAC地址说:
我是MAC地址,工作在数据链路层,生活在物理网卡上。

我对感情非常专一,从不朝三暮四,这一辈子我的“CP”都是同一块网卡。我们的感情非常稳定,每一块网卡都只有一个独一无二的MAC地址,不像IP地址那样见异思迁。
IP地址说:
我是IP地址,工作在网络层,生活在IP协议簇中。

有人说我是“万花丛中过,片叶不沾身”,经常和不同的设备“组CP”,特别是MAC地址,经常说我见异思迁。
但其实生活不易,我在同一时间也只有唯一的一个“CP”,和这个设备的CP组合到期了,我还没来得及休息一下下,就被安排去和另外一个设备“组CP”了。
停停停!你俩是不是偏题了!
还是让文档君来正经介绍吧!
MAC地址,全称为Media Access Control Address,直译为媒体存取控制地址,又名物理地址、硬件地址。
每个网卡出厂时,厂家都会为其标记全球独一无二的序列号,就像我们的身份证号。

也就是说,MAC地址不是针对设备而言的,而是针对网卡的。
以计算机为例,计算机上有几个网卡,就有几个MAC地址。比如笔记本电脑联网方式同时具备有线和无线两种,网卡也就有有线网卡和无线网卡两个,即存在两个MAC地址。
IP地址,全称为Internet Protocol Address,直译为互联网协议地址。
主要用来在互联网中区分不同的联网设备。
IP地址为连入互联网(公网)内的每台设备提供一个独一无二的逻辑地址标识。通过IP地址,我们可以在互联网中准确找到目标设备,并与其建立通信。就像现实生活中网购时填写的收件地址。

IP地址与MAC地址不同的是,为保证网络高效运行,IP地址是动态分配的,也可以人为修改,就好比你可以到处搬家,或者可以去“有风的地方”看一看~
但是MAC地址不可以随意改变,就像你的身份证号,无论你搬到哪里,身份证号都是证明“你是你”的最有效的凭证~
其实MAC地址和IP地址有很多不同,文档君整理了MAC地址和IP地址的区别,让你一眼看懂~
MAC地址 | IP地址 | |
格式 | 00:16:3E:00:F3:C9 6个16进制数,用“:”隔开 其中前6位16进制数表示网络硬件制造商的编号 | 196.168.10.10 4个8位二进制数,用“.”隔开 (以应用最广泛的IPv4地址为例) |
地址类型 | 物理地址 | 逻辑地址 |
是否可变 | 正常情况,不可变更 | 可以手动变更,或重新自动分配 |
分配方式 | 固定/静态分配 | 动态/静态分配 |
用途 | 识别网络适配器和设备 | 实现数据传输,确定数据包发送和接收 |
网络层级 | 数据链路层(二层) | 网络层(三层) |
PART 05
为何缺一不可?
简单来说,IP地址和MAC地址产生的目的是方便网络中的设备精准地找到彼此。
沿用前文的例子,我们把MAC地址比作身份证号码,把IP地址比作住址。
如果只有身份证号码(MAC地址),在茫茫人海中肯定找不到你心爱的文档君。

如果只有住址(IP地址),你找到了文档君的家,但是家里具体哪个人是文档君呢?还是无法分清。

但是如果把住址(IP地址)和身份证号(MAC地址)配合使用,就可以先找到省→市→区→街道→小区,再通过身份证号码(MAC地址)就可以很容易地抓到在屏幕前码字的文档君啦。

同理,设备在进行通信的时候,IP地址和MAC地址也是缺一不可。
在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。因为IP地址在一个LAN中是唯一的,但是在不同的局域网中,IP地址可能是相同的,而且IP地址可以手动更改,这就可能导致重复的IP地址。但MAC地址是唯一的,不同的设备上的MAC地址是完全不同的,所以不同的局域网依靠MAC地址来识别不同的设备,从而避免IP地址的冲突。

因此,“IP地址+MAC地址”才是真正的“CP”,他俩配合使用才能确定网络中唯一的一台设备,数据传输才不会出错。
怎么样,今天又和文档君一起,学到了有用的知识了吧。
那么一起来做个小测验,验证一下学习的成效吧!
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想将我的MacSnowLeopardruby从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status
我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/