从0开始建立一个互联网(物理层-数据链路层-网络层)

   日期:2024-12-26    作者:5qt2n 移动:http://oml01z.riyuangf.com/mobile/quote/23624.html
  • 交换机的如何记录mac地址的呢
  • 其实交换机中维系了一张表
  • 一个mac地址对应一个端口
  • 如果机器1想要跟机器3通讯

    从0开始建立一个互联网(物理层-数据链路层-网络层)

  • 他就会将数据发送到交换机

  • 交换机会到自己维系的这张地址端口去看,发现mac3对应的是三号口

  • 他就会将一号口发过来的消息从三号口发出去

  • 3最终就收到这个消息了

  • 优化

  • 交换机这种工作方式下,我不再需要将这个数据进行广播。

  • 第二点,交换机的一个特点是它是全双工的

  • 全双工

  • 上面提到的集线器大多是双绞线

  • 双绞线在工作的时候只能有一台设备进行数据发送的。

  • 交换机这里使用的就是我们现在的网线了

  • 网线里面是有八根线的,正常情况下至少有四根线在工作。

  • 这种方式下,可以实现数据的全双工

  • 在一号发送的时候,同时也可以进行数据的接受,链路上的数据也不会产生冲突。

那么交换机上面的表是怎么建立起来的呢
  • 我们拿到交换机的时候,可以连接一些设备

  • 一开始的时候,交换机里面是没有这张表的,或者是一张空表。

  • 那他是怎么建立起映射关系的呢

  • 比如我们首先A要向B发送数据

  • A发送数据上来以后,发现这张表中没有任何数据

  • 同时A发送上来以后,他确定一个消息,这个A的地址对应的是一号口

  • 所以他将macA对应一号口这件事情记录到这张表里面。

  • 现在他的目的地址是B,他去找B的时候发现找不到

  • 找不到的时候,就往每个端口分别进行发送

  • 其中四号端口是B,B做出了回应

  • 这个时候就会将macB记录到这个表中,他对应的是四号口

  • 经过一点时间的记录以后,交换机最终就维护起了一个所有mac地址和端口的映射关系

  • 交换机所在的这一层是数据链路层

  • 数据链路层的数据分数据头,数据部分

  • 数据头中记录了原地址、目的地址,这里的地址指的mac地址

优点
  1. 这个方式是对集线器巨大的改进,可以看到我们日常生活中其实集线器已经很少见了,因为大多数时候我们都使用交换机,交换机的效率更高
  2. 交换机还有一个特点,就是可以进行桥接
  • 比如我们有两个交换机,我们就可以通过他们上面的两个端口进行桥接
  • 桥接之后会产生一个现象
  • 假如我们这台设备上有A、B两个设备,另一台有C、D两个设备。
  • 经过一段时间,交换机1中就维系了一个表
  • A对应1号口,B对应4号口
  • A向C发送消息的时候,他其实没有找到,那他就会全部广播发送
  • 广播到最后一个口的时候,就会到第二个交换机
  • 交换机2里面其实已经记录了,C对应4号口,D对应3号口
  • 他就找到了C,最终发到了交换机2的4号口。
  • 发送完之后,交换机2会记录,A对应1号口,当然之后B也往这边发送数据的时候,他会记录B对应1号
  • 交换机1同样会记录
  • 我们的家庭交换机一般情况下,表的大小是在几千左右
  • 注意:这里的mac和端口映射的表不是我们通常所说的路由表,因为他还没有到路由那一层,他只是交换机
缺点

那我们看一下,当前设计方式下,还有什么弊端。

  • 几千的存储量是比较小的,如果我们想要在全球范围内建立目前的计算机互联网络,几千个端口肯定是不够的,那可能需要几十亿个,如果没有对应的路由信息的话,他就会一直广播,就会导致全球范围内的消息洪泛
  • 目前,使用交换机和mac地址结合的这种方式,可以在一个比较小的局域网内达到一个高效的传输,比如说几千个设备组成的局域网,这个网络可能是整个校园网,或者一个工作室或者一个家庭中的网络。
补充
  • 网络内部使用交换机,他的效率还是很高的。
  • 上面讲的集线器这种其实是在物理层,下面讲的交换机mac地址的这种方式是在数据链路层
  • 比较有意思的是,mac地址位于数据链路层,却叫物理地址。
  • 物理层是比较早期的一种设计方式,通过电信号,后来我们其实比较关注数据层面,所以就放到了数据链路层
  • 每一台设备需要有一个标识,这个标识从概念上来讲确实是一个物理地址。

路由器

演变
  • 上面交换机的方式,他最大的一个优势是在网络内部可以进行高效的传输。
  • 当网络扩大以后,比如多个网络合成一个大的网络
  • 这个大网络下,可能交换机中的表可能记录不过来,我需要不停地广播,广播的效率又比较低。
  • 所以在跨网络的时候,我们提出了一种新的方案,我们定义一个新的设备,通过新的设备连接不同的网络,新的设备我们叫他路由器。有时候也会叫做网关。因为他是在跨两个网络之间的一个连接点。
  • 有了路由器之后,我们不同网络之间的设备
  • 比如设备1和设备2进行通信的时候
  • 他就是通过路由器进行转发,如果是设备1 和设备3进行通讯,就不需要经过路由器,直接在网络内部进行转发就可以了。
  • 网络内部通过这个交换机通讯,他的效率是很高的。所以1和3 的通信直接走交换机。1和2 之间的通讯才会走路由器。
ip
  • Ip地址的出现
  • 网络其实是一个比较抽象的概念,并没有说,我划定北京朝阳区是一个网络,我划定北京市海淀区是另一个网络
  • 我们需要标识这个网络,以及网络中的每个设备,就需要提供另一个标识,这个表示就是ip地址
  • IP地址有两个作用
  • 一个是用来标识网络
  • 一个是用来标识设备的
  • 上面是用mac地址标识设备,这里又提出了ip地址
  • ip地址主要是用来标识设备在哪个网络下,是为了在抽象网络中做出的一个关联。
  • 所以每台地址又有了一个ip地址。
  • mac地址:设备唯一性,设备一般不会变
  • Ip地址:设备所在网络位置的唯一性,网络位置是会变的,比如搬家换网络了。
  • 比如
  • 我家庭的网络是:192.168.0.0/24(这个网络号也是一种类似于IP的形式,他就用来标识我整个网络2
  • 我的设备:我的设备是192.168.0.102(这个ip地址就用来标识我当前的设备
我ping一下192.168.1.254,发现是可以ping通的。
  • 1.254是隔壁老王的ip,我们共用了光猫。
  • 能ping通的原因
  • 当前的这个网络中,每一台设备都有自己维护的路由表的,路由器也是有路由表的
  • 我的ip是0.102,我自己的路由表自己会记录192.168.0.1
  • 0.1是在什么地方呢?0.1在路由器上。他就会把数据包发到路由器上
  • 这个路由器自己也有一张路由表,因为路由器自己也是也linux系统
  • 他这个路由表中记录了192.168.1.0这个网络的端口,进过这个端口转发到网络1
  • 然后1.254和网络1是在同一端口中,所以很容易找到了1.254
  • 可以看出路由器工作的主要原理

  • 它既有网络1的ip,又有网络2的ip

  • 这里还有两个问题

  • 1.路由表是如何建立的

  • 路由表其实是比上面交换机中的这个地址端口映射表要复杂很多

  • 他用到了很多路由的算法,这里就不展开讲了

  • 路由器经过一系列的算法会自动建立出一个完善的路由表

  • 2.从路由器转发到网络1后,是怎么到达1.254的?就是网络内的传输是怎么进行的

  • 如果你认为ip地址能直接找到,那是不是不需要mac地址了

  • 有了ip地址,还需要mac地址吗

  • 我们先回到引入路由器的初衷,是为了跨网络的时候进行数据的转发,这个ip其实是一个抽象的ip,ip是不能直接用作通讯的,我们只能使用mac地址进行直接通讯。

  • 因为mac地址是一个真实的地址。

  • 所以路由器端口到1.254的过程是这样的

  • 首先,他会去查1.254的mac地址,根据一个ip地址去查mac地址,这里其实有个协议叫ARP协议

  • ARP协议其实是去网络中广播谁的ip是1.254,1.254收到以后就会回复mac地址

  • 然后就可以在mac层进行传输了。

Mac层又叫数据链路层,路由器这一层又叫网络层,实际上网络传输全都是走的mac地址

  • 这个ip层数据包可以对照mac层看一下
  • 我们可以把刚才mac的包拿过来
  • Mac的数据头有一个源地址,一个目的地址,这里的地址指的是mac地址
  • Mac的数据部分就是一整个ip的包
  • Ip的包也分头和数据部分
  • ip的头部分包的就是ip的源地址、目的地址
  • 最终里面才是ip的数据
  • 当然越往上还有tcp、http层的头,一层一层往上包,最后才是我们传输的那个数据部分。
  • 我们看整个网络传输的过程 0.102 -> 1.254
  • 第一步,0.102 -> 0.1,是先用ARP协议查0.1的mac地址,我的目的地ip是0.102,目的mac地址是1.254的mac地址,这样包可以传到0.1
  • 第二步,0.1传到网络1在路由器中记录的端口ip(假设是1.52)虽然是本机,但是也是网卡之间的传输,目的地mac地址变成1.52的mac地址
  • 第三部,1.52 -> 1.254,mac目的地址就变成了1.254的mac地址,最终将数据发送过来

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

《设计思想解读开源框架》

第一章、 热修复设计

  • 第一节、 AOT/JIT & dexopt 与 dex2oat

  • 第二节、 热修复设计之 CLASS_ISPREVERIFIED 问题

  • 第三节、热修复设计之热修复原理

  • 第四节、Tinker 的集成与使用(自动补丁包生成

    第二章、 插件化框架设计

  • 第一节、 Class 文件与 Dex 文件的结构解读

  • 第二节、 Android 资源加载机制详解

  • 第三节、 四大组件调用原理

  • 第四节、 so 文件加载机制

  • 第五节、 Android 系统服务实现原理

    第三章、 组件化框架设计

  • 第一节、阿里巴巴开源路由框——ARouter 原理分析

  • 第二节、APT 编译时期自动生成代码&动态类加载

  • 第三节、 Java SPI 机制

  • 第四节、 AOP&IOC

  • 第五节、 手写组件化架构

    第四章、图片加载框架

  • 第一节、图片加载框架选型

  • 第二节、Glide 原理分析

  • 第三节、手写图片加载框架实战

    第五章、网络访问框架设计

  • 第一节、网络通信必备基础

  • 第二节、OkHttp 源码解读

  • 第三节、Retrofit 源码解析

    第六章、 RXJava 响应式编程框架设计

  • 第一节、链式调用

  • 第二节、 扩展的观察者模式

  • 第三节、事件变换设计

  • 第四节、Scheduler 线程控制

    第七章、 IOC 架构设计

  • 第一节、 依赖注入与控制反转

  • 第二节、ButterKnife 原理上篇、中篇、下篇

  • 第三节、Dagger 架构设计核心解密

    第八章、 Android 架构组件 Jetpack

  • 第一节、 LiveData 原理

  • 第二节、 Navigation 如何解决 tabLayout 问题

  • 第三节、 ViewModel 如何感知 View 生命周期及内核原理

  • 第四节、 Room 架构方式方法

  • 第五节、 dataBinding 为什么能够支持 MVVM

  • 第六节、 WorkManager 内核揭秘

  • 第七节、 Lifecycles 生命周期

  • 第七节、 Lifecycles 生命周期

    [外链图片转存中…(img-qHci9a85-1712889647586)]
    本文包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
    [外链图片转存中…(img-E2Ne42It-1712889647586)]


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号