1.IP地址和Mac地址简介
2.IP地址和Mac地址协同工作
3.路由
4.子网掩码
1.IP地址和Mac地址简介
通过寄快递的方式理解IP地址和Mac地址, 你从北京(城市A)的自己家寄一个包裹给你的朋友, 他在上海(城市B)的公司(B楼)a.IP地址 = 城市 + 街道 + 门牌号你需要在包裹上写明收件人的城市, 街道和公司大楼的门牌号(例如:上海市浦东新区XX路XX号), 这个地址是逻辑的, 可变的你的朋友换了工作, 去了上海另一栋大楼, 这个地址就要改变; 同样, IP地址就像是设备在网络世界中的逻辑地址, 它标志了设备所在的网络地址b.MAC地址 = 收件人的身份证号光有公司地址还不够, 公司里可能有成百上千的人; 你需要最终指定一个唯一的人来接受这个包裹, 比如你的朋友张三, 他的身份证号是123456; 这个身份证号是物理的, 唯一的, 终身不变的; MAC地址就像是设备网卡的身份证号, 它出厂时就被固化在硬件里, 全球唯一c.ARP(地址解析协议), 它的核心作用就是通过IP地址来寻找对应的MAC地址
2.IP地址和Mac地址协同工作
情况一: 通信双方直接连接在同一个路由器(交换机)下这是最常见的情况, 假设你的家庭网络是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.0b.电脑A用目标IP(192.168.1.101)和同样的子网掩码计算, 发现网络号也是192.168.1.0c.结论: "目标和我同在局域网!不需要找网关(路由器)帮忙转发, 我直接喊他就行"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
情况二: 路由器连接了多个网段, 目标在其中一个直连网段这种情况更能体现路由器作为"路由决策者"的角色, 假设一个公司路由器有两个局域网口: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.100b.路由器查询自己的路由表, 发现: "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.路由
当数据包的目标IP不在当前网络时, 路由器就像一个聪明的交通指挥中心, 它需要决定"下一站"该去哪里; 这个决策过程依赖于路由器内部的一张至关重要的"地图" —— 路由表
1).查询路由表当路由器收到一个目标IP为8.8.8.8的数据包后, 它并不会盲目地四处询问; 它会立即查询自己内存中的路由表, 可以把路由表想象成一张目的地邮编和对应出口的对照表让我们登录一个模拟的路由器, 看看它的路由表大概长什么样

a.Destination(目的地网络): 数据包想要去的网络号, 而不是某个具体IPb.Gateway(网关/下一跳): 这就是问题的答案!它指明了去往目的地的"下一个路由器"的IP地址如果这里是0.0.0.0, 表示"直接交付", 目标网络直接连在这个路由器上c.Genmask(子网掩码): 用来判断一个IP地址属于哪个网络d.Iface(接口): 数据包应该从哪个物理端口(如WAN口、LAN口)发出去
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 接口发出"
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
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.子网掩码
IP地址也一样, 一个IP地址(如 192.168.1.100)包含了两部分信息:a.网络号(Network ID): 相当于"城市区号"或"街道名", 标识了这个IP所属的整个网络b.主机号(Host ID): 相当于"门牌号", 标识了这个网络下的具体某台设备子网掩码的核心作用, 就是明确地告诉设备: "IP地址的前多少位是网络号, 后多少位是主机号", 有了它, 设备才能判断另一个IP地址是和自己在"同一个小区"(局域网), 还是需要出"远门"(通过网关转发)
1).子网掩码也是一串32位的二进制数, 形式上与IP地址完全相同a.规则: 连续不断的1表示网络位, 连续不断的0表示主机位b.它总是伴随着IP地址出现2).最常见的例子IP地址: 192.168.1.100 子网掩码: 255.255.255.0让我们把它们转换成二进制来看一看:

子网掩码中1所对应的IP地址部分(前24位:192.168.1)就是网络号子网掩码中0所对应的IP地址部分(后8位:.100)就是主机号所以, 这个IP所在的网络就是192.168.1.0, 它在这个网络里的主机编号是100
子网掩码得作用:1).判断IP地址是否在同一网段, 这是路由器和你电脑每天都在做的事情a.操作步骤: 将IP地址和子网掩码进行"按位与"运算"与"运算规则: 1 & 1 = 1, 其他情况(1 & 0, 0 & 1, 0 & 0)结果都是0b.举例:你的电脑IP: 192.168.1.100, 掩码: 255.255.255.0你想访问的IP: 192.168.1.200, 掩码: 255.255.255.0c.计算网络号: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)这样, 技术部和市场部的广播就被限制在各自的子网内, 通信需要通过路由器, 网络更高效、更安全
借位不是借0或1, 而是借决定权; 将IP地址的最后8位想象成8个开关, 每个开关可以拨到"0"或"1"的位置1).在/24掩码时:a.子网掩码255.255.255.0 = 11111111.11111111.11111111.00000000b.这意味着: 前24个开关的位置被"锁定"(网络位), 后8个开关我可以自由拨动(主机位)所以我可以自由创造00000000到11111111的所有组合(0-255)2).现在我们要"借位":a.新的子网掩码 /25 = 11111111.11111111.11111111.10000000b.这意味着: 前25个开关的位置被"锁定"(网络位), 只剩下后7个开关可以自由拨动(主机位)关键来了: 那个被"借"来的第25位开关(从左往右数第25个), 它的"控制权"从"自由拨动"变成了"固定锁定"但是, 这个开关在锁定的时候, 可以锁定在两种状态中的任意一种:状态A: 锁定在"0"的位置状态B: 锁定在"1"的位置这两种不同的锁定状态, 就创造出了两个不同的子网!
常见的表示方法1).点分十进制: 255.255.255.0(最常用)2).斜线表示法: /24, 斜线后面的数字表示子网掩码中1的个数a./24 就表示有24个1, 即 255.255.255.0b./16 表示255.255.0.0c./8 表示255.0.0.0