当前位置:   article > 正文

网络前三层(物理,数据链路层,网络)数据包传输过程_第二层数据链路层如何通信

第二层数据链路层如何通信

起始

起始:我就是一台电脑A

在这里插入图片描述

有一天,突然另一台电脑B想和我进行通话·,于是我们各自开了个网口,用一根网线连接起来,这样就可以进行通信了,至于为什么可以,还要研究io,中断…,反正现在可以进行通信了

在这里插入图片描述

第一层:物理层(hub)

有一天又来了一位C,每个人开两个端口就可以通信了

在这里插入图片描述

随着越来越多的人加入,网口开的太多了,太乱,理论可行,实际不可行。

在这里插入图片描述

于是,发明了一个中间设备,将网线都插在这个设备上,由这个设备进行转发,和原来本质上是一样的

这个设备取名集线器,仅仅是将信号转发到所有的出口(广播转发),不用做任何处理,作用就这一点,所以放在了物理层。

在这里插入图片描述

那么BCDE怎么知道A是想发给谁的呢?

这就引入了MAC地址(公民身份证)

  • A:aa-aa-aa-aa-aa-aa
  • B: bb-bb-bb-bb-bb-bb
  • C: cc-cc-cc-cc-cc-cc
  • D: dd-dd-dd-dd-dd-dd
  • E: ee-ee-ee-ee-ee-ee

现在A发数据给B:

在这里插入图片描述

B收到的数据包后,根据MAC地址判断出,这个包确实是给我的,CDE收到后,判断MAC地址和自身MAC不同,于是丢弃数据包

在这里插入图片描述

第二层:数据链路层(交换机)

上述的集线器是广播转发,可不可以单播呢?

在这里插入图片描述

交换机就出现了!!!!!!!比集线器智能一些,所以放在了数据链路层

在这里插入图片描述

  1. 交换机的内部维护者一张MAC地址表,记录每个MAC设备连接在哪个端口上
  2. 现在A想发送数据给B

在这里插入图片描述

数据包到达交换机时,查询MAC地址表,发现要从端口1发送,直接发送数据,结束。通过上述传输方式而组成的网络叫以太网

  1. 最开始的时候,MAC地址表是空的,A给B发送数据,由上图可以看出,A是从端口4发送数据的,所以MAC地址表就记录了这个信息,交换机发现地址表中没有bb-bb-bb-bb-bb-bb这个地址,于是广播发送,B做出响应,所以地址表又记录了一段数据bb-bb-bb-bb-bb-bb端口1

过程如下:

在这里插入图片描述

随着机器数量的增加,交换机的端口也不够用了,这个时候就想到,将多个交换机连接起来就可以了吧

在这里插入图片描述

最终,两个交换机将分别记录 A ~ H 所有机器的映射记录

  • 左面的交换机

    在这里插入图片描述

  • 右面的交换机

    在这里插入图片描述

但是随着时间的推移,电脑的数量在逐渐增多。

第三层:网络层(路由器)

  1. 问题的根本在于,连出去的那根红色的网线,后面不知道有多少个设备不断地连接进来,从而使得地址表越来越大。那我可不可以让那根红色的网线,接入一个新的设备,这个设备就跟电脑一样有自己独立的 MAC 地址,而且同时还能帮我把数据包做一次转发呢?这个设备就是路由器,作为一台独立的拥有 MAC 地址的设备,并且可以帮我把数据包做一次转发,因为它比交换机更智能一些,所以定义在网络层。

在这里插入图片描述

路由器的每一个端口,都有独立的 MAC 地址

交换机的 MAC 地址表中,只需要多出一条 MAC 地址 ABAB 与其端口的映射关系,就可以成功把数据包转交给路由器了

  1. 怎么把发送给 C 和 D,甚至是把发送给 DEFGH… 的数据包,统统先发送给路由器呢?

    • 假如电脑 C 和 D 的 MAC 地址拥有共同的前缀,比如分别是FFFF-FFFF-CCCC , FFFF-FFFF-DDD,那么可以将目标mac地址开头为FFFF-FFFF的全部发送给路由器,这样是不可行的,mac地址不好统一

    • 于是有聪明的人发明了新的地址(IP地址),如:

      11000000.10101000.00000000.00000001,即192.168.0.1

  2. 现在每台电脑有了两个地址(MAC,ip)

    在这里插入图片描述

如上图所示,假如我想要发送数据包给 ABCD 其中一台设备,不论哪一台,我都可以这样描述,“将 IP 地址为 192.168.0 开头的全部发送给到路由器。

在这里插入图片描述

假如A发送数据给B,由于他们直接通过交换机相连,所以直接发送,没体现网络层(交换机)的作用

在这里插入图片描述

但是如果给C发送数据,A就需要先转交给路由器,再由路由器转发给C

  1. A——>路由器

在这里插入图片描述

  1. 路由器——>C

    在这里插入图片描述

  2. A给C发送数据,怎么知道要先发给路由器呢?

    ------------------------》子网

  3. 将源 IP 与目的 IP 分别同子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网

    • A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0
      B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0
      C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0
      D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0
      那么 A 与 B 在同一个子网,C 与 D 在同一个子网,但是 A 与 C 就不在同一个子网,与 D 也不在同一个子网,以此类推。

      在这里插入图片描述

      所以如果 A 给 C 发消息,A 和 C 的 IP 地址分别 & A 机器配置的子网掩码,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器

  4. 问题又来了,A怎么知道哪个设备是路由器呢?

    • A上面要设置默认网关,其实说数据发给路由器不够准确,应该是默认网关,对 A 来说,A 只能直接把包发给同处于一个子网下的某个 IP 上,所以发给路由器还是发给某个电脑,对 A 来说也不关心,只要这个设备有个 IP 地址就行。
在这里插入图片描述
  1. 问题继续,路由器是怎么知道C在哪里呢

    • ------------->路由表

    • 经过上述的过程A给C发送数据已经可以发送到路由器上面了,目前问题就是,路由器怎么知道的数据要从哪个端口发送出去呢?

    • 路由器收到的数据包有目的 IP 也就是 C 的 IP 地址,需要转化成从自己的哪个端口出去。这里引入了路由表

      在这里插入图片描述

      路由表就表示,192.168.0.xxx 这个子网下的,都转发到 0 号端口,192.168.1.xxx 这个子网下的,都转发到 1 号端口。

    • 路由器------>C,这里要经过交换机,发送数据需要知道MAC地址(数据链路层),这时又引入了arp(其实一开始就有)

      A不知道 B 的 MAC 地址,只知道它的 IP 地址,该怎么把数据包准确传给 B 呢?

      当A需要向B发送数据时,首先检查B主机的IP地址是否在同一子网上。如果在同一子网上,A会使用ARP协议发送一个ARP请求广播,询问B的MAC地址。B收到广播后,会通过ARP协议回复一个包含自己MAC地址的ARP响应。A接收到响应后,就可以将数据帧封装并发送到A的MAC地址。找到 192.168.0.2 对应的 MAC 地址 BBBB。这种方式就是arp协议,同时电脑 A 和 B 里面也会有一张 arp 缓存表,表中记录着 IP 与 MAC 地址的对应关系。

      在这里插入图片描述

  2. 对A来说:

    • 要知道AD的ip,c的ip
    • 通过子网掩码判断是否在同一子网
    • 在同一子网就通过arp获取对方的mac地址,直接发送出去
    • **不在同一子网,通过arp获取默认网关的mac地址直接发出去
  3. ** 对交换机来说:

    • 收到的数据必须有MAC地址
    • 通过查询MAC地址表,找到发送端口,发送数据,查不到,就通过广播的方式发送
  4. 对路由器来说:

    • 收到的数据必须有目的ip地址
    • 查询路由表,查到了就按照映射关系从指定端口发出去
    • 查不到则返回一个路由不可达的数据包
  5. 三张表:

    • 交换机中的MAC地址映射表(以太网中各节点之间通过交换机通信)
    • 路由器中有路由表,用于映射IP地址和端口(路由算法)
    • A和路由器都有Arp缓存表,表示ip与MAC地址的映射关系(arp请求)
  6. 网络拓扑图在这里插入图片描述

路由器 1 连接了路由器 2,所以其路由表有了下一条地址这一个概念,所以它的路由表就变成了这个样子。如果匹配到了有下一跳地址的一项,则需要再次匹配,找到其端口,并找到下一跳 IP 的 MAC 地址

在这里插入图片描述

如果 A 给 F 发送一个数据包在这里插入图片描述,能不能通呢?如果通的话整个过程是怎样的?

  1. 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)
  2. A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址。
  3. A 将源 MAC 地址(AAAA)与网关 MAC 地址(ABAB)封装在数据链路层头部,又将源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)(注意这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化)封装在网络层头部,然后发包

在这里插入图片描述

  1. 交换机 1 收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1
  2. 数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5
  3. 所以此时路由器 1 需要做两件事,第一件是再次匹配路由表,发现匹配到了端口为 2,于是将其封装到数据链路层,最后把包从 2 号口发出去。
  4. 此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备从 1 号口把数据包送出去。
  5. 但此时路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 缓存,找到其 MAC 地址为 FFFF,将其封装在数据链路层头部,并从 1 号端口把包发出去。
  6. 交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。
  7. F 最终收到了数据包!并且发现目的 MAC 地址就是自己,于是收下了这个包
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/562089
推荐阅读
相关标签
  

闽ICP备14008679号