1.9 IP地址和Mac地址

1.IP地址和Mac地址简介

2.IP地址和Mac地址协同工作

3.路由

4.子网掩码


1.IP地址和Mac地址简介

csharp 复制代码
通过寄快递的方式理解IP地址和Mac地址, 你从北京(城市A)的自己家寄一个包裹给你的朋友, 他在上海(城市B)的公司(B楼)

a.IP地址 = 城市 + 街道 + 门牌号

你需要在包裹上写明收件人的城市, 街道和公司大楼的门牌号(例如:上海市浦东新区XX路XX号), 这个地址是逻辑的, 可变的

你的朋友换了工作, 去了上海另一栋大楼, 这个地址就要改变; 同样, IP地址就像是设备在网络世界中的逻辑地址, 它标志了

设备所在的网络地址

b.MAC地址 = 收件人的身份证号

光有公司地址还不够, 公司里可能有成百上千的人; 你需要最终指定一个唯一的人来接受这个包裹, 比如你的朋友张三, 他的

身份证号是123456; 这个身份证号是物理的, 唯一的, 终身不变的; MAC地址就像是设备网卡的身份证号, 它出厂时就被固化

在硬件里, 全球唯一

c.ARP(地址解析协议), 它的核心作用就是通过IP地址来寻找对应的MAC地址

2.IP地址和Mac地址协同工作

csharp 复制代码
情况一: 通信双方直接连接在同一个路由器(交换机)下

这是最常见的情况, 假设你的家庭网络是192.168.1.0/24

- 你的电脑A: 192.168.1.100

- 你的手机B: 192.168.1.101

- 路由器LAN口IP: 192.168.1.1

当电脑A要访问手机B时:

1).决策(网络层)

a.电脑A用自己的IP(192.168.1.100)和子网掩码(255.255.255.0)计算出自己所在的网络号是192.168.1.0

b.电脑A用目标IP(192.168.1.101)和同样的子网掩码计算, 发现网络号也是192.168.1.0

c.结论: "目标和我同在局域网!不需要找网关(路由器)帮忙转发, 我直接喊他就行"

2).寻址与交付(数据链路层)

a.电脑A查询本地的ARP缓存表, 看有没有192.168.1.101对应的MAC地址

b.如果没有, 电脑A会在局域网内发起ARP广播: "谁是 192.168.1.101? 请告诉我你的MAC地址"

c.手机B收到广播后, 会回复: "我就是 192.168.1.101, 我的MAC地址是 22:BB:CC:DD:EE:FF"

d.电脑A将数据包封装成数据帧

- 目标MAC地址: 22:BB:CC:DD:EE:FF(手机B的MAC)

- 源MAC地址: 电脑A的MAC

- 目标IP地址: 192.168.1.101

- 源IP地址: 192.168.1.100

这个数据帧被发送到交换机, 交换机学习到电脑A和手机B的MAC地址和端口对应关系后, 会建立一条直达路径, 将数据帧直接

转发给手机B

csharp 复制代码
情况二: 路由器连接了多个网段, 目标在其中一个直连网段

这种情况更能体现路由器作为"路由决策者"的角色, 假设一个公司路由器有两个局域网口:

a.LAN口1: 连接网段192.168.1.0/24(IP: 192.168.1.1)

b.LAN口2: 连接网段10.1.1.0/24(IP: 10.1.1.1)

当192.168.1.100的电脑要访问10.1.1.100的服务器时:

1).电脑的决策: 电脑计算后发现10.1.1.100 和自己不在同一网段, 于是将数据包发给默认网关192.168.1.1(路由器)

2).路由器的决策(回答你的问题):

a.路由器从LAN口1收到数据包, 拆开看到目标IP是10.1.1.100

b.路由器查询自己的路由表, 发现: "10.1.1.0/24 这个网段, 是直接连接在我的LAN口2上的"

结论: "这个目标就在我隔壁房间, 我直接送过去就行, 不用麻烦其他路由兄弟了"

3).路由器的交付:

a.路由器在10.1.1.0/24这个网段上发起ARP请求(如果缓存里没有的话), 询问10.1.1.100 的MAC地址

b.得到服务器的MAC地址后, 路由器重新封装数据帧:

- 目标MAC地址: 服务器的MAC地址(在 10.1.1.0 网段)

- 源MAC地址: 路由器LAN口2的MAC地址(MAC地址又变了)

- 目标IP地址: 10.1.1.100(不变)

- 源IP地址: 192.168.1.100(不变)

路由器通过LAN口2将数据帧发送给服务器

3.路由

csharp 复制代码
当数据包的目标IP不在当前网络时, 路由器就像一个聪明的交通指挥中心, 它需要决定"下一站"该去哪里; 这个决策过程依赖

于路由器内部的一张至关重要的"地图" ------ 路由表

csharp 复制代码
1).查询路由表

当路由器收到一个目标IP为8.8.8.8的数据包后, 它并不会盲目地四处询问; 它会立即查询自己内存中的路由表, 可以把路由

表想象成一张目的地邮编和对应出口的对照表

让我们登录一个模拟的路由器, 看看它的路由表大概长什么样
csharp 复制代码
a.Destination(目的地网络): 数据包想要去的网络号, 而不是某个具体IP

b.Gateway(网关/下一跳): 这就是问题的答案!它指明了去往目的地的"下一个路由器"的IP地址

  如果这里是0.0.0.0, 表示"直接交付", 目标网络直接连在这个路由器上

c.Genmask(子网掩码): 用来判断一个IP地址属于哪个网络

d.Iface(接口): 数据包应该从哪个物理端口(如WAN口、LAN口)发出去

csharp 复制代码
2).最长前缀匹配原则

路由器拿到目标IP 8.8.8.8 后, 会用它和路由表里每一行的Destination和Genmask进行"与"运算, 看它属于哪个网络; 它会

寻找最精确匹配的网络, 这叫做最长前缀匹配原则; 对于8.8.8.8:

a.它匹配192.168.1.0/24吗? 不匹配

b.它匹配10.1.1.0/24吗? 不匹配

c.它匹配0.0.0.0/0 吗? 匹配!这条规则叫默认路由, 子网掩码是0.0.0.0, 意味着"所有其他不认识的目的地,都走这条路"

它就像一个"包治百病"的万能出口

所以, 路由器得出结论: "去往8.8.8.8, 我需要使用默认路由, 下一跳网关是202.96.1.1, 并从 eth1 接口发出"

csharp 复制代码
3).ARP解析下一跳的MAC地址

现在, 路由器知道了下一个节点的IP地址(202.96.1.1), 但和你的电脑一样, 它需要把这个IP地址转换成MAC地址才能在实际

的链路上传输; 路由器会检查自己的ARP缓存表, 看有没有202.96.1.1对应的MAC地址; 如果没有, 它会在连接 202.96.1.1的

那个网络(也就是eth1接口所在的网络, 比如 10.1.1.0/24)上发起一个ARP广播请求:IP地址是 202.96.1.1 的设备, 请告诉

我你的MAC地址

运营商的边缘路由器(它的接口IP正好是 202.96.1.1)会回应这个请求, 告诉你的路由器: 我的MAC地址是22:FF:GG:HH:II:JJ

csharp 复制代码
4).重新封装并转发

现在, 你的路由器拥有了所有必要信息, 它会重新封装数据帧:

- 目标MAC地址: 22:FF:GG:HH:II:JJ(运营商路由器的MAC地址)

- 源MAC地址: 你的路由器eth1接口的MAC地址(MAC地址在这里改变了)

- 目标IP地址: 8.8.8.8(全程不变)

- 源IP地址: 192.168.1.100(全程不变)

最后, 路由器将这个新封装好的数据帧从eth1接口发送出去, 数据包就成功地交给了下一个网络节点 ------ 运营商的路由器

4.子网掩码

csharp 复制代码
IP地址也一样, 一个IP地址(如 192.168.1.100)包含了两部分信息:

a.网络号(Network ID): 相当于"城市区号"或"街道名", 标识了这个IP所属的整个网络

b.主机号(Host ID): 相当于"门牌号", 标识了这个网络下的具体某台设备

子网掩码的核心作用, 就是明确地告诉设备: "IP地址的前多少位是网络号, 后多少位是主机号", 有了它, 设备才能判断另

一个IP地址是和自己在"同一个小区"(局域网), 还是需要出"远门"(通过网关转发)

csharp 复制代码
1).子网掩码也是一串32位的二进制数, 形式上与IP地址完全相同

a.规则: 连续不断的1表示网络位, 连续不断的0表示主机位

b.它总是伴随着IP地址出现

2).最常见的例子

IP地址: 192.168.1.100  子网掩码: 255.255.255.0

让我们把它们转换成二进制来看一看:
csharp 复制代码
子网掩码中1所对应的IP地址部分(前24位:192.168.1)就是网络号

子网掩码中0所对应的IP地址部分(后8位:.100)就是主机号

所以, 这个IP所在的网络就是192.168.1.0, 它在这个网络里的主机编号是100

csharp 复制代码
子网掩码得作用:

1).判断IP地址是否在同一网段, 这是路由器和你电脑每天都在做的事情

a.操作步骤: 将IP地址和子网掩码进行"按位与"运算

  "与"运算规则: 1 & 1 = 1, 其他情况(1 & 0, 0 & 1, 0 & 0)结果都是0

b.举例:

你的电脑IP: 192.168.1.100, 掩码: 255.255.255.0

你想访问的IP: 192.168.1.200, 掩码: 255.255.255.0

c.计算网络号:

192.168.1.100 & 255.255.255.0 = 192.168.1.0(你的网络号)

192.168.1.200 & 255.255.255.0 = 192.168.1.0(目标网络号)

结论: 网络号相同(都是 192.168.1.0), 我们在同一个局域网, 电脑会直接通过ARP和MAC地址通信, 不麻烦路由器转发

如果目标IP是10.1.1.1, 计算出的网络号是10.1.1.0和你的192.168.1.0不同, 那就需要发给网关(路由器)去处理了

2. 划分网段, 优化网络管理

一个大网络可以被子网掩码划分成多个小网络(子网), 便于管理、提高安全性和减少网络风暴

a.例如: 一个公司有192.168.1.0/24这个网段(掩码 255.255.255.0)

b.需求: 想把技术部和市场部的电脑隔离开

b.解决方案: 使用更长的掩码(比如 255.255.255.128或称/25), 将原网段一分为二

子网A(技术部): 192.168.1.0/25(IP范围: 192.168.1.1 - 192.168.1.126)

子网B(市场部): 192.168.1.128/25(IP范围: 192.168.1.129 - 192.168.1.254)

这样, 技术部和市场部的广播就被限制在各自的子网内, 通信需要通过路由器, 网络更高效、更安全
csharp 复制代码
借位不是借0或1, 而是借决定权; 将IP地址的最后8位想象成8个开关, 每个开关可以拨到"0"或"1"的位置

1).在/24掩码时:

a.子网掩码255.255.255.0 = 11111111.11111111.11111111.00000000

b.这意味着: 前24个开关的位置被"锁定"(网络位), 后8个开关我可以自由拨动(主机位)

所以我可以自由创造00000000到11111111的所有组合(0-255)

2).现在我们要"借位":

a.新的子网掩码 /25 = 11111111.11111111.11111111.10000000

b.这意味着: 前25个开关的位置被"锁定"(网络位), 只剩下后7个开关可以自由拨动(主机位)

关键来了: 那个被"借"来的第25位开关(从左往右数第25个), 它的"控制权"从"自由拨动"变成了"固定锁定"

但是, 这个开关在锁定的时候, 可以锁定在两种状态中的任意一种:

状态A: 锁定在"0"的位置

状态B: 锁定在"1"的位置

这两种不同的锁定状态, 就创造出了两个不同的子网!

csharp 复制代码
常见的表示方法

1).点分十进制: 255.255.255.0(最常用)

2).斜线表示法: /24, 斜线后面的数字表示子网掩码中1的个数

a./24 就表示有24个1, 即 255.255.255.0

b./16 表示255.255.0.0

c./8 表示255.0.0.0
相关推荐
爱奥尼欧2 小时前
【Linux】网络部分——网络基础(协议与网络传输)
linux·网络·arm开发
捷米特研发一部4 小时前
Modbus TCP转RS485智能网关应用实例:集成工业测温器至云平台的数据采集方案
网络
kimi7044 小时前
HTTP的持续与非持续连接,HTTP报文格式
网络·网络协议·http
知北游天4 小时前
Linux网络:使用UDP实现网络通信(服务端&&客户端)
linux·网络·udp
半桔4 小时前
【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案
linux·网络·c++·网络协议·tcp/ip
ZeroNews内网穿透4 小时前
新版发布!“零讯”微信小程序版本更新
运维·服务器·网络·python·安全·微信小程序·小程序
小白银子14 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
火星MARK14 小时前
如何配置 Ingress 的 SSL/TLS 证书?
网络·网络协议·ssl
看好多桂花树14 小时前
Nginx SSL/TLS 配置
网络·nginx·ssl