IP地址和MAC地址

网络分层

思考一个问题?
为什么网络要分层?

因为复杂的程序都要分层,这是程序设计的要求
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,计算机整个体系从上到下都是按照严格的层次结构设计的。

理解计算机网路中的概念,一个很好的角度就是:想象网络包就是一段buffer,或者一块内存,是有格式的。同时,想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。你想象自己有很多的网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去。

web开发中,三层架构模型,以及MVC

只要在网络上跑的包,都是完整的。可以有下层没上层,但是绝对不可能有上层没下层。

以TCP协议来说,我们都知道TCP建立连接需要三次握手。那TCP在进行三次握手的时候,IP和MAC层在做什么呢?
当然是TCP每发送一个消息,都会带着IP层和MAC层了。因为TCP每发送一个消息,IP层和MAC层的所有机制都要运行一遍。而你可能会认为只有TCP进行了三次握手,其实IP层和MAC层也为此忙活很久了。

IP地址

如何查看IP地址
windows下ipconfig
Linux ifconfig & ip addr

ora@ora:~$ ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:e9:73:04:0f  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

enp0s31f6 Link encap:Ethernet  HWaddr e0:d5:5e:45:69:59  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:16 Memory:ef200000-ef220000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4816126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4816126 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6481363724 (6.4 GB)  TX bytes:6481363724 (6.4 GB)

wlx64fb81657322 Link encap:Ethernet  HWaddr 64:fb:81:65:73:22  
          inet addr:192.168.198.152  Bcast:192.168.198.255  Mask:255.255.255.0
          inet6 addr: fe80::30fb:fe91:31f:884a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1025544 errors:0 dropped:0 overruns:0 frame:0
          TX packets:198910 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:372764486 (372.7 MB)  TX bytes:23978433 (23.9 MB)
ora@ora:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e0:d5:5e:45:69:59 brd ff:ff:ff:ff:ff:ff
3: wlx64fb81657322: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 64:fb:81:65:73:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.198.152/24 brd 192.168.198.255 scope global dynamic wlx64fb81657322
       valid_lft 36645sec preferred_lft 36645sec
    inet6 fe80::30fb:fe91:31f:884a/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e9:73:04:0f brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

ifconfig & ip addr
区别:net-tools和iproute2
想象你登录一个被剪裁过的非常小的Linux系统中,发现既没有ifconfig也没有ip addr命令,你可能会觉得这个系统压根儿没法用。这个时候,你可以自行安装net-tools和iproute这两个工具。大多时候,这两个命令是系统自带的。

net-tools起源于BSD,自2001年起,Linux社区已经停止对其维护,而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。net-tools通过procfs/proc和ioctl系统调用去访问和改变内核的网络配置。iproute2则通过netlink套接字接口与内核通讯。
net-tools中工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子命令。很多年过去了,net-tools还是广泛使用,并没有完全取代,所以对于两者的命令最好都能够掌握。

IP地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。
IPv4是32位地址,后来因为IP地址不够用,又有了IPv6,有128位,现在看来是够了,但是未来计算机数量不断增多,会不会出现不够用的情况还是未知。

类别IP地址范围最大主机数私有IP地址范围
A0.0.0.0 - 127.255.255.2551677721410.0.0.0 - 10.255.255.255
B128.0.0.0 - 191.255.255.25565534172.16.0.0 - 172.31.255.255
C192.0.0.0 - 223.255.255.255254192.168.0.0 - 192.168.255.255

由上图可以看出,对于C类地址,包含的最大主机数量太少了,只有254个。而B类地址的最大主机数量又太多了。6万多台机器放在一个网络下面,一般企业基本达不到这个规模,闲着的地址就会造成浪费。

无类型域间选路(CIDR)
出于以上的问题,于是有了一个折中的方式,CIDR。这种方式打破了原来设计的几类地址的做法,而是把32的IP地址一分为二,前面是网络号,后面是主机号。至于从哪里分,我们可以看到这类地址后面有个/加一个数字。如10.100.100.1/24。即表示前24位是网络号,后8位是主机号
伴随着CIDR存在的,一个是广播地址10.100.100.255。如果发送这个地址,所有10.100.100网络里的机器都可以收到。另一个是子网掩码 255.255.255.0
将子网掩码和IP地址按位计算AND,就可以得到网络号

MAC地址

link/ether e0:d5:5e:45:69:59 brd ff:ff:ff:ff:ff:ff

MAC地址,是一个网卡的物理地址,用16进制,6个byte表示
这里大家思考一个问题:
MAC地址号称全局唯一,不会有两个网卡有相同的MAC地址,而且MAC地址是在网卡生产出来时就确定了的。那为什么整个互联网的通信,不直接全部使用MAC地址呢?按理说只要知道对方的MAC地址,就可以把信息直接传过去呀。

这样当然是不行的。一个网络包要从一个地方到另一个地方,除了要有确定的地址,还需要有定位功能。而有门牌号码属性的IP地址,才是有远程定位功能的。

我们举个简单的例子,我目前坐标是杭州市西湖区浙大路38号智权大楼D座5层,你为了找到我,可以通过在校园内问人,智权大楼在哪里?D座在哪里?你应该是可以找到D座的。但是如果我只告诉你我的身份证号码,你要寻找我,肯定无从找起,几乎没有人会知道身份证号码为0000的人在哪里。

MAC地址更像是身份证,是一个唯一的标识。
为什么设置成唯一的?
为了在组网的时候,不同的网卡放在一个网络的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。
我们可以简单的理解对于IP地址,有定位功能;MAC是身份证,无定位功能。
MAC其实也是有一定的定位的功能的,只不过范围很小,局限在一个子网里面。比如你找到了D座5层,但是我具体在哪一个办公室,你并不知道。这个时候,你就要发挥你河东狮吼的本事,大吼一声,身份证号为411527—-的是哪位?我听到后,就会站出来,说是我啊,我在这里。但这里的前提是我要在D座5层,如果我压根就不在杭州,或者说我不在智权楼,你即使是喊破嗓子我也是听不到的,你也无法找到我。
这里可以看出MAC的通信范围比较小,局限在一个子网里面。例如,从IP地址为192.168.10.2/24这台主机访问192.168.10.2/24这台主机,是可以直接使用MAC地址的。一旦跨子网,即从192.168.10.2/24到192.168.11.2/24,MAC地址就不行了,需要IP地址起作用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值