前言简单介绍一下ip协议 。
正文先来看下ip协议在网络层的哪一层:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
其实很好想象哈,就是因为每台机器起码有一个ip地址,形成了这样一个网络 。
ip 层的功能就是:
ip 寻址选路封装打包分片
数据链路层功能:
- 逻辑链路控制
- 媒体访问控制
- 封装链路层帧
- mac 寻址
- 差错检测与处理
- 定义物理层标准
我们知道ip地址一共4个字节 。
那么理论上有2的32次方个地址,也就是43亿多 , 现在来看肯定不够用了 。
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RV293-0.png)
文章插图
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RWX9-1.png)
文章插图
如果只是这样分类的话,那么有一个问题,什么问题呢?
那就是不满足一个需求,比如有一个社区是800台ip地址,这个时候分一个c类地址肯定不够,分一个b类地址又太大,这样会浪费的 。
那么怎么破呢?
这个时候就要使用cidr 无分类地址:
cidr, classess inter-domain routing 这个意思 。
表示方法就是a.b.c.d/b n 范围[0,32]
这样就可以根据n的范围然后进行划分了 。
比如800台需要ip的,那么分的就是n是22(32-10)了 , 1024个ip了 。
这个时候也很好判断一个ip是否在某个网络下 。
比如某个网络的子网掩码是10.10.1.32/27 。
那么这个网络为:00001010.00001010.00000001.00100000
这样的 。那么判断10.10.1.44 是否在这个网络中呢?
那么判断前27位是否一样,如果一样的话,那么就是在同一网络了 。
另一个例子:10.10.1.90 前27位就不一样,那么这个时候就不在一个网络中 。
那么他们的寻址方式是怎么样的呢?
比如MCI 分配了 208.128.0.0/11
MCI 将 208.130.28.0/22 分配给ars
ars 将 208.130.29.0/22 分配给publish servers 使用 。
那么www.freesoft.org 使用208.130.29.33 地址 。
那么先找到mci,然后找到了ars,然后ars 找到了publish servers,然后找到了这个地址 。
然后有一些特殊的ip,全0或者全1的特殊含义 。
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RW562-2.jpg)
文章插图
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RUc3-3.png)
文章插图
这里就解释了,ip的一个分类,并且非常简单说了一下ip是怎么寻址的 。
那么为什么有mac 地址呢? 不是说ip地址就可以找到机器了吗? 为什么还有这个mac地址呢?
有些人就说啊 , 有很多台机器共享一个ip,如果根据ip是找不到机器的 。
这个怎么说呢? 其实是本末倒置了 。因为ip层基于链路层,链路层是只有ip的,也就是你必须通过mac才能传输 。
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RU403-4.png)
文章插图
比如 a 要往 b发送信息 , 那么a必须知道b的mac地址,这样交换机才能知道发送给b 。
为什么有ip这个东西呢?
![抓包整理————ip 协议一[十二]](http://img.zhejianglong.com/231020/000RQ0c-5.png)
文章插图
想想一下这个时候,a 是将信息第一个交换机呢?还是将发给第二个交换机呢?对吧 , 如果有ip协议的话,那么就知道在那个子网,就知道发给哪个了,这就是ip的网络能力 。
那就有人又问了,为什么不将mac 废除,然后直接使用ip呢?
这个时候可能有人回答ip没有那么多啊,而且又很多局域网,很难每台机器一个独立ip呢?
这的确是一个很大的问题 , 个人认为最大的原因是ip是动态的,而mac 是不变的 。假如一台机器的a 通过几个网络访问到b,然后有一台机器c替换了b的ip,那么和a对话的就是b了 。这样复杂度就很高了 。
无论如何ip协议和链路层协议是相符的 。
这个就是动态地址解析协议ARP (address resolution protocal).
动态解析广播 。
那么比如a要发送到b,a 只能到b的ip地址 , 那么是如何获取b的mac地址呢?
首先a向交换机1发送广播,那么b收到了相应后,那么就会发送mac地址给a了 。
a知道了b的mac地址就可以通信了 。
【抓包整理————ip 协议一[十二]】但是如果每次都这样广播一次的话,那么实在性能太低了 , 这不是一般的低 。
那么这个时候一般当a知道了 ip 的 mac 后就会进行缓存,下次对这个ip发送消息的时候拿下mac就好了 。
推荐阅读
- OpenFeign
- 中 学习ASP.NET Core Blazor编程系列十——路由
- 抢鲜体验 JetBrains新产品Aqua——自动化测试开发工具
- 3 onps栈使用说明——tcp、udp通讯测试
- Docker | 专栏文章整理🎉🎉
- JUC学习笔记——共享模型之管程
- AGC007C Pushing Balls —— 期望的神题
- 2 onps栈使用说明——ping、域名解析等网络工具测试
- 常用Python库整理
- Java8新特性—四大内置函数式接口